[390603] Publish before start servers synchronization problem
[390693] Finish button not disabled when no entries selected
[390696] New Server wizard doesn't block user from creating server
with existing name
[390698] Runtime search function results in duplicate entries on
Server Runtime Environments preferences page
[390702] ServerToolTip too aggressive at opening tooltips
[390705] ServerToolTip escape on focussed tooltip not working
perfectly
diff --git a/features/org.eclipse.wst.server_core.feature.patch/buildnotes_org.eclipse.wst.server_core.feature.patch.html b/features/org.eclipse.wst.server_core.feature.patch/buildnotes_org.eclipse.wst.server_core.feature.patch.html
index 7d8a423..2dc1278 100644
--- a/features/org.eclipse.wst.server_core.feature.patch/buildnotes_org.eclipse.wst.server_core.feature.patch.html
+++ b/features/org.eclipse.wst.server_core.feature.patch/buildnotes_org.eclipse.wst.server_core.feature.patch.html
@@ -15,6 +15,5 @@
<h3>Plugin(s) replaced:</h3>
<ul><li>org.eclipse.wst.server.core</li></ul>
<p>Bug <a href='https://bugs.eclipse.org/377845'>377845</a>. The server timeout timer begins at the incorrect time (port to 3.3.2 patches)</p>
-
-
+<p>Bug <a href='https://bugs.eclipse.org/390603'>390603</a>. Publish before start servers synchronization problem</p>
</body></html>
\ No newline at end of file
diff --git a/features/org.eclipse.wst.server_core.feature.patch/feature.properties b/features/org.eclipse.wst.server_core.feature.patch/feature.properties
index e9c9606..c362362 100644
--- a/features/org.eclipse.wst.server_core.feature.patch/feature.properties
+++ b/features/org.eclipse.wst.server_core.feature.patch/feature.properties
@@ -28,6 +28,7 @@
Contains fixes described in the following bugzilla(s):\n\
\n\
Bug https://bugs.eclipse.org/377845 The server timeout timer begins at the incorrect time (port to 3.3.2 patches)\n\
+Bug https://bugs.eclipse.org/390603 Publish before start servers synchronization problem\n\
\n\
# "copyright" property - text of the "Feature Update Copyright"
copyright=\
diff --git a/features/org.eclipse.wst.server_ui.feature.patch/buildnotes_org.eclipse.wst.server_ui.feature.patch.html b/features/org.eclipse.wst.server_ui.feature.patch/buildnotes_org.eclipse.wst.server_ui.feature.patch.html
index bc9f758..c447d31 100644
--- a/features/org.eclipse.wst.server_ui.feature.patch/buildnotes_org.eclipse.wst.server_ui.feature.patch.html
+++ b/features/org.eclipse.wst.server_ui.feature.patch/buildnotes_org.eclipse.wst.server_ui.feature.patch.html
@@ -23,5 +23,9 @@
<p>Bug <a href='https://bugs.eclipse.org/375507'>375507</a>. deleting a server with a dirty server editor</p>
<p>Bug <a href='https://bugs.eclipse.org/377000'>377000</a>. Run on Server Wizard server name and status cannot be re-sized (target for 3.3 patches)</p>
<p>Bug <a href='https://bugs.eclipse.org/378172'>378172</a>. Server view tooltip not colour accessible (port for 3.3.2 patches)</p>
-
+<p>Bug <a href='https://bugs.eclipse.org/390693'>390693</a>. Finish button not disabled when no entries selected</p>
+<p>Bug <a href='https://bugs.eclipse.org/390696'>390696</a>. New Server wizard doesn't block user from creating server with existing name</p>
+<p>Bug <a href='https://bugs.eclipse.org/390698'>390698</a>. Runtime search function results in duplicate entries on Server Runtime Environments preferences page</p>
+<p>Bug <a href='https://bugs.eclipse.org/390702'>390702</a>. ServerToolTip too aggressive at opening tooltips</p>
+<p>Bug <a href='https://bugs.eclipse.org/390705'>390705</a>. ServerToolTip escape on focussed tooltip not working perfectly</p>
</body></html>
\ No newline at end of file
diff --git a/features/org.eclipse.wst.server_ui.feature.patch/feature.properties b/features/org.eclipse.wst.server_ui.feature.patch/feature.properties
index 183b17c..3b0b9dc 100644
--- a/features/org.eclipse.wst.server_ui.feature.patch/feature.properties
+++ b/features/org.eclipse.wst.server_ui.feature.patch/feature.properties
@@ -35,6 +35,11 @@
Bug https://bugs.eclipse.org/375507 deleting a server with a dirty server editor\n\
Bug https://bugs.eclipse.org/377000 Run on Server Wizard server name and status cannot be re-sized (target for 3.3 patches)\n\
Bug https://bugs.eclipse.org/378172 Server view tooltip not colour accessible (port for 3.3.2 patches)\n\
+Bug https://bugs.eclipse.org/390693 Finish button not disabled when no entries selected\n\
+Bug https://bugs.eclipse.org/390696 New Server wizard doesn't block user from creating server with existing name\n\
+Bug https://bugs.eclipse.org/390698 Runtime search function results in duplicate entries on Server Runtime Environments preferences page\n\
+Bug https://bugs.eclipse.org/390702 ServerToolTip too aggressive at opening tooltips \n\
+Bug https://bugs.eclipse.org/390705 ServerToolTip escape on focussed tooltip not working perfectly\n\
\n\
# "copyright" property - text of the "Feature Update Copyright"
copyright=\
diff --git a/plugins/org.eclipse.wst.server.core/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.server.core/META-INF/MANIFEST.MF
index 826b8ba..7898880 100644
--- a/plugins/org.eclipse.wst.server.core/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.server.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.wst.server.core; singleton:=true
-Bundle-Version: 1.1.305.qualifier
+Bundle-Version: 1.1.306.qualifier
Bundle-Activator: org.eclipse.wst.server.core.internal.ServerPlugin
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Server.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Server.java
index 23c2494..df84497 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Server.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Server.java
@@ -375,11 +375,18 @@
public RestartJob(String launchMode) {
super(NLS.bind(Messages.jobRestarting, Server.this.getName()));
this.launchMode = launchMode;
- setRule(Server.this);
}
protected IStatus run(IProgressMonitor monitor) {
- return restartImpl(launchMode, monitor);
+ try{
+ // Do begin rule in here instead of setRule on constructor to prevent deadlock
+ // on the default restart operation during the join() in the StartJob.
+ Job.getJobManager().beginRule(Server.this, monitor);
+ return restartImpl(launchMode, monitor);
+ }
+ finally{
+ Job.getJobManager().endRule(Server.this);
+ }
}
}
@@ -1891,7 +1898,7 @@
job.schedule();
}
- protected IStatus publishBeforeStart(IProgressMonitor monitor, boolean synchronous){
+ protected IStatus publishBeforeStart(IProgressMonitor monitor, final StartJob startJob, final boolean synchronous){
// check if we need to publish
byte pub = StartJob.PUBLISH_NONE;
@@ -1910,22 +1917,53 @@
pubJob.addJobChangeListener(new JobChangeAdapter(){
public void done(IJobChangeEvent event) {
IStatus status = event.getResult();
- if (status != null && status.getSeverity() == IStatus.ERROR)
- pubStatus[0] = status;
+ if (status != null && status.getSeverity() == IStatus.ERROR) {
+ pubStatus[0] = status;
+ if (Trace.INFO) {
+ Trace.trace(Trace.STRING_INFO,
+ "Skipping server start job schedule since the server publish failed on a publish before start server.");
+ }
+ } else {
+ if (Trace.INFO) {
+ Trace.trace(Trace.STRING_INFO,
+ "Scheduling server start job after successful publish.");
+ }
+ // Schedule the server start job since the publish operation is completed successfully.
+ startJob.schedule();
+
+ try {
+ if (synchronous)
+ startJob.join();
+ } catch (InterruptedException e) {
+ if (Trace.WARNING) {
+ Trace.trace(Trace.STRING_WARNING, "Error waiting for job", e);
+ }
+ }
+ }
}
});
-
pubJob.schedule();
- try{
+ try {
if (synchronous)
pubJob.join();
-
- }
- catch (InterruptedException ie){
+ } catch (InterruptedException ie) {
return Status.CANCEL_STATUS;
}
+ } else {
+ // Schedule the server start since a publish is not needed so
+ // Schedule the server start job since the publish operation is completed successfully.
+ startJob.schedule();
+
+ try {
+ if (synchronous)
+ startJob.join();
+ } catch (InterruptedException e) {
+ if (Trace.WARNING) {
+ Trace.trace(Trace.STRING_WARNING, "Error waiting for job", e);
+ }
+ }
}
return pubStatus[0];
}
@@ -1989,18 +2027,10 @@
// make sure that the delegate is loaded and the server state is correct
loadAdapter(ServerBehaviourDelegate.class, null);
- IStatus status = publishBeforeStart(monitor,false);
-
- if (status != null && status.getSeverity() == IStatus.ERROR){
- if (Trace.FINEST) {
- Trace.trace(Trace.STRING_FINEST, "Failed publish job during start routine");
- }
- return;
- }
-
StartJob startJob = new StartJob(mode2);
// 287442 - only do publish after start if the server start is successful.
final IProgressMonitor monitor2 = monitor;
+ final boolean synchronous = false;
startJob.addJobChangeListener(new JobChangeAdapter() {
public void done(IJobChangeEvent event) {
IStatus resultStatus = event.getResult();
@@ -2010,11 +2040,31 @@
"Skipping auto publish after server start since the server start failed.");
}
} else {
- publishAfterStart(monitor2,false,null);
+ publishAfterStart(monitor2,synchronous,null);
}
}
});
- startJob.schedule();
+ // Forces synchronous start since this method is supposed to wait until the publish operation is completed.
+ IStatus status = publishBeforeStart(monitor, startJob, true);
+
+ if (status != null && status.getSeverity() == IStatus.ERROR){
+ if (Trace.FINEST) {
+ Trace.trace(Trace.STRING_FINEST, "Failed publish job during start routine");
+ }
+ return;
+ }
+
+ if (((ServerType)getServerType()).startBeforePublish()) {
+ startJob.schedule();
+ try {
+ if(synchronous)
+ startJob.join();
+ } catch (InterruptedException e) {
+ if (Trace.WARNING) {
+ Trace.trace(Trace.STRING_WARNING, "Error waiting for job", e);
+ }
+ }
+ }
}
/**
@@ -2030,17 +2080,6 @@
// make sure that the delegate is loaded and the server state is correct
loadAdapter(ServerBehaviourDelegate.class, null);
- IStatus status = publishBeforeStart(null,false);
-
- if (status != null && status.getSeverity() == IStatus.ERROR){
- if (Trace.FINEST) {
- Trace.trace(Trace.STRING_FINEST, "Failed publish job during start routine");
- }
- if (opListener != null)
- opListener.done(Status.OK_STATUS);
- return;
- }
-
// check the publish flag (again) to determine when to call opListener.done
byte pub = StartJob.PUBLISH_NONE;
if (ServerCore.isAutoPublishing() && shouldPublish()) {
@@ -2062,6 +2101,21 @@
}
});
}
+
+ final boolean synchronous = false;
+ // For publish before start servers, the start job will only be kicked off if the publishing
+ // operation is completed successfully.
+ IStatus status = publishBeforeStart(null, startJob, synchronous);
+
+ if (status != null && status.getSeverity() == IStatus.ERROR){
+ if (Trace.FINEST) {
+ Trace.trace(Trace.STRING_FINEST, "Failed publish job during start routine");
+ }
+ if (opListener != null)
+ opListener.done(Status.OK_STATUS);
+ return;
+ }
+
// 287442 - only do publish after start if the server start is successful.
if (pub == StartJob.PUBLISH_AFTER) {
startJob.addJobChangeListener(new JobChangeAdapter() {
@@ -2077,12 +2131,21 @@
opListener.done(Status.OK_STATUS);
}
else {
- publishAfterStart(null,false,opListener);
+ publishAfterStart(null,synchronous,opListener);
}
}
});
+ startJob.schedule();
+
+ try {
+ if(synchronous)
+ startJob.join();
+ } catch (InterruptedException e) {
+ if (Trace.WARNING) {
+ Trace.trace(Trace.STRING_WARNING, "Error waiting for job", e);
+ }
+ }
}
- startJob.schedule();
}
public void synchronousStart(String mode2, IProgressMonitor monitor) throws CoreException {
@@ -2092,15 +2155,6 @@
// make sure that the delegate is loaded and the server state is correct
loadAdapter(ServerBehaviourDelegate.class, monitor);
- IStatus status = publishBeforeStart(monitor,true);
-
- if (status != null && status.getSeverity() == IStatus.ERROR){
- if (Trace.FINEST) {
- Trace.trace(Trace.STRING_FINEST, "Failed publish job during start routine");
- }
- return;
- }
-
StartJob startJob = new StartJob(mode2);
// 287442 - only do publish after start if the server start is successful.
final IProgressMonitor monitor2 = monitor;
@@ -2117,13 +2171,25 @@
}
}
});
- startJob.schedule();
- try {
- startJob.join();
- } catch (InterruptedException e) {
- if (Trace.WARNING) {
- Trace.trace(Trace.STRING_WARNING, "Error waiting for job", e);
+ IStatus status = publishBeforeStart(monitor, startJob, true);
+
+ if (status != null && status.getSeverity() == IStatus.ERROR){
+ if (Trace.FINEST) {
+ Trace.trace(Trace.STRING_FINEST, "Failed publish job during start routine");
+ }
+ return;
+ }
+
+ if (((ServerType)getServerType()).startBeforePublish()) {
+ startJob.schedule();
+
+ try {
+ startJob.join();
+ } catch (InterruptedException e) {
+ if (Trace.WARNING) {
+ Trace.trace(Trace.STRING_WARNING, "Error waiting for job", e);
+ }
}
}
}
@@ -3126,6 +3192,7 @@
Trace.trace(Trace.STRING_FINEST, "Restarting server: " + getName());
}
+ ISchedulingRule curRule = null;
try {
try {
// synchronous restart
@@ -3142,14 +3209,21 @@
}
// if restart is not implemented by the server adopter
// lets provide a default implementation
+ // Ending the current rule setup by the RestartJob to prevent deadlock since the StopJob triggered
+ // by the stop(false) also setup the Server as the scheduling rule.
+ curRule = Job.getJobManager().currentRule();
+ Job.getJobManager().endRule(curRule);
stop(false);
start(launchMode, monitor);
-
} catch (Exception e) {
if (Trace.SEVERE) {
Trace.trace(Trace.STRING_SEVERE, "Error restarting server", e);
}
return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorStartFailed, getName()), e);
+ } finally {
+ if (curRule != null) {
+ Job.getJobManager().beginRule(curRule, monitor);
+ }
}
return Status.OK_STATUS;
}
@@ -3256,7 +3330,7 @@
getBehaviourDelegate(null).restart(launchMode);
thread.setDaemon(true);
- thread.start();
+ thread.start();
} catch (CoreException e) {
removeServerListener(listener);
timer.alreadyDone = true;
@@ -3402,7 +3476,6 @@
thread.start();
} catch (CoreException e) {
removeServerListener(listener);
- timer.alreadyDone = true;
return e.getStatus();
}
if (monitor.isCanceled()) {
@@ -3517,13 +3590,13 @@
if (serverTimeout > 0) {
thread = new Thread("Server Stop Timeout") {
public void run() {
- try {
+ try {
int totalTimeout = serverTimeout;
if (totalTimeout < 0)
totalTimeout = 1;
int retryPeriod = 1000;
-
+
while (totalTimeout > 0 && !timer.alreadyDone){
Thread.sleep(retryPeriod);
if (serverTimeout > 0)
diff --git a/plugins/org.eclipse.wst.server.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.server.ui/META-INF/MANIFEST.MF
index da90d9b..a797596 100644
--- a/plugins/org.eclipse.wst.server.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.server.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.wst.server.ui; singleton:=true
-Bundle-Version: 1.3.1.qualifier
+Bundle-Version: 1.3.2.qualifier
Bundle-Activator: org.eclipse.wst.server.ui.internal.ServerUIPlugin
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.java
index af8285e..a48ac33 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.java
@@ -1,5 +1,5 @@
/**********************************************************************
- * Copyright (c) 2005, 2011 IBM Corporation and others.
+ * Copyright (c) 2005, 2012 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -268,6 +268,7 @@
public static String editorRenameFiles;
public static String errorEditorCantSave;
public static String errorDuplicateName;
+ public static String errorDuplicateServerName;
public static String editorReadOnly;
public static String editorWritable;
public static String editorResourceModifiedTitle;
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.properties b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.properties
index cb9ff0b..7304db5 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.properties
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.properties
@@ -1,5 +1,5 @@
###############################################################################
-# Copyright (c) 2004, 2011 IBM Corporation and others.
+# Copyright (c) 2004, 2012 IBM Corporation and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
@@ -401,6 +401,7 @@
errorConfigurationNotAccessible=The server configuration is not accessible. The {0} project is closed.
errorRootModule=Could not find a valid parent module to add to the server.
errorDuplicateName=The name is already in use. Specify a different name.
+errorDuplicateServerName=The server name is already in use. Specify a different name.
# Info messages
infoNoRuntimesFound=No new server runtime environments were found.
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RuntimePreferencePage.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RuntimePreferencePage.java
index 16b86f3..1283443 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RuntimePreferencePage.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RuntimePreferencePage.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2003, 2011 IBM Corporation and others.
+ * Copyright (c) 2003, 2012 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -281,7 +281,7 @@
Trace.trace(Trace.STRING_SEVERE, "Error finding runtimes", ex);
}
}
- runtimeComp.refresh();
+ runtimeComp2.refresh();
}
});
@@ -434,7 +434,7 @@
final RuntimeComposite runtimeComp2 = this.runtimeComp;
Display.getDefault().asyncExec(new Runnable(){
public void run(){
- runtimeComp2.add(runtime);
+ runtimeComp2.refresh();
}
});
}
@@ -442,7 +442,7 @@
final RuntimeComposite runtimeComp2 = this.runtimeComp;
Display.getDefault().asyncExec(new Runnable(){
public void run(){
- runtimeComp2.remove(runtime);
+ runtimeComp2.refresh();
}
});
}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerToolTip.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerToolTip.java
index 1ff11a6..e84746f 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerToolTip.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerToolTip.java
@@ -86,7 +86,16 @@
| SWT.NO_FOCUS);
stickyTooltip.setLayout(new FillLayout());
stickyTooltip.setBackground(stickyTooltip.getDisplay().getSystemColor(SWT.COLOR_INFO_BACKGROUND));
-
+ stickyTooltip.addShellListener(new ShellAdapter() {
+ public void shellClosed(ShellEvent e) {
+ if (CURRENT_TOOLTIP != null) {
+ CURRENT_TOOLTIP.dispose();
+ CURRENT_TOOLTIP = null;
+ }
+ activate();
+ }
+ });
+
control.getDisplay().asyncExec(new Runnable() {
public void run() {
Event event = new Event();
@@ -130,8 +139,25 @@
}
protected final boolean shouldCreateToolTip(Event event) {
- if (tree.getItem(new Point(event.x, event.y)) == null)
+ Object o = tree.getItem(new Point(event.x, event.y));
+ if (o == null) {
return false;
+ }
+ IServer server = null;
+ IServerModule module = null;
+ if (o instanceof TreeItem) {
+ Object obj = ((TreeItem)o).getData();
+ if (obj instanceof IServer) {
+ server = (IServer) obj;
+ }
+ if (obj instanceof IServerModule) {
+ module = (IServerModule) obj;
+ }
+ }
+ // Only enable for supported objects.
+ if (server == null && module == null) {
+ return false;
+ }
return super.shouldCreateToolTip(event);
}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewRuntimeWizardFragment.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewRuntimeWizardFragment.java
index 273d1ed..2aaa32f 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewRuntimeWizardFragment.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewRuntimeWizardFragment.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2012 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -40,6 +40,10 @@
protected Map<String, WizardFragment> fragmentMap = new HashMap<String, WizardFragment>();
+ // Storing the NewRuntimeComposite is required to determine if the selected item
+ // by the user is a valid server runtime
+ protected NewRuntimeComposite comp;
+
public NewRuntimeWizardFragment() {
// do nothing
}
@@ -58,7 +62,8 @@
* @see org.eclipse.wst.server.ui.internal.task.WizardTask#getWizardPage()
*/
public Composite createComposite(Composite parent, IWizardHandle wizard) {
- return new NewRuntimeComposite(parent, wizard, getTaskModel(), type, version, runtimeTypeId);
+ comp = new NewRuntimeComposite(parent, wizard, getTaskModel(), type, version, runtimeTypeId);
+ return comp;
}
public List getChildFragments() {
@@ -121,4 +126,13 @@
fragmentMap.put(typeId, fragment);
return fragment;
}
+
+ public boolean isComplete(){
+ // If the selected runtime is invalid, the wizard
+ // should not allow the user to press Finish
+ if (comp.hasValidSelectedRuntime()){
+ return true;
+ }
+ return false;
+ }
}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewServerWizardFragment.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewServerWizardFragment.java
index 5747e58..ba6c982 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewServerWizardFragment.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewServerWizardFragment.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2003, 2011 IBM Corporation and others.
+ * Copyright (c) 2003, 2012 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -149,10 +149,15 @@
if(getServer().getServerType() == null)
return false;
- return checkHostAndServerType();
+ return checkValidInput();
}
- private boolean checkHostAndServerType(){
+ /*
+ * Checks for valid host name, server type, and server name
+ *
+ * @return true if input is valid, false otherwise
+ */
+ private boolean checkValidInput(){
boolean isComplete = false;
boolean supportsRemote = getServer().getServerType().supportsRemoteHosts();
@@ -165,6 +170,10 @@
return false;
}
+ if (manualComp.isServerNameInUse()){
+ return false;
+ }
+
if (manualComp.getCurrentHostname().trim().length() == 0){
isComplete = false;
} else if(!supportsRemote && !SocketUtil.isLocalhost(manualComp.getCurrentHostname())){
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewManualServerComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewManualServerComposite.java
index 9b33496..45a26d8 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewManualServerComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewManualServerComposite.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2003, 2011 IBM Corporation and others.
+ * Copyright (c) 2003, 2012 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -40,6 +40,7 @@
import org.eclipse.ui.dialogs.PreferencesUtil;
import org.eclipse.ui.help.IWorkbenchHelpSystem;
import org.eclipse.wst.server.core.*;
+import org.eclipse.wst.server.core.internal.ServerPlugin;
import org.eclipse.wst.server.core.internal.ServerWorkingCopy;
import org.eclipse.wst.server.core.util.SocketUtil;
import org.eclipse.wst.server.ui.AbstractUIControl;
@@ -110,6 +111,10 @@
private boolean canSupportModule=true;
+ // These variables deal with caching server name checks
+ private boolean isServerNameInUse=false;
+ private String cacheServerNameCheck="";
+
/**
* Creates a new server and server configuration. If the initial
* resource selection contains exactly one container resource then it will be
@@ -236,6 +241,13 @@
return;
String name = serverName.getText();
+
+ IServerType selectedServerType = serverTypeComposite.getSelectedServerType();
+ if (validate(selectedServerType)) {
+ // Do not set the server name if it is invalid
+ return;
+ }
+
if (server != null) {
server.setName(name);
IRuntime runtime2 = server.getRuntime();
@@ -392,7 +404,7 @@
protected void handleHostnameChange(IServerType serverType) {
wizard.setMessage(null, IMessageProvider.NONE);
- if (!checkHostAndServerType(serverType)) {
+ if (!validate(serverType)) {
return;// Host name validation failed, so there is no need to continue handling hostname change event
}
loadServerImpl(serverType);
@@ -438,10 +450,23 @@
wizard.setMessage(NLS.bind(Messages.wizCheckRemoteSupport, new Object[0]), IMessageProvider.ERROR);
return false;
}
-
+
return true;
}
+ protected boolean checkServerName(){
+ if (isServerNameInUse()){
+ wizard.setMessage(Messages.errorDuplicateServerName, IMessageProvider.ERROR);
+ return false;
+ }
+ return true;
+ }
+
+ protected boolean validate(IServerType selectedServerType){
+ wizard.setMessage(null, IMessageProvider.NONE);
+ return (checkHostAndServerType(selectedServerType) & checkServerName());
+ }
+
/**
* Load a server of the given type.
*/
@@ -723,7 +748,7 @@
// Update the old server type value.
oldServerType = serverType;
- checkHostAndServerType(serverType);
+ validate(serverType);
wizard.update();
}
@@ -883,4 +908,28 @@
hostName = host;
}
}
+
+ /**
+ * Determines if the server name is in use. The server name that is checked
+ * is cached to increase performance on multiple calls.
+ *
+ * @return true if name is in use, false otherwise
+ */
+ public boolean isServerNameInUse(){
+ String myServerName="";
+ if (serverName != null){
+ myServerName = serverName.getText().trim();
+ // If the server name is equal to the cached server name, then return the
+ // previously cached value. If the server name is not equal to the cached
+ // server name, check to see if the name is in use
+ if (!cacheServerNameCheck.equals(myServerName)){
+ cacheServerNameCheck = myServerName;
+ isServerNameInUse = ServerPlugin.isNameInUse(server, serverName.getText().trim());
+ }
+ return isServerNameInUse;
+ }
+
+ // If the widget is null, return false
+ return false;
+ }
}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewRuntimeComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewRuntimeComposite.java
index 5962e97..c8d69d0 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewRuntimeComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewRuntimeComposite.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2003, 2011 IBM Corporation and others.
+ * Copyright (c) 2003, 2012 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -202,4 +202,17 @@
c[i].setVisible(visible);
}
}
+
+ /**
+ *
+ * Determines if the selected runtime is a
+ * valid.
+ *
+ */
+ public boolean hasValidSelectedRuntime(){
+ if (runtime == null){
+ return false;
+ }
+ return true;
+ }
}
\ No newline at end of file