Adding fault handling to editor window
This commit is contained in:
parent
5a9e709ae8
commit
02efc6c22f
9 changed files with 147 additions and 44 deletions
|
|
@ -3,9 +3,10 @@ package com.coder.client.gui.editor;
|
|||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Enumeration;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
import java.util.ResourceBundle;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
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.session.ProjectRspMsgListener;
|
||||
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.ProjectTypeReqMsg;
|
||||
import com.coder.server.message.ProjectTypeRspMsg;
|
||||
|
||||
import javafx.beans.value.ChangeListener;
|
||||
|
|
@ -46,35 +48,87 @@ public class EditorWindow extends GuiWindow {
|
|||
@FXML private Button exitButton;
|
||||
@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"));
|
||||
this.client = client;
|
||||
client.getSessionHandler().addMessageListener(new ProjectRspMsgListener() {
|
||||
@Override
|
||||
public void messageReceived(final ProjectRspMsg msg) {
|
||||
logger.fine("a ProjectRspMsg received");
|
||||
if(msg.error != null){
|
||||
return;
|
||||
try{
|
||||
logger.fine("a ProjectRspMsg received");
|
||||
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() {
|
||||
@Override
|
||||
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
|
||||
public void initialize(URL fxmlFileLocation, ResourceBundle resources) {
|
||||
setErrorMessage("");
|
||||
setupPropertySheet();
|
||||
setupFileTreeView();
|
||||
}
|
||||
|
|
@ -97,7 +151,7 @@ public class EditorWindow extends GuiWindow {
|
|||
@FXML
|
||||
protected void changeProject(ActionEvent event){
|
||||
client.getProjectHandler().setProject(null);
|
||||
client.getProjectHandler().selectProject();
|
||||
client.getProjectHandler().triggerSelectProject();
|
||||
}
|
||||
|
||||
@FXML
|
||||
|
|
@ -105,6 +159,13 @@ public class EditorWindow extends GuiWindow {
|
|||
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(){
|
||||
fileTreeView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<TreeItem<String>>() {
|
||||
@Override
|
||||
|
|
@ -157,10 +218,6 @@ public class EditorWindow extends GuiWindow {
|
|||
|
||||
}
|
||||
|
||||
public void setProjectName(String name) {
|
||||
fileTreeView.getRoot().setValue(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getDescriptiveName() {
|
||||
return "Editor Window";
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue