-Adding a handler for SSDP -CoderClient giving control to each controller to be able to show itself on the main stage
184 lines
5.3 KiB
Java
Executable file
184 lines
5.3 KiB
Java
Executable file
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;
|
|
import com.coder.server.message.SupportedProperties;
|
|
|
|
import javafx.collections.FXCollections;
|
|
import javafx.collections.ObservableList;
|
|
import javafx.event.ActionEvent;
|
|
import javafx.fxml.FXML;
|
|
import javafx.scene.control.Button;
|
|
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;
|
|
@FXML private TextField projectNameTextField;
|
|
@FXML private TextField projectDescriptionTextField;
|
|
@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"));
|
|
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();
|
|
|
|
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) {
|
|
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");
|
|
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);
|
|
client.getProjectHandler().triggerSelectProject();
|
|
}
|
|
|
|
@FXML
|
|
protected void keyPressed(KeyEvent event){
|
|
enableDisableButton();
|
|
|
|
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";
|
|
}
|
|
|
|
public void addProjectTypeToList(String typeName, SupportedProperties typeData) {
|
|
logger.fine("Adding project type \"" + typeName + "\" to the project type list");
|
|
projectTypeList.add(typeName);
|
|
}
|
|
|
|
public void clearProjectTypeList() {
|
|
projectTypeList.clear();
|
|
}
|
|
|
|
private void setErrorMessage(String errorMsg) {
|
|
errorMessageLabel.setText(errorMsg);
|
|
}
|
|
|
|
@Override
|
|
public String getDescriptiveName() {
|
|
return "New Project Dialog";
|
|
}
|
|
|
|
}
|