Refactoring: splitting and renaming listeners

-Splitting ProjectListener into multiple event handlers
-Renaming SessionListener to SessionEventHandler
-Bug fixes
This commit is contained in:
dcollin 2015-11-13 15:44:47 +01:00
parent 09d15b4a80
commit b5e56ca2bf
14 changed files with 132 additions and 115 deletions

View file

@ -3,20 +3,26 @@ package com.coder.client;
import java.util.HashSet; import java.util.HashSet;
import java.util.logging.Logger; 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; import zutil.log.LogUtil;
public class ProjectHandler { public class ProjectHandler {
public static final Logger logger = LogUtil.getLogger(); public static final Logger logger = LogUtil.getLogger();
private HashSet<ProjectListener> projectListeners = new HashSet<ProjectListener>(); private HashSet<ProjectEventHandler> projectEventHandlers = new HashSet<ProjectEventHandler>();
private String projectName = null; private String projectName = null;
public void triggerCreateNewProject() { public void triggerCreateNewProject() {
projectName = null; projectName = null;
for(ProjectListener listener : projectListeners){ for(ProjectEventHandler eventHandler : projectEventHandlers){
listener.createNewProject(); if(eventHandler instanceof CreateNewProjectEventHandler){
((CreateNewProjectEventHandler) eventHandler).createNewProject();
}
} }
} }
@ -29,26 +35,32 @@ public class ProjectHandler {
this.projectName = name; this.projectName = name;
} }
public void triggerSelectProject() { public void triggerSelectProjectEvent() {
for(ProjectListener listener : projectListeners){ for(ProjectEventHandler eventHandler : projectEventHandlers){
listener.selectProject(); if(eventHandler instanceof SelectProjectEventHandler){
((SelectProjectEventHandler) eventHandler).selectProject();
}
} }
} }
public void triggerOpenProject() { public void triggerOpenProjectEvent() {
for(ProjectListener listener : projectListeners){ for(ProjectEventHandler eventHandler : projectEventHandlers){
listener.openProject(projectName); if(eventHandler instanceof OpenProjectEventHandler){
((OpenProjectEventHandler) eventHandler).openProject(projectName);
}
} }
} }
public void addprojectListener(ProjectListener listener){ public void addprojectEventHandler(ProjectEventHandler eventHandler){
this.projectListeners.add(listener); this.projectEventHandlers.add(eventHandler);
} }
public void triggerOpenProjectFailure(String errorMsg){ public void triggerOpenProjectFailureEvent(String errorMsg){
projectName = null; projectName = null;
for(ProjectListener listener : projectListeners){ for(ProjectEventHandler eventHandler : projectEventHandlers){
listener.openProjectFailed(errorMsg); if(eventHandler instanceof OpenProjectFailureEventHandler){
((OpenProjectFailureEventHandler) eventHandler).openProjectFailed(errorMsg);
}
} }
} }

View file

@ -9,14 +9,14 @@ import zutil.log.LogUtil;
import com.coder.client.session.ProjectMessageListener; import com.coder.client.session.ProjectMessageListener;
import com.coder.client.session.Session; import com.coder.client.session.Session;
import com.coder.client.session.SessionListener; import com.coder.client.session.SessionEventHandler;
import com.coder.server.message.CoderMessage; import com.coder.server.message.CoderMessage;
public class SessionHandler{ public class SessionHandler{
public static final Logger logger = LogUtil.getLogger(); public static final Logger logger = LogUtil.getLogger();
private Session session; private Session session;
private HashSet<SessionListener> sessionListeners = new HashSet<SessionListener>(); private HashSet<SessionEventHandler> sessionEventHandlers = new HashSet<SessionEventHandler>();
private HashSet<ProjectMessageListener> messageListeners = new HashSet<ProjectMessageListener>(); private HashSet<ProjectMessageListener> messageListeners = new HashSet<ProjectMessageListener>();
public boolean setupConnection(String url, int port){ public boolean setupConnection(String url, int port){
@ -28,13 +28,13 @@ public class SessionHandler{
for(ProjectMessageListener listener : messageListeners){ for(ProjectMessageListener listener : messageListeners){
session.addMessageListener(listener); session.addMessageListener(listener);
} }
for(SessionListener listener : sessionListeners){ for(SessionEventHandler eventHandler : sessionEventHandlers){
listener.sessionConnectionSuccess(); eventHandler.sessionConnectionSuccess();
} }
return true; return true;
}else{ }else{
for(SessionListener listener : sessionListeners){ for(SessionEventHandler eventHandler : sessionEventHandlers){
listener.sessionConnectionFailure(); eventHandler.sessionConnectionFailure();
} }
return false; return false;
} }
@ -46,14 +46,14 @@ public class SessionHandler{
}else{ }else{
boolean success = session.authenticate(username, clearTextPassword); boolean success = session.authenticate(username, clearTextPassword);
if(success){ if(success){
for(SessionListener listener : sessionListeners){ for(SessionEventHandler eventHandler : sessionEventHandlers){
listener.sessionAuthenticationSuccess(); eventHandler.sessionAuthenticationSuccess();
} }
session.start(); session.start();
return true; return true;
}else{ }else{
for(SessionListener listener : sessionListeners){ for(SessionEventHandler eventHandler : sessionEventHandlers){
listener.sessionAuthenticationFailure(); eventHandler.sessionAuthenticationFailure();
} }
return false; return false;
} }
@ -81,16 +81,16 @@ public class SessionHandler{
logger.info("closing session to server"); logger.info("closing session to server");
session.close(); session.close();
session = null; session = null;
for(SessionListener listener : sessionListeners){ for(SessionEventHandler eventHandler : sessionEventHandlers){
listener.sessionDisconnected(retry); eventHandler.sessionDisconnected(retry);
} }
}else{ }else{
logger.fine("cannot close current session: session already terminated"); logger.fine("cannot close current session: session already terminated");
} }
} }
public void addSessionListener(SessionListener listener){ public void addSessionEventHandler(SessionEventHandler eventHandler){
this.sessionListeners.add(listener); this.sessionEventHandlers.add(eventHandler);
} }
public void addMessageListener(ProjectMessageListener listener) { public void addMessageListener(ProjectMessageListener listener) {
@ -103,8 +103,8 @@ public class SessionHandler{
public void triggerAuthenticationCancel() { public void triggerAuthenticationCancel() {
if(session.isConnected() && !session.isAuthenticated()){ if(session.isConnected() && !session.isAuthenticated()){
closeCurrentSession(false); closeCurrentSession(false);
for(SessionListener listener : sessionListeners){ for(SessionEventHandler eventHandler : sessionEventHandlers){
listener.sessionAuthenticationCancel(); eventHandler.sessionAuthenticationCancel();
} }
}else{ }else{
logger.warning("Can only cancel a connected but not yet authenticated authentication. ignoring call"); logger.warning("Can only cancel a connected but not yet authenticated authentication. ignoring call");

View file

@ -16,7 +16,7 @@ import zutil.log.LogUtil;
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.project.OpenProjectEventHandler;
import com.coder.client.property.CheckBoxProperty; import com.coder.client.property.CheckBoxProperty;
import com.coder.client.property.CoderClientProperty; import com.coder.client.property.CoderClientProperty;
import com.coder.client.property.ComboBoxProperty; import com.coder.client.property.ComboBoxProperty;
@ -66,10 +66,11 @@ public class EditorWindow extends GuiWindow {
client.getProjectHandler().setProject(null); client.getProjectHandler().setProject(null);
return; return;
}else{ }else{
client.showOnStage(EditorWindow.this);
client.getProjectHandler().setProject(msg.name); 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 //handle name and description
fileTreeView.getRoot().setValue(msg.name); //set file tree root name to the project name fileTreeView.getRoot().setValue(msg.name); //set file tree root name to the project name
@ -93,6 +94,7 @@ public class EditorWindow extends GuiWindow {
List<String> fileList = msg.fileList; List<String> fileList = msg.fileList;
fileTreeView.getRoot().getChildren().clear(); fileTreeView.getRoot().getChildren().clear();
for(String filePath : fileList){ for(String filePath : fileList){
logger.finer("adding file \""+filePath+"\" to the file tree");
if(filePath.endsWith("/")){ if(filePath.endsWith("/")){
logger.warning("file: \"" + filePath + "\" in file list is a directory and not a file. Currently not supported. Ignoring entry"); logger.warning("file: \"" + filePath + "\" in file list is a directory and not a file. Currently not supported. Ignoring entry");
continue; continue;
@ -101,21 +103,48 @@ public class EditorWindow extends GuiWindow {
filePath = filePath.substring(1, filePath.length()); filePath = filePath.substring(1, filePath.length());
} }
TreeItem<String> tmpParent = fileTreeView.getRoot(); TreeItem<String> tmpParent = fileTreeView.getRoot();
for(String fileSplit : filePath.split("/")){ String[] filePathSpilt = filePath.split("/");
if(!tmpParent.getChildren().contains(fileSplit)){ for(int i = 0; i < filePathSpilt.length; ++i){
logger.finer("adding file/directory \""+fileSplit+"\" to directory \""+tmpParent+"\""); if(i < filePathSpilt.length-1){
TreeItem<String> tmpChild = new TreeItem<String>(fileSplit); String directoryName = filePathSpilt[i];
tmpParent = tmpChild; 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<String> tmpChild = new TreeItem<String>(directoryName);
tmpParent.getChildren().add(tmpChild);
tmpParent = tmpChild;
}else{
int index = tmpParent.getChildren().indexOf(directoryName);
tmpParent = tmpParent.getChildren().get(index);
}
}else{ }else{
int index = tmpParent.getChildren().indexOf(fileSplit); String fileName = filePathSpilt[i];
tmpParent = tmpParent.getChildren().get(index); 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<String> tmpChild = new TreeItem<String>(fileName);
tmpParent.getChildren().add(tmpChild);
tmpParent = tmpChild;
}else{
int index = tmpParent.getChildren().indexOf(fileName);
tmpParent = tmpParent.getChildren().get(index);
}
} }
} }
} }
}catch(Exception e){ }catch(Exception e){
logger.log(Level.FINE, "could not load the project", e); logger.log(Level.SEVERE, "exception while load the project", e);
client.getProjectHandler().triggerOpenProjectFailure("ERROR: failure while loading project"); 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() { client.getProjectHandler().addprojectEventHandler(new OpenProjectEventHandler() {
@Override
public void selectProject() {
}
@Override
public void openProjectFailed(String errorMsg) {
}
@Override @Override
public void openProject(String projectName) { public void openProject(String projectName) {
CoderMessage msg = new CoderMessage(); CoderMessage msg = new CoderMessage();
@ -146,10 +167,6 @@ public class EditorWindow extends GuiWindow {
msg.ProjectReq.name = projectName; msg.ProjectReq.name = projectName;
client.getSessionHandler().sendMessage(msg); client.getSessionHandler().sendMessage(msg);
} }
@Override
public void createNewProject() {
}
}); });
} }
@ -179,7 +196,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().triggerSelectProject(); client.getProjectHandler().triggerSelectProjectEvent();
} }
@FXML @FXML
@ -204,7 +221,7 @@ public class EditorWindow extends GuiWindow {
} }
}); });
TreeItem<String> root = new TreeItem<String>("root"); TreeItem<String> root = new TreeItem<String>("/");
root.setExpanded(true); root.setExpanded(true);
fileTreeView.setRoot(root); fileTreeView.setRoot(root);

View file

@ -18,7 +18,7 @@ import javafx.scene.input.KeyEvent;
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.session.SessionListener; import com.coder.client.session.SessionEventHandler;
public class LoginDialog extends GuiWindow { public class LoginDialog extends GuiWindow {
public static final Logger logger = LogUtil.getLogger(); public static final Logger logger = LogUtil.getLogger();
@ -33,7 +33,7 @@ public class LoginDialog extends GuiWindow {
public LoginDialog(final CoderClient client) throws IOException { public LoginDialog(final CoderClient client) throws IOException {
super(LoginDialog.class.getResource("LoginDialog.fxml")); super(LoginDialog.class.getResource("LoginDialog.fxml"));
this.client = client; this.client = client;
client.getSessionHandler().addSessionListener(new SessionListener() { client.getSessionHandler().addSessionEventHandler(new SessionEventHandler() {
@Override @Override
public void sessionConnectionSuccess() { public void sessionConnectionSuccess() {
logger.fine("session connection successfull, will show the login dialog on the main stage"); logger.fine("session connection successfull, will show the login dialog on the main stage");

View file

@ -26,7 +26,7 @@ import zutil.log.LogUtil;
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.project.CreateNewProjectEventHandler;
import com.coder.client.session.ProjectTypeRspMsgListener; import com.coder.client.session.ProjectTypeRspMsgListener;
public class NewProjectDialog extends GuiWindow { public class NewProjectDialog extends GuiWindow {
@ -59,19 +59,7 @@ public class NewProjectDialog extends GuiWindow {
} }
}); });
client.getProjectHandler().addprojectListener(new ProjectListener() { client.getProjectHandler().addprojectEventHandler(new CreateNewProjectEventHandler() {
@Override
public void selectProject() {
}
@Override
public void openProjectFailed(String errorMsg) {
}
@Override
public void openProject(String projectName) {
}
@Override @Override
public void createNewProject() { public void createNewProject() {
setErrorMessage(""); setErrorMessage("");
@ -79,6 +67,7 @@ public class NewProjectDialog extends GuiWindow {
client.showOnStage(NewProjectDialog.this); client.showOnStage(NewProjectDialog.this);
} }
}); });
} }
@Override @Override
@ -130,7 +119,7 @@ public class NewProjectDialog extends GuiWindow {
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().triggerSelectProject(); client.getProjectHandler().triggerSelectProjectEvent();
} }
@FXML @FXML

View file

@ -26,10 +26,11 @@ 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.project.OpenProjectFailureEventHandler;
import com.coder.client.project.SelectProjectEventHandler;
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.client.session.SessionListener; import com.coder.client.session.SessionEventHandler;
import com.coder.server.message.CoderMessage; import com.coder.server.message.CoderMessage;
import com.coder.server.message.ProjectListData; import com.coder.server.message.ProjectListData;
import com.coder.server.message.ProjectListReqMsg; import com.coder.server.message.ProjectListReqMsg;
@ -51,7 +52,7 @@ public class SelectProjectDialog extends GuiWindow {
super(SelectProjectDialog.class.getResource("SelectProjectDialog.fxml")); super(SelectProjectDialog.class.getResource("SelectProjectDialog.fxml"));
this.client = client; this.client = client;
client.getSessionHandler().addSessionListener(new SessionListener() { client.getSessionHandler().addSessionEventHandler(new SessionEventHandler() {
@Override @Override
public void sessionDisconnected(boolean retryToEstablishConnection) { public void sessionDisconnected(boolean retryToEstablishConnection) {
@ -97,18 +98,22 @@ public class SelectProjectDialog extends GuiWindow {
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);
setErrorMessage("ERROR: " + msg.error); setErrorMessage("ERROR: " + msg.error);
client.showOnStage(SelectProjectDialog.this);
}else{ }else{
setErrorMessage(""); setErrorMessage("");
} }
} }
}); });
client.getProjectHandler().addprojectListener(new ProjectListener() { client.getProjectHandler().addprojectEventHandler(new SelectProjectEventHandler() {
@Override @Override
public void selectProject() { public void selectProject() {
logger.fine("select project requested, will show the select project dialog on the main stage"); logger.fine("select project requested, will show the select project dialog on the main stage");
client.showOnStage(SelectProjectDialog.this); client.showOnStage(SelectProjectDialog.this);
} }
});
client.getProjectHandler().addprojectEventHandler(new OpenProjectFailureEventHandler() {
@Override @Override
public void openProjectFailed(String errorMsg) { public void openProjectFailed(String errorMsg) {
logger.fine("open project failed, setting error message to \""+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"); logger.fine("open project failed, will show the select project dialog on the main stage");
client.showOnStage(SelectProjectDialog.this); client.showOnStage(SelectProjectDialog.this);
} }
@Override
public void openProject(String projectName) {
}
@Override
public void createNewProject() {
}
}); });
} }
@Override @Override
@ -226,7 +224,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().triggerOpenProject(); client.getProjectHandler().triggerOpenProjectEvent();
} }
public void clearProjectList(){ public void clearProjectList(){

View file

@ -30,9 +30,7 @@ import zutil.net.ssdp.StandardSSDPInfo;
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.session.ProjectRspMsgListener; import com.coder.client.session.SessionEventHandler;
import com.coder.client.session.SessionListener;
import com.coder.server.message.ProjectRspMsg;
public class SelectServerDialog extends GuiWindow { public class SelectServerDialog extends GuiWindow {
public static final Logger logger = LogUtil.getLogger(); public static final Logger logger = LogUtil.getLogger();
@ -50,7 +48,7 @@ public class SelectServerDialog extends GuiWindow {
public SelectServerDialog(final CoderClient client) throws IOException { public SelectServerDialog(final CoderClient client) throws IOException {
super(SelectServerDialog.class.getResource("SelectServerDialog.fxml")); super(SelectServerDialog.class.getResource("SelectServerDialog.fxml"));
this.client = client; this.client = client;
client.getSessionHandler().addSessionListener(new SessionListener() { client.getSessionHandler().addSessionEventHandler(new SessionEventHandler() {
@Override @Override
public void sessionConnectionSuccess() { public void sessionConnectionSuccess() {
setErrorMessage(""); 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() { client.getSSDPHandler().setSSDPServiceListener(new SSDPServiceListener() {
@Override @Override
public void newService(final StandardSSDPInfo service) { public void newService(final StandardSSDPInfo service) {

View file

@ -0,0 +1,5 @@
package com.coder.client.project;
public interface CreateNewProjectEventHandler extends ProjectEventHandler {
public void createNewProject();
}

View file

@ -0,0 +1,5 @@
package com.coder.client.project;
public interface OpenProjectEventHandler extends ProjectEventHandler {
public void openProject(String projectName);
}

View file

@ -0,0 +1,5 @@
package com.coder.client.project;
public interface OpenProjectFailureEventHandler extends ProjectEventHandler {
public void openProjectFailed(String errorMsg);
}

View file

@ -0,0 +1,5 @@
package com.coder.client.project;
public interface ProjectEventHandler {
}

View file

@ -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);
}

View file

@ -0,0 +1,5 @@
package com.coder.client.project;
public interface SelectProjectEventHandler extends ProjectEventHandler {
public void selectProject();
}

View file

@ -1,7 +1,7 @@
package com.coder.client.session; package com.coder.client.session;
public interface SessionListener { public interface SessionEventHandler {
void sessionConnectionSuccess(); void sessionConnectionSuccess();