Adding fault handling to editor window
This commit is contained in:
parent
5a9e709ae8
commit
02efc6c22f
9 changed files with 147 additions and 44 deletions
|
|
@ -202,6 +202,16 @@ public class CoderClient extends Application{
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@Override
|
||||||
|
public void openProjectFailed(String errorMsg) {
|
||||||
|
Platform.runLater(new Runnable(){
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
logger.info("open project failed, will show the select project dialog on the main stage");
|
||||||
|
selectProjectDialog.showOnStage(mainStage);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
//add message listeners
|
//add message listeners
|
||||||
|
|
|
||||||
|
|
@ -33,16 +33,12 @@ public abstract class GuiWindow implements Initializable{
|
||||||
* @param stage The stage to show on
|
* @param stage The stage to show on
|
||||||
*/
|
*/
|
||||||
public void showOnStage(Stage stage){
|
public void showOnStage(Stage stage){
|
||||||
if(scene != null && stage.getScene() != null && stage.getScene().equals(scene)){
|
stage.setScene(scene);
|
||||||
logger.fine("already showing " + getDescriptiveName() + " on stage");
|
stage.setTitle(getTitle());
|
||||||
}else{
|
logger.fine("about to show " + getDescriptiveName() + " on stage");
|
||||||
stage.setScene(scene);
|
willShow();
|
||||||
stage.setTitle(getTitle());
|
stage.show();
|
||||||
logger.fine("about to show " + getDescriptiveName() + " on stage");
|
logger.fine("showing " + getDescriptiveName());
|
||||||
willShow();
|
|
||||||
stage.show();
|
|
||||||
logger.fine("showing " + getDescriptiveName());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract String getDescriptiveName();
|
protected abstract String getDescriptiveName();
|
||||||
|
|
|
||||||
|
|
@ -3,9 +3,10 @@ package com.coder.client.gui.editor;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Enumeration;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Properties;
|
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import org.controlsfx.control.PropertySheet;
|
import org.controlsfx.control.PropertySheet;
|
||||||
|
|
@ -20,8 +21,9 @@ import com.coder.client.property.CoderClientProperty;
|
||||||
import com.coder.client.property.ComboBoxProperty;
|
import com.coder.client.property.ComboBoxProperty;
|
||||||
import com.coder.client.session.ProjectRspMsgListener;
|
import com.coder.client.session.ProjectRspMsgListener;
|
||||||
import com.coder.client.session.ProjectTypeRspMsgListener;
|
import com.coder.client.session.ProjectTypeRspMsgListener;
|
||||||
import com.coder.client.session.SessionListener;
|
import com.coder.server.message.CoderMessage;
|
||||||
import com.coder.server.message.ProjectRspMsg;
|
import com.coder.server.message.ProjectRspMsg;
|
||||||
|
import com.coder.server.message.ProjectTypeReqMsg;
|
||||||
import com.coder.server.message.ProjectTypeRspMsg;
|
import com.coder.server.message.ProjectTypeRspMsg;
|
||||||
|
|
||||||
import javafx.beans.value.ChangeListener;
|
import javafx.beans.value.ChangeListener;
|
||||||
|
|
@ -46,35 +48,87 @@ public class EditorWindow extends GuiWindow {
|
||||||
@FXML private Button exitButton;
|
@FXML private Button exitButton;
|
||||||
@FXML private Button changeProjectButton;
|
@FXML private Button changeProjectButton;
|
||||||
|
|
||||||
public EditorWindow(CoderClient client) throws IOException{
|
private String projectType = null;
|
||||||
|
|
||||||
|
public EditorWindow(final CoderClient client) throws IOException{
|
||||||
super(EditorWindow.class.getResource("EditorWindow.fxml"));
|
super(EditorWindow.class.getResource("EditorWindow.fxml"));
|
||||||
this.client = client;
|
this.client = client;
|
||||||
client.getSessionHandler().addMessageListener(new ProjectRspMsgListener() {
|
client.getSessionHandler().addMessageListener(new ProjectRspMsgListener() {
|
||||||
@Override
|
@Override
|
||||||
public void messageReceived(final ProjectRspMsg msg) {
|
public void messageReceived(final ProjectRspMsg msg) {
|
||||||
logger.fine("a ProjectRspMsg received");
|
try{
|
||||||
if(msg.error != null){
|
logger.fine("a ProjectRspMsg received");
|
||||||
return;
|
if(msg.error != null){
|
||||||
|
logger.severe("Server responded on the project request with the following error message: " + msg.error);
|
||||||
|
client.getProjectHandler().setProject(null);
|
||||||
|
return;
|
||||||
|
}else{
|
||||||
|
client.getProjectHandler().setProject(msg.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//handle name and description
|
||||||
|
fileTreeView.getRoot().setValue(msg.name); //set file tree root name to the project name
|
||||||
|
String projectDescription = msg.description;
|
||||||
|
|
||||||
|
//handle config
|
||||||
|
propertySheet.getItems().clear();
|
||||||
|
Enumeration<String> propertyNames = (Enumeration<String>) msg.config.propertyNames();
|
||||||
|
while(propertyNames.hasMoreElements()){ //populate propertySheet with all config elements
|
||||||
|
String propertyName = propertyNames.nextElement();
|
||||||
|
String propertyValue = msg.config.getProperty(propertyName);
|
||||||
|
ComboBoxProperty comboProperty = new ComboBoxProperty(propertyName, propertyValue, null);
|
||||||
|
propertySheet.getItems().add(comboProperty);
|
||||||
|
}
|
||||||
|
|
||||||
|
//request alternative values for config of this project type
|
||||||
|
projectType = msg.type;
|
||||||
|
sendProjectTypeReqMsg(projectType);
|
||||||
|
|
||||||
|
//handle file list
|
||||||
|
List<String> fileList = msg.fileList;
|
||||||
|
fileTreeView.getRoot().getChildren().clear();
|
||||||
|
for(String filePath : fileList){
|
||||||
|
if(filePath.endsWith("/")){
|
||||||
|
logger.warning("file: \"" + filePath + "\" in file list is a directory and not a file. Currently not supported. Ignoring entry");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if(filePath.startsWith("/")){
|
||||||
|
filePath = filePath.substring(1, filePath.length());
|
||||||
|
}
|
||||||
|
TreeItem<String> tmpParent = fileTreeView.getRoot();
|
||||||
|
for(String fileSplit : filePath.split("/")){
|
||||||
|
if(!tmpParent.getChildren().contains(fileSplit)){
|
||||||
|
logger.finer("adding file/directory \""+fileSplit+"\" to directory \""+tmpParent+"\"");
|
||||||
|
TreeItem<String> tmpChild = new TreeItem<String>(fileSplit);
|
||||||
|
tmpParent = tmpChild;
|
||||||
|
}else{
|
||||||
|
int index = tmpParent.getChildren().indexOf(fileSplit);
|
||||||
|
tmpParent = tmpParent.getChildren().get(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}catch(Exception e){
|
||||||
|
logger.log(Level.FINE, "could not load the project", e);
|
||||||
|
client.getProjectHandler().triggerOpenProjectFailure("ERROR: failure while loading project");
|
||||||
}
|
}
|
||||||
setProjectName(msg.name);
|
|
||||||
|
|
||||||
Properties projectConfig = msg.config;
|
|
||||||
String projectDescription = msg.description;
|
|
||||||
List<String> fileList = msg.fileList;
|
|
||||||
String projectType = msg.type;
|
|
||||||
//TODO: handle msg
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
client.getSessionHandler().addMessageListener(new ProjectTypeRspMsgListener() {
|
client.getSessionHandler().addMessageListener(new ProjectTypeRspMsgListener() {
|
||||||
@Override
|
@Override
|
||||||
public void messageReceived(ProjectTypeRspMsg msg) {
|
public void messageReceived(ProjectTypeRspMsg msg) {
|
||||||
//TODO: update the project properties
|
for(String type : msg.keySet()){
|
||||||
|
if(type.equals(projectType)){ //the current project type matches the project type in the message
|
||||||
|
//TODO: handle type specific configurations
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize(URL fxmlFileLocation, ResourceBundle resources) {
|
public void initialize(URL fxmlFileLocation, ResourceBundle resources) {
|
||||||
|
setErrorMessage("");
|
||||||
setupPropertySheet();
|
setupPropertySheet();
|
||||||
setupFileTreeView();
|
setupFileTreeView();
|
||||||
}
|
}
|
||||||
|
|
@ -97,7 +151,7 @@ public class EditorWindow extends GuiWindow {
|
||||||
@FXML
|
@FXML
|
||||||
protected void changeProject(ActionEvent event){
|
protected void changeProject(ActionEvent event){
|
||||||
client.getProjectHandler().setProject(null);
|
client.getProjectHandler().setProject(null);
|
||||||
client.getProjectHandler().selectProject();
|
client.getProjectHandler().triggerSelectProject();
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
|
|
@ -105,6 +159,13 @@ public class EditorWindow extends GuiWindow {
|
||||||
client.exit();
|
client.exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void sendProjectTypeReqMsg(String type){
|
||||||
|
CoderMessage msg = new CoderMessage();
|
||||||
|
msg.ProjectTypeReq = new ProjectTypeReqMsg();
|
||||||
|
msg.ProjectTypeReq.type = type;
|
||||||
|
client.getSessionHandler().sendMessage(msg);
|
||||||
|
}
|
||||||
|
|
||||||
private void setupFileTreeView(){
|
private void setupFileTreeView(){
|
||||||
fileTreeView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<TreeItem<String>>() {
|
fileTreeView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<TreeItem<String>>() {
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -157,10 +218,6 @@ public class EditorWindow extends GuiWindow {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setProjectName(String name) {
|
|
||||||
fileTreeView.getRoot().setValue(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getDescriptiveName() {
|
protected String getDescriptiveName() {
|
||||||
return "Editor Window";
|
return "Editor Window";
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ public class LoginDialog extends GuiWindow {
|
||||||
@Override
|
@Override
|
||||||
protected void willShow(){
|
protected void willShow(){
|
||||||
passwordPasswordField.setText("");
|
passwordPasswordField.setText("");
|
||||||
if(errorLabel.getText() != null && errorLabel.getText().isEmpty() && usernameTextField.getText() != null && !usernameTextField.getText().isEmpty()){
|
if( (errorLabel.getText() == null || (errorLabel.getText() != null && errorLabel.getText().isEmpty())) && usernameTextField.getText() != null && !usernameTextField.getText().isEmpty()){
|
||||||
passwordPasswordField.requestFocus();
|
passwordPasswordField.requestFocus();
|
||||||
}else{
|
}else{
|
||||||
usernameTextField.requestFocus();
|
usernameTextField.requestFocus();
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,7 @@ public class NewProjectDialog extends GuiWindow {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize(URL fxmlFileLocation, ResourceBundle resources) {
|
public void initialize(URL fxmlFileLocation, ResourceBundle resources) {
|
||||||
errorMessageLabel.setText("");
|
setErrorMessage("");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendProjectTypeReqMsg(){
|
private void sendProjectTypeReqMsg(){
|
||||||
|
|
@ -93,14 +93,14 @@ public class NewProjectDialog extends GuiWindow {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
client.getProjectHandler().createNewProject(projectNameTextField.getText(), projectTypeComboBox.getValue(), projectDescriptionTextField.getText());
|
client.getProjectHandler().triggerCreateNewProject(projectNameTextField.getText(), projectTypeComboBox.getValue(), projectDescriptionTextField.getText());
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
protected void cancel(ActionEvent event){
|
protected void cancel(ActionEvent event){
|
||||||
logger.fine("cancel button triggered");
|
logger.fine("cancel button triggered");
|
||||||
client.getProjectHandler().setProject(null);
|
client.getProjectHandler().setProject(null);
|
||||||
client.getProjectHandler().selectProject();
|
client.getProjectHandler().triggerSelectProject();
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ import javafx.util.Callback;
|
||||||
|
|
||||||
import com.coder.client.CoderClient;
|
import com.coder.client.CoderClient;
|
||||||
import com.coder.client.gui.GuiWindow;
|
import com.coder.client.gui.GuiWindow;
|
||||||
|
import com.coder.client.project.ProjectListener;
|
||||||
import com.coder.client.session.ProjectListRspMsgListener;
|
import com.coder.client.session.ProjectListRspMsgListener;
|
||||||
import com.coder.client.session.ProjectRspMsgListener;
|
import com.coder.client.session.ProjectRspMsgListener;
|
||||||
import com.coder.server.message.CoderMessage;
|
import com.coder.server.message.CoderMessage;
|
||||||
|
|
@ -66,14 +67,36 @@ public class SelectProjectDialog extends GuiWindow {
|
||||||
logger.fine("a ProjectRspMsg received");
|
logger.fine("a ProjectRspMsg received");
|
||||||
if(msg.error != null){
|
if(msg.error != null){
|
||||||
logger.severe("Server responded on the project request with the following error message: " + msg.error);
|
logger.severe("Server responded on the project request with the following error message: " + msg.error);
|
||||||
client.getProjectHandler().setProject(null);
|
|
||||||
setErrorMessage("ERROR: " + msg.error);
|
setErrorMessage("ERROR: " + msg.error);
|
||||||
}else{
|
}else{
|
||||||
setErrorMessage("");
|
setErrorMessage("");
|
||||||
client.getProjectHandler().setProject(msg.name);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
client.getProjectHandler().addprojectListener(new ProjectListener() {
|
||||||
|
@Override
|
||||||
|
public void selectProject() {
|
||||||
|
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void openProjectFailed(String errorMsg) {
|
||||||
|
logger.fine("open project failed, setting error message to \""+errorMsg+"\"");
|
||||||
|
setErrorMessage(errorMsg);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void openProject(String projectName) {
|
||||||
|
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void createNewProject(String name, String type, String description) {
|
||||||
|
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void createNewProject() {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -82,7 +105,7 @@ public class SelectProjectDialog extends GuiWindow {
|
||||||
if(!client.getProjectHandler().isProjectSet()){
|
if(!client.getProjectHandler().isProjectSet()){
|
||||||
sendProjectListReq();
|
sendProjectListReq();
|
||||||
}else{
|
}else{
|
||||||
logger.fine("will outofire the open button since all parameters are already set");
|
logger.fine("will outofire the open button since all required parameters are already set ("+client.getProjectHandler()+")");
|
||||||
openButton.setDisable(false);
|
openButton.setDisable(false);
|
||||||
openButton.fire();
|
openButton.fire();
|
||||||
}
|
}
|
||||||
|
|
@ -152,7 +175,7 @@ public class SelectProjectDialog extends GuiWindow {
|
||||||
@FXML
|
@FXML
|
||||||
protected void newProject(ActionEvent event){
|
protected void newProject(ActionEvent event){
|
||||||
logger.fine("new project button triggered");
|
logger.fine("new project button triggered");
|
||||||
client.getProjectHandler().createNewProject();
|
client.getProjectHandler().triggerCreateNewProject();
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
|
|
@ -175,7 +198,7 @@ public class SelectProjectDialog extends GuiWindow {
|
||||||
ProjectListItem selectedItem = projectListView.getSelectionModel().getSelectedItem();
|
ProjectListItem selectedItem = projectListView.getSelectionModel().getSelectedItem();
|
||||||
client.getProjectHandler().setProject(selectedItem.getName());
|
client.getProjectHandler().setProject(selectedItem.getName());
|
||||||
}
|
}
|
||||||
client.getProjectHandler().openProject();
|
client.getProjectHandler().triggerOpenProject();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void clearProjectList(){
|
public void clearProjectList(){
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,24 @@
|
||||||
package com.coder.client.project;
|
package com.coder.client.project;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import zutil.log.LogUtil;
|
||||||
|
|
||||||
public class ProjectHandler {
|
public class ProjectHandler {
|
||||||
|
public static final Logger logger = LogUtil.getLogger();
|
||||||
private HashSet<ProjectListener> projectListeners = new HashSet<ProjectListener>();
|
private HashSet<ProjectListener> projectListeners = new HashSet<ProjectListener>();
|
||||||
|
|
||||||
private String projectName = null;
|
private String projectName = null;
|
||||||
|
|
||||||
public void createNewProject() {
|
public void triggerCreateNewProject() {
|
||||||
projectName = null;
|
projectName = null;
|
||||||
for(ProjectListener listener : projectListeners){
|
for(ProjectListener listener : projectListeners){
|
||||||
listener.createNewProject();
|
listener.createNewProject();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void createNewProject(String name, String type, String description){
|
public void triggerCreateNewProject(String name, String type, String description){
|
||||||
for(ProjectListener listener : projectListeners){
|
for(ProjectListener listener : projectListeners){
|
||||||
listener.createNewProject(name, type, description);
|
listener.createNewProject(name, type, description);
|
||||||
}
|
}
|
||||||
|
|
@ -26,16 +29,17 @@ public class ProjectHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setProject(String name) {
|
public void setProject(String name) {
|
||||||
|
logger.fine("setting current project name to \""+name+"\"");
|
||||||
this.projectName = name;
|
this.projectName = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void selectProject() {
|
public void triggerSelectProject() {
|
||||||
for(ProjectListener listener : projectListeners){
|
for(ProjectListener listener : projectListeners){
|
||||||
listener.selectProject();
|
listener.selectProject();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void openProject() {
|
public void triggerOpenProject() {
|
||||||
for(ProjectListener listener : projectListeners){
|
for(ProjectListener listener : projectListeners){
|
||||||
listener.openProject(projectName);
|
listener.openProject(projectName);
|
||||||
}
|
}
|
||||||
|
|
@ -44,5 +48,16 @@ public class ProjectHandler {
|
||||||
public void addprojectListener(ProjectListener listener){
|
public void addprojectListener(ProjectListener listener){
|
||||||
this.projectListeners.add(listener);
|
this.projectListeners.add(listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void triggerOpenProjectFailure(String errorMsg){
|
||||||
|
projectName = null;
|
||||||
|
for(ProjectListener listener : projectListeners){
|
||||||
|
listener.openProjectFailed(errorMsg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString(){
|
||||||
|
return "project name = \""+projectName+"\"";
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,4 +5,5 @@ public interface ProjectListener {
|
||||||
public void createNewProject(String name, String type, String description);
|
public void createNewProject(String name, String type, String description);
|
||||||
public void selectProject();
|
public void selectProject();
|
||||||
public void openProject(String projectName);
|
public void openProject(String projectName);
|
||||||
|
public void openProjectFailed(String errorMsg);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,8 @@ public class ComboBoxProperty extends CoderClientProperty<String> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PropertyEditor<?> getEditor() {
|
public PropertyEditor<?> getEditor() {
|
||||||
return Editors.createChoiceEditor(this, valueAlternatives);
|
PropertyEditor<?> editor = Editors.createChoiceEditor(this, valueAlternatives);
|
||||||
|
return editor;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue