coder-client/src/com/coder/client/gui/newProject/NewProjectDialog.java

185 lines
5.3 KiB
Java
Raw Normal View History

package com.coder.client.gui.newProject;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import java.util.logging.Logger;
import com.coder.server.message.CoderMessage;
import com.coder.server.message.ProjectCreateReqMsg;
import com.coder.server.message.ProjectTypeReqMsg;
import com.coder.server.message.ProjectTypeRspMsg;
2015-11-04 23:37:54 +01:00
import com.coder.server.message.SupportedProperties;
2015-10-27 17:01:59 +01:00
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
2015-10-27 17:01:59 +01:00
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import zutil.log.LogUtil;
import com.coder.client.CoderClient;
import com.coder.client.gui.GuiWindow;
import com.coder.client.project.ProjectListener;
import com.coder.client.session.ProjectTypeRspMsgListener;
public class NewProjectDialog extends GuiWindow {
public static final Logger logger = LogUtil.getLogger();
private CoderClient client;
@FXML private Button createButton;
@FXML private Button cancelButton;
2015-10-27 17:01:59 +01:00
@FXML private TextField projectNameTextField;
@FXML private TextField projectDescriptionTextField;
2015-10-27 17:01:59 +01:00
@FXML private ComboBox<String> projectTypeComboBox;
@FXML private Label errorMessageLabel;
private ObservableList<String> projectTypeList = null;
public NewProjectDialog(final CoderClient client) throws IOException {
super(NewProjectDialog.class.getResource("NewProjectDialog.fxml"));
2015-10-27 17:01:59 +01:00
projectTypeList = FXCollections.observableArrayList();
projectTypeComboBox.setItems(projectTypeList);
this.client = client;
client.getSessionHandler().addMessageListener(new ProjectTypeRspMsgListener() {
@Override
public void messageReceived(final ProjectTypeRspMsg msg) {
logger.fine("a ProjectTypeRspMsg received");
for(String typeName : msg.keySet()){
SupportedProperties typeData = msg.get(typeName);
addProjectTypeToList(typeName, typeData);
}
}
});
client.getProjectHandler().addprojectListener(new ProjectListener() {
@Override
public void selectProject() {
}
@Override
public void openProjectFailed(String errorMsg) {
}
@Override
public void openProject(String projectName) {
}
@Override
public void createNewProject() {
setErrorMessage("");
logger.fine("new project requested, will show the new project dialog on the main stage");
client.showOnStage(NewProjectDialog.this);
}
});
}
@Override
public void willShow() {
clearProjectTypeList();
sendProjectTypeReqMsg();
2015-10-27 17:01:59 +01:00
if(errorMessageLabel.getText() == null || errorMessageLabel.getText().isEmpty()){
projectNameTextField.setText(null);
projectTypeComboBox.setValue(null);
createButton.setDisable(true);
}
projectNameTextField.requestFocus();
}
@Override
public void initialize(URL fxmlFileLocation, ResourceBundle resources) {
2015-11-13 11:58:23 +01:00
setErrorMessage("");
}
private void sendProjectTypeReqMsg(){
CoderMessage msg = new CoderMessage();
msg.ProjectTypeReq = new ProjectTypeReqMsg();
client.getSessionHandler().sendMessage(msg);
}
@FXML
protected void create(ActionEvent event){
logger.fine("create button triggered");
2015-10-27 17:01:59 +01:00
if(projectNameTextField.getText() == null || projectNameTextField.getText().isEmpty()){
logger.warning("Missing project name");
return;
}
if(projectTypeComboBox.getValue() == null || projectTypeComboBox.getValue().isEmpty()){
logger.warning("Missing project type");
return;
}
CoderMessage msg = new CoderMessage();
msg.ProjectCreateReq = new ProjectCreateReqMsg();
msg.ProjectCreateReq.name = projectNameTextField.getText();
msg.ProjectCreateReq.type = projectTypeComboBox.getValue();
msg.ProjectCreateReq.description = projectDescriptionTextField.getText();
client.getSessionHandler().sendMessage(msg);
}
@FXML
protected void cancel(ActionEvent event){
logger.fine("cancel button triggered");
client.getProjectHandler().setProject(null);
2015-11-13 11:58:23 +01:00
client.getProjectHandler().triggerSelectProject();
}
2015-10-27 17:01:59 +01:00
@FXML
protected void keyPressed(KeyEvent event){
enableDisableButton();
2015-10-27 17:01:59 +01:00
if(event.getCode().equals(KeyCode.ENTER)){
createButton.fire();
}else if(event.getCode().equals(KeyCode.ESCAPE)){
cancelButton.fire();
}
}
@FXML
protected void typeSelection(ActionEvent event){
enableDisableButton();
}
protected void enableDisableButton(){
createButton.setDisable(true);
if(projectNameTextField.getText() != null && !projectNameTextField.getText().isEmpty()){
if(projectTypeComboBox.getValue() != null && !projectTypeComboBox.getValue().isEmpty()){
createButton.setDisable(false);
}
}
}
@Override
public String getTitle() {
return "New Project";
}
2015-11-04 23:37:54 +01:00
public void addProjectTypeToList(String typeName, SupportedProperties typeData) {
2015-10-27 17:01:59 +01:00
logger.fine("Adding project type \"" + typeName + "\" to the project type list");
projectTypeList.add(typeName);
}
public void clearProjectTypeList() {
2015-10-27 17:01:59 +01:00
projectTypeList.clear();
}
private void setErrorMessage(String errorMsg) {
2015-10-27 17:01:59 +01:00
errorMessageLabel.setText(errorMsg);
}
@Override
public String getDescriptiveName() {
return "New Project Dialog";
}
}