From b5e56ca2bf558070fcbe0a45a4cb7104f63fba7a Mon Sep 17 00:00:00 2001 From: dcollin Date: Fri, 13 Nov 2015 15:44:47 +0100 Subject: [PATCH] Refactoring: splitting and renaming listeners -Splitting ProjectListener into multiple event handlers -Renaming SessionListener to SessionEventHandler -Bug fixes --- src/com/coder/client/ProjectHandler.java | 42 +++++++---- src/com/coder/client/SessionHandler.java | 32 ++++----- .../coder/client/gui/editor/EditorWindow.java | 71 ++++++++++++------- .../coder/client/gui/login/LoginDialog.java | 4 +- .../gui/newProject/NewProjectDialog.java | 19 ++--- .../selectProject/SelectProjectDialog.java | 24 +++---- .../gui/selectServer/SelectServerDialog.java | 20 +----- .../project/CreateNewProjectEventHandler.java | 5 ++ .../project/OpenProjectEventHandler.java | 5 ++ .../OpenProjectFailureEventHandler.java | 5 ++ .../client/project/ProjectEventHandler.java | 5 ++ .../coder/client/project/ProjectListener.java | 8 --- .../project/SelectProjectEventHandler.java | 5 ++ ...Listener.java => SessionEventHandler.java} | 2 +- 14 files changed, 132 insertions(+), 115 deletions(-) create mode 100644 src/com/coder/client/project/CreateNewProjectEventHandler.java create mode 100644 src/com/coder/client/project/OpenProjectEventHandler.java create mode 100644 src/com/coder/client/project/OpenProjectFailureEventHandler.java create mode 100644 src/com/coder/client/project/ProjectEventHandler.java delete mode 100644 src/com/coder/client/project/ProjectListener.java create mode 100644 src/com/coder/client/project/SelectProjectEventHandler.java rename src/com/coder/client/session/{SessionListener.java => SessionEventHandler.java} (88%) diff --git a/src/com/coder/client/ProjectHandler.java b/src/com/coder/client/ProjectHandler.java index 93fc65c..d6d05a1 100644 --- a/src/com/coder/client/ProjectHandler.java +++ b/src/com/coder/client/ProjectHandler.java @@ -3,20 +3,26 @@ package com.coder.client; import java.util.HashSet; import java.util.logging.Logger; -import com.coder.client.project.ProjectListener; +import com.coder.client.project.CreateNewProjectEventHandler; +import com.coder.client.project.OpenProjectEventHandler; +import com.coder.client.project.OpenProjectFailureEventHandler; +import com.coder.client.project.ProjectEventHandler; +import com.coder.client.project.SelectProjectEventHandler; import zutil.log.LogUtil; public class ProjectHandler { public static final Logger logger = LogUtil.getLogger(); - private HashSet projectListeners = new HashSet(); + private HashSet projectEventHandlers = new HashSet(); private String projectName = null; public void triggerCreateNewProject() { projectName = null; - for(ProjectListener listener : projectListeners){ - listener.createNewProject(); + for(ProjectEventHandler eventHandler : projectEventHandlers){ + if(eventHandler instanceof CreateNewProjectEventHandler){ + ((CreateNewProjectEventHandler) eventHandler).createNewProject(); + } } } @@ -29,26 +35,32 @@ public class ProjectHandler { this.projectName = name; } - public void triggerSelectProject() { - for(ProjectListener listener : projectListeners){ - listener.selectProject(); + public void triggerSelectProjectEvent() { + for(ProjectEventHandler eventHandler : projectEventHandlers){ + if(eventHandler instanceof SelectProjectEventHandler){ + ((SelectProjectEventHandler) eventHandler).selectProject(); + } } } - public void triggerOpenProject() { - for(ProjectListener listener : projectListeners){ - listener.openProject(projectName); + public void triggerOpenProjectEvent() { + for(ProjectEventHandler eventHandler : projectEventHandlers){ + if(eventHandler instanceof OpenProjectEventHandler){ + ((OpenProjectEventHandler) eventHandler).openProject(projectName); + } } } - public void addprojectListener(ProjectListener listener){ - this.projectListeners.add(listener); + public void addprojectEventHandler(ProjectEventHandler eventHandler){ + this.projectEventHandlers.add(eventHandler); } - public void triggerOpenProjectFailure(String errorMsg){ + public void triggerOpenProjectFailureEvent(String errorMsg){ projectName = null; - for(ProjectListener listener : projectListeners){ - listener.openProjectFailed(errorMsg); + for(ProjectEventHandler eventHandler : projectEventHandlers){ + if(eventHandler instanceof OpenProjectFailureEventHandler){ + ((OpenProjectFailureEventHandler) eventHandler).openProjectFailed(errorMsg); + } } } diff --git a/src/com/coder/client/SessionHandler.java b/src/com/coder/client/SessionHandler.java index f172439..ad59b15 100644 --- a/src/com/coder/client/SessionHandler.java +++ b/src/com/coder/client/SessionHandler.java @@ -9,14 +9,14 @@ import zutil.log.LogUtil; import com.coder.client.session.ProjectMessageListener; import com.coder.client.session.Session; -import com.coder.client.session.SessionListener; +import com.coder.client.session.SessionEventHandler; import com.coder.server.message.CoderMessage; public class SessionHandler{ public static final Logger logger = LogUtil.getLogger(); private Session session; - private HashSet sessionListeners = new HashSet(); + private HashSet sessionEventHandlers = new HashSet(); private HashSet messageListeners = new HashSet(); public boolean setupConnection(String url, int port){ @@ -28,13 +28,13 @@ public class SessionHandler{ for(ProjectMessageListener listener : messageListeners){ session.addMessageListener(listener); } - for(SessionListener listener : sessionListeners){ - listener.sessionConnectionSuccess(); + for(SessionEventHandler eventHandler : sessionEventHandlers){ + eventHandler.sessionConnectionSuccess(); } return true; }else{ - for(SessionListener listener : sessionListeners){ - listener.sessionConnectionFailure(); + for(SessionEventHandler eventHandler : sessionEventHandlers){ + eventHandler.sessionConnectionFailure(); } return false; } @@ -46,14 +46,14 @@ public class SessionHandler{ }else{ boolean success = session.authenticate(username, clearTextPassword); if(success){ - for(SessionListener listener : sessionListeners){ - listener.sessionAuthenticationSuccess(); + for(SessionEventHandler eventHandler : sessionEventHandlers){ + eventHandler.sessionAuthenticationSuccess(); } session.start(); return true; }else{ - for(SessionListener listener : sessionListeners){ - listener.sessionAuthenticationFailure(); + for(SessionEventHandler eventHandler : sessionEventHandlers){ + eventHandler.sessionAuthenticationFailure(); } return false; } @@ -81,16 +81,16 @@ public class SessionHandler{ logger.info("closing session to server"); session.close(); session = null; - for(SessionListener listener : sessionListeners){ - listener.sessionDisconnected(retry); + for(SessionEventHandler eventHandler : sessionEventHandlers){ + eventHandler.sessionDisconnected(retry); } }else{ logger.fine("cannot close current session: session already terminated"); } } - public void addSessionListener(SessionListener listener){ - this.sessionListeners.add(listener); + public void addSessionEventHandler(SessionEventHandler eventHandler){ + this.sessionEventHandlers.add(eventHandler); } public void addMessageListener(ProjectMessageListener listener) { @@ -103,8 +103,8 @@ public class SessionHandler{ public void triggerAuthenticationCancel() { if(session.isConnected() && !session.isAuthenticated()){ closeCurrentSession(false); - for(SessionListener listener : sessionListeners){ - listener.sessionAuthenticationCancel(); + for(SessionEventHandler eventHandler : sessionEventHandlers){ + eventHandler.sessionAuthenticationCancel(); } }else{ logger.warning("Can only cancel a connected but not yet authenticated authentication. ignoring call"); diff --git a/src/com/coder/client/gui/editor/EditorWindow.java b/src/com/coder/client/gui/editor/EditorWindow.java index 88ace29..1634936 100644 --- a/src/com/coder/client/gui/editor/EditorWindow.java +++ b/src/com/coder/client/gui/editor/EditorWindow.java @@ -16,7 +16,7 @@ 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.project.OpenProjectEventHandler; import com.coder.client.property.CheckBoxProperty; import com.coder.client.property.CoderClientProperty; import com.coder.client.property.ComboBoxProperty; @@ -66,11 +66,12 @@ public class EditorWindow extends GuiWindow { client.getProjectHandler().setProject(null); return; }else{ - client.showOnStage(EditorWindow.this); client.getProjectHandler().setProject(msg.name); } - + logger.info("loading project \""+msg.name+"\""); + 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 String projectDescription = msg.description; @@ -93,6 +94,7 @@ public class EditorWindow extends GuiWindow { List fileList = msg.fileList; fileTreeView.getRoot().getChildren().clear(); for(String filePath : fileList){ + 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"); continue; @@ -101,21 +103,48 @@ public class EditorWindow extends GuiWindow { filePath = filePath.substring(1, filePath.length()); } TreeItem tmpParent = fileTreeView.getRoot(); - for(String fileSplit : filePath.split("/")){ - if(!tmpParent.getChildren().contains(fileSplit)){ - logger.finer("adding file/directory \""+fileSplit+"\" to directory \""+tmpParent+"\""); - TreeItem tmpChild = new TreeItem(fileSplit); - tmpParent = tmpChild; + String[] filePathSpilt = filePath.split("/"); + for(int i = 0; i < filePathSpilt.length; ++i){ + if(i < filePathSpilt.length-1){ + String directoryName = filePathSpilt[i]; + if(!tmpParent.getChildren().contains(directoryName)){ + if(tmpParent == fileTreeView.getRoot()){ + logger.finer("adding directory \""+directoryName+"\" to directory \"/\""); + }else{ + logger.finer("adding directory \""+directoryName+"\" to directory \""+tmpParent+"\""); + } + TreeItem tmpChild = new TreeItem(directoryName); + tmpParent.getChildren().add(tmpChild); + tmpParent = tmpChild; + }else{ + int index = tmpParent.getChildren().indexOf(directoryName); + tmpParent = tmpParent.getChildren().get(index); + } }else{ - int index = tmpParent.getChildren().indexOf(fileSplit); - tmpParent = tmpParent.getChildren().get(index); + String fileName = filePathSpilt[i]; + if(!tmpParent.getChildren().contains(fileName)){ + if(tmpParent == fileTreeView.getRoot()){ + logger.finer("adding file \""+fileName+"\" to directory \"/\""); + }else{ + logger.finer("adding file \""+fileName+"\" to directory \""+tmpParent+"\""); + } + TreeItem tmpChild = new TreeItem(fileName); + tmpParent.getChildren().add(tmpChild); + tmpParent = tmpChild; + }else{ + int index = tmpParent.getChildren().indexOf(fileName); + 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"); + logger.log(Level.SEVERE, "exception while load the project", e); + client.getProjectHandler().triggerOpenProjectFailureEvent("ERROR: failed to loading project"); } + + client.showOnStage(EditorWindow.this); } }); @@ -130,15 +159,7 @@ public class EditorWindow extends GuiWindow { } }); - client.getProjectHandler().addprojectListener(new ProjectListener() { - @Override - public void selectProject() { - - } - @Override - public void openProjectFailed(String errorMsg) { - - } + client.getProjectHandler().addprojectEventHandler(new OpenProjectEventHandler() { @Override public void openProject(String projectName) { CoderMessage msg = new CoderMessage(); @@ -146,10 +167,6 @@ public class EditorWindow extends GuiWindow { msg.ProjectReq.name = projectName; client.getSessionHandler().sendMessage(msg); } - @Override - public void createNewProject() { - - } }); } @@ -179,7 +196,7 @@ public class EditorWindow extends GuiWindow { @FXML protected void changeProject(ActionEvent event){ client.getProjectHandler().setProject(null); - client.getProjectHandler().triggerSelectProject(); + client.getProjectHandler().triggerSelectProjectEvent(); } @FXML @@ -204,7 +221,7 @@ public class EditorWindow extends GuiWindow { } }); - TreeItem root = new TreeItem("root"); + TreeItem root = new TreeItem("/"); root.setExpanded(true); fileTreeView.setRoot(root); diff --git a/src/com/coder/client/gui/login/LoginDialog.java b/src/com/coder/client/gui/login/LoginDialog.java index ef3e9a5..736748f 100644 --- a/src/com/coder/client/gui/login/LoginDialog.java +++ b/src/com/coder/client/gui/login/LoginDialog.java @@ -18,7 +18,7 @@ import javafx.scene.input.KeyEvent; import com.coder.client.CoderClient; import com.coder.client.gui.GuiWindow; -import com.coder.client.session.SessionListener; +import com.coder.client.session.SessionEventHandler; public class LoginDialog extends GuiWindow { public static final Logger logger = LogUtil.getLogger(); @@ -33,7 +33,7 @@ public class LoginDialog extends GuiWindow { public LoginDialog(final CoderClient client) throws IOException { super(LoginDialog.class.getResource("LoginDialog.fxml")); this.client = client; - client.getSessionHandler().addSessionListener(new SessionListener() { + client.getSessionHandler().addSessionEventHandler(new SessionEventHandler() { @Override public void sessionConnectionSuccess() { logger.fine("session connection successfull, will show the login dialog on the main stage"); diff --git a/src/com/coder/client/gui/newProject/NewProjectDialog.java b/src/com/coder/client/gui/newProject/NewProjectDialog.java index 043b4d1..6419bb5 100755 --- a/src/com/coder/client/gui/newProject/NewProjectDialog.java +++ b/src/com/coder/client/gui/newProject/NewProjectDialog.java @@ -26,7 +26,7 @@ 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.project.CreateNewProjectEventHandler; import com.coder.client.session.ProjectTypeRspMsgListener; public class NewProjectDialog extends GuiWindow { @@ -59,19 +59,7 @@ public class NewProjectDialog extends GuiWindow { } }); - client.getProjectHandler().addprojectListener(new ProjectListener() { - @Override - public void selectProject() { - - } - @Override - public void openProjectFailed(String errorMsg) { - - } - @Override - public void openProject(String projectName) { - - } + client.getProjectHandler().addprojectEventHandler(new CreateNewProjectEventHandler() { @Override public void createNewProject() { setErrorMessage(""); @@ -79,6 +67,7 @@ public class NewProjectDialog extends GuiWindow { client.showOnStage(NewProjectDialog.this); } }); + } @Override @@ -130,7 +119,7 @@ public class NewProjectDialog extends GuiWindow { protected void cancel(ActionEvent event){ logger.fine("cancel button triggered"); client.getProjectHandler().setProject(null); - client.getProjectHandler().triggerSelectProject(); + client.getProjectHandler().triggerSelectProjectEvent(); } @FXML diff --git a/src/com/coder/client/gui/selectProject/SelectProjectDialog.java b/src/com/coder/client/gui/selectProject/SelectProjectDialog.java index 434109f..3781530 100644 --- a/src/com/coder/client/gui/selectProject/SelectProjectDialog.java +++ b/src/com/coder/client/gui/selectProject/SelectProjectDialog.java @@ -26,10 +26,11 @@ import javafx.util.Callback; import com.coder.client.CoderClient; import com.coder.client.gui.GuiWindow; -import com.coder.client.project.ProjectListener; +import com.coder.client.project.OpenProjectFailureEventHandler; +import com.coder.client.project.SelectProjectEventHandler; import com.coder.client.session.ProjectListRspMsgListener; import com.coder.client.session.ProjectRspMsgListener; -import com.coder.client.session.SessionListener; +import com.coder.client.session.SessionEventHandler; import com.coder.server.message.CoderMessage; import com.coder.server.message.ProjectListData; import com.coder.server.message.ProjectListReqMsg; @@ -51,7 +52,7 @@ public class SelectProjectDialog extends GuiWindow { super(SelectProjectDialog.class.getResource("SelectProjectDialog.fxml")); this.client = client; - client.getSessionHandler().addSessionListener(new SessionListener() { + client.getSessionHandler().addSessionEventHandler(new SessionEventHandler() { @Override public void sessionDisconnected(boolean retryToEstablishConnection) { @@ -97,18 +98,22 @@ public class SelectProjectDialog extends GuiWindow { if(msg.error != null){ logger.severe("Server responded on the project request with the following error message: " + msg.error); setErrorMessage("ERROR: " + msg.error); + client.showOnStage(SelectProjectDialog.this); }else{ setErrorMessage(""); } } }); - client.getProjectHandler().addprojectListener(new ProjectListener() { + client.getProjectHandler().addprojectEventHandler(new SelectProjectEventHandler() { @Override public void selectProject() { logger.fine("select project requested, will show the select project dialog on the main stage"); client.showOnStage(SelectProjectDialog.this); } + }); + + client.getProjectHandler().addprojectEventHandler(new OpenProjectFailureEventHandler() { @Override public void openProjectFailed(String errorMsg) { logger.fine("open project failed, setting error message to \""+errorMsg+"\""); @@ -116,15 +121,8 @@ public class SelectProjectDialog extends GuiWindow { logger.fine("open project failed, will show the select project dialog on the main stage"); client.showOnStage(SelectProjectDialog.this); } - @Override - public void openProject(String projectName) { - - } - @Override - public void createNewProject() { - - } }); + } @Override @@ -226,7 +224,7 @@ public class SelectProjectDialog extends GuiWindow { ProjectListItem selectedItem = projectListView.getSelectionModel().getSelectedItem(); client.getProjectHandler().setProject(selectedItem.getName()); } - client.getProjectHandler().triggerOpenProject(); + client.getProjectHandler().triggerOpenProjectEvent(); } public void clearProjectList(){ diff --git a/src/com/coder/client/gui/selectServer/SelectServerDialog.java b/src/com/coder/client/gui/selectServer/SelectServerDialog.java index cf614a0..857df51 100644 --- a/src/com/coder/client/gui/selectServer/SelectServerDialog.java +++ b/src/com/coder/client/gui/selectServer/SelectServerDialog.java @@ -30,9 +30,7 @@ import zutil.net.ssdp.StandardSSDPInfo; import com.coder.client.CoderClient; import com.coder.client.gui.GuiWindow; -import com.coder.client.session.ProjectRspMsgListener; -import com.coder.client.session.SessionListener; -import com.coder.server.message.ProjectRspMsg; +import com.coder.client.session.SessionEventHandler; public class SelectServerDialog extends GuiWindow { public static final Logger logger = LogUtil.getLogger(); @@ -50,7 +48,7 @@ public class SelectServerDialog extends GuiWindow { public SelectServerDialog(final CoderClient client) throws IOException { super(SelectServerDialog.class.getResource("SelectServerDialog.fxml")); this.client = client; - client.getSessionHandler().addSessionListener(new SessionListener() { + client.getSessionHandler().addSessionEventHandler(new SessionEventHandler() { @Override public void sessionConnectionSuccess() { setErrorMessage(""); @@ -92,20 +90,6 @@ public class SelectServerDialog extends GuiWindow { } }); - client.getSessionHandler().addMessageListener(new ProjectRspMsgListener() { - @Override - public void messageReceived(final ProjectRspMsg msg) { - Platform.runLater(new Runnable() { - @Override - public void run() { - if(msg.error != null){ - client.showOnStage(SelectServerDialog.this); - } - } - }); - } - }); - client.getSSDPHandler().setSSDPServiceListener(new SSDPServiceListener() { @Override public void newService(final StandardSSDPInfo service) { diff --git a/src/com/coder/client/project/CreateNewProjectEventHandler.java b/src/com/coder/client/project/CreateNewProjectEventHandler.java new file mode 100644 index 0000000..333de2f --- /dev/null +++ b/src/com/coder/client/project/CreateNewProjectEventHandler.java @@ -0,0 +1,5 @@ +package com.coder.client.project; + +public interface CreateNewProjectEventHandler extends ProjectEventHandler { + public void createNewProject(); +} diff --git a/src/com/coder/client/project/OpenProjectEventHandler.java b/src/com/coder/client/project/OpenProjectEventHandler.java new file mode 100644 index 0000000..1cc0443 --- /dev/null +++ b/src/com/coder/client/project/OpenProjectEventHandler.java @@ -0,0 +1,5 @@ +package com.coder.client.project; + +public interface OpenProjectEventHandler extends ProjectEventHandler { + public void openProject(String projectName); +} diff --git a/src/com/coder/client/project/OpenProjectFailureEventHandler.java b/src/com/coder/client/project/OpenProjectFailureEventHandler.java new file mode 100644 index 0000000..bb18f94 --- /dev/null +++ b/src/com/coder/client/project/OpenProjectFailureEventHandler.java @@ -0,0 +1,5 @@ +package com.coder.client.project; + +public interface OpenProjectFailureEventHandler extends ProjectEventHandler { + public void openProjectFailed(String errorMsg); +} diff --git a/src/com/coder/client/project/ProjectEventHandler.java b/src/com/coder/client/project/ProjectEventHandler.java new file mode 100644 index 0000000..90aa7cd --- /dev/null +++ b/src/com/coder/client/project/ProjectEventHandler.java @@ -0,0 +1,5 @@ +package com.coder.client.project; + +public interface ProjectEventHandler { + +} diff --git a/src/com/coder/client/project/ProjectListener.java b/src/com/coder/client/project/ProjectListener.java deleted file mode 100644 index e69afe8..0000000 --- a/src/com/coder/client/project/ProjectListener.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.coder.client.project; - -public interface ProjectListener { - public void createNewProject(); - public void selectProject(); - public void openProject(String projectName); - public void openProjectFailed(String errorMsg); -} diff --git a/src/com/coder/client/project/SelectProjectEventHandler.java b/src/com/coder/client/project/SelectProjectEventHandler.java new file mode 100644 index 0000000..9381e02 --- /dev/null +++ b/src/com/coder/client/project/SelectProjectEventHandler.java @@ -0,0 +1,5 @@ +package com.coder.client.project; + +public interface SelectProjectEventHandler extends ProjectEventHandler { + public void selectProject(); +} diff --git a/src/com/coder/client/session/SessionListener.java b/src/com/coder/client/session/SessionEventHandler.java similarity index 88% rename from src/com/coder/client/session/SessionListener.java rename to src/com/coder/client/session/SessionEventHandler.java index f12707a..391b078 100644 --- a/src/com/coder/client/session/SessionListener.java +++ b/src/com/coder/client/session/SessionEventHandler.java @@ -1,7 +1,7 @@ package com.coder.client.session; -public interface SessionListener { +public interface SessionEventHandler { void sessionConnectionSuccess();