diff --git a/.classpath b/.classpath
index 8ae9fe9..8a4bb32 100644
--- a/.classpath
+++ b/.classpath
@@ -1,9 +1,9 @@
-
+
diff --git a/.project b/.project
index e47782c..b27f7c2 100644
--- a/.project
+++ b/.project
@@ -10,15 +10,6 @@
-
- org.eclipse.ui.externaltools.ExternalToolBuilder
-
-
- LaunchConfigHandle
- <project>/.externalToolBuilders/ANT Build.launch
-
-
-
org.eclipse.jdt.core.javanature
diff --git a/src/com/coder/client/CoderClient.java b/src/com/coder/client/CoderClient.java
index 4680f0a..b3fd591 100644
--- 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.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -38,63 +39,34 @@ import javafx.stage.Stage;
public class CoderClient extends Application{
public static final Logger logger = LogUtil.getLogger();
-
+
private Session session;
private Stage mainStage;
-
+
//GUI elements
private EditorWindow editorWindow;
private LoginDialog loginDialog;
private SelectProjectDialog selectProjectDialog;
private SelectServerDialog selectServerDialog;
private NewProjectDialog newProjectDialog;
-
+
//state variables
- private String serverURL = null;
- private int serverPort = CoderServer.SERVER_PORT;
- private String username = null;
- private char[] password = null; //should only be anything else than null if defined by program argument
- private String project = null;
private GuiWindow projectSelectionWindow = null; //points to the GUI that selected a project for the editor. If any error occurs while creating/loading the project, this is the window we will go back to.
-
+
//services
SSDPClient ssdpClient;
-
+
public static void main(String[] args) {
- Application.launch(args);
- }
+ Application.launch(args);
+ }
@Override
public void start(Stage mainStage) throws Exception {
-
+
//setup logging
LogUtil.setGlobalLevel(Level.INFO);
- LogUtil.setGlobalFormatter(new CompactLogFormatter());
-
- //parse program arguments
- Map params = this.getParameters().getNamed();
- for(String key : params.keySet()){
- String value = params.get(key);
- if(key.equals("username")){
- this.username = value;
- }else if(key.equals("password")){
- this.password = value.toCharArray();
- }else if(key.equals("url")){
- this.serverURL = value;
- }else if(key.equals("port")){
- try{
- this.serverPort = Integer.parseInt(value);
- }catch(NumberFormatException e){
- logger.warning("port argument to program is not of a integer type. using default port.");
- }
- }else if(key.equals("project")){
- this.project = value;
- }
- }
- if(this.username == null){ //ignore the password if no username was set
- this.password = null;
- }
-
+ LogUtil.setGlobalFormatter(new CompactLogFormatter());
+
//setup GUI elements
this.mainStage = mainStage;
mainStage.setTitle("CoderClient");
@@ -108,7 +80,29 @@ public class CoderClient extends Application{
logger.log(Level.SEVERE, "could not load all GUI elements", e);
System.exit(1);
}
-
+
+ //parse program arguments
+ Map params = this.getParameters().getNamed();
+ for(String key : params.keySet()){
+ String value = params.get(key);
+ if(key.equals("username")){
+ loginDialog.setUsername(value);
+ }else if(key.equals("password")){
+ loginDialog.setPassword(value.toCharArray());
+ }else if(key.equals("url")){
+ selectServerDialog.setServerAddress(value);
+ }else if(key.equals("port")){
+ try{
+ selectServerDialog.setServerPort(Integer.parseInt(value));
+ }catch(NumberFormatException e){
+ logger.warning("port argument to program is not of a integer type. using default port.");
+ selectServerDialog.setServerPort(CoderServer.SERVER_PORT);
+ }
+ }else if(key.equals("project")){
+ selectProjectDialog.setProject(value);
+ }
+ }
+
//setup SSDP client
try{
setupSSDPClient();
@@ -116,12 +110,13 @@ public class CoderClient extends Application{
logger.log(Level.SEVERE, "could not setup SSDP client", e);
System.exit(1);
}
-
+
//start program logic
+ selectServerDialog.setServerPort(CoderServer.SERVER_PORT);
selectServerDialog.showOnStage(mainStage);
-
+
}
-
+
private void setupSelectServerDialog() throws IOException{
this.selectServerDialog = new SelectServerDialog();
this.selectServerDialog.addSelectProjectDialogListener(new SelectServerDialogListener() {
@@ -135,8 +130,6 @@ public class CoderClient extends Application{
}else{
logger.severe("could not send a SSDP request since the client is not setup");
}
- selectServerDialog.setServerAddress(serverURL);
- selectServerDialog.setServerPort(serverPort);
}
@Override
public void exit() {
@@ -145,15 +138,13 @@ public class CoderClient extends Application{
}
@Override
public void connect(String address, int port) {
- serverURL = address;
- serverPort = port;
//connect session
- session = Session.setupConnection(serverURL, serverPort);
+ session = Session.setupConnection(address, port);
if(session == null){
- logger.warning("Could not setup a connection to " + serverURL + ":" + port);
- serverURL = null;
- serverPort = CoderServer.SERVER_PORT;
+ logger.warning("Could not setup a connection to " + address + ":" + port);
+ selectServerDialog.setServerAddress(null);
selectServerDialog.setErrorMessage("ERROR: Unable to connect to remote host");
+ loginDialog.setErrorMessage("");
selectServerDialog.showOnStage(mainStage);
}else{
selectServerDialog.setErrorMessage("");
@@ -166,11 +157,12 @@ public class CoderClient extends Application{
if(session == null || !session.isConnected()){
logger.fine("session guard: no connection");
Platform.runLater(new Runnable() {
- @Override
- public void run() {
+ @Override
+ public void run() {
selectServerDialog.setErrorMessage("The current session was disconnected");
+ closeCurrentSession();
selectServerDialog.showOnStage(mainStage);
- }
+ }
});
break;
}
@@ -183,30 +175,26 @@ public class CoderClient extends Application{
}
});
}
-
+
private void setupLoginDialog() throws IOException {
this.loginDialog = new LoginDialog();
this.loginDialog.addLoginDialogListener(new LoginDialogListener(){
@Override
public void willShow() {
- loginDialog.setUsername(username);
- loginDialog.setPassword(password);
+
}
@Override
public void cancel() {
- serverURL = null;
- serverPort = CoderServer.SERVER_PORT;
+ selectServerDialog.setServerAddress(null);
selectServerDialog.showOnStage(mainStage);
}
@Override
- public void login(String uname, char[] paswd) {
- username = uname;
- password = paswd;
+ public void login(String username, char[] password) {
//authenticate session
boolean authenticated = session.authenticate(username, password);
if(!authenticated){
logger.severe("Authentication failed: wrong username or password");
- password = null;
+ loginDialog.setPassword(null);
loginDialog.setErrorMessage("Wrong username or password");
selectServerDialog.showOnStage(mainStage);
return;
@@ -219,7 +207,7 @@ public class CoderClient extends Application{
}
});
}
-
+
/**
* To be called after a session has been connected and authenticated
*/
@@ -237,84 +225,86 @@ public class CoderClient extends Application{
public void projectListRspReceived(final Map projectListRsp) {
logger.fine("a ProjectListRsp received");
Platform.runLater(new Runnable() {
- @Override
- public void run() {
- for(String projectName : projectListRsp.keySet()){
+ @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){
+ @Override
+ public void run() {
+ if(projectRspMsg.error != null){
logger.severe("Server responded on the project request with the following error message: " + projectRspMsg.error);
- project = null;
+ selectProjectDialog.setProject(null);
if(projectSelectionWindow != null){
projectSelectionWindow.setErrorMessage("ERROR: " + projectRspMsg.error);
projectSelectionWindow.showOnStage(mainStage);
return;
}else{
- logger.severe("Undefined error message handler. Unrecoverable state. Terminating");
- Platform.exit();
+ selectProjectDialog.setErrorMessage("ERROR: " + projectRspMsg.error);
+ selectProjectDialog.showOnStage(mainStage);
return;
}
}else{
if(projectSelectionWindow != null){
projectSelectionWindow.setErrorMessage("");
}
+ ConfigData 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 Map projectTypeRsp) {
logger.fine("a ProjectTypeRspMsg received");
Platform.runLater(new Runnable() {
- @Override
- public void run() {
- for(String typeName : projectTypeRsp.keySet()){
- ConfigData typeData = projectTypeRsp.get(typeName);
- newProjectDialog.addProjectTypeToList(typeName, typeData);
- }
- }
+ @Override
+ public void run() {
+ for(String typeName : projectTypeRsp.keySet()){
+ ConfigData typeData = projectTypeRsp.get(typeName);
+ newProjectDialog.addProjectTypeToList(typeName, typeData);
+ }
+ }
});
}
});
}
-
+
private void setupSelectProjectDialog() throws IOException {
this.selectProjectDialog = new SelectProjectDialog();
this.selectProjectDialog.addSelectProjectDialogListener(new SelectProjectDialogListener() {
@Override
public void willShow() {
selectProjectDialog.clearProjectList();
- if(project == null || project.isEmpty()){
+ if(!selectProjectDialog.isProjectSelected()){
sendProjectListReq();
}
- selectProjectDialog.setProject(project);
}
@Override
public void open(String selectedProjectName) {
projectSelectionWindow = selectProjectDialog;
- project = selectedProjectName;
editorWindow.showOnStage(mainStage);
}
@Override
public void newProject() {
- project = null;
+ selectProjectDialog.setProject(null);
newProjectDialog.showOnStage(mainStage);
}
@Override
public void cancel() {
- serverURL = null;
- serverPort = CoderServer.SERVER_PORT;
+ selectServerDialog.setServerAddress(null);
selectServerDialog.showOnStage(mainStage);
}
@Override
@@ -335,7 +325,7 @@ public class CoderClient extends Application{
}
});
}
-
+
private void setupNewProjectDialog() throws IOException {
this.newProjectDialog = new NewProjectDialog();
this.newProjectDialog.addNewProjectDialogListener(new NewProjectDialogListener(){
@@ -348,7 +338,7 @@ public class CoderClient extends Application{
public void create(String newProjectName, String projectType) {
projectSelectionWindow = newProjectDialog;
sendProjectCreateReqMsg(newProjectName, projectType);
- project = newProjectName;
+ selectProjectDialog.setProject(newProjectName);
editorWindow.showOnStage(mainStage);
}
private void sendProjectTypeReqMsg(){
@@ -375,12 +365,12 @@ public class CoderClient extends Application{
}
@Override
public void cancel() {
- project = null;
+ selectProjectDialog.setProject(null);
selectProjectDialog.showOnStage(mainStage);
}
});
}
-
+
private void setupEditWindow() throws IOException {
this.editorWindow = new EditorWindow();
this.editorWindow.addEditorWindowListener(new EditorWindowListener() {
@@ -397,9 +387,13 @@ public class CoderClient extends Application{
//TODO
}
private void sendProjectReqMsg(){
+ if(!selectProjectDialog.isProjectSelected()){
+ logger.severe("Cannot send a project request when no project is selected");
+ return;
+ }
CoderMessage msg = new CoderMessage();
msg.ProjectReq = new ProjectReqMsg();
- msg.ProjectReq.name = project;
+ msg.ProjectReq.name = selectProjectDialog.getSelectedProject();
try {
session.send(msg);
} catch (IOException e) {
@@ -409,12 +403,12 @@ public class CoderClient extends Application{
}
@Override
public void changeProject() {
- project = null;
+ selectProjectDialog.setProject(null);
selectProjectDialog.showOnStage(mainStage);
}
});
}
-
+
private void setupSSDPClient() throws IOException{
this.ssdpClient = new SSDPClient();
ssdpClient.setListener(new SSDPServiceListener() {
@@ -422,18 +416,18 @@ public class CoderClient extends Application{
public void newService(final StandardSSDPInfo service) {
if(selectServerDialog != null){
Platform.runLater(new Runnable() {
- @Override
- public void run() {
+ @Override
+ public void run() {
String ip = service.getInetAddress().getHostAddress();
selectServerDialog.addServerToList(ip);
- }
+ }
});
}
}
});
ssdpClient.start();
}
-
+
private void closeCurrentSession(){
if(this.session != null){
logger.info("disconnecting from server");
diff --git a/src/com/coder/client/gui/login/LoginDialog.java b/src/com/coder/client/gui/login/LoginDialog.java
index 818e820..a96e3c1 100644
--- a/src/com/coder/client/gui/login/LoginDialog.java
+++ b/src/com/coder/client/gui/login/LoginDialog.java
@@ -51,6 +51,7 @@ public class LoginDialog extends GuiWindow {
passwordPasswordField.requestFocus();
}else{
usernameTextField.requestFocus();
+ passwordPasswordField.setText("");
}
}
}
diff --git a/src/com/coder/client/gui/newProject/NewProjectDialog.java b/src/com/coder/client/gui/newProject/NewProjectDialog.java
index dea29ac..942b209 100644
--- a/src/com/coder/client/gui/newProject/NewProjectDialog.java
+++ b/src/com/coder/client/gui/newProject/NewProjectDialog.java
@@ -32,6 +32,7 @@ public class NewProjectDialog extends GuiWindow {
for(NewProjectDialogListener listener : this.listeners){
listener.willShow();
}
+ //TODO: if(errorMessage == null || errorMessage.isEmpty()){project = ""; type = "";} //keep field data if there is an error
}
@Override
diff --git a/src/com/coder/client/gui/selectProject/SelectProjectDialog.java b/src/com/coder/client/gui/selectProject/SelectProjectDialog.java
index 74230f7..aa95127 100644
--- a/src/com/coder/client/gui/selectProject/SelectProjectDialog.java
+++ b/src/com/coder/client/gui/selectProject/SelectProjectDialog.java
@@ -51,7 +51,7 @@ public class SelectProjectDialog extends GuiWindow {
for(SelectProjectDialogListener listener : this.listeners){
listener.willShow();
}
- if(this.projectName != null){
+ if(this.projectName != null && !this.projectName.isEmpty()){
openButton.setDisable(false);
openButton.fire();
}
@@ -134,7 +134,7 @@ public class SelectProjectDialog extends GuiWindow {
@FXML
protected void open(ActionEvent event){
- if(this.projectName == null){
+ if(this.projectName == null || this.projectName.isEmpty()){
ProjectListItem selectedItem = projectListView.getSelectionModel().getSelectedItem();
projectName = selectedItem.getName();
}
@@ -173,5 +173,13 @@ public class SelectProjectDialog extends GuiWindow {
public void setErrorMessage(String errorMsg){
this.errorLabel.setText(errorMsg);
}
+
+ public boolean isProjectSelected() {
+ return this.projectName != null && !this.projectName.isEmpty();
+ }
+
+ public String getSelectedProject() {
+ return this.projectName;
+ }
}