ProjectHandler, SessionHandler and SSDPHandler is now singletons

This commit is contained in:
dcollin 2015-11-17 15:48:04 +01:00
parent 825eb124cb
commit ecda338715
9 changed files with 116 additions and 66 deletions

View file

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

View file

@ -14,8 +14,20 @@ import zutil.log.LogUtil;
public class ProjectHandler {
public static final Logger logger = LogUtil.getLogger();
private HashSet<ProjectEventHandler> projectEventHandlers = new HashSet<ProjectEventHandler>();
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;

View file

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

View file

@ -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<SessionEventHandler> sessionEventHandlers = new HashSet<SessionEventHandler>();
private HashSet<ProjectMessageListener> messageListeners = new HashSet<ProjectMessageListener>();
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();

View file

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

View file

@ -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){

View file

@ -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

View file

@ -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<ProjectListItem> projectList;
private CoderClient client;
private SessionHandler sessionHandler;
private ProjectHandler projectHandler;
@FXML private ListView<ProjectListItem> 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(){

View file

@ -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<ServerListItem> 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<StandardSSDPInfo> serverList = client.getSSDPHandler().requestService("coder:discover");
List<StandardSSDPInfo> 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);
}