Refactoring: moving more GUI logic to each controller class

-Adding a handler for SSDP
-CoderClient giving control to each controller to be able to show itself on the main stage
This commit is contained in:
dcollin 2015-11-13 13:25:36 +01:00
parent 02efc6c22f
commit 09d15b4a80
12 changed files with 244 additions and 243 deletions

View file

@ -11,7 +11,6 @@ import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public abstract class GuiWindow implements Initializable{
public static final Logger logger = LogUtil.getLogger();
@ -28,27 +27,18 @@ public abstract class GuiWindow implements Initializable{
scene = new Scene((Parent)loader.load());
}
/**
* show on the given stage
* @param stage The stage to show on
*/
public void showOnStage(Stage stage){
stage.setScene(scene);
stage.setTitle(getTitle());
logger.fine("about to show " + getDescriptiveName() + " on stage");
willShow();
stage.show();
logger.fine("showing " + getDescriptiveName());
public Scene getScene(){
return this.scene;
}
protected abstract String getDescriptiveName();
public abstract String getDescriptiveName();
protected abstract String getTitle();
public abstract String getTitle();
/**
* Called every time before showed on stage
*/
protected abstract void willShow();
public abstract void willShow();
/**
* Will be called once when created

View file

@ -16,12 +16,14 @@ 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.property.CheckBoxProperty;
import com.coder.client.property.CoderClientProperty;
import com.coder.client.property.ComboBoxProperty;
import com.coder.client.session.ProjectRspMsgListener;
import com.coder.client.session.ProjectTypeRspMsgListener;
import com.coder.server.message.CoderMessage;
import com.coder.server.message.ProjectReqMsg;
import com.coder.server.message.ProjectRspMsg;
import com.coder.server.message.ProjectTypeReqMsg;
import com.coder.server.message.ProjectTypeRspMsg;
@ -53,6 +55,7 @@ public class EditorWindow extends GuiWindow {
public EditorWindow(final CoderClient client) throws IOException{
super(EditorWindow.class.getResource("EditorWindow.fxml"));
this.client = client;
client.getSessionHandler().addMessageListener(new ProjectRspMsgListener() {
@Override
public void messageReceived(final ProjectRspMsg msg) {
@ -63,6 +66,7 @@ public class EditorWindow extends GuiWindow {
client.getProjectHandler().setProject(null);
return;
}else{
client.showOnStage(EditorWindow.this);
client.getProjectHandler().setProject(msg.name);
}
@ -114,6 +118,7 @@ public class EditorWindow extends GuiWindow {
}
}
});
client.getSessionHandler().addMessageListener(new ProjectTypeRspMsgListener() {
@Override
public void messageReceived(ProjectTypeRspMsg msg) {
@ -124,6 +129,29 @@ public class EditorWindow extends GuiWindow {
}
}
});
client.getProjectHandler().addprojectListener(new ProjectListener() {
@Override
public void selectProject() {
}
@Override
public void openProjectFailed(String errorMsg) {
}
@Override
public void openProject(String projectName) {
CoderMessage msg = new CoderMessage();
msg.ProjectReq = new ProjectReqMsg();
msg.ProjectReq.name = projectName;
client.getSessionHandler().sendMessage(msg);
}
@Override
public void createNewProject() {
}
});
}
@Override
@ -134,7 +162,7 @@ public class EditorWindow extends GuiWindow {
}
@Override
protected void willShow(){
public void willShow(){
}
@ -209,7 +237,7 @@ public class EditorWindow extends GuiWindow {
}
@Override
protected String getTitle() {
public String getTitle() {
return "Coder Client";
}
@ -219,7 +247,7 @@ public class EditorWindow extends GuiWindow {
}
@Override
protected String getDescriptiveName() {
public String getDescriptiveName() {
return "Editor Window";
}

View file

@ -36,7 +36,8 @@ public class LoginDialog extends GuiWindow {
client.getSessionHandler().addSessionListener(new SessionListener() {
@Override
public void sessionConnectionSuccess() {
logger.fine("session connection successfull, will show the login dialog on the main stage");
client.showOnStage(LoginDialog.this);
}
@Override
public void sessionDisconnected(boolean tryToEstablishConnection) {
@ -67,7 +68,7 @@ public class LoginDialog extends GuiWindow {
}
@Override
protected void willShow(){
public void willShow(){
passwordPasswordField.setText("");
if( (errorLabel.getText() == null || (errorLabel.getText() != null && errorLabel.getText().isEmpty())) && usernameTextField.getText() != null && !usernameTextField.getText().isEmpty()){
passwordPasswordField.requestFocus();
@ -101,7 +102,7 @@ public class LoginDialog extends GuiWindow {
@FXML
protected void cancel(ActionEvent event){
logger.fine("cancel button triggered");
client.getSessionHandler().authenticationCancel();
client.getSessionHandler().triggerAuthenticationCancel();
}
public void setUsername(String username){
@ -109,7 +110,7 @@ public class LoginDialog extends GuiWindow {
}
@Override
protected String getTitle() {
public String getTitle() {
return "Login";
}
@ -118,7 +119,7 @@ public class LoginDialog extends GuiWindow {
}
@Override
protected String getDescriptiveName() {
public String getDescriptiveName() {
return "Login Dialog";
}

View file

@ -6,6 +6,7 @@ import java.util.ResourceBundle;
import java.util.logging.Logger;
import com.coder.server.message.CoderMessage;
import com.coder.server.message.ProjectCreateReqMsg;
import com.coder.server.message.ProjectTypeReqMsg;
import com.coder.server.message.ProjectTypeRspMsg;
import com.coder.server.message.SupportedProperties;
@ -25,6 +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.session.ProjectTypeRspMsgListener;
public class NewProjectDialog extends GuiWindow {
@ -40,11 +42,12 @@ public class NewProjectDialog extends GuiWindow {
private ObservableList<String> projectTypeList = null;
public NewProjectDialog(CoderClient client) throws IOException {
public NewProjectDialog(final CoderClient client) throws IOException {
super(NewProjectDialog.class.getResource("NewProjectDialog.fxml"));
projectTypeList = FXCollections.observableArrayList();
projectTypeComboBox.setItems(projectTypeList);
this.client = client;
client.getSessionHandler().addMessageListener(new ProjectTypeRspMsgListener() {
@Override
public void messageReceived(final ProjectTypeRspMsg msg) {
@ -55,10 +58,31 @@ 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) {
}
@Override
public void createNewProject() {
setErrorMessage("");
logger.fine("new project requested, will show the new project dialog on the main stage");
client.showOnStage(NewProjectDialog.this);
}
});
}
@Override
protected void willShow() {
public void willShow() {
clearProjectTypeList();
sendProjectTypeReqMsg();
@ -93,7 +117,13 @@ public class NewProjectDialog extends GuiWindow {
return;
}
client.getProjectHandler().triggerCreateNewProject(projectNameTextField.getText(), projectTypeComboBox.getValue(), projectDescriptionTextField.getText());
CoderMessage msg = new CoderMessage();
msg.ProjectCreateReq = new ProjectCreateReqMsg();
msg.ProjectCreateReq.name = projectNameTextField.getText();
msg.ProjectCreateReq.type = projectTypeComboBox.getValue();
msg.ProjectCreateReq.description = projectDescriptionTextField.getText();
client.getSessionHandler().sendMessage(msg);
}
@FXML
@ -129,7 +159,7 @@ public class NewProjectDialog extends GuiWindow {
}
@Override
protected String getTitle() {
public String getTitle() {
return "New Project";
}
@ -147,7 +177,7 @@ public class NewProjectDialog extends GuiWindow {
}
@Override
protected String getDescriptiveName() {
public String getDescriptiveName() {
return "New Project Dialog";
}

View file

@ -29,6 +29,7 @@ import com.coder.client.gui.GuiWindow;
import com.coder.client.project.ProjectListener;
import com.coder.client.session.ProjectListRspMsgListener;
import com.coder.client.session.ProjectRspMsgListener;
import com.coder.client.session.SessionListener;
import com.coder.server.message.CoderMessage;
import com.coder.server.message.ProjectListData;
import com.coder.server.message.ProjectListReqMsg;
@ -50,6 +51,34 @@ public class SelectProjectDialog extends GuiWindow {
super(SelectProjectDialog.class.getResource("SelectProjectDialog.fxml"));
this.client = client;
client.getSessionHandler().addSessionListener(new SessionListener() {
@Override
public void sessionDisconnected(boolean retryToEstablishConnection) {
}
@Override
public void sessionConnectionSuccess() {
}
@Override
public void sessionConnectionFailure() {
}
@Override
public void sessionAuthenticationSuccess() {
logger.fine("session authentication successfull, will show the select project dialog on the main stage");
client.showOnStage(SelectProjectDialog.this);
}
@Override
public void sessionAuthenticationFailure() {
}
@Override
public void sessionAuthenticationCancel() {
}
});
client.getSessionHandler().addMessageListener(new ProjectListRspMsgListener() {
@Override
public void messageReceived(final ProjectListRspMsg msg) {
@ -77,20 +106,19 @@ public class SelectProjectDialog extends GuiWindow {
client.getProjectHandler().addprojectListener(new ProjectListener() {
@Override
public void selectProject() {
logger.fine("select project requested, will show the select project dialog on the main stage");
client.showOnStage(SelectProjectDialog.this);
}
@Override
public void openProjectFailed(String errorMsg) {
logger.fine("open project failed, setting error message to \""+errorMsg+"\"");
setErrorMessage(errorMsg);
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(String name, String type, String description) {
}
@Override
public void createNewProject() {
@ -100,7 +128,7 @@ public class SelectProjectDialog extends GuiWindow {
}
@Override
protected void willShow() {
public void willShow() {
clearProjectList();
if(!client.getProjectHandler().isProjectSet()){
sendProjectListReq();
@ -213,7 +241,7 @@ public class SelectProjectDialog extends GuiWindow {
}
@Override
protected String getTitle() {
public String getTitle() {
return "Open Project";
}
@ -222,7 +250,7 @@ public class SelectProjectDialog extends GuiWindow {
}
@Override
protected String getDescriptiveName() {
public String getDescriptiveName() {
return "Select Project Dialog";
}

View file

@ -2,10 +2,12 @@ package com.coder.client.gui.selectServer;
import java.io.IOException;
import java.net.URL;
import java.util.List;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
@ -23,12 +25,14 @@ import javafx.scene.input.MouseEvent;
import javafx.util.Callback;
import zutil.log.LogUtil;
import zutil.net.ssdp.SSDPClient;
import zutil.net.ssdp.SSDPClient.SSDPServiceListener;
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;
public class SelectServerDialog extends GuiWindow {
public static final Logger logger = LogUtil.getLogger();
@ -43,7 +47,7 @@ public class SelectServerDialog extends GuiWindow {
@FXML private Button connectButton;
@FXML private Label errorLabel;
public SelectServerDialog(CoderClient client) throws IOException {
public SelectServerDialog(final CoderClient client) throws IOException {
super(SelectServerDialog.class.getResource("SelectServerDialog.fxml"));
this.client = client;
client.getSessionHandler().addSessionListener(new SessionListener() {
@ -59,11 +63,15 @@ public class SelectServerDialog extends GuiWindow {
}else{
setErrorMessage("The current session was disconnected");
}
logger.fine("session disconnected, will show the select server dialog on the main stage");
client.showOnStage(SelectServerDialog.this);
}
@Override
public void sessionConnectionFailure() {
setServerAddress(null);
setErrorMessage("ERROR: Unable to connect to remote host");
logger.fine("session connection failure, will show the select server dialog on the main stage");
client.showOnStage(SelectServerDialog.this);
}
@Override
public void sessionAuthenticationSuccess() {
@ -72,17 +80,49 @@ public class SelectServerDialog extends GuiWindow {
@Override
public void sessionAuthenticationFailure() {
setErrorMessage("");
logger.fine("session authentication failure, will show the select server dialog on the main stage");
client.showOnStage(SelectServerDialog.this);
}
@Override
public void sessionAuthenticationCancel() {
setServerAddress(null);
setErrorMessage(null);
logger.fine("session authentication canceled, will show the select server dialog on the main stage");
client.showOnStage(SelectServerDialog.this);
}
});
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) {
Platform.runLater(new Runnable() {
@Override
public void run() {
String ip = service.getInetAddress().getHostAddress();
addServerToList(ip, 1337);
}
});
}
});
}
@Override
protected void willShow() {
public void willShow() {
logger.fine("Clearing server list");
serverList.clear();
if(address != null && port != -1){
@ -91,14 +131,9 @@ public class SelectServerDialog extends GuiWindow {
connectButton.fire();
}else{
logger.fine("sending a SSDP request for local servers");
SSDPClient ssdpClient = client.getSSDPClient();
if(ssdpClient != null){
ssdpClient.requestService("coder:discover");
for(StandardSSDPInfo server : ssdpClient.getServices("coder:discover")){
addServerToList(server.getInetAddress().getHostAddress(), 1337);
}
}else{
logger.severe("could not send a SSDP request since the client is not setup");
List<StandardSSDPInfo> serverList = client.getSSDPHandler().requestService("coder:discover");
for(StandardSSDPInfo server : serverList){
addServerToList(server.getInetAddress().getHostAddress(), 1337);
}
}
connectButton.setDisable(true);
@ -180,7 +215,7 @@ public class SelectServerDialog extends GuiWindow {
}
@Override
protected String getTitle() {
public String getTitle() {
return "Select Server";
}
@ -195,7 +230,7 @@ public class SelectServerDialog extends GuiWindow {
}
@Override
protected String getDescriptiveName() {
public String getDescriptiveName() {
return "Select Server Dialog";
}