Skip to content

Commit 261de61

Browse files
authored
Issue #157: Refresh projects on change event (#158)
1 parent 2205f08 commit 261de61

File tree

5 files changed

+49
-11
lines changed

5 files changed

+49
-11
lines changed

dev/com.ibm.microclimate.core/src/com/ibm/microclimate/core/internal/connection/MicroclimateSocket.java

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -306,20 +306,18 @@ private void onProjectCreation(JSONObject event) throws JSONException {
306306
MCLogger.logError("No application found matching the project id for the project creation event: " + projectID); //$NON-NLS-1$
307307
}
308308
MCUtil.updateConnection(mcConnection);
309-
String projectName = event.has(MCConstants.KEY_NAME) ? event.getString(MCConstants.KEY_NAME) : null;
310-
if (projectName != null) {
311-
IOperationHandler handler = projectCreateHandlers.get(projectName);
312-
if (handler != null) {
313-
handler.operationComplete(true, null);
314-
}
315-
}
309+
invokeProjectCreateHandler(app);
316310
}
317311

318312
private void onProjectChanged(JSONObject event) throws JSONException {
319313
String projectID = event.getString(MCConstants.KEY_PROJECT_ID);
320314
MicroclimateApplication app = mcConnection.getAppByID(projectID);
321315
if (app == null) {
322-
MCLogger.logError("No application found matching the project id for the project changed event: " + projectID); //$NON-NLS-1$
316+
// Likely a new project is being created
317+
mcConnection.refreshApps(projectID);
318+
MCUtil.updateConnection(mcConnection);
319+
app = mcConnection.getAppByID(projectID);
320+
invokeProjectCreateHandler(app);
323321
return;
324322
}
325323

@@ -362,7 +360,11 @@ private void onProjectSettingsChanged(JSONObject event) throws JSONException {
362360
String projectID = event.getString(MCConstants.KEY_PROJECT_ID);
363361
MicroclimateApplication app = mcConnection.getAppByID(projectID);
364362
if (app == null) {
365-
MCLogger.logError("No application found matching the project id for the project settings changed event: " + projectID); //$NON-NLS-1$
363+
// Likely a new project is being created
364+
mcConnection.refreshApps(projectID);
365+
MCUtil.updateConnection(mcConnection);
366+
app = mcConnection.getAppByID(projectID);
367+
invokeProjectCreateHandler(app);
366368
return;
367369
}
368370

@@ -383,6 +385,8 @@ private void onProjectStatusChanged(JSONObject event) throws JSONException {
383385
// Likely a new project is being created
384386
mcConnection.refreshApps(projectID);
385387
MCUtil.updateConnection(mcConnection);
388+
app = mcConnection.getAppByID(projectID);
389+
invokeProjectCreateHandler(app);
386390
return;
387391
}
388392

@@ -550,6 +554,8 @@ private void onProjectLogsListChanged(JSONObject event) throws JSONException {
550554
// Likely a new project is being created
551555
mcConnection.refreshApps(projectID);
552556
MCUtil.updateConnection(mcConnection);
557+
app = mcConnection.getAppByID(projectID);
558+
invokeProjectCreateHandler(app);
553559
return;
554560
}
555561

@@ -651,4 +657,14 @@ boolean blockUntilFirstConnection() {
651657
MCLogger.log("MicroclimateSocket initialized in time ? " + hasConnected); //$NON-NLS-1$
652658
return hasConnected;
653659
}
660+
661+
private void invokeProjectCreateHandler(MicroclimateApplication app) {
662+
if (app == null) {
663+
return;
664+
}
665+
IOperationHandler handler = projectCreateHandlers.get(app.name);
666+
if (handler != null) {
667+
handler.operationComplete(true, null);
668+
}
669+
}
654670
}

dev/com.ibm.microclimate.ui/src/com/ibm/microclimate/ui/internal/messages/Messages.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ public class Messages extends NLS {
146146
public static String NewProjectPage_ImportLabel;
147147
public static String NewProjectPage_ProjectNameLabel;
148148
public static String NewProjectPage_ProjectExistsError;
149+
public static String NewProjectPage_EclipseProjectExistsError;
149150
public static String NewProjectPage_InvalidProjectName;
150151
public static String NewProjectPage_ProjectCreateErrorTitle;
151152
public static String NewProjectPage_ProjectCreateErrorMsg;

dev/com.ibm.microclimate.ui/src/com/ibm/microclimate/ui/internal/messages/messages.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ NewProjectPage_DescriptionNone=<none>
139139
NewProjectPage_ImportLabel=Import project after it is created
140140
NewProjectPage_ProjectNameLabel=Project name:
141141
NewProjectPage_ProjectExistsError=A Microclimate project named {0} already exists. Choose a unique name.
142+
NewProjectPage_EclipseProjectExistsError=The import button is selected but an Eclipse project named {0} already exists. Choose a unique name.
142143
NewProjectPage_InvalidProjectName=Use only lower case letters and numbers in the project name.
143144
NewProjectPage_ProjectCreateErrorTitle=Project Create Error
144145
NewProjectPage_ProjectCreateErrorMsg=An error occurred trying to create Microclimate project {0}: {1}

dev/com.ibm.microclimate.ui/src/com/ibm/microclimate/ui/internal/wizards/NewMicroclimateProjectPage.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
import java.util.List;
1616
import java.util.regex.Pattern;
1717

18+
import org.eclipse.core.resources.IProject;
19+
import org.eclipse.core.resources.ResourcesPlugin;
1820
import org.eclipse.jface.viewers.ColumnWeightData;
1921
import org.eclipse.jface.viewers.TableLayout;
2022
import org.eclipse.jface.wizard.WizardPage;
@@ -234,10 +236,18 @@ private boolean validate() {
234236
if (!projectNamePattern.matcher(projectName).matches()) {
235237
setErrorMessage(Messages.NewProjectPage_InvalidProjectName);
236238
return false;
237-
} else if (connection.getAppByName(projectName) != null) {
239+
}
240+
if (connection.getAppByName(projectName) != null) {
238241
setErrorMessage(NLS.bind(Messages.NewProjectPage_ProjectExistsError, projectName));
239242
return false;
240243
}
244+
if (importButton.getSelection()) {
245+
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
246+
if (project != null && project.exists()) {
247+
setErrorMessage(NLS.bind(Messages.NewProjectPage_EclipseProjectExistsError, projectName));
248+
return false;
249+
}
250+
}
241251
setErrorMessage(null);
242252
return selectionTable.getSelectionCount() == 1 && projectName != null && !projectName.isEmpty();
243253
}

dev/com.ibm.microclimate.ui/src/com/ibm/microclimate/ui/internal/wizards/NewMicroclimateProjectWizard.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313

1414
import java.util.List;
1515

16+
import org.eclipse.core.resources.IProject;
17+
import org.eclipse.core.resources.ResourcesPlugin;
1618
import org.eclipse.jface.wizard.Wizard;
1719
import org.eclipse.osgi.util.NLS;
1820
import org.eclipse.swt.widgets.Display;
@@ -74,9 +76,17 @@ public void run() {
7476
}
7577
});
7678
if (importProject) {
77-
ImportProjectAction.importProject(app);
79+
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(app.name);
80+
if (project == null || !project.exists()) {
81+
ImportProjectAction.importProject(app);
82+
} else {
83+
// This should not happen since the wizard checks for this
84+
MCLogger.logError("The project cannot be imported because a project already exists with the name: " + app.name);
85+
}
7886
}
7987
return;
88+
} else {
89+
MCLogger.logError("An import operation was requested but the application could not be found for: " + name);
8090
}
8191
}
8292
}

0 commit comments

Comments
 (0)