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 com.coder.client.Session;
|
||||
import com.coder.client.gui.GuiWindow;
|
||||
import com.coder.client.gui.editor.EditorWindow;
|
||||
import com.coder.client.gui.editor.EditorWindowListener;
|
||||
import com.coder.client.gui.login.LoginDialog;
|
||||
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.SelectProjectDialogListener;
|
||||
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.message.CoderMessage;
|
||||
import com.coder.server.message.ConfigData;
|
||||
import com.coder.server.message.ProjectCreateReqMsg;
|
||||
import com.coder.server.message.ProjectListData;
|
||||
import com.coder.server.message.ProjectListReqMsg;
|
||||
import com.coder.server.message.ProjectReqMsg;
|
||||
import com.coder.server.message.ProjectRspMsg;
|
||||
import com.coder.server.message.ProjectTypeReqMsg;
|
||||
|
||||
import zutil.log.CompactLogFormatter;
|
||||
import zutil.log.LogUtil;
|
||||
|
|
@ -41,14 +47,15 @@ public class CoderClient extends Application{
|
|||
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 loginErrorMessage = "";
|
||||
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;
|
||||
|
|
@ -96,6 +103,7 @@ public class CoderClient extends Application{
|
|||
setupLoginDialog();
|
||||
setupSelectProjectDialog();
|
||||
setupEditWindow();
|
||||
setupNewProjectDialog();
|
||||
}catch(IOException e){
|
||||
logger.log(Level.SEVERE, "could not load all GUI elements", e);
|
||||
System.exit(1);
|
||||
|
|
@ -111,7 +119,7 @@ public class CoderClient extends Application{
|
|||
|
||||
//start program logic
|
||||
selectServerDialog.showOnStage(mainStage);
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void setupSelectServerDialog() throws IOException{
|
||||
|
|
@ -120,9 +128,9 @@ public class CoderClient extends Application{
|
|||
@Override
|
||||
public void willShow() {
|
||||
closeCurrentSession();
|
||||
ssdpClient.clearServices();
|
||||
selectServerDialog.clearServerList();
|
||||
if(ssdpClient != null){
|
||||
ssdpClient.clearServices();
|
||||
ssdpClient.requestService("coder:discover");
|
||||
}else{
|
||||
logger.severe("could not send a SSDP request since the client is not setup");
|
||||
|
|
@ -133,11 +141,10 @@ public class CoderClient extends Application{
|
|||
@Override
|
||||
public void exit() {
|
||||
logger.info("terminating");
|
||||
System.exit(0);
|
||||
Platform.exit();
|
||||
}
|
||||
@Override
|
||||
public void connect(String address, int port) {
|
||||
//selectServerDialog.hide();
|
||||
serverURL = address;
|
||||
serverPort = port;
|
||||
//connect session
|
||||
|
|
@ -146,8 +153,31 @@ public class CoderClient extends Application{
|
|||
logger.warning("Could not setup a connection to " + serverURL + ":" + port);
|
||||
serverURL = null;
|
||||
serverPort = CoderServer.SERVER_PORT;
|
||||
selectServerDialog.setErrorMessage("ERROR: Unable to connect to remote host");
|
||||
selectServerDialog.showOnStage(mainStage);
|
||||
}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);
|
||||
}
|
||||
}
|
||||
|
|
@ -161,7 +191,6 @@ public class CoderClient extends Application{
|
|||
public void willShow() {
|
||||
loginDialog.setUsername(username);
|
||||
loginDialog.setPassword(password);
|
||||
loginDialog.setErrorMessage(loginErrorMessage);
|
||||
}
|
||||
@Override
|
||||
public void cancel() {
|
||||
|
|
@ -178,38 +207,83 @@ public class CoderClient extends Application{
|
|||
if(!authenticated){
|
||||
logger.severe("Authentication failed: wrong username or password");
|
||||
password = null;
|
||||
loginErrorMessage = "Wrong username or password";
|
||||
loginDialog.setErrorMessage("Wrong username or password");
|
||||
selectServerDialog.showOnStage(mainStage);
|
||||
return;
|
||||
}else{
|
||||
loginErrorMessage = "";
|
||||
loginDialog.setErrorMessage("");
|
||||
setupSessionListener(); //resister a message listener to the session
|
||||
session.start(); //start receiving traffic from the server
|
||||
selectProjectDialog.showOnStage(mainStage);
|
||||
}
|
||||
}
|
||||
private void setupSessionListener(){
|
||||
session.addCoderMessageReceivedListener(new CoderMessageReceivedListener() {
|
||||
@Override
|
||||
public void projectListRspReceived(final Map<String, ProjectListData> projectListRsp) {
|
||||
Platform.runLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
for(String projectName : projectListRsp.keySet()){
|
||||
ProjectListData projectData = projectListRsp.get(projectName);
|
||||
selectProjectDialog.addProjectToList(projectName, projectData);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
@Override
|
||||
public void projectRspReceived(ProjectRspMsg projectRspMsg) {
|
||||
// TODO Auto-generated method stub
|
||||
}
|
||||
@Override
|
||||
public void projectTypeRspReceived(Map<String, ConfigData> projectTypeRsp) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* To be called after a session has been connected and authenticated
|
||||
*/
|
||||
private void setupSessionListener(){
|
||||
if(session == null){
|
||||
logger.warning("Cannot setup session listeners for null instance. ignoring call.");
|
||||
return;
|
||||
}
|
||||
if(!session.isAuthenticated()){
|
||||
logger.warning("Cannot setup session listeners for a non-authenticated session. ignoring call.");
|
||||
return;
|
||||
}
|
||||
session.addCoderMessageReceivedListener(new CoderMessageReceivedListener() {
|
||||
@Override
|
||||
public void projectListRspReceived(final Map<String, ProjectListData> projectListRsp) {
|
||||
logger.fine("a ProjectListRsp received");
|
||||
Platform.runLater(new Runnable() {
|
||||
@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
|
||||
public void willShow() {
|
||||
selectProjectDialog.clearProjectList();
|
||||
if(project == null){
|
||||
if(project == null || project.isEmpty()){
|
||||
sendProjectListReq();
|
||||
}else{
|
||||
selectProjectDialog.setProject(project);
|
||||
}
|
||||
selectProjectDialog.setProject(project);
|
||||
}
|
||||
@Override
|
||||
public void open(String selectedProjectName) {
|
||||
projectSelectionWindow = selectProjectDialog;
|
||||
project = selectedProjectName;
|
||||
editorWindow.showOnStage(mainStage);
|
||||
}
|
||||
@Override
|
||||
public void newProject() {
|
||||
//TODO
|
||||
project = null;
|
||||
newProjectDialog.showOnStage(mainStage);
|
||||
}
|
||||
@Override
|
||||
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 {
|
||||
this.editorWindow = new EditorWindow();
|
||||
this.editorWindow.addEditorWindowListener(new EditorWindowListener() {
|
||||
@Override
|
||||
public void willShow() {
|
||||
//TODO
|
||||
sendProjectReqMsg();
|
||||
}
|
||||
@Override
|
||||
public void compile() {
|
||||
|
|
@ -276,6 +396,22 @@ public class CoderClient extends Application{
|
|||
public void run() {
|
||||
//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);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue