Author: rombert
Date: Fri May 23 20:07:50 2014
New Revision: 1597169
URL: http://svn.apache.org/r1597169
Log:
SLING-3604 - Usability improvements in the Sling bundle module wizard
Use the SlingLaunchpadCombo instead of a plain Combo.
Modified:
sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/SlingLaunchpadCombo.java
sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/wizards/SetupServerWizardPage.java
Modified:
sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/SlingLaunchpadCombo.java
URL:
http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/SlingLaunchpadCombo.java?rev=1597169&r1=1597168&r2=1597169&view=diff
==============================================================================
---
sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/SlingLaunchpadCombo.java
(original)
+++
sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/SlingLaunchpadCombo.java
Fri May 23 20:07:50 2014
@@ -16,7 +16,12 @@
*/
package org.apache.sling.ide.eclipse.ui.internal;
+import static java.util.Arrays.asList;
+
+import java.util.Arrays;
+import java.util.EnumSet;
import java.util.List;
+import java.util.Set;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IProgressMonitor;
@@ -33,11 +38,15 @@ import org.eclipse.wst.server.core.Serve
*/
public class SlingLaunchpadCombo {
+ public enum ValidationFlag {
+ SKIP_SERVER_STARTED;
+ }
+
private final Combo repositoryCombo;
private IProject project;
public SlingLaunchpadCombo(Composite parent, IProject project) {
- repositoryCombo = new Combo(parent, SWT.DROP_DOWN);
+ repositoryCombo = new Combo(parent, SWT.DROP_DOWN | SWT.READ_ONLY);
repositoryCombo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,
false));
this.project = project;
@@ -54,7 +63,8 @@ public class SlingLaunchpadCombo {
public void refreshRepositoryList(IProgressMonitor monitor) {
repositoryCombo.removeAll();
- List<IServer> servers =
SelectionUtils.getServersLinkedToProject(project, monitor);
+ List<IServer> servers = project != null ?
SelectionUtils.getServersLinkedToProject(project, monitor) : Arrays
+ .asList(ServerCore.getServers());
if (servers.size() > 1) {
repositoryCombo.add(""); // force selection only if there is more
than one server
}
@@ -79,7 +89,7 @@ public class SlingLaunchpadCombo {
return repositoryCombo.getItemCount() > 0;
}
- public String getErrorMessage() {
+ public String getErrorMessage(ValidationFlag... flags) {
if (!hasServers() && project != null) {
return "The selected project is not configured with/added to any
Sling server";
@@ -90,8 +100,13 @@ public class SlingLaunchpadCombo {
return "Please select a repository";
}
- if (server.getServerState() != IServer.STATE_STARTED) {
- return "Selected server is not started";
+ Set<ValidationFlag> flagSet = flags.length == 0 ?
EnumSet.noneOf(ValidationFlag.class) :
+ EnumSet.copyOf(asList(flags));
+
+ if (!flagSet.contains(ValidationFlag.SKIP_SERVER_STARTED)) {
+ if (server.getServerState() != IServer.STATE_STARTED) {
+ return "Selected server is not started";
+ }
}
return null;
Modified:
sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/wizards/SetupServerWizardPage.java
URL:
http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/wizards/SetupServerWizardPage.java?rev=1597169&r1=1597168&r2=1597169&view=diff
==============================================================================
---
sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/wizards/SetupServerWizardPage.java
(original)
+++
sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/wizards/SetupServerWizardPage.java
Fri May 23 20:07:50 2014
@@ -16,16 +16,17 @@
*/
package org.apache.sling.ide.eclipse.ui.wizards;
+import static
org.apache.sling.ide.eclipse.ui.internal.SlingLaunchpadCombo.ValidationFlag.SKIP_SERVER_STARTED;
+
import java.io.IOException;
import java.io.InputStream;
-import java.util.HashMap;
-import java.util.Map;
import org.apache.commons.io.IOUtils;
import org.apache.sling.ide.artifacts.EmbeddedArtifactLocator;
import org.apache.sling.ide.artifacts.EmbeddedArtifact;
import org.apache.sling.ide.eclipse.core.ISlingLaunchpadServer;
import org.apache.sling.ide.eclipse.ui.internal.Activator;
+import org.apache.sling.ide.eclipse.ui.internal.SlingLaunchpadCombo;
import org.apache.sling.ide.osgi.OsgiClient;
import org.apache.sling.ide.osgi.OsgiClientException;
import org.apache.sling.ide.osgi.OsgiClientFactory;
@@ -33,6 +34,7 @@ import org.apache.sling.ide.transport.Re
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.wizard.WizardPage;
@@ -46,7 +48,6 @@ import org.eclipse.swt.events.SelectionE
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
@@ -63,7 +64,7 @@ public class SetupServerWizardPage exten
private static final int HORIZONTAL_INDENT = 10;
private Button useExistingServer;
- private Combo existingServerCombo;
+ private SlingLaunchpadCombo existingServerCombo;
private Button setupNewServer;
private Text newServerName;
private Text newServerHostnameName;
@@ -75,8 +76,6 @@ public class SetupServerWizardPage exten
private IServer server;
- private Map<String, IServer> serversMap = new HashMap<String,
IServer>();
-
public SetupServerWizardPage(AbstractNewSlingApplicationWizard parent) {
super("chooseArchetypePage");
setTitle("Select or Setup Launchpad Server");
@@ -110,15 +109,14 @@ public class SetupServerWizardPage exten
existingServerLabel.setText("Location:");
existingServerLabel.setEnabled(true);
- existingServerCombo = new Combo(container, SWT.DROP_DOWN |
SWT.READ_ONLY);
- GridData locationComboData = new GridData(SWT.FILL, SWT.CENTER,
true, false);
- existingServerCombo.setLayoutData(locationComboData);
- existingServerCombo.addModifyListener(new ModifyListener() {
+ existingServerCombo = new SlingLaunchpadCombo(container, null);
+ existingServerCombo.getWidget().addModifyListener(new ModifyListener()
{
public void modifyText(ModifyEvent e) {
dialogChanged();
}
});
- existingServerCombo.setEnabled(true);
+ existingServerCombo.refreshRepositoryList(new NullProgressMonitor());
+ existingServerCombo.getWidget().setEnabled(true);
setupNewServer = new Button(container, SWT.RADIO);
setupNewServer.setText("Setup new server");
@@ -154,7 +152,7 @@ public class SetupServerWizardPage exten
SelectionAdapter radioListener = new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
-
existingServerCombo.setEnabled(useExistingServer.getSelection());
+
existingServerCombo.getWidget().setEnabled(useExistingServer.getSelection());
newServerName.setEnabled(setupNewServer.getSelection());
newServerHostnameName.setEnabled(setupNewServer.getSelection());
newServerPort.setEnabled(setupNewServer.getSelection());
@@ -164,11 +162,11 @@ public class SetupServerWizardPage exten
installToolingSupportBundle.setEnabled(setupNewServer.getSelection());
dialogChanged();
}
- };
+ };
useExistingServer.addSelectionListener(radioListener);
setupNewServer.addSelectionListener(radioListener);
useExistingServer.setSelection(false);
- existingServerCombo.setEnabled(false);
+ existingServerCombo.getWidget().setEnabled(false);
setupNewServer.setSelection(true);
installToolingSupportBundle.setSelection(true);
@@ -200,7 +198,6 @@ public class SetupServerWizardPage exten
newServerDebugPort.addModifyListener(ml);
newServerDebugPort.addKeyListener(kl);
- initialize();
setPageComplete(false);
setControl(container);
}
@@ -225,24 +222,16 @@ public class SetupServerWizardPage exten
return text;
}
- private void initialize() {
- IServer[] servers = ServerCore.getServers();
- for (int i = 0; i < servers.length; i++) {
- IServer server = servers[i];
- String key = keyFor(server);
- serversMap.put(key, server);
- existingServerCombo.add(key);
- }
- }
+ private void dialogChanged() {
- private String keyFor(IServer server) {
- return server.getName();
- }
+ // called too early
+ if (getControl() == null) {
+ return;
+ }
- private void dialogChanged() {
if (useExistingServer.getSelection()) {
- if (existingServerCombo.getSelectionIndex()==-1) {
- updateStatus("Choose existing server from the
list");
+ if (existingServerCombo.getErrorMessage(SKIP_SERVER_STARTED) !=
null) {
+ updateStatus(existingServerCombo.getErrorMessage());
return;
}
} else if (setupNewServer.getSelection()) {
@@ -289,9 +278,7 @@ public class SetupServerWizardPage exten
}
if (useExistingServer.getSelection()) {
- String key =
existingServerCombo.getItem(existingServerCombo.getSelectionIndex());
- server = serversMap.get(key);
- return server;
+ return existingServerCombo.getServer();
} else {
IServerType serverType =
ServerCore.findServerType("org.apache.sling.ide.launchpadServer");
@SuppressWarnings("unused")
@@ -344,6 +331,7 @@ public class SetupServerWizardPage exten
IRuntimeType serverRuntime =
ServerCore.findRuntimeType("org.apache.sling.ide.launchpadRuntimeType");
try {
// TODO there should be a nicer API for creating this, and
also a central place for defaults
+ // TODO - we should not be creating runtimes, but maybe
matching against existing ones
IRuntime runtime = serverRuntime.createRuntime(null, monitor);
runtime = runtime.createWorkingCopy().save(true, monitor);
IServerWorkingCopy wc = serverType.createServer(null, null,
runtime, monitor);