diff --git a/src/com/coder/client/CoderClient.java b/src/com/coder/client/CoderClient.java index 90354d1..c04b447 100755 --- a/src/com/coder/client/CoderClient.java +++ b/src/com/coder/client/CoderClient.java @@ -21,9 +21,6 @@ import javafx.stage.Stage; public class CoderClient extends Application{ public static final Logger logger = LogUtil.getLogger(); - private SessionHandler sessionHandler; - private ProjectHandler projectHandler; - private SSDPHandler ssdpHandler; //GUI elements private Stage mainStage; @@ -48,15 +45,10 @@ public class CoderClient extends Application{ LogUtil.setFormatter("zutil", formatter); LogUtil.setGlobalFormatter(formatter); - //setup handlers - try{ - this.sessionHandler = new SessionHandler(); - this.projectHandler = new ProjectHandler(); - this.ssdpHandler = new SSDPHandler(); - }catch(Exception e){ - logger.log(Level.SEVERE, "could not load all handlers", e); - exit(); - } + //setup handler instances + SessionHandler.getInstance(); + ProjectHandler.getInstance(); + SSDPHandler.getInstance(); //setup GUI elements this.mainStage = mainStage; @@ -88,7 +80,7 @@ public class CoderClient extends Application{ selectServerDialog.setServerPort(-1); } }else if(key.equals("project")){ - projectHandler.setProject(value); + ProjectHandler.getInstance().setProject(value); } } @@ -118,18 +110,5 @@ public class CoderClient extends Application{ Platform.exit(); System.exit(0); } - - - public SessionHandler getSessionHandler() { - return this.sessionHandler; - } - - public ProjectHandler getProjectHandler(){ - return this.projectHandler; - } - - public SSDPHandler getSSDPHandler(){ - return this.ssdpHandler; - } } diff --git a/src/com/coder/client/ProjectHandler.java b/src/com/coder/client/ProjectHandler.java index d6d05a1..41d7db7 100644 --- a/src/com/coder/client/ProjectHandler.java +++ b/src/com/coder/client/ProjectHandler.java @@ -14,8 +14,20 @@ import zutil.log.LogUtil; public class ProjectHandler { public static final Logger logger = LogUtil.getLogger(); private HashSet projectEventHandlers = new HashSet(); + private static ProjectHandler instance = null; private String projectName = null; + + private ProjectHandler(){ + + } + + public static ProjectHandler getInstance(){ + if(instance == null){ + instance = new ProjectHandler(); + } + return instance; + } public void triggerCreateNewProject() { projectName = null; diff --git a/src/com/coder/client/SSDPHandler.java b/src/com/coder/client/SSDPHandler.java index 13ee898..4719296 100644 --- a/src/com/coder/client/SSDPHandler.java +++ b/src/com/coder/client/SSDPHandler.java @@ -11,14 +11,22 @@ import zutil.net.ssdp.StandardSSDPInfo; public class SSDPHandler { public static final Logger logger = LogUtil.getLogger(); + private static SSDPHandler instance = null; private SSDPClient ssdpClient; - public SSDPHandler() throws IOException{ + private SSDPHandler() throws IOException{ ssdpClient = new SSDPClient(); ssdpClient.start(); } + public static SSDPHandler getInstance() throws IOException{ + if(instance == null){ + instance = new SSDPHandler(); + } + return instance; + } + public void setSSDPServiceListener(SSDPServiceListener listener){ ssdpClient.setListener(listener); } diff --git a/src/com/coder/client/SessionHandler.java b/src/com/coder/client/SessionHandler.java index ad59b15..ce7df83 100644 --- a/src/com/coder/client/SessionHandler.java +++ b/src/com/coder/client/SessionHandler.java @@ -14,11 +14,23 @@ import com.coder.server.message.CoderMessage; public class SessionHandler{ public static final Logger logger = LogUtil.getLogger(); + private static SessionHandler instance = null; private Session session; private HashSet sessionEventHandlers = new HashSet(); private HashSet messageListeners = new HashSet(); + private SessionHandler(){ + + } + + public static SessionHandler getInstance(){ + if(instance == null){ + instance = new SessionHandler(); + } + return instance; + } + public boolean setupConnection(String url, int port){ if(session != null && session.isConnected()){ session.close(); diff --git a/src/com/coder/client/gui/editor/EditorWindow.java b/src/com/coder/client/gui/editor/EditorWindow.java index 84b882c..eac3469 100644 --- a/src/com/coder/client/gui/editor/EditorWindow.java +++ b/src/com/coder/client/gui/editor/EditorWindow.java @@ -14,6 +14,8 @@ import org.controlsfx.property.editor.PropertyEditor; import zutil.log.LogUtil; import com.coder.client.CoderClient; +import com.coder.client.ProjectHandler; +import com.coder.client.SessionHandler; import com.coder.client.gui.GuiWindow; import com.coder.client.project.OpenProjectEventHandler; import com.coder.client.property.CoderClientProperty; @@ -42,6 +44,9 @@ import javafx.util.Callback; public class EditorWindow extends GuiWindow { public static final Logger logger = LogUtil.getLogger(); private CoderClient client; + + private SessionHandler sessionHandler; + private ProjectHandler projectHandler; @FXML private TreeView fileTreeView; @FXML private TextArea editTextArea; @@ -57,17 +62,20 @@ public class EditorWindow extends GuiWindow { super(EditorWindow.class.getResource("EditorWindow.fxml")); this.client = client; - client.getSessionHandler().addMessageListener(new ProjectRspMsgListener() { + this.sessionHandler = SessionHandler.getInstance(); + this.projectHandler = ProjectHandler.getInstance(); + + sessionHandler.addMessageListener(new ProjectRspMsgListener() { @Override public void messageReceived(final ProjectRspMsg msg) { 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); + projectHandler.setProject(null); return; }else{ - client.getProjectHandler().setProject(msg.name); + projectHandler.setProject(msg.name); } logger.info("loading project \""+msg.name+"\""); @@ -148,14 +156,14 @@ public class EditorWindow extends GuiWindow { } }catch(Exception e){ logger.log(Level.SEVERE, "exception while load the project", e); - client.getProjectHandler().triggerOpenProjectFailureEvent("ERROR: failed to loading project"); + projectHandler.triggerOpenProjectFailureEvent("ERROR: failed to loading project"); } client.showOnStage(EditorWindow.this); } }); - client.getSessionHandler().addMessageListener(new ProjectTypeRspMsgListener() { + sessionHandler.addMessageListener(new ProjectTypeRspMsgListener() { @Override public void messageReceived(ProjectTypeRspMsg msg) { for(String type : msg.keySet()){ @@ -166,7 +174,7 @@ public class EditorWindow extends GuiWindow { } }); - client.getSessionHandler().addMessageListener(new FileRspMsgListener(){ + sessionHandler.addMessageListener(new FileRspMsgListener(){ @Override public void messageReceived(FileRspMsg msg) { if(msg.error != null || msg.path == null){ @@ -188,13 +196,13 @@ public class EditorWindow extends GuiWindow { } }); - client.getProjectHandler().addprojectEventHandler(new OpenProjectEventHandler() { + projectHandler.addprojectEventHandler(new OpenProjectEventHandler() { @Override public void openProject(String projectName) { CoderMessage msg = new CoderMessage(); msg.ProjectReq = new ProjectReqMsg(); msg.ProjectReq.name = projectName; - client.getSessionHandler().sendMessage(msg); + sessionHandler.sendMessage(msg); } }); @@ -224,8 +232,8 @@ public class EditorWindow extends GuiWindow { @FXML protected void changeProject(ActionEvent event){ - client.getProjectHandler().setProject(null); - client.getProjectHandler().triggerSelectProjectEvent(); + projectHandler.setProject(null); + projectHandler.triggerSelectProjectEvent(); } @FXML @@ -237,7 +245,7 @@ public class EditorWindow extends GuiWindow { CoderMessage msg = new CoderMessage(); msg.ProjectTypeReq = new ProjectTypeReqMsg(); msg.ProjectTypeReq.type = type; - client.getSessionHandler().sendMessage(msg); + sessionHandler.sendMessage(msg); } private void setupFileTreeView(){ @@ -257,7 +265,7 @@ public class EditorWindow extends GuiWindow { CoderMessage msg = new CoderMessage(); msg.FileReq = new FileReqMsg(); msg.FileReq.path = file.getFullPath(); - client.getSessionHandler().sendMessage(msg); + sessionHandler.sendMessage(msg); } } } diff --git a/src/com/coder/client/gui/login/LoginDialog.java b/src/com/coder/client/gui/login/LoginDialog.java index 736748f..6de89a0 100644 --- a/src/com/coder/client/gui/login/LoginDialog.java +++ b/src/com/coder/client/gui/login/LoginDialog.java @@ -17,6 +17,7 @@ import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; import com.coder.client.CoderClient; +import com.coder.client.SessionHandler; import com.coder.client.gui.GuiWindow; import com.coder.client.session.SessionEventHandler; @@ -24,6 +25,8 @@ public class LoginDialog extends GuiWindow { public static final Logger logger = LogUtil.getLogger(); private CoderClient client; + private SessionHandler sessionHandler; + @FXML private TextField usernameTextField; @FXML private PasswordField passwordPasswordField; @FXML private Button cancelButton; @@ -33,7 +36,10 @@ public class LoginDialog extends GuiWindow { public LoginDialog(final CoderClient client) throws IOException { super(LoginDialog.class.getResource("LoginDialog.fxml")); this.client = client; - client.getSessionHandler().addSessionEventHandler(new SessionEventHandler() { + + this.sessionHandler = SessionHandler.getInstance(); + + sessionHandler.addSessionEventHandler(new SessionEventHandler() { @Override public void sessionConnectionSuccess() { logger.fine("session connection successfull, will show the login dialog on the main stage"); @@ -93,7 +99,7 @@ public class LoginDialog extends GuiWindow { protected void login(ActionEvent event){ logger.fine("login button triggered"); //authenticate session - boolean authenticated = client.getSessionHandler().authenticateSession(usernameTextField.getText(), passwordPasswordField.getText().toCharArray()); + boolean authenticated = sessionHandler.authenticateSession(usernameTextField.getText(), passwordPasswordField.getText().toCharArray()); if(!authenticated){ logger.severe("Authentication failed: wrong username or password"); } @@ -102,7 +108,7 @@ public class LoginDialog extends GuiWindow { @FXML protected void cancel(ActionEvent event){ logger.fine("cancel button triggered"); - client.getSessionHandler().triggerAuthenticationCancel(); + sessionHandler.triggerAuthenticationCancel(); } public void setUsername(String username){ diff --git a/src/com/coder/client/gui/newProject/NewProjectDialog.java b/src/com/coder/client/gui/newProject/NewProjectDialog.java index 6419bb5..f6a7802 100755 --- a/src/com/coder/client/gui/newProject/NewProjectDialog.java +++ b/src/com/coder/client/gui/newProject/NewProjectDialog.java @@ -25,6 +25,8 @@ import javafx.scene.input.KeyEvent; import zutil.log.LogUtil; import com.coder.client.CoderClient; +import com.coder.client.ProjectHandler; +import com.coder.client.SessionHandler; import com.coder.client.gui.GuiWindow; import com.coder.client.project.CreateNewProjectEventHandler; import com.coder.client.session.ProjectTypeRspMsgListener; @@ -33,6 +35,9 @@ public class NewProjectDialog extends GuiWindow { public static final Logger logger = LogUtil.getLogger(); private CoderClient client; + private SessionHandler sessionHandler; + private ProjectHandler projectHandler; + @FXML private Button createButton; @FXML private Button cancelButton; @FXML private TextField projectNameTextField; @@ -48,7 +53,10 @@ public class NewProjectDialog extends GuiWindow { projectTypeComboBox.setItems(projectTypeList); this.client = client; - client.getSessionHandler().addMessageListener(new ProjectTypeRspMsgListener() { + this.sessionHandler = SessionHandler.getInstance(); + this.projectHandler = ProjectHandler.getInstance(); + + sessionHandler.addMessageListener(new ProjectTypeRspMsgListener() { @Override public void messageReceived(final ProjectTypeRspMsg msg) { logger.fine("a ProjectTypeRspMsg received"); @@ -59,7 +67,7 @@ public class NewProjectDialog extends GuiWindow { } }); - client.getProjectHandler().addprojectEventHandler(new CreateNewProjectEventHandler() { + projectHandler.addprojectEventHandler(new CreateNewProjectEventHandler() { @Override public void createNewProject() { setErrorMessage(""); @@ -91,7 +99,7 @@ public class NewProjectDialog extends GuiWindow { private void sendProjectTypeReqMsg(){ CoderMessage msg = new CoderMessage(); msg.ProjectTypeReq = new ProjectTypeReqMsg(); - client.getSessionHandler().sendMessage(msg); + sessionHandler.sendMessage(msg); } @FXML @@ -111,15 +119,15 @@ public class NewProjectDialog extends GuiWindow { msg.ProjectCreateReq.name = projectNameTextField.getText(); msg.ProjectCreateReq.type = projectTypeComboBox.getValue(); msg.ProjectCreateReq.description = projectDescriptionTextField.getText(); - client.getSessionHandler().sendMessage(msg); + sessionHandler.sendMessage(msg); } @FXML protected void cancel(ActionEvent event){ logger.fine("cancel button triggered"); - client.getProjectHandler().setProject(null); - client.getProjectHandler().triggerSelectProjectEvent(); + projectHandler.setProject(null); + projectHandler.triggerSelectProjectEvent(); } @FXML diff --git a/src/com/coder/client/gui/selectProject/SelectProjectDialog.java b/src/com/coder/client/gui/selectProject/SelectProjectDialog.java index 3781530..dc792d6 100644 --- a/src/com/coder/client/gui/selectProject/SelectProjectDialog.java +++ b/src/com/coder/client/gui/selectProject/SelectProjectDialog.java @@ -25,6 +25,8 @@ import javafx.scene.input.MouseEvent; import javafx.util.Callback; import com.coder.client.CoderClient; +import com.coder.client.ProjectHandler; +import com.coder.client.SessionHandler; import com.coder.client.gui.GuiWindow; import com.coder.client.project.OpenProjectFailureEventHandler; import com.coder.client.project.SelectProjectEventHandler; @@ -41,6 +43,9 @@ public class SelectProjectDialog extends GuiWindow { public static final Logger logger = LogUtil.getLogger(); private ObservableList projectList; private CoderClient client; + + private SessionHandler sessionHandler; + private ProjectHandler projectHandler; @FXML private ListView projectListView; @FXML private Button newProjectButton; @@ -52,7 +57,10 @@ public class SelectProjectDialog extends GuiWindow { super(SelectProjectDialog.class.getResource("SelectProjectDialog.fxml")); this.client = client; - client.getSessionHandler().addSessionEventHandler(new SessionEventHandler() { + this.sessionHandler = SessionHandler.getInstance(); + this.projectHandler = projectHandler.getInstance(); + + sessionHandler.addSessionEventHandler(new SessionEventHandler() { @Override public void sessionDisconnected(boolean retryToEstablishConnection) { @@ -80,7 +88,7 @@ public class SelectProjectDialog extends GuiWindow { } }); - client.getSessionHandler().addMessageListener(new ProjectListRspMsgListener() { + sessionHandler.addMessageListener(new ProjectListRspMsgListener() { @Override public void messageReceived(final ProjectListRspMsg msg) { logger.fine("a ProjectListRsp received"); @@ -91,7 +99,7 @@ public class SelectProjectDialog extends GuiWindow { } }); - client.getSessionHandler().addMessageListener(new ProjectRspMsgListener() { + sessionHandler.addMessageListener(new ProjectRspMsgListener() { @Override public void messageReceived(final ProjectRspMsg msg) { logger.fine("a ProjectRspMsg received"); @@ -105,7 +113,7 @@ public class SelectProjectDialog extends GuiWindow { } }); - client.getProjectHandler().addprojectEventHandler(new SelectProjectEventHandler() { + projectHandler.addprojectEventHandler(new SelectProjectEventHandler() { @Override public void selectProject() { logger.fine("select project requested, will show the select project dialog on the main stage"); @@ -113,7 +121,7 @@ public class SelectProjectDialog extends GuiWindow { } }); - client.getProjectHandler().addprojectEventHandler(new OpenProjectFailureEventHandler() { + projectHandler.addprojectEventHandler(new OpenProjectFailureEventHandler() { @Override public void openProjectFailed(String errorMsg) { logger.fine("open project failed, setting error message to \""+errorMsg+"\""); @@ -128,10 +136,10 @@ public class SelectProjectDialog extends GuiWindow { @Override public void willShow() { clearProjectList(); - if(!client.getProjectHandler().isProjectSet()){ + if(!projectHandler.isProjectSet()){ sendProjectListReq(); }else{ - logger.fine("will outofire the open button since all required parameters are already set ("+client.getProjectHandler()+")"); + logger.fine("will outofire the open button since all required parameters are already set ("+projectHandler+")"); openButton.setDisable(false); openButton.fire(); } @@ -172,7 +180,7 @@ public class SelectProjectDialog extends GuiWindow { //send a request for a new list of projects CoderMessage msg = new CoderMessage(); msg.ProjectListReq = new ProjectListReqMsg(); - client.getSessionHandler().sendMessage(msg); + sessionHandler.sendMessage(msg); } @FXML @@ -201,13 +209,13 @@ public class SelectProjectDialog extends GuiWindow { @FXML protected void newProject(ActionEvent event){ logger.fine("new project button triggered"); - client.getProjectHandler().triggerCreateNewProject(); + projectHandler.triggerCreateNewProject(); } @FXML protected void cancel(ActionEvent event){ logger.fine("cancel button triggered"); - client.getSessionHandler().closeCurrentSession(false); + sessionHandler.closeCurrentSession(false); } @FXML @@ -220,11 +228,11 @@ public class SelectProjectDialog extends GuiWindow { @FXML protected void open(ActionEvent event){ logger.fine("open button triggered"); - if(!client.getProjectHandler().isProjectSet()){ + if(!projectHandler.isProjectSet()){ ProjectListItem selectedItem = projectListView.getSelectionModel().getSelectedItem(); - client.getProjectHandler().setProject(selectedItem.getName()); + projectHandler.setProject(selectedItem.getName()); } - client.getProjectHandler().triggerOpenProjectEvent(); + projectHandler.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 4bc3840..2ec2068 100644 --- a/src/com/coder/client/gui/selectServer/SelectServerDialog.java +++ b/src/com/coder/client/gui/selectServer/SelectServerDialog.java @@ -29,6 +29,8 @@ import zutil.net.ssdp.SSDPClient.SSDPServiceListener; import zutil.net.ssdp.StandardSSDPInfo; import com.coder.client.CoderClient; +import com.coder.client.SSDPHandler; +import com.coder.client.SessionHandler; import com.coder.client.gui.GuiWindow; import com.coder.client.session.SessionEventHandler; @@ -37,6 +39,9 @@ public class SelectServerDialog extends GuiWindow { private ObservableList serverList; private CoderClient client; + private SSDPHandler ssdpHandler; + private SessionHandler sessionHandler; + private String address = null; private int port = -1; @@ -49,7 +54,11 @@ public class SelectServerDialog extends GuiWindow { public SelectServerDialog(final CoderClient client) throws IOException { super(SelectServerDialog.class.getResource("SelectServerDialog.fxml")); this.client = client; - client.getSessionHandler().addSessionEventHandler(new SessionEventHandler() { + + this.ssdpHandler = SSDPHandler.getInstance(); + this.sessionHandler = SessionHandler.getInstance(); + + sessionHandler.addSessionEventHandler(new SessionEventHandler() { @Override public void sessionConnectionSuccess() { setErrorMessage(""); @@ -91,7 +100,7 @@ public class SelectServerDialog extends GuiWindow { } }); - client.getSSDPHandler().setSSDPServiceListener(new SSDPServiceListener() { + ssdpHandler.setSSDPServiceListener(new SSDPServiceListener() { @Override public void newService(final StandardSSDPInfo service) { Platform.runLater(new Runnable() { @@ -116,7 +125,7 @@ public class SelectServerDialog extends GuiWindow { connectButton.fire(); }else{ logger.fine("sending a SSDP request for local servers"); - List serverList = client.getSSDPHandler().requestService("coder:discover"); + List serverList = ssdpHandler.requestService("coder:discover"); for(StandardSSDPInfo server : serverList){ addServerToList(server.getInetAddress().getHostAddress(), 1337); } @@ -190,14 +199,14 @@ public class SelectServerDialog extends GuiWindow { @FXML protected void refresh(ActionEvent event){ logger.fine("refresh button triggered"); - client.getSSDPHandler().requestService("coder:discover"); + ssdpHandler.requestService("coder:discover"); } @FXML protected void connect(ActionEvent event){ logger.fine("connect button triggered"); //connect session - boolean success = client.getSessionHandler().setupConnection(address, port); + boolean success = sessionHandler.setupConnection(address, port); if(!success){ logger.severe("Could not setup a connection to " + address + ":" + port); }