Added NewProjectDialog, fixed some error handling and general stability fixes
This commit is contained in:
parent
34cf5865fe
commit
223fe1f136
13 changed files with 336 additions and 54 deletions
|
|
@ -6,10 +6,13 @@ import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import com.coder.client.Session;
|
import com.coder.client.Session;
|
||||||
|
import com.coder.client.gui.GuiWindow;
|
||||||
import com.coder.client.gui.editor.EditorWindow;
|
import com.coder.client.gui.editor.EditorWindow;
|
||||||
import com.coder.client.gui.editor.EditorWindowListener;
|
import com.coder.client.gui.editor.EditorWindowListener;
|
||||||
import com.coder.client.gui.login.LoginDialog;
|
import com.coder.client.gui.login.LoginDialog;
|
||||||
import com.coder.client.gui.login.LoginDialogListener;
|
import com.coder.client.gui.login.LoginDialogListener;
|
||||||
|
import com.coder.client.gui.newProject.NewProjectDialog;
|
||||||
|
import com.coder.client.gui.newProject.NewProjectDialogListener;
|
||||||
import com.coder.client.gui.selectProject.SelectProjectDialog;
|
import com.coder.client.gui.selectProject.SelectProjectDialog;
|
||||||
import com.coder.client.gui.selectProject.SelectProjectDialogListener;
|
import com.coder.client.gui.selectProject.SelectProjectDialogListener;
|
||||||
import com.coder.client.gui.selectServer.SelectServerDialog;
|
import com.coder.client.gui.selectServer.SelectServerDialog;
|
||||||
|
|
@ -17,9 +20,12 @@ import com.coder.client.gui.selectServer.SelectServerDialogListener;
|
||||||
import com.coder.server.CoderServer;
|
import com.coder.server.CoderServer;
|
||||||
import com.coder.server.message.CoderMessage;
|
import com.coder.server.message.CoderMessage;
|
||||||
import com.coder.server.message.ConfigData;
|
import com.coder.server.message.ConfigData;
|
||||||
|
import com.coder.server.message.ProjectCreateReqMsg;
|
||||||
import com.coder.server.message.ProjectListData;
|
import com.coder.server.message.ProjectListData;
|
||||||
import com.coder.server.message.ProjectListReqMsg;
|
import com.coder.server.message.ProjectListReqMsg;
|
||||||
|
import com.coder.server.message.ProjectReqMsg;
|
||||||
import com.coder.server.message.ProjectRspMsg;
|
import com.coder.server.message.ProjectRspMsg;
|
||||||
|
import com.coder.server.message.ProjectTypeReqMsg;
|
||||||
|
|
||||||
import zutil.log.CompactLogFormatter;
|
import zutil.log.CompactLogFormatter;
|
||||||
import zutil.log.LogUtil;
|
import zutil.log.LogUtil;
|
||||||
|
|
@ -41,14 +47,15 @@ public class CoderClient extends Application{
|
||||||
private LoginDialog loginDialog;
|
private LoginDialog loginDialog;
|
||||||
private SelectProjectDialog selectProjectDialog;
|
private SelectProjectDialog selectProjectDialog;
|
||||||
private SelectServerDialog selectServerDialog;
|
private SelectServerDialog selectServerDialog;
|
||||||
|
private NewProjectDialog newProjectDialog;
|
||||||
|
|
||||||
//state variables
|
//state variables
|
||||||
private String serverURL = null;
|
private String serverURL = null;
|
||||||
private int serverPort = CoderServer.SERVER_PORT;
|
private int serverPort = CoderServer.SERVER_PORT;
|
||||||
private String username = null;
|
private String username = null;
|
||||||
private char[] password = null; //should only be anything else than null if defined by program argument
|
private char[] password = null; //should only be anything else than null if defined by program argument
|
||||||
private String loginErrorMessage = "";
|
|
||||||
private String project = null;
|
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
|
//services
|
||||||
SSDPClient ssdpClient;
|
SSDPClient ssdpClient;
|
||||||
|
|
@ -96,6 +103,7 @@ public class CoderClient extends Application{
|
||||||
setupLoginDialog();
|
setupLoginDialog();
|
||||||
setupSelectProjectDialog();
|
setupSelectProjectDialog();
|
||||||
setupEditWindow();
|
setupEditWindow();
|
||||||
|
setupNewProjectDialog();
|
||||||
}catch(IOException e){
|
}catch(IOException e){
|
||||||
logger.log(Level.SEVERE, "could not load all GUI elements", e);
|
logger.log(Level.SEVERE, "could not load all GUI elements", e);
|
||||||
System.exit(1);
|
System.exit(1);
|
||||||
|
|
@ -111,7 +119,7 @@ public class CoderClient extends Application{
|
||||||
|
|
||||||
//start program logic
|
//start program logic
|
||||||
selectServerDialog.showOnStage(mainStage);
|
selectServerDialog.showOnStage(mainStage);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupSelectServerDialog() throws IOException{
|
private void setupSelectServerDialog() throws IOException{
|
||||||
|
|
@ -120,9 +128,9 @@ public class CoderClient extends Application{
|
||||||
@Override
|
@Override
|
||||||
public void willShow() {
|
public void willShow() {
|
||||||
closeCurrentSession();
|
closeCurrentSession();
|
||||||
ssdpClient.clearServices();
|
|
||||||
selectServerDialog.clearServerList();
|
selectServerDialog.clearServerList();
|
||||||
if(ssdpClient != null){
|
if(ssdpClient != null){
|
||||||
|
ssdpClient.clearServices();
|
||||||
ssdpClient.requestService("coder:discover");
|
ssdpClient.requestService("coder:discover");
|
||||||
}else{
|
}else{
|
||||||
logger.severe("could not send a SSDP request since the client is not setup");
|
logger.severe("could not send a SSDP request since the client is not setup");
|
||||||
|
|
@ -133,11 +141,10 @@ public class CoderClient extends Application{
|
||||||
@Override
|
@Override
|
||||||
public void exit() {
|
public void exit() {
|
||||||
logger.info("terminating");
|
logger.info("terminating");
|
||||||
System.exit(0);
|
Platform.exit();
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void connect(String address, int port) {
|
public void connect(String address, int port) {
|
||||||
//selectServerDialog.hide();
|
|
||||||
serverURL = address;
|
serverURL = address;
|
||||||
serverPort = port;
|
serverPort = port;
|
||||||
//connect session
|
//connect session
|
||||||
|
|
@ -146,8 +153,31 @@ public class CoderClient extends Application{
|
||||||
logger.warning("Could not setup a connection to " + serverURL + ":" + port);
|
logger.warning("Could not setup a connection to " + serverURL + ":" + port);
|
||||||
serverURL = null;
|
serverURL = null;
|
||||||
serverPort = CoderServer.SERVER_PORT;
|
serverPort = CoderServer.SERVER_PORT;
|
||||||
|
selectServerDialog.setErrorMessage("ERROR: Unable to connect to remote host");
|
||||||
selectServerDialog.showOnStage(mainStage);
|
selectServerDialog.showOnStage(mainStage);
|
||||||
}else{
|
}else{
|
||||||
|
selectServerDialog.setErrorMessage("");
|
||||||
|
// create a guard for when the session is closed
|
||||||
|
new Thread(new Runnable(){
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
logger.fine("starting a session guard");
|
||||||
|
while(true){
|
||||||
|
if(session == null || !session.isConnected()){
|
||||||
|
logger.fine("session guard: no connection");
|
||||||
|
Platform.runLater(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
selectServerDialog.setErrorMessage("The current session was disconnected");
|
||||||
|
selectServerDialog.showOnStage(mainStage);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Thread.yield();
|
||||||
|
}
|
||||||
|
logger.fine("terminating session guard");
|
||||||
|
}}).start();
|
||||||
loginDialog.showOnStage(mainStage);
|
loginDialog.showOnStage(mainStage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -161,7 +191,6 @@ public class CoderClient extends Application{
|
||||||
public void willShow() {
|
public void willShow() {
|
||||||
loginDialog.setUsername(username);
|
loginDialog.setUsername(username);
|
||||||
loginDialog.setPassword(password);
|
loginDialog.setPassword(password);
|
||||||
loginDialog.setErrorMessage(loginErrorMessage);
|
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void cancel() {
|
public void cancel() {
|
||||||
|
|
@ -178,38 +207,83 @@ public class CoderClient extends Application{
|
||||||
if(!authenticated){
|
if(!authenticated){
|
||||||
logger.severe("Authentication failed: wrong username or password");
|
logger.severe("Authentication failed: wrong username or password");
|
||||||
password = null;
|
password = null;
|
||||||
loginErrorMessage = "Wrong username or password";
|
loginDialog.setErrorMessage("Wrong username or password");
|
||||||
selectServerDialog.showOnStage(mainStage);
|
selectServerDialog.showOnStage(mainStage);
|
||||||
|
return;
|
||||||
}else{
|
}else{
|
||||||
loginErrorMessage = "";
|
loginDialog.setErrorMessage("");
|
||||||
setupSessionListener(); //resister a message listener to the session
|
setupSessionListener(); //resister a message listener to the session
|
||||||
session.start(); //start receiving traffic from the server
|
session.start(); //start receiving traffic from the server
|
||||||
selectProjectDialog.showOnStage(mainStage);
|
selectProjectDialog.showOnStage(mainStage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private void setupSessionListener(){
|
});
|
||||||
session.addCoderMessageReceivedListener(new CoderMessageReceivedListener() {
|
}
|
||||||
@Override
|
|
||||||
public void projectListRspReceived(final Map<String, ProjectListData> projectListRsp) {
|
/**
|
||||||
Platform.runLater(new Runnable() {
|
* To be called after a session has been connected and authenticated
|
||||||
@Override
|
*/
|
||||||
public void run() {
|
private void setupSessionListener(){
|
||||||
for(String projectName : projectListRsp.keySet()){
|
if(session == null){
|
||||||
ProjectListData projectData = projectListRsp.get(projectName);
|
logger.warning("Cannot setup session listeners for null instance. ignoring call.");
|
||||||
selectProjectDialog.addProjectToList(projectName, projectData);
|
return;
|
||||||
}
|
}
|
||||||
}
|
if(!session.isAuthenticated()){
|
||||||
});
|
logger.warning("Cannot setup session listeners for a non-authenticated session. ignoring call.");
|
||||||
}
|
return;
|
||||||
@Override
|
}
|
||||||
public void projectRspReceived(ProjectRspMsg projectRspMsg) {
|
session.addCoderMessageReceivedListener(new CoderMessageReceivedListener() {
|
||||||
// TODO Auto-generated method stub
|
@Override
|
||||||
}
|
public void projectListRspReceived(final Map<String, ProjectListData> projectListRsp) {
|
||||||
@Override
|
logger.fine("a ProjectListRsp received");
|
||||||
public void projectTypeRspReceived(Map<String, ConfigData> projectTypeRsp) {
|
Platform.runLater(new Runnable() {
|
||||||
// TODO Auto-generated method stub
|
@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){
|
||||||
|
logger.severe("Server responded on the project request with the following error message: " + projectRspMsg.error);
|
||||||
|
project = 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();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
if(projectSelectionWindow != null){
|
||||||
|
projectSelectionWindow.setErrorMessage("");
|
||||||
|
}
|
||||||
|
//TODO: handle msg
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void projectTypeRspReceived(final Map<String, ConfigData> 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -221,20 +295,21 @@ public class CoderClient extends Application{
|
||||||
@Override
|
@Override
|
||||||
public void willShow() {
|
public void willShow() {
|
||||||
selectProjectDialog.clearProjectList();
|
selectProjectDialog.clearProjectList();
|
||||||
if(project == null){
|
if(project == null || project.isEmpty()){
|
||||||
sendProjectListReq();
|
sendProjectListReq();
|
||||||
}else{
|
|
||||||
selectProjectDialog.setProject(project);
|
|
||||||
}
|
}
|
||||||
|
selectProjectDialog.setProject(project);
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void open(String selectedProjectName) {
|
public void open(String selectedProjectName) {
|
||||||
|
projectSelectionWindow = selectProjectDialog;
|
||||||
project = selectedProjectName;
|
project = selectedProjectName;
|
||||||
editorWindow.showOnStage(mainStage);
|
editorWindow.showOnStage(mainStage);
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void newProject() {
|
public void newProject() {
|
||||||
//TODO
|
project = null;
|
||||||
|
newProjectDialog.showOnStage(mainStage);
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void cancel() {
|
public void cancel() {
|
||||||
|
|
@ -261,12 +336,57 @@ public class CoderClient extends Application{
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setupNewProjectDialog() throws IOException {
|
||||||
|
this.newProjectDialog = new NewProjectDialog();
|
||||||
|
this.newProjectDialog.addNewProjectDialogListener(new NewProjectDialogListener(){
|
||||||
|
@Override
|
||||||
|
public void willShow() {
|
||||||
|
newProjectDialog.clearProjectTypeList();
|
||||||
|
sendProjectTypeReqMsg();
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void create(String newProjectName, String projectType) {
|
||||||
|
projectSelectionWindow = newProjectDialog;
|
||||||
|
sendProjectCreateReqMsg(newProjectName, projectType);
|
||||||
|
project = newProjectName;
|
||||||
|
editorWindow.showOnStage(mainStage);
|
||||||
|
}
|
||||||
|
private void sendProjectTypeReqMsg(){
|
||||||
|
CoderMessage msg = new CoderMessage();
|
||||||
|
msg.ProjectTypeReq = new ProjectTypeReqMsg();
|
||||||
|
try {
|
||||||
|
session.send(msg);
|
||||||
|
} catch (IOException e) {
|
||||||
|
logger.log(Level.SEVERE, "Unable to send ProjectTypeReq", e);
|
||||||
|
closeCurrentSession();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private void sendProjectCreateReqMsg(String projectName, String projectType){
|
||||||
|
CoderMessage msg = new CoderMessage();
|
||||||
|
msg.ProjectCreateReq = new ProjectCreateReqMsg();
|
||||||
|
msg.ProjectCreateReq.name = projectName;
|
||||||
|
msg.ProjectCreateReq.type = projectType;
|
||||||
|
try {
|
||||||
|
session.send(msg);
|
||||||
|
} catch (IOException e) {
|
||||||
|
logger.log(Level.SEVERE, "Unable to send ProjectCreateReq", e);
|
||||||
|
closeCurrentSession();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void cancel() {
|
||||||
|
project = null;
|
||||||
|
selectProjectDialog.showOnStage(mainStage);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private void setupEditWindow() throws IOException {
|
private void setupEditWindow() throws IOException {
|
||||||
this.editorWindow = new EditorWindow();
|
this.editorWindow = new EditorWindow();
|
||||||
this.editorWindow.addEditorWindowListener(new EditorWindowListener() {
|
this.editorWindow.addEditorWindowListener(new EditorWindowListener() {
|
||||||
@Override
|
@Override
|
||||||
public void willShow() {
|
public void willShow() {
|
||||||
//TODO
|
sendProjectReqMsg();
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void compile() {
|
public void compile() {
|
||||||
|
|
@ -276,6 +396,22 @@ public class CoderClient extends Application{
|
||||||
public void run() {
|
public void run() {
|
||||||
//TODO
|
//TODO
|
||||||
}
|
}
|
||||||
|
private void sendProjectReqMsg(){
|
||||||
|
CoderMessage msg = new CoderMessage();
|
||||||
|
msg.ProjectReq = new ProjectReqMsg();
|
||||||
|
msg.ProjectReq.name = project;
|
||||||
|
try {
|
||||||
|
session.send(msg);
|
||||||
|
} catch (IOException e) {
|
||||||
|
logger.log(Level.SEVERE, "Unable to send ProjectReqMsg", e);
|
||||||
|
closeCurrentSession();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void changeProject() {
|
||||||
|
project = null;
|
||||||
|
selectProjectDialog.showOnStage(mainStage);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ public class Session extends Thread {
|
||||||
|
|
||||||
private HashSet<CoderMessageReceivedListener> messageReceivedlisteners = new HashSet<CoderMessageReceivedListener>();
|
private HashSet<CoderMessageReceivedListener> messageReceivedlisteners = new HashSet<CoderMessageReceivedListener>();
|
||||||
|
|
||||||
private boolean authenticated;
|
private boolean authenticated = false;
|
||||||
private Socket socket;
|
private Socket socket;
|
||||||
private JSONObjectInputStream in;
|
private JSONObjectInputStream in;
|
||||||
private JSONObjectOutputStream out;
|
private JSONObjectOutputStream out;
|
||||||
|
|
@ -35,11 +35,11 @@ public class Session extends Thread {
|
||||||
try {
|
try {
|
||||||
session.socket = new Socket(url, port);
|
session.socket = new Socket(url, port);
|
||||||
} catch (UnknownHostException e) {
|
} catch (UnknownHostException e) {
|
||||||
logger.log(Level.SEVERE, null, e);
|
logger.log(Level.FINE, null, e);
|
||||||
session.close();
|
session.close();
|
||||||
return null;
|
return null;
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
logger.log(Level.SEVERE, null, e);
|
logger.log(Level.FINE, null, e);
|
||||||
session.close();
|
session.close();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
@ -111,6 +111,10 @@ public class Session extends Thread {
|
||||||
return new String[]{};
|
return new String[]{};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isAuthenticated(){
|
||||||
|
return authenticated;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean authenticate(String username, char[] clearTextPassword) {
|
public boolean authenticate(String username, char[] clearTextPassword) {
|
||||||
logger.fine("Authenticating session");
|
logger.fine("Authenticating session");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,13 +8,11 @@ import javafx.fxml.FXMLLoader;
|
||||||
import javafx.fxml.Initializable;
|
import javafx.fxml.Initializable;
|
||||||
import javafx.scene.Parent;
|
import javafx.scene.Parent;
|
||||||
import javafx.scene.Scene;
|
import javafx.scene.Scene;
|
||||||
import javafx.stage.Modality;
|
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
|
|
||||||
public abstract class GuiWindow implements Initializable{
|
public abstract class GuiWindow implements Initializable{
|
||||||
|
|
||||||
private Scene scene;
|
private Scene scene;
|
||||||
private Stage stage;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* constructor
|
* constructor
|
||||||
|
|
@ -34,16 +32,16 @@ public abstract class GuiWindow implements Initializable{
|
||||||
public void showOnStage(Stage stage){
|
public void showOnStage(Stage stage){
|
||||||
stage.setScene(scene);
|
stage.setScene(scene);
|
||||||
stage.setTitle(getTitle());
|
stage.setTitle(getTitle());
|
||||||
this.stage = stage;
|
//this.stage = stage;
|
||||||
willShow();
|
willShow();
|
||||||
stage.show();
|
stage.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* show a modal dialog
|
* show a modal dialog
|
||||||
* @param parent The dialogs parent
|
* @param parent The dialogs parent
|
||||||
*/
|
*/
|
||||||
public void showModal(Stage parent){
|
/* public void showModal(Stage parent){
|
||||||
Stage modalStage = new Stage();
|
Stage modalStage = new Stage();
|
||||||
modalStage.initModality(Modality.WINDOW_MODAL);
|
modalStage.initModality(Modality.WINDOW_MODAL);
|
||||||
modalStage.initOwner(parent);
|
modalStage.initOwner(parent);
|
||||||
|
|
@ -53,12 +51,15 @@ public abstract class GuiWindow implements Initializable{
|
||||||
willShow();
|
willShow();
|
||||||
modalStage.showAndWait();
|
modalStage.showAndWait();
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
public void hide(){
|
/* public void hide(){
|
||||||
if(stage != null){
|
if(stage != null){
|
||||||
this.stage.hide();
|
this.stage.hide();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
protected abstract String getTitle();
|
protected abstract String getTitle();
|
||||||
|
|
||||||
|
|
@ -72,4 +73,6 @@ public abstract class GuiWindow implements Initializable{
|
||||||
*/
|
*/
|
||||||
public abstract void initialize(URL fxmlFileLocation, ResourceBundle resources);
|
public abstract void initialize(URL fxmlFileLocation, ResourceBundle resources);
|
||||||
|
|
||||||
|
public abstract void setErrorMessage(String msg);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -67,6 +67,13 @@ public class EditorWindow extends GuiWindow {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
protected void chageProject(ActionEvent event){
|
||||||
|
for(EditorWindowListener listener : listsners){
|
||||||
|
listener.changeProject();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void setupFileTreeView(){
|
private void setupFileTreeView(){
|
||||||
fileTreeView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<TreeItem<String>>() {
|
fileTreeView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<TreeItem<String>>() {
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -118,4 +125,10 @@ public class EditorWindow extends GuiWindow {
|
||||||
return "Coder Client";
|
return "Coder Client";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setErrorMessage(String msg) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,5 +5,6 @@ public interface EditorWindowListener {
|
||||||
public void willShow();
|
public void willShow();
|
||||||
public void compile();
|
public void compile();
|
||||||
public void run();
|
public void run();
|
||||||
|
public void changeProject();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -101,6 +101,7 @@ public class LoginDialog extends GuiWindow {
|
||||||
return "Login";
|
return "Login";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void setErrorMessage(String msg) {
|
public void setErrorMessage(String msg) {
|
||||||
errorLabel.setText(msg);
|
errorLabel.setText(msg);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
13
src/com/coder/client/gui/newProject/NewProjectDialog.fxml
Normal file
13
src/com/coder/client/gui/newProject/NewProjectDialog.fxml
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<?import javafx.scene.control.*?>
|
||||||
|
<?import java.lang.*?>
|
||||||
|
<?import javafx.scene.layout.*?>
|
||||||
|
|
||||||
|
|
||||||
|
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="159.0" prefWidth="319.0" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1">
|
||||||
|
<children>
|
||||||
|
<Button fx:id="cancelButton" layoutX="60.0" layoutY="67.0" mnemonicParsing="false" onAction="#cancel" text="cancel" />
|
||||||
|
<Button fx:id="createButton" defaultButton="true" disable="true" layoutX="195.0" layoutY="67.0" mnemonicParsing="false" onAction="#create" text="create" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
82
src/com/coder/client/gui/newProject/NewProjectDialog.java
Normal file
82
src/com/coder/client/gui/newProject/NewProjectDialog.java
Normal file
|
|
@ -0,0 +1,82 @@
|
||||||
|
package com.coder.client.gui.newProject;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.ResourceBundle;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import javafx.event.ActionEvent;
|
||||||
|
import javafx.fxml.FXML;
|
||||||
|
import javafx.scene.control.Button;
|
||||||
|
|
||||||
|
import zutil.log.LogUtil;
|
||||||
|
|
||||||
|
import com.coder.client.gui.GuiWindow;
|
||||||
|
import com.coder.server.message.ConfigData;
|
||||||
|
|
||||||
|
public class NewProjectDialog extends GuiWindow {
|
||||||
|
public static final Logger logger = LogUtil.getLogger();
|
||||||
|
private HashSet<NewProjectDialogListener> listeners;
|
||||||
|
|
||||||
|
@FXML private Button createButton;
|
||||||
|
@FXML private Button cancelButton;
|
||||||
|
|
||||||
|
public NewProjectDialog() throws IOException {
|
||||||
|
super(NewProjectDialog.class.getResource("NewProjectDialog.fxml"));
|
||||||
|
listeners = new HashSet<NewProjectDialogListener>();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void willShow() {
|
||||||
|
for(NewProjectDialogListener listener : this.listeners){
|
||||||
|
listener.willShow();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initialize(URL fxmlFileLocation, ResourceBundle resources) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
protected void create(ActionEvent event){
|
||||||
|
for(NewProjectDialogListener listener : this.listeners){
|
||||||
|
listener.create("Project Name", "Project Type");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
protected void cancel(ActionEvent event){
|
||||||
|
for(NewProjectDialogListener listener : this.listeners){
|
||||||
|
listener.cancel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getTitle() {
|
||||||
|
return "New Project";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addNewProjectDialogListener(NewProjectDialogListener newProjectDialogListener) {
|
||||||
|
this.listeners.add(newProjectDialogListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addProjectTypeToList(String typeName, ConfigData typeData) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void clearProjectTypeList() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setErrorMessage(String errorMsg) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
package com.coder.client.gui.newProject;
|
||||||
|
|
||||||
|
public interface NewProjectDialogListener {
|
||||||
|
|
||||||
|
public void willShow();
|
||||||
|
|
||||||
|
public void create(String projectName, String projectType);
|
||||||
|
|
||||||
|
public void cancel();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -8,12 +8,13 @@
|
||||||
|
|
||||||
<AnchorPane xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1">
|
<AnchorPane xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1">
|
||||||
<children>
|
<children>
|
||||||
<ScrollPane fitToHeight="true" fitToWidth="true" hbarPolicy="NEVER" prefHeight="164.0" prefWidth="396.0" AnchorPane.bottomAnchor="50.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
<ScrollPane fitToHeight="true" fitToWidth="true" hbarPolicy="NEVER" prefHeight="164.0" prefWidth="396.0" AnchorPane.bottomAnchor="57.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
<content>
|
<content>
|
||||||
<ListView fx:id="projectListView" onKeyPressed="#keyPressed" onMouseClicked="#mouseClickedOnList" prefHeight="200.0" prefWidth="200.0" />
|
<ListView fx:id="projectListView" onKeyPressed="#keyPressed" onMouseClicked="#mouseClickedOnList" prefHeight="200.0" prefWidth="200.0" />
|
||||||
</content>
|
</content>
|
||||||
</ScrollPane>
|
</ScrollPane>
|
||||||
<GridPane maxHeight="-Infinity" minHeight="-Infinity" prefHeight="50.0" prefWidth="396.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0">
|
<Label fx:id="errorLabel" layoutX="39.0" layoutY="164.0" text="Error Message" textFill="RED" AnchorPane.bottomAnchor="40.0" AnchorPane.leftAnchor="3.0" AnchorPane.rightAnchor="3.0" />
|
||||||
|
<GridPane maxHeight="-Infinity" minHeight="-Infinity" prefHeight="35.0" prefWidth="396.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0">
|
||||||
<columnConstraints>
|
<columnConstraints>
|
||||||
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
|
@ -22,7 +23,7 @@
|
||||||
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
</rowConstraints>
|
</rowConstraints>
|
||||||
<children>
|
<children>
|
||||||
<HBox alignment="CENTER_RIGHT" prefHeight="100.0" prefWidth="200.0" GridPane.columnIndex="1">
|
<HBox alignment="TOP_RIGHT" prefHeight="100.0" prefWidth="200.0" GridPane.columnIndex="1">
|
||||||
<children>
|
<children>
|
||||||
<Button fx:id="cancelButton" mnemonicParsing="false" onAction="#cancel" text="Cancel">
|
<Button fx:id="cancelButton" mnemonicParsing="false" onAction="#cancel" text="Cancel">
|
||||||
<HBox.margin>
|
<HBox.margin>
|
||||||
|
|
@ -36,7 +37,7 @@
|
||||||
</Button>
|
</Button>
|
||||||
</children>
|
</children>
|
||||||
</HBox>
|
</HBox>
|
||||||
<HBox alignment="CENTER_LEFT" prefHeight="100.0" prefWidth="200.0">
|
<HBox prefHeight="100.0" prefWidth="200.0">
|
||||||
<children>
|
<children>
|
||||||
<Button fx:id="newProjectButton" mnemonicParsing="false" onAction="#newProject" text="New Project">
|
<Button fx:id="newProjectButton" mnemonicParsing="false" onAction="#newProject" text="New Project">
|
||||||
<HBox.margin>
|
<HBox.margin>
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ import javafx.collections.ObservableList;
|
||||||
import javafx.event.ActionEvent;
|
import javafx.event.ActionEvent;
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.scene.control.Button;
|
import javafx.scene.control.Button;
|
||||||
|
import javafx.scene.control.Label;
|
||||||
import javafx.scene.control.ListCell;
|
import javafx.scene.control.ListCell;
|
||||||
import javafx.scene.control.ListView;
|
import javafx.scene.control.ListView;
|
||||||
import javafx.scene.input.KeyCode;
|
import javafx.scene.input.KeyCode;
|
||||||
|
|
@ -36,6 +37,7 @@ public class SelectProjectDialog extends GuiWindow {
|
||||||
@FXML private Button newProjectButton;
|
@FXML private Button newProjectButton;
|
||||||
@FXML private Button cancelButton;
|
@FXML private Button cancelButton;
|
||||||
@FXML private Button openButton;
|
@FXML private Button openButton;
|
||||||
|
@FXML private Label errorLabel;
|
||||||
|
|
||||||
private String projectName = null;
|
private String projectName = null;
|
||||||
|
|
||||||
|
|
@ -54,10 +56,12 @@ public class SelectProjectDialog extends GuiWindow {
|
||||||
openButton.fire();
|
openButton.fire();
|
||||||
}
|
}
|
||||||
openButton.setDisable(true);
|
openButton.setDisable(true);
|
||||||
|
projectListView.requestFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize(URL fxmlFileLocation, ResourceBundle resources) {
|
public void initialize(URL fxmlFileLocation, ResourceBundle resources) {
|
||||||
|
errorLabel.setText("");
|
||||||
projectList = FXCollections.observableArrayList();
|
projectList = FXCollections.observableArrayList();
|
||||||
projectListView.setItems(projectList);
|
projectListView.setItems(projectList);
|
||||||
projectListView.setCellFactory(new Callback<ListView<ProjectListItem>, ListCell<ProjectListItem>>(){
|
projectListView.setCellFactory(new Callback<ListView<ProjectListItem>, ListCell<ProjectListItem>>(){
|
||||||
|
|
@ -164,5 +168,10 @@ public class SelectProjectDialog extends GuiWindow {
|
||||||
public void setProject(String project) {
|
public void setProject(String project) {
|
||||||
this.projectName = project;
|
this.projectName = project;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setErrorMessage(String errorMsg){
|
||||||
|
this.errorLabel.setText(errorMsg);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,15 +5,15 @@
|
||||||
<?import java.lang.*?>
|
<?import java.lang.*?>
|
||||||
<?import javafx.scene.layout.*?>
|
<?import javafx.scene.layout.*?>
|
||||||
|
|
||||||
|
|
||||||
<AnchorPane xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1">
|
<AnchorPane xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1">
|
||||||
<children>
|
<children>
|
||||||
<ScrollPane fitToHeight="true" fitToWidth="true" hbarPolicy="NEVER" prefHeight="248.0" prefWidth="396.0" AnchorPane.bottomAnchor="50.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
<ScrollPane fitToHeight="true" fitToWidth="true" hbarPolicy="NEVER" prefHeight="248.0" prefWidth="396.0" AnchorPane.bottomAnchor="57.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
<content>
|
<content>
|
||||||
<ListView fx:id="serverListView" onKeyPressed="#keyPressed" onMouseClicked="#mouseClickedOnList" prefHeight="200.0" prefWidth="200.0" />
|
<ListView fx:id="serverListView" onKeyPressed="#keyPressed" onMouseClicked="#mouseClickedOnList" prefHeight="200.0" prefWidth="200.0" />
|
||||||
</content>
|
</content>
|
||||||
</ScrollPane>
|
</ScrollPane>
|
||||||
<GridPane layoutY="171.0" prefHeight="50.0" prefWidth="396.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0">
|
<Label fx:id="errorLabel" text="Error Message" textFill="RED" AnchorPane.bottomAnchor="40.0" AnchorPane.leftAnchor="3.0" AnchorPane.rightAnchor="3.0" />
|
||||||
|
<GridPane layoutY="171.0" prefHeight="35.0" prefWidth="396.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0">
|
||||||
<columnConstraints>
|
<columnConstraints>
|
||||||
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
|
@ -22,7 +22,8 @@
|
||||||
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
</rowConstraints>
|
</rowConstraints>
|
||||||
<children>
|
<children>
|
||||||
<HBox alignment="CENTER_RIGHT" maxHeight="-Infinity" minHeight="-Infinity" prefHeight="100.0" prefWidth="200.0" GridPane.columnIndex="1">
|
<HBox alignment="CENTER_LEFT" prefWidth="200.0" />
|
||||||
|
<HBox alignment="TOP_RIGHT" prefWidth="200.0" GridPane.columnIndex="1">
|
||||||
<children>
|
<children>
|
||||||
<Button fx:id="exitButton" mnemonicParsing="false" onAction="#exit" text="Exit">
|
<Button fx:id="exitButton" mnemonicParsing="false" onAction="#exit" text="Exit">
|
||||||
<HBox.margin>
|
<HBox.margin>
|
||||||
|
|
@ -36,7 +37,6 @@
|
||||||
</Button>
|
</Button>
|
||||||
</children>
|
</children>
|
||||||
</HBox>
|
</HBox>
|
||||||
<HBox alignment="CENTER_LEFT" prefHeight="100.0" prefWidth="200.0" />
|
|
||||||
</children>
|
</children>
|
||||||
</GridPane>
|
</GridPane>
|
||||||
</children>
|
</children>
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ import javafx.collections.ObservableList;
|
||||||
import javafx.event.ActionEvent;
|
import javafx.event.ActionEvent;
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.scene.control.Button;
|
import javafx.scene.control.Button;
|
||||||
|
import javafx.scene.control.Label;
|
||||||
import javafx.scene.control.ListCell;
|
import javafx.scene.control.ListCell;
|
||||||
import javafx.scene.control.ListView;
|
import javafx.scene.control.ListView;
|
||||||
import javafx.scene.input.KeyCode;
|
import javafx.scene.input.KeyCode;
|
||||||
|
|
@ -37,6 +38,7 @@ public class SelectServerDialog extends GuiWindow {
|
||||||
@FXML private ListView<ServerListItem> serverListView;
|
@FXML private ListView<ServerListItem> serverListView;
|
||||||
@FXML private Button exitButton;
|
@FXML private Button exitButton;
|
||||||
@FXML private Button connectButton;
|
@FXML private Button connectButton;
|
||||||
|
@FXML private Label errorLabel;
|
||||||
|
|
||||||
public SelectServerDialog() throws IOException {
|
public SelectServerDialog() throws IOException {
|
||||||
super(SelectServerDialog.class.getResource("SelectServerDialog.fxml"));
|
super(SelectServerDialog.class.getResource("SelectServerDialog.fxml"));
|
||||||
|
|
@ -57,6 +59,7 @@ public class SelectServerDialog extends GuiWindow {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize(URL fxmlFileLocation, ResourceBundle resources) {
|
public void initialize(URL fxmlFileLocation, ResourceBundle resources) {
|
||||||
|
errorLabel.setText("");
|
||||||
serverList = FXCollections.observableArrayList();
|
serverList = FXCollections.observableArrayList();
|
||||||
serverListView.setItems(serverList);
|
serverListView.setItems(serverList);
|
||||||
serverListView.setCellFactory(new Callback<ListView<ServerListItem>, ListCell<ServerListItem>>(){
|
serverListView.setCellFactory(new Callback<ListView<ServerListItem>, ListCell<ServerListItem>>(){
|
||||||
|
|
@ -146,4 +149,9 @@ public class SelectServerDialog extends GuiWindow {
|
||||||
serverList.clear();
|
serverList.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setErrorMessage(String errorMsg) {
|
||||||
|
this.errorLabel.setText(errorMsg);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue