Editor can now send a FileReq and recieve a FileRsp.

This commit is contained in:
dcollin 2015-11-16 15:16:41 +01:00
parent edf5d445e5
commit 9caad6b714
6 changed files with 126 additions and 14 deletions

View file

@ -2,7 +2,6 @@ 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.ResourceBundle;
@ -17,12 +16,14 @@ import zutil.log.LogUtil;
import com.coder.client.CoderClient;
import com.coder.client.gui.GuiWindow;
import com.coder.client.project.OpenProjectEventHandler;
import com.coder.client.property.CheckBoxProperty;
import com.coder.client.property.CoderClientProperty;
import com.coder.client.property.ComboBoxProperty;
import com.coder.client.session.FileRspMsgListener;
import com.coder.client.session.ProjectRspMsgListener;
import com.coder.client.session.ProjectTypeRspMsgListener;
import com.coder.server.message.CoderMessage;
import com.coder.server.message.FileReqMsg;
import com.coder.server.message.FileRspMsg;
import com.coder.server.message.ProjectReqMsg;
import com.coder.server.message.ProjectRspMsg;
import com.coder.server.message.ProjectTypeReqMsg;
@ -42,7 +43,7 @@ public class EditorWindow extends GuiWindow {
public static final Logger logger = LogUtil.getLogger();
private CoderClient client;
@FXML private TreeView<String> fileTreeView;
@FXML private TreeView<FileTreeItem> fileTreeView;
@FXML private TextArea editTextArea;
@FXML private PropertySheet propertySheet;
@FXML private Button compileButton;
@ -73,12 +74,12 @@ public class EditorWindow extends GuiWindow {
client.showOnStage(EditorWindow.this); //TODO: show "loading project" popup instead
//handle name and description
fileTreeView.getRoot().setValue(msg.name); //set file tree root name to the project name
fileTreeView.getRoot().setValue(new FileTreeDirectory(msg.name)); //set file tree root name to the project name
String projectDescription = msg.description;
//handle config
propertySheet.getItems().clear();
if(msg.config != null){
if(msg.config != null){ //config is an optional parameter
logger.fine("the project has a configuration - populating property sheet");
Enumeration<String> propertyNames = (Enumeration<String>) msg.config.propertyNames();
while(propertyNames.hasMoreElements()){ //populate propertySheet with all config elements
@ -100,6 +101,7 @@ public class EditorWindow extends GuiWindow {
List<String> fileList = msg.fileList;
fileTreeView.getRoot().getChildren().clear();
for(String filePath : fileList){
String fullPath = filePath;
logger.finer("adding file \""+filePath+"\" to the file tree");
if(filePath.endsWith("/")){
logger.warning("file: \"" + filePath + "\" in file list is a directory and not a file. Currently not supported. Ignoring entry");
@ -108,7 +110,7 @@ public class EditorWindow extends GuiWindow {
if(filePath.startsWith("/")){
filePath = filePath.substring(1, filePath.length());
}
TreeItem<String> tmpParent = fileTreeView.getRoot();
TreeItem<FileTreeItem> tmpParent = fileTreeView.getRoot();
String[] filePathSpilt = filePath.split("/");
for(int i = 0; i < filePathSpilt.length; ++i){
if(i < filePathSpilt.length-1){
@ -119,7 +121,7 @@ public class EditorWindow extends GuiWindow {
}else{
logger.finer("adding directory \""+directoryName+"\" to directory \""+tmpParent+"\"");
}
TreeItem<String> tmpChild = new TreeItem<String>(directoryName);
TreeItem<FileTreeItem> tmpChild = new TreeItem<FileTreeItem>(new FileTreeDirectory(directoryName));
tmpParent.getChildren().add(tmpChild);
tmpParent = tmpChild;
}else{
@ -134,12 +136,11 @@ public class EditorWindow extends GuiWindow {
}else{
logger.finer("adding file \""+fileName+"\" to directory \""+tmpParent+"\"");
}
TreeItem<String> tmpChild = new TreeItem<String>(fileName);
TreeItem<FileTreeItem> tmpChild = new TreeItem<FileTreeItem>(new FileTreeFile(fileName, fullPath));
tmpParent.getChildren().add(tmpChild);
tmpParent = tmpChild;
}else{
int index = tmpParent.getChildren().indexOf(fileName);
tmpParent = tmpParent.getChildren().get(index);
logger.warning("The project seems to contain two or more files with the same location and name. The file tree presented may be missing files. duplicates not allowed.");
}
}
}
@ -165,6 +166,28 @@ public class EditorWindow extends GuiWindow {
}
});
client.getSessionHandler().addMessageListener(new FileRspMsgListener(){
@Override
public void messageReceived(FileRspMsg msg) {
if(msg.error != null || msg.path == null){
if(msg.error != null){
logger.severe("recieved error message \""+msg.error+"\" the FileRspMsg");
}
if(msg.path == null){
logger.severe("recieved a file with a null path");
setErrorMessage("ERROR: en error occured while loading a file");
}else{
setErrorMessage("ERROR: en error occured while loading the file: \""+msg.path+"\"");
}
return;
}else{
setErrorMessage("");
}
logger.fine("recieved file content for file: \""+msg.path+"\"");
//TODO: load file content to text area
}
});
client.getProjectHandler().addprojectEventHandler(new OpenProjectEventHandler() {
@Override
public void openProject(String projectName) {
@ -218,16 +241,29 @@ public class EditorWindow extends GuiWindow {
}
private void setupFileTreeView(){
fileTreeView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<TreeItem<String>>() {
fileTreeView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<TreeItem<FileTreeItem>>() {
@Override
public void changed(ObservableValue<? extends TreeItem<String>> item, TreeItem<String> oldValue, TreeItem<String> newValue) {
public void changed(ObservableValue<? extends TreeItem<FileTreeItem>> item, TreeItem<FileTreeItem> oldValue, TreeItem<FileTreeItem> newValue) {
if(newValue != fileTreeView.getRoot()){
System.out.println("INFO: item " + newValue + " selected");
FileTreeItem fileTreeItem = newValue.getValue();
if(fileTreeItem.isDirectory()){
FileTreeDirectory directory = (FileTreeDirectory)fileTreeItem;
logger.fine("directory " + directory.getName() + " selected in the file tree");
System.out.println();
}else{
FileTreeFile file = (FileTreeFile)fileTreeItem;
logger.fine("file " + file.getName() + " selected in the file tree. The file has the full path: \""+file.getFullPath()+"\"");
//sending file request message
CoderMessage msg = new CoderMessage();
msg.FileReq = new FileReqMsg();
msg.FileReq.path = file.getFullPath();
client.getSessionHandler().sendMessage(msg);
}
}
}
});
TreeItem<String> root = new TreeItem<String>("/");
TreeItem<FileTreeItem> root = new TreeItem<FileTreeItem>(new FileTreeDirectory("/"));
root.setExpanded(true);
fileTreeView.setRoot(root);
@ -249,6 +285,7 @@ public class EditorWindow extends GuiWindow {
propertySheet.getItems().clear();
/* EXAMPLE CODE:
ArrayList<String> boards = new ArrayList<String>();
boards.add("UNO");
boards.add("Mega");
@ -257,6 +294,7 @@ public class EditorWindow extends GuiWindow {
CheckBoxProperty p2 = new CheckBoxProperty("Melt?", false);
propertySheet.getItems().add(p2);
*/
}
@Override

View file

@ -0,0 +1,19 @@
package com.coder.client.gui.editor;
public class FileTreeDirectory extends FileTreeItem {
public FileTreeDirectory(String name) {
super(name);
}
@Override
public boolean isFile() {
return false;
}
@Override
public boolean isDirectory() {
return true;
}
}

View file

@ -0,0 +1,26 @@
package com.coder.client.gui.editor;
public class FileTreeFile extends FileTreeItem {
private String fullPath;
public FileTreeFile(String name, String fullPath) {
super(name);
this.fullPath = fullPath;
}
@Override
public boolean isFile() {
return true;
}
@Override
public boolean isDirectory() {
return false;
}
public String getFullPath(){
return this.fullPath;
}
}

View file

@ -0,0 +1,18 @@
package com.coder.client.gui.editor;
public abstract class FileTreeItem {
private String name;
public FileTreeItem(String name){
this.name = name;
}
public String getName(){
return name;
}
public String toString(){
return getName();
}
public abstract boolean isFile();
public abstract boolean isDirectory();
}

View file

@ -0,0 +1,7 @@
package com.coder.client.session;
import com.coder.server.message.FileRspMsg;
public interface FileRspMsgListener extends ProjectMessageListener {
public void messageReceived(FileRspMsg msg);
}

View file

@ -225,6 +225,10 @@ public class Session extends Thread {
logger.fine("The message contains a ProjectTypeRsp that is forwarded to listener: " + listener);
((ProjectTypeRspMsgListener)listener).messageReceived(msg.ProjectTypeRsp);
}
if(msg.FileRsp != null && listener instanceof FileRspMsgListener){
logger.fine("The message contains a FileRsp that is forwarded to listener: " + listener);
((FileRspMsgListener)listener).messageReceived(msg.FileRsp);
}
}
}
});