From 0a580f8c53d0e776bda454189ae876d20039e73e Mon Sep 17 00:00:00 2001 From: dcollin Date: Tue, 10 Nov 2015 15:16:10 +0100 Subject: [PATCH] Refactoring. Introducing a separate listener for each message type recieved. --- .classpath | 2 +- src/com/coder/client/CoderClient.java | 160 +++++++++++------- .../client/CoderMessageReceivedListener.java | 12 -- .../coder/client/file/ProjectDirectory.java | 84 --------- src/com/coder/client/file/ProjectFile.java | 15 -- .../coder/client/file/ProjectFileObject.java | 14 -- .../coder/client/file/ProjectFileTree.java | 124 -------------- .../client/file/ProjectFileTreeTest.java | 37 ---- .../session/ProjectListRspMsgListener.java | 7 + .../client/session/ProjectRspMsgListener.java | 7 + .../session/ProjectTypeRspMsgListener.java | 7 + .../coder/client/{ => session}/Session.java | 30 ++-- .../coder/client/session/SessionListener.java | 8 + 13 files changed, 146 insertions(+), 361 deletions(-) delete mode 100755 src/com/coder/client/CoderMessageReceivedListener.java delete mode 100644 src/com/coder/client/file/ProjectDirectory.java delete mode 100644 src/com/coder/client/file/ProjectFile.java delete mode 100644 src/com/coder/client/file/ProjectFileObject.java delete mode 100644 src/com/coder/client/file/ProjectFileTree.java delete mode 100644 src/com/coder/client/file/ProjectFileTreeTest.java create mode 100644 src/com/coder/client/session/ProjectListRspMsgListener.java create mode 100644 src/com/coder/client/session/ProjectRspMsgListener.java create mode 100644 src/com/coder/client/session/ProjectTypeRspMsgListener.java rename src/com/coder/client/{ => session}/Session.java (84%) create mode 100644 src/com/coder/client/session/SessionListener.java diff --git a/.classpath b/.classpath index 8a4bb32..514c42a 100644 --- a/.classpath +++ b/.classpath @@ -1,6 +1,6 @@ - + diff --git a/src/com/coder/client/CoderClient.java b/src/com/coder/client/CoderClient.java index ebc655b..03eabce 100755 --- a/src/com/coder/client/CoderClient.java +++ b/src/com/coder/client/CoderClient.java @@ -1,6 +1,7 @@ package com.coder.client; import java.io.IOException; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Properties; @@ -18,6 +19,11 @@ import com.coder.client.gui.selectProject.SelectProjectDialog; import com.coder.client.gui.selectProject.SelectProjectDialogListener; import com.coder.client.gui.selectServer.SelectServerDialog; import com.coder.client.gui.selectServer.SelectServerDialogListener; +import com.coder.client.session.ProjectListRspMsgListener; +import com.coder.client.session.ProjectRspMsgListener; +import com.coder.client.session.ProjectTypeRspMsgListener; +import com.coder.client.session.Session; +import com.coder.client.session.SessionListener; import com.coder.server.message.*; import zutil.log.CompactLogFormatter; @@ -31,6 +37,7 @@ import javafx.stage.Stage; public class CoderClient extends Application{ public static final Logger logger = LogUtil.getLogger(); + private HashSet sessionListeners = new HashSet(); private Session session; private Stage mainStage; @@ -197,6 +204,10 @@ public class CoderClient extends Application{ logger.warning("Cannot setup session listeners for a non-authenticated session. ignoring call."); return; } + //indicate for listeners that a new session is up + for(SessionListener listener : sessionListeners){ + listener.sessionUp(session); + } // create a guard for when the session is closed new Thread(new Runnable(){ @Override @@ -218,69 +229,8 @@ public class CoderClient extends Application{ Thread.yield(); } logger.fine("terminating session guard"); - }}).start(); - session.addCoderMessageReceivedListener(new CoderMessageReceivedListener() { - @Override - public void projectListRspReceived(final ProjectListRspMsg projectListRsp) { - logger.fine("a ProjectListRsp received"); - Platform.runLater(new Runnable() { - @Override - public void run() { - for(String projectName : projectListRsp.keySet()){ - ProjectListData projectData = projectListRsp.get(projectName); - selectProjectDialog.addProjectToList(projectName, projectData); - } - } - }); } - @Override - public void projectRspReceived(final ProjectRspMsg projectRspMsg) { - logger.fine("a ProjectRspMsg received"); - Platform.runLater(new Runnable() { - @Override - public void run() { - if(projectRspMsg.error != null){ - logger.severe("Server responded on the project request with the following error message: " + projectRspMsg.error); - selectProjectDialog.setProject(null); - if(projectSelectionWindow != null){ - projectSelectionWindow.setErrorMessage("ERROR: " + projectRspMsg.error); - projectSelectionWindow.showOnStage(mainStage); - return; - }else{ - selectProjectDialog.setErrorMessage("ERROR: " + projectRspMsg.error); - selectProjectDialog.showOnStage(mainStage); - return; - } - }else{ - if(projectSelectionWindow != null){ - projectSelectionWindow.setErrorMessage(""); - } - editorWindow.setProjectName(projectRspMsg.name); - - Properties projectConfig = projectRspMsg.config; - String projectDescription = projectRspMsg.description; - List projectFileList = projectRspMsg.fileList; - String projectName = projectRspMsg.name; - String projectType = projectRspMsg.type; - //TODO: handle msg - } - } - }); - } - @Override - public void projectTypeRspReceived(final ProjectTypeRspMsg projectTypeRsp) { - logger.fine("a ProjectTypeRspMsg received"); - Platform.runLater(new Runnable() { - @Override - public void run() { - for(String typeName : projectTypeRsp.keySet()){ - SupportedProperties typeData = projectTypeRsp.get(typeName); - newProjectDialog.addProjectTypeToList(typeName, typeData); - } - } - }); - } - }); + }).start(); } private void setupSelectProjectDialog() throws IOException { @@ -327,6 +277,26 @@ public class CoderClient extends Application{ } } }); + this.sessionListeners.add(new SessionListener() { + @Override + public void sessionUp(Session session) { + session.addProjectListRspMsgListener(new ProjectListRspMsgListener() { + @Override + public void messageReceived(final ProjectListRspMsg msg) { + logger.fine("a ProjectListRsp received"); + Platform.runLater(new Runnable() { + @Override + public void run() { + for(String projectName : msg.keySet()){ + ProjectListData projectData = msg.get(projectName); + selectProjectDialog.addProjectToList(projectName, projectData); + } + } + }); + } + }); + } + }); } private void setupNewProjectDialog() throws IOException { @@ -374,6 +344,26 @@ public class CoderClient extends Application{ selectProjectDialog.showOnStage(mainStage); } }); + this.sessionListeners.add(new SessionListener() { + @Override + public void sessionUp(Session session) { + session.addProjectTypeRspMsgListener(new ProjectTypeRspMsgListener() { + @Override + public void messageReceived(final ProjectTypeRspMsg msg) { + logger.fine("a ProjectTypeRspMsg received"); + Platform.runLater(new Runnable() { + @Override + public void run() { + for(String typeName : msg.keySet()){ + SupportedProperties typeData = msg.get(typeName); + newProjectDialog.addProjectTypeToList(typeName, typeData); + } + } + }); + } + }); + } + }); } private void setupEditWindow() throws IOException { @@ -418,6 +408,52 @@ public class CoderClient extends Application{ Platform.exit(); } }); + sessionListeners.add(new SessionListener() { + @Override + public void sessionUp(Session session) { + session.addProjectRspMsgListener(new ProjectRspMsgListener() { + @Override + public void messageReceived(final ProjectRspMsg msg) { + logger.fine("a ProjectRspMsg received"); + Platform.runLater(new Runnable() { + @Override + public void run() { + if(msg.error != null){ + logger.severe("Server responded on the project request with the following error message: " + msg.error); + selectProjectDialog.setProject(null); + if(projectSelectionWindow != null){ + projectSelectionWindow.setErrorMessage("ERROR: " + msg.error); + projectSelectionWindow.showOnStage(mainStage); + return; + }else{ + selectProjectDialog.setErrorMessage("ERROR: " + msg.error); + selectProjectDialog.showOnStage(mainStage); + return; + } + }else{ + if(projectSelectionWindow != null){ + projectSelectionWindow.setErrorMessage(""); + } + editorWindow.setProjectName(msg.name); + + Properties projectConfig = msg.config; + String projectDescription = msg.description; + List fileList = msg.fileList; + String projectType = msg.type; + //TODO: handle msg + } + } + }); + } + }); + session.addProjectTypeRspMsgListener(new ProjectTypeRspMsgListener() { + @Override + public void messageReceived(ProjectTypeRspMsg msg) { + //TODO: update the project properties + } + }); + } + }); } private void setupSSDPClient() throws IOException{ diff --git a/src/com/coder/client/CoderMessageReceivedListener.java b/src/com/coder/client/CoderMessageReceivedListener.java deleted file mode 100755 index 4372eac..0000000 --- a/src/com/coder/client/CoderMessageReceivedListener.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.coder.client; - -import com.coder.server.message.*; - -public interface CoderMessageReceivedListener { - - //project messages - void projectTypeRspReceived(ProjectTypeRspMsg projectTypeRsp); - void projectListRspReceived(ProjectListRspMsg projectListRsp); - void projectRspReceived(ProjectRspMsg projectRspMsg); - -} diff --git a/src/com/coder/client/file/ProjectDirectory.java b/src/com/coder/client/file/ProjectDirectory.java deleted file mode 100644 index ab13d52..0000000 --- a/src/com/coder/client/file/ProjectDirectory.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.coder.client.file; - -import java.util.LinkedList; -import java.util.List; - -public class ProjectDirectory extends ProjectFileObject { - private LinkedList objectList; - - public ProjectDirectory(String name){ - super(name); - this.objectList = new LinkedList(); - } - - public List getAll(){ - return objectList; - } - - public boolean containsFile(String fileName){ - for(ProjectFileObject fileObject : objectList){ - if(fileObject instanceof ProjectFile){ - if(fileObject.getName().equals(fileName)){ - return true; - } - } - } - return false; - } - - public void addFile(ProjectFile file){ - this.objectList.add(file); - } - - public void deleteFile(String fileName){ - for(ProjectFileObject fileObject : objectList){ - if(fileObject instanceof ProjectFile){ - if(fileObject.getName().equals(fileName)){ - this.objectList.remove(fileObject); - } - } - } - } - - public boolean containsDirectory(String dirName){ - for(ProjectFileObject fileObject : objectList){ - if(fileObject instanceof ProjectDirectory){ - if(fileObject.getName().equals(dirName)){ - return true; - } - } - } - return false; - } - - public void addDirectory(String dirName){ - ProjectDirectory dir = new ProjectDirectory(dirName); - this.objectList.add(dir); - } - - public void deleteDirectory(String dirName){ - for(ProjectFileObject fileObject : objectList){ - if(fileObject instanceof ProjectDirectory){ - if(fileObject.getName().equals(dirName)){ - this.objectList.remove(fileObject); - } - } - } - } - - public ProjectDirectory getDirectory(String dirName) { - for(ProjectFileObject fileObject : objectList){ - if(fileObject instanceof ProjectDirectory){ - if(fileObject.getName().equals(dirName)){ - return (ProjectDirectory) fileObject; - } - } - } - return null; - } - - public String toString(){ - return this.getName(); - } - -} diff --git a/src/com/coder/client/file/ProjectFile.java b/src/com/coder/client/file/ProjectFile.java deleted file mode 100644 index 6a18e3f..0000000 --- a/src/com/coder/client/file/ProjectFile.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.coder.client.file; - -public class ProjectFile extends ProjectFileObject{ - private String filePath; - - public ProjectFile(String name, String filePath) { - super(name); - this.filePath = filePath; - } - - public String toString(){ - return this.getName() + " ("+filePath+")"; - } - -} diff --git a/src/com/coder/client/file/ProjectFileObject.java b/src/com/coder/client/file/ProjectFileObject.java deleted file mode 100644 index b8360e9..0000000 --- a/src/com/coder/client/file/ProjectFileObject.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.coder.client.file; - -public abstract class ProjectFileObject{ - private String name; - - public ProjectFileObject(String name){ - this.name = name; - } - - public String getName(){ - return name; - } - -} \ No newline at end of file diff --git a/src/com/coder/client/file/ProjectFileTree.java b/src/com/coder/client/file/ProjectFileTree.java deleted file mode 100644 index 319cf15..0000000 --- a/src/com/coder/client/file/ProjectFileTree.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.coder.client.file; - -public class ProjectFileTree { - private ProjectDirectory root; - - public ProjectFileTree(){ - this.root = new ProjectDirectory("/"); - } - - public void printFileTree(){ - if(root != null){ - printDirectoryContent(root, 0); - }else{ - System.out.println("File tree not set"); - } - } - - private void printDirectoryContent(ProjectDirectory dir, int indentation){ - for(ProjectFileObject obj : dir.getAll()){ - if(obj instanceof ProjectDirectory){ - printIndentation(indentation); - System.out.println("DIR:"+obj); - printDirectoryContent((ProjectDirectory) obj, indentation+1); - } - } - for(ProjectFileObject obj : dir.getAll()){ - if(obj instanceof ProjectFile){ - printIndentation(indentation); - System.out.println("FILE:"+obj); - } - } - } - - private void printIndentation(int indentation){ - for(int i = 0; i < indentation; ++i){ - System.out.print(" "); - } - } - - public boolean parseFileList(String[] filePaths){ - ProjectDirectory root = new ProjectDirectory("/"); - for(String filePath : filePaths){ - if(filePath.endsWith("/")){ - System.out.println("SEVERE: file path is not pointing to a file: " + filePath); - this.root = null; - return false; - } - String[] tmp; - if(filePath.startsWith("/")){ - tmp = filePath.substring(1, filePath.length()).split("/"); - }else{ - tmp = filePath.split("/"); - } - int i; - ProjectDirectory tmpRoot = root; - for(i = 0; i < tmp.length-1; ++i){ - String directoryName = tmp[i]; - if(directoryName.isEmpty()){ - System.out.println("SEVERE: a directory name cannot be empty"); - this.root = null; - return false; - } - if(tmpRoot.containsDirectory(directoryName) == false){ - tmpRoot.addDirectory(directoryName); - }else{ - //directory already exist - } - tmpRoot = tmpRoot.getDirectory(directoryName); - } - String fileName = tmp[i]; - if(tmpRoot.containsDirectory(fileName)){ - //logger.sever("File list contains a directory and file with the same name"); - System.out.println("SEVERE: File list contains a directory and file with the same name"); - this.root = null; - return false; - }else if(tmpRoot.containsFile(fileName) == false){ - ProjectFile file = new ProjectFile(fileName, filePath); - tmpRoot.addFile(file); - }else{ - //file already exists - } - } - updateCurrentFileList(root, this.root); - return true; - } - - private void updateCurrentFileList(ProjectDirectory sourceRoot, ProjectDirectory targetRoot){ - - //remove files in target that does not exist in source - for(ProjectFileObject targetFileObject : targetRoot.getAll()){ - String fileObjectName = targetFileObject.getName(); - if(targetFileObject instanceof ProjectFile){ //target file is a file - if(sourceRoot.containsFile(fileObjectName) == false){ - targetRoot.deleteFile(fileObjectName); - targetFileObject = null; - } - }else if(targetFileObject instanceof ProjectDirectory){ //target file is a directory - if(sourceRoot.containsDirectory(fileObjectName) == false){ - targetRoot.deleteDirectory(fileObjectName); - targetFileObject = null; - } - } - } - - //add files to target that exist in source - for(ProjectFileObject sourceFileObject : sourceRoot.getAll()){ - String fileObjectName = sourceFileObject.getName(); - if(sourceFileObject instanceof ProjectFile){ //source file is a file - if(targetRoot.containsFile(fileObjectName) == false){ - ProjectFile file = (ProjectFile)sourceFileObject; - targetRoot.addFile(file); - } - }else if(sourceFileObject instanceof ProjectDirectory){ //source file is a directory - if(targetRoot.containsDirectory(fileObjectName) == false){ - targetRoot.addDirectory(fileObjectName); - } - //recursive - ProjectDirectory dir = (ProjectDirectory)sourceFileObject; - updateCurrentFileList(dir, targetRoot.getDirectory(fileObjectName)); - } - } - } - -} diff --git a/src/com/coder/client/file/ProjectFileTreeTest.java b/src/com/coder/client/file/ProjectFileTreeTest.java deleted file mode 100644 index bca89f2..0000000 --- a/src/com/coder/client/file/ProjectFileTreeTest.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.coder.client.file; - -public class ProjectFileTreeTest { - ProjectFileTree tree = new ProjectFileTree(); - - public ProjectFileTreeTest(){ - tree.printFileTree(); - - tree.parseFileList(new String[]{"/test"}); - tree.printFileTree(); - - tree.parseFileList(new String[]{"/test", "/test/test"}); - tree.printFileTree(); - - tree.parseFileList(new String[]{"/test/test/"}); - tree.printFileTree(); - - tree.parseFileList(new String[]{"/test/"}); - tree.printFileTree(); - - tree.parseFileList(new String[]{"/"}); - tree.printFileTree(); - - tree.parseFileList(new String[]{"//"}); - tree.printFileTree(); - - tree.parseFileList(new String[]{"//test"}); - tree.printFileTree(); - - - } - - public static void main(String[] args){ - new ProjectFileTreeTest(); - } - -} diff --git a/src/com/coder/client/session/ProjectListRspMsgListener.java b/src/com/coder/client/session/ProjectListRspMsgListener.java new file mode 100644 index 0000000..d3f70bd --- /dev/null +++ b/src/com/coder/client/session/ProjectListRspMsgListener.java @@ -0,0 +1,7 @@ +package com.coder.client.session; + +import com.coder.server.message.ProjectListRspMsg; + +public interface ProjectListRspMsgListener { + public void messageReceived(ProjectListRspMsg msg); +} diff --git a/src/com/coder/client/session/ProjectRspMsgListener.java b/src/com/coder/client/session/ProjectRspMsgListener.java new file mode 100644 index 0000000..938b59c --- /dev/null +++ b/src/com/coder/client/session/ProjectRspMsgListener.java @@ -0,0 +1,7 @@ +package com.coder.client.session; + +import com.coder.server.message.ProjectRspMsg; + +public interface ProjectRspMsgListener { + public void messageReceived(ProjectRspMsg msg); +} diff --git a/src/com/coder/client/session/ProjectTypeRspMsgListener.java b/src/com/coder/client/session/ProjectTypeRspMsgListener.java new file mode 100644 index 0000000..36d8970 --- /dev/null +++ b/src/com/coder/client/session/ProjectTypeRspMsgListener.java @@ -0,0 +1,7 @@ +package com.coder.client.session; + +import com.coder.server.message.ProjectTypeRspMsg; + +public interface ProjectTypeRspMsgListener { + public void messageReceived(ProjectTypeRspMsg msg); +} diff --git a/src/com/coder/client/Session.java b/src/com/coder/client/session/Session.java similarity index 84% rename from src/com/coder/client/Session.java rename to src/com/coder/client/session/Session.java index c69d97f..de6f2a2 100755 --- a/src/com/coder/client/Session.java +++ b/src/com/coder/client/session/Session.java @@ -1,4 +1,4 @@ -package com.coder.client; +package com.coder.client.session; import java.io.IOException; import java.net.Socket; @@ -22,7 +22,9 @@ public class Session extends Thread { public static final Logger logger = LogUtil.getLogger(); private static final int AUTH_HASH_ITERATIONS = 500; - private HashSet messageReceivedlisteners = new HashSet(); + private HashSet projectListRspMsgListeners = new HashSet(); + private HashSet projectRspMsgListeners = new HashSet(); + private HashSet projectTypeRspMsgListeners = new HashSet(); private boolean authenticated = false; private Socket socket; @@ -99,12 +101,16 @@ public class Session extends Thread { return false; } - public void addCoderMessageReceivedListener(CoderMessageReceivedListener listener){ - messageReceivedlisteners.add(listener); + public void addProjectListRspMsgListener(ProjectListRspMsgListener listener){ + projectListRspMsgListeners.add(listener); } - public boolean removeListener(CoderMessageReceivedListener listener){ - return messageReceivedlisteners.remove(listener); + public void addProjectRspMsgListener(ProjectRspMsgListener listener){ + projectRspMsgListeners.add(listener); + } + + public void addProjectTypeRspMsgListener(ProjectTypeRspMsgListener listener){ + projectTypeRspMsgListeners.add(listener); } public boolean isConnected(){ @@ -212,20 +218,20 @@ public class Session extends Thread { logger.fine("Received a CoderMessage"); if(msg.ProjectListRsp != null){ logger.fine("The message contains a ProjectListRspMsg"); - for(CoderMessageReceivedListener listener : messageReceivedlisteners){ - listener.projectListRspReceived(msg.ProjectListRsp); + for(ProjectListRspMsgListener listener : projectListRspMsgListeners){ + listener.messageReceived(msg.ProjectListRsp); } } if(msg.ProjectRsp != null){ logger.fine("The message contains a ProjectRspMsg"); - for(CoderMessageReceivedListener listener : messageReceivedlisteners){ - listener.projectRspReceived(msg.ProjectRsp); + for(ProjectRspMsgListener listener : projectRspMsgListeners){ + listener.messageReceived(msg.ProjectRsp); } } if(msg.ProjectTypeRsp != null){ logger.fine("The message contains a ProjectTypeRsp"); - for(CoderMessageReceivedListener listener : messageReceivedlisteners){ - listener.projectTypeRspReceived(msg.ProjectTypeRsp); + for(ProjectTypeRspMsgListener listener : projectTypeRspMsgListeners){ + listener.messageReceived(msg.ProjectTypeRsp); } } } diff --git a/src/com/coder/client/session/SessionListener.java b/src/com/coder/client/session/SessionListener.java new file mode 100644 index 0000000..78608bb --- /dev/null +++ b/src/com/coder/client/session/SessionListener.java @@ -0,0 +1,8 @@ +package com.coder.client.session; + + +public interface SessionListener { + + void sessionUp(Session session); + +}