Skip to content

Commit 80d7b12

Browse files
authored
Add more launch configuration tabs (#1139)
* more launch config tabs * remove classpath and sourcepath tabs * pass environment variables into server behavior delegate * wip * reset wizard page * remove environment variables; they don't get passed to the server * fix compile * pass along JVM flags from eclipse UI * program and JVM args are different * not sure what to do with program arguments yet
1 parent 514cf8a commit 80d7b12

File tree

6 files changed

+55
-26
lines changed

6 files changed

+55
-26
lines changed

plugins/com.google.cloud.tools.eclipse.appengine.localserver.test/src/com/google/cloud/tools/eclipse/appengine/localserver/ui/AppEngineTabGroupTest.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package com.google.cloud.tools.eclipse.appengine.localserver.ui;
1818

19+
import org.eclipse.debug.ui.ILaunchConfigurationTab;
1920
import org.junit.Assert;
2021
import org.junit.Test;
2122

@@ -25,8 +26,11 @@ public class AppEngineTabGroupTest {
2526
public void testCreateTabs() {
2627
AppEngineTabGroup group = new AppEngineTabGroup();
2728
group.createTabs(null, "");
29+
for (ILaunchConfigurationTab tab : group.getTabs()) {
30+
Assert.assertNotNull(tab);
31+
}
2832
Assert.assertEquals("Server", group.getTabs()[0].getName());
29-
Assert.assertEquals("Environment", group.getTabs()[1].getName());
33+
Assert.assertEquals("Arguments", group.getTabs()[1].getName());
3034
}
3135

3236
}

plugins/com.google.cloud.tools.eclipse.appengine.localserver/META-INF/MANIFEST.MF

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ Bundle-Activator: com.google.cloud.tools.eclipse.appengine.localserver.Activator
1010
Bundle-ActivationPolicy: lazy
1111
Require-Bundle: com.google.cloud.tools.appengine;bundle-version="0.2.5",
1212
com.google.cloud.tools.eclipse.appengine.ui;bundle-version="0.1.0",
13+
com.google.guava;bundle-version="20.0.0",
14+
javax.servlet;bundle-version="2.5.0",
15+
javax.servlet.jsp;bundle-version="2.1.0",
1316
org.eclipse.wst.server.core;bundle-version="1.7.0",
1417
org.eclipse.wst.server.ui;bundle-version="1.5.201",
1518
org.eclipse.wst.common.project.facet.core;bundle-version="1.4.300",
@@ -20,21 +23,16 @@ Require-Bundle: com.google.cloud.tools.appengine;bundle-version="0.2.5",
2023
org.eclipse.jst.server.generic.ui;bundle-version="1.0.600",
2124
org.eclipse.jst.common.project.facet.core;bundle-version="1.4.400",
2225
org.eclipse.jst.common.project.facet.ui;bundle-version="1.4.510",
23-
javax.servlet;bundle-version="2.5.0",
24-
javax.servlet.jsp;bundle-version="2.1.0",
2526
org.eclipse.core.resources;bundle-version="3.10.1",
2627
org.eclipse.debug.core;bundle-version="3.10.0",
27-
com.google.guava;bundle-version="20.0.0",
2828
org.eclipse.debug.ui;bundle-version="3.11.101",
2929
org.eclipse.core.expressions;bundle-version="3.5.0",
3030
org.eclipse.m2e.core;bundle-version="1.6.2",
3131
org.eclipse.m2e.maven.runtime;bundle-version="1.6.2",
3232
org.eclipse.m2e.wtp;bundle-version="1.2.1",
3333
org.eclipse.m2e.jdt;bundle-version="1.6.2",
3434
org.eclipse.ui.console;bundle-version="3.6.100",
35-
org.eclipse.ui.ide;bundle-version="3.11.0",
36-
org.eclipse.jdt.core,
37-
org.eclipse.swt
35+
org.eclipse.ui.ide;bundle-version="3.11.0"
3836
Export-Package: com.google.cloud.tools.eclipse.appengine.localserver.server
3937
Import-Package: com.google.cloud.tools.eclipse.appengine.facets,
4038
com.google.cloud.tools.eclipse.appengine.libraries.model,
@@ -51,4 +49,9 @@ Import-Package: com.google.cloud.tools.eclipse.appengine.facets,
5149
com.google.cloud.tools.eclipse.util.service,
5250
com.google.cloud.tools.eclipse.util.status,
5351
org.eclipse.e4.core.contexts,
54-
org.eclipse.e4.core.di
52+
org.eclipse.e4.core.di,
53+
org.eclipse.jdt.core,
54+
org.eclipse.jdt.debug.ui.launchConfigurations,
55+
org.eclipse.swt
56+
57+

plugins/com.google.cloud.tools.eclipse.appengine.localserver/src/com/google/cloud/tools/eclipse/appengine/localserver/server/LocalAppEngineServerBehaviour.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -246,10 +246,14 @@ public int getServerPort() {
246246
/**
247247
* Starts the development server.
248248
*
249-
* @param runnables the path to directories that contain configuration files like appengine-web.xml
249+
* @param runnables the path to directories that contain configuration files such as
250+
* appengine-web.xml
250251
* @param console the stream (Eclipse console) to send development server process output to
252+
* @param arguments JVM arguments to pass to the dev server
251253
*/
252-
void startDevServer(List<File> runnables, MessageConsoleStream console) throws CoreException {
254+
void startDevServer(List<File> runnables, MessageConsoleStream console, List<String> vmArguments)
255+
throws CoreException {
256+
253257
checkAndSetPorts(); // Must be called before setting the STARTING state.
254258
setServerState(IServer.STATE_STARTING);
255259

@@ -263,6 +267,7 @@ void startDevServer(List<File> runnables, MessageConsoleStream console) throws C
263267
devServerRunConfiguration.setHost(getServer().getHost());
264268
devServerRunConfiguration.setPort(serverPort);
265269
devServerRunConfiguration.setAdminPort(adminPort);
270+
devServerRunConfiguration.setJvmFlags(vmArguments);
266271

267272
// Run server
268273
try {
@@ -276,18 +281,21 @@ void startDevServer(List<File> runnables, MessageConsoleStream console) throws C
276281
/**
277282
* Starts the development server in debug mode.
278283
*
279-
* @param runnables the path to directories that contain configuration files like appengine-web.xml
284+
* @param runnables the path to directories that contain configuration files like
285+
* appengine-web.xml
280286
* @param console the stream (Eclipse console) to send development server process output to
281287
* @param debugPort the port to attach a debugger to if launch is in debug mode
288+
* @param arguments JVM arguments to pass to the dev server
282289
*/
283-
void startDebugDevServer(List<File> runnables, MessageConsoleStream console, int debugPort)
290+
void startDebugDevServer(List<File> runnables, MessageConsoleStream console, int debugPort,
291+
List<String> vmArguments)
284292
throws CoreException {
285293
checkAndSetPorts(); // Must be called before setting the STARTING state.
286294
setServerState(IServer.STATE_STARTING);
287295

288296
// Create dev app server instance
289297
initializeDevServer(console);
290-
298+
291299
// Create run configuration
292300
DefaultRunConfiguration devServerRunConfiguration = new DefaultRunConfiguration();
293301
devServerRunConfiguration.setAutomaticRestart(false);
@@ -302,12 +310,15 @@ void startDebugDevServer(List<File> runnables, MessageConsoleStream console, int
302310

303311
List<String> jvmFlags = new ArrayList<String>();
304312

313+
// todo only real difference between this method and startDevServer are these two extra
314+
// JVM flags. Just set them and call startDevServer
305315
if (debugPort <= 0 || debugPort > 65535) {
306316
throw new IllegalArgumentException("Debug port is set to " + debugPort //$NON-NLS-1$
307317
+ ", should be between 1-65535"); //$NON-NLS-1$
308318
}
309319
jvmFlags.add("-Xdebug"); //$NON-NLS-1$
310320
jvmFlags.add("-Xrunjdwp:transport=dt_socket,server=n,suspend=y,quiet=y,address=" + debugPort); //$NON-NLS-1$
321+
jvmFlags.addAll(vmArguments);
311322
devServerRunConfiguration.setJvmFlags(jvmFlags);
312323

313324
// Run server

plugins/com.google.cloud.tools.eclipse.appengine.localserver/src/com/google/cloud/tools/eclipse/appengine/localserver/server/LocalAppEngineServerLaunchConfigurationDelegate.java

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import java.net.MalformedURLException;
3333
import java.net.URL;
3434
import java.util.ArrayList;
35+
import java.util.Arrays;
3536
import java.util.HashMap;
3637
import java.util.List;
3738
import java.util.Map;
@@ -82,10 +83,10 @@ private static void validateCloudSdk() throws CoreException {
8283
CloudSdk cloudSdk = new CloudSdk.Builder().build();
8384
cloudSdk.validateCloudSdk();
8485
} catch (CloudSdkOutOfDateException ex) {
85-
String detailMessage = Messages.getString("cloudsdk.out.of.date");
86-
Status status = new Status(IStatus.ERROR,
87-
"com.google.cloud.tools.eclipse.appengine.deploy.ui", detailMessage);
88-
throw new CoreException(status);
86+
String detailMessage = Messages.getString("cloudsdk.out.of.date");
87+
Status status = new Status(IStatus.ERROR,
88+
"com.google.cloud.tools.eclipse.appengine.deploy.ui", detailMessage);
89+
throw new CoreException(status);
8990
} catch (AppEngineException ex) {
9091
String detailMessage = Messages.getString("cloudsdk.not.configured"); //$NON-NLS-1$
9192
Status status = new Status(IStatus.ERROR,
@@ -101,7 +102,7 @@ public void launch(ILaunchConfiguration configuration, String mode, final ILaunc
101102
AnalyticsEvents.APP_ENGINE_LOCAL_SERVER_MODE, mode);
102103

103104
validateCloudSdk();
104-
105+
105106
IServer server = ServerUtil.getServer(configuration);
106107
if (server == null) {
107108
String message = "There is no App Engine development server available";
@@ -136,14 +137,18 @@ public void launch(ILaunchConfiguration configuration, String mode, final ILaunc
136137

137138
new ServerLaunchMonitor(launch, server).engage();
138139

140+
String vmArgumentString = getVMArguments(configuration);
141+
// This string is exactly as supplied by the user in the dialog box
142+
143+
List<String> vmArguments = Arrays.asList(vmArgumentString.split("\\s+"));
139144
if (ILaunchManager.DEBUG_MODE.equals(mode)) {
140145
int debugPort = getDebugPort();
141146
setupDebugTarget(launch, debugPort, monitor);
142-
serverBehaviour.startDebugDevServer(runnables, console.newMessageStream(), debugPort);
147+
serverBehaviour.startDebugDevServer(runnables, console.newMessageStream(), debugPort, vmArguments);
143148
} else {
144149
// A launch must have at least one debug target or process, or it otherwise becomes a zombie
145150
LocalAppEngineServerDebugTarget.addTarget(launch, serverBehaviour);
146-
serverBehaviour.startDevServer(runnables, console.newMessageStream());
151+
serverBehaviour.startDevServer(runnables, console.newMessageStream(), vmArguments);
147152
}
148153
}
149154

plugins/com.google.cloud.tools.eclipse.appengine.localserver/src/com/google/cloud/tools/eclipse/appengine/localserver/ui/AppEngineTabGroup.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,21 @@
1818

1919
import com.google.cloud.tools.eclipse.appengine.localserver.server.LocalAppEngineServerDelegate;
2020
import org.eclipse.debug.ui.AbstractLaunchConfigurationTabGroup;
21-
import org.eclipse.debug.ui.EnvironmentTab;
2221
import org.eclipse.debug.ui.ILaunchConfigurationDialog;
2322
import org.eclipse.debug.ui.ILaunchConfigurationTab;
2423
import org.eclipse.swt.widgets.Composite;
2524
import org.eclipse.wst.server.ui.ServerLaunchConfigurationTab;
25+
import org.eclipse.jdt.debug.ui.launchConfigurations.JavaArgumentsTab;
2626

27+
/**
28+
* Tabs shown in launch configurations for an App Engine Server.
29+
* To get to these in the UI:
30+
*
31+
* 1. Open Servers view
32+
* 2. Right click on the server to configure
33+
* 3. Open
34+
* 4. Open Launch Configuration
35+
*/
2736
public class AppEngineTabGroup extends AbstractLaunchConfigurationTabGroup {
2837

2938
private static final String[] SERVER_TYPE_IDS = {LocalAppEngineServerDelegate.SERVER_TYPE_ID};
@@ -33,13 +42,9 @@ public void createTabs(ILaunchConfigurationDialog dialog, String mode) {
3342
ILaunchConfigurationTab[] tabs = new ILaunchConfigurationTab[2];
3443
tabs[0] = new AppEngineServerLaunchConfigurationTab(SERVER_TYPE_IDS);
3544
tabs[0].setLaunchConfigurationDialog(dialog);
36-
tabs[1] = new EnvironmentTab();
45+
tabs[1] = new JavaArgumentsTab();
3746
tabs[1].setLaunchConfigurationDialog(dialog);
3847

39-
// see
40-
// http://git.eclipse.org/c/jetty/org.eclipse.jetty.wtp.git/tree/org.eclipse.jst.server.jetty.ui/src/org/eclipse/jst/server/jetty/ui/internal/JettyLaunchConfigurationTabGroup.java
41-
// for examples of other tabs we might want to add
42-
4348
setTabs(tabs);
4449
}
4550

plugins/com.google.cloud.tools.eclipse.appengine.localserver/src/com/google/cloud/tools/eclipse/appengine/localserver/ui/LaunchModes.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
*/
3131
public class LaunchModes implements IParameterValues {
3232
@Override
33+
@SuppressWarnings("rawtypes")
3334
public Map getParameterValues() {
3435
ILaunchManager manager = DebugPlugin.getDefault().getLaunchManager();
3536
Map<String, String> modes = new HashMap<>();

0 commit comments

Comments
 (0)