From 3c9ddd73eed08e7e0c398011dbe64ac339293c28 Mon Sep 17 00:00:00 2001 From: Chanseok Oh Date: Tue, 31 Oct 2017 11:56:18 -0400 Subject: [PATCH 01/14] Add menu item --- .../plugin.properties | 9 +- .../plugin.xml | 100 ++++++++++-------- .../flex/AppEngineFlexProjectJarWizard.java | 71 +++++++++++++ 3 files changed, 132 insertions(+), 48 deletions(-) create mode 100644 plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexProjectJarWizard.java diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/plugin.properties b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/plugin.properties index 79df35f002..11dfc7ee0a 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/plugin.properties +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/plugin.properties @@ -7,5 +7,10 @@ gcp.category = Google Cloud Platform standard.wizard.name = Google App Engine Standard Java Project standard.wizard.description = Creates an App Engine Standard Java project. -flex.wizard.name=Google App Engine Flexible Java Project -flex.wizard.description=Creates an App Engine Flexible Java project. +flex.war.wizard.name=Google App Engine Flexible Java Project (WAR) +flex.war.wizard.description=Creates an App Engine Flexible Java project whose deploy artifact is a \ + web application archive (WAR). + +flex.jar.wizard.name=Google App Engine Flexible Java Project (JAR) +flex.jar.wizard.description=Creates an App Engine Flexible Java project whose deploy artifact is a \ + runnable "fat" Java archive (JAR). diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/plugin.xml b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/plugin.xml index 0f984f7f9a..1feb4887c4 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/plugin.xml +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/plugin.xml @@ -16,81 +16,89 @@ - - + + - - - - + + + - - - + + - - - + + - + - %flex.wizard.description + %flex.war.wizard.description - - + + - - - - + + + + + + + + + + + + + + + + + %flex.jar.wizard.description + + + + + + + + + + + + - - - + + - - - + + - + diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexProjectJarWizard.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexProjectJarWizard.java new file mode 100644 index 0000000000..e5b21b6e40 --- /dev/null +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexProjectJarWizard.java @@ -0,0 +1,71 @@ +/* + * Copyright 2017 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.tools.eclipse.appengine.newproject.flex; + +import com.google.cloud.tools.eclipse.appengine.libraries.repository.ILibraryRepositoryService; +import com.google.cloud.tools.eclipse.appengine.newproject.AppEngineProjectConfig; +import com.google.cloud.tools.eclipse.appengine.newproject.AppEngineProjectWizard; +import com.google.cloud.tools.eclipse.appengine.newproject.CreateAppEngineWtpProject; +import com.google.cloud.tools.eclipse.appengine.newproject.Messages; +import com.google.cloud.tools.eclipse.usagetracker.AnalyticsEvents; +import com.google.cloud.tools.eclipse.usagetracker.AnalyticsPingManager; +import javax.inject.Inject; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; + +public class AppEngineFlexProjectJarWizard extends AppEngineProjectWizard { + @Inject + private ILibraryRepositoryService repositoryService; + + public AppEngineFlexProjectJarWizard() { + setWindowTitle(Messages.getString("new.app.engine.flex.project")); + } + + @Override + public AppEngineFlexWizardPage createWizardPage() { + AnalyticsPingManager.getInstance().sendPing( + AnalyticsEvents.APP_ENGINE_NEW_PROJECT_WIZARD, + AnalyticsEvents.APP_ENGINE_NEW_PROJECT_WIZARD_TYPE, + AnalyticsEvents.APP_ENGINE_NEW_PROJECT_WIZARD_TYPE_FLEX, getShell()); + + return new AppEngineFlexWizardPage(); + } + + @Override + public IStatus validateDependencies() { + return Status.OK_STATUS; + } + + @Override + public CreateAppEngineWtpProject getAppEngineProjectCreationOperation( + AppEngineProjectConfig config, IAdaptable uiInfoAdapter) { + return new CreateAppEngineFlexJarProject(config, uiInfoAdapter, repositoryService); + } + + @Override + public boolean performFinish() { + boolean accepted = super.performFinish(); + if (accepted) { + AnalyticsPingManager.getInstance().sendPing( + AnalyticsEvents.APP_ENGINE_NEW_PROJECT_WIZARD_COMPLETE, + AnalyticsEvents.APP_ENGINE_NEW_PROJECT_WIZARD_TYPE, + AnalyticsEvents.APP_ENGINE_NEW_PROJECT_WIZARD_TYPE_FLEX); + } + return accepted; + } +} From 6c60f6c5f1350a94b987ba958bdf432bec612d2f Mon Sep 17 00:00:00 2001 From: Chanseok Oh Date: Tue, 31 Oct 2017 11:58:17 -0400 Subject: [PATCH 02/14] Rename class --- ...ojectJarWizard.java => AppEngineFlexJarProjectWizard.java} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/{AppEngineFlexProjectJarWizard.java => AppEngineFlexJarProjectWizard.java} (96%) diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexProjectJarWizard.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarProjectWizard.java similarity index 96% rename from plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexProjectJarWizard.java rename to plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarProjectWizard.java index e5b21b6e40..0b52b08a91 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexProjectJarWizard.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarProjectWizard.java @@ -28,11 +28,11 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; -public class AppEngineFlexProjectJarWizard extends AppEngineProjectWizard { +public class AppEngineFlexJarProjectWizard extends AppEngineProjectWizard { @Inject private ILibraryRepositoryService repositoryService; - public AppEngineFlexProjectJarWizard() { + public AppEngineFlexJarProjectWizard() { setWindowTitle(Messages.getString("new.app.engine.flex.project")); } From de56bfb6c6152faaec96c34addaf1246ebb7f839 Mon Sep 17 00:00:00 2001 From: Chanseok Oh Date: Tue, 31 Oct 2017 12:21:48 -0400 Subject: [PATCH 03/14] WIP --- ...=> AppEngineFlexJarProjectWizardTest.java} | 6 +-- .../AppEngineFlexWarProjectWizardTest.java | 44 +++++++++++++++++++ .../plugin.properties | 4 +- .../plugin.xml | 2 +- .../flex/AppEngineFlexJarProjectWizard.java | 2 +- ...ava => AppEngineFlexWarProjectWizard.java} | 6 +-- .../appengine/newproject/messages.properties | 3 +- 7 files changed, 56 insertions(+), 11 deletions(-) rename plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/{AppEngineFlexProjectWizardTest.java => AppEngineFlexJarProjectWizardTest.java} (83%) create mode 100644 plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexWarProjectWizardTest.java rename plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/{AppEngineFlexProjectWizard.java => AppEngineFlexWarProjectWizard.java} (92%) diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexProjectWizardTest.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarProjectWizardTest.java similarity index 83% rename from plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexProjectWizardTest.java rename to plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarProjectWizardTest.java index 98580697cf..bd0920433f 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexProjectWizardTest.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarProjectWizardTest.java @@ -19,13 +19,13 @@ import org.junit.Assert; import org.junit.Test; -public class AppEngineFlexProjectWizardTest { +public class AppEngineFlexJarProjectWizardTest { - private AppEngineFlexProjectWizard wizard = new AppEngineFlexProjectWizard(); + private AppEngineFlexJarProjectWizard wizard = new AppEngineFlexJarProjectWizard(); @Test public void testWindowTitle() { - Assert.assertEquals("New App Engine Flexible Project", wizard.getWindowTitle()); + Assert.assertEquals("New App Engine Flexible JAR Project", wizard.getWindowTitle()); } @Test diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexWarProjectWizardTest.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexWarProjectWizardTest.java new file mode 100644 index 0000000000..dc186c42f7 --- /dev/null +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexWarProjectWizardTest.java @@ -0,0 +1,44 @@ +/* + * Copyright 2017 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.tools.eclipse.appengine.newproject.flex; + +import org.junit.Assert; +import org.junit.Test; + +public class AppEngineFlexWarProjectWizardTest { + + private AppEngineFlexWarProjectWizard wizard = new AppEngineFlexWarProjectWizard(); + + @Test + public void testWindowTitle() { + Assert.assertEquals("New App Engine Flexible WAR Project", wizard.getWindowTitle()); + } + + @Test + public void testValidateDependencies() { + Assert.assertTrue(wizard.validateDependencies().isOK()); + } + + @Test + public void testAddPages() { + wizard.addPages(); + Assert.assertFalse(wizard.canFinish()); + Assert.assertEquals(1, wizard.getPageCount()); + Assert.assertNotNull(wizard.getPage("basicNewProjectPage")); + } + +} diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/plugin.properties b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/plugin.properties index 11dfc7ee0a..682d1ed80c 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/plugin.properties +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/plugin.properties @@ -7,10 +7,10 @@ gcp.category = Google Cloud Platform standard.wizard.name = Google App Engine Standard Java Project standard.wizard.description = Creates an App Engine Standard Java project. -flex.war.wizard.name=Google App Engine Flexible Java Project (WAR) +flex.war.wizard.name=Google App Engine Flexible Java WAR Project flex.war.wizard.description=Creates an App Engine Flexible Java project whose deploy artifact is a \ web application archive (WAR). -flex.jar.wizard.name=Google App Engine Flexible Java Project (JAR) +flex.jar.wizard.name=Google App Engine Flexible Java JAR Project flex.jar.wizard.description=Creates an App Engine Flexible Java project whose deploy artifact is a \ runnable "fat" Java archive (JAR). diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/plugin.xml b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/plugin.xml index 1feb4887c4..0834e2cf24 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/plugin.xml +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/plugin.xml @@ -41,7 +41,7 @@ diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarProjectWizard.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarProjectWizard.java index 0b52b08a91..dc00898cc6 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarProjectWizard.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarProjectWizard.java @@ -33,7 +33,7 @@ public class AppEngineFlexJarProjectWizard extends AppEngineProjectWizard { private ILibraryRepositoryService repositoryService; public AppEngineFlexJarProjectWizard() { - setWindowTitle(Messages.getString("new.app.engine.flex.project")); + setWindowTitle(Messages.getString("new.app.engine.flex.jar.project")); } @Override diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexProjectWizard.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexWarProjectWizard.java similarity index 92% rename from plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexProjectWizard.java rename to plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexWarProjectWizard.java index d35c410d53..8690e1b57d 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexProjectWizard.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexWarProjectWizard.java @@ -28,12 +28,12 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; -public class AppEngineFlexProjectWizard extends AppEngineProjectWizard { +public class AppEngineFlexWarProjectWizard extends AppEngineProjectWizard { @Inject private ILibraryRepositoryService repositoryService; - public AppEngineFlexProjectWizard() { - setWindowTitle(Messages.getString("new.app.engine.flex.project")); + public AppEngineFlexWarProjectWizard() { + setWindowTitle(Messages.getString("new.app.engine.flex.war.project")); } @Override diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/messages.properties b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/messages.properties index 139305b08b..7f38a6cd86 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/messages.properties +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/messages.properties @@ -1,5 +1,6 @@ new.app.engine.standard.project=New App Engine Standard Project -new.app.engine.flex.project=New App Engine Flexible Project +new.app.engine.flex.war.project=New App Engine Flexible WAR Project +new.app.engine.flex.jar.project=New App Engine Flexible JAR Project creating.app.engine.standard.project=Creating App Engine Standard Project app.engine.standard.project=App Engine Standard Project create.app.engine.standard.project=Create a new Eclipse project for App Engine standard environment development. From 287b37e392828671e195d31fe812d0f2f69c69c2 Mon Sep 17 00:00:00 2001 From: Chanseok Oh Date: Tue, 31 Oct 2017 12:59:11 -0400 Subject: [PATCH 04/14] Rename and refactor classes and test classes --- .../CreateAppEngineJarProjectTest.java | 47 ++++ .../CreateAppEngineProjectTest.java | 223 ++++++++++++++++++ .../CreateAppEngineWtpProjectTest.java | 208 +--------------- .../CreateAppEngineFlexWtpProjectTest.java | 12 +- ...CreateAppEngineStandardWtpProjectTest.java | 10 +- .../newproject/AppEngineProjectWizard.java | 4 +- ...oject.java => CreateAppEngineProject.java} | 6 +- .../flex/AppEngineFlexJarProjectWizard.java | 4 +- .../flex/AppEngineFlexWarProjectWizard.java | 4 +- .../flex/CreateAppEngineFlexJarProject.java | 4 +- .../flex/CreateAppEngineFlexWtpProject.java | 4 +- .../AppEngineStandardProjectWizard.java | 4 +- .../CreateAppEngineStandardWtpProject.java | 4 +- 13 files changed, 308 insertions(+), 226 deletions(-) create mode 100644 plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/CreateAppEngineJarProjectTest.java create mode 100644 plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/CreateAppEngineProjectTest.java rename plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/{CreateAppEngineWtpProject.java => CreateAppEngineProject.java} (98%) diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/CreateAppEngineJarProjectTest.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/CreateAppEngineJarProjectTest.java new file mode 100644 index 0000000000..43336325c0 --- /dev/null +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/CreateAppEngineJarProjectTest.java @@ -0,0 +1,47 @@ +/* + * Copyright 2017 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.tools.eclipse.appengine.newproject; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import com.google.cloud.tools.eclipse.test.util.project.ProjectUtils; +import com.google.cloud.tools.eclipse.util.MavenUtils; +import java.lang.reflect.InvocationTargetException; +import org.eclipse.core.runtime.CoreException; +import org.junit.Test; + +public abstract class CreateAppEngineJarProjectTest extends CreateAppEngineProjectTest { + + @Override + protected String getMostImportantFilename() { + return "HelloAppEngineMain.java"; + } + + @Test + public void testMavenNatureEnabled() throws InvocationTargetException, CoreException { + config.setUseMaven("my.group.id", "my-artifact-id", "12.34.56"); + + CreateAppEngineProject creator = newCreateAppEngineProject(); + creator.execute(monitor); + ProjectUtils.waitForProjects(project); + + assertTrue(project.hasNature(MavenUtils.MAVEN2_NATURE_ID)); + assertFalse(project.getFolder("build").exists()); + assertOutputDirectory("target/classes"); + } +} diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/CreateAppEngineProjectTest.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/CreateAppEngineProjectTest.java new file mode 100644 index 0000000000..e2d5f4d07b --- /dev/null +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/CreateAppEngineProjectTest.java @@ -0,0 +1,223 @@ +/* + * Copyright 2017 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.tools.eclipse.appengine.newproject; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import com.google.cloud.tools.eclipse.appengine.libraries.model.LibraryFile; +import com.google.cloud.tools.eclipse.appengine.libraries.model.MavenCoordinates; +import com.google.cloud.tools.eclipse.appengine.libraries.repository.ILibraryRepositoryService; +import com.google.cloud.tools.eclipse.test.util.ThreadDumpingWatchdog; +import com.google.cloud.tools.eclipse.test.util.project.ProjectUtils; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import java.io.File; +import java.lang.reflect.InvocationTargetException; +import java.util.Arrays; +import java.util.concurrent.TimeUnit; +import org.apache.maven.artifact.Artifact; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IWorkspace; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.core.runtime.OperationCanceledException; +import org.eclipse.core.runtime.Path; +import org.eclipse.jdt.core.IClasspathEntry; +import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.core.IType; +import org.eclipse.jdt.core.JavaCore; +import org.eclipse.jdt.core.JavaModelException; +import org.eclipse.jdt.junit.JUnitCore; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.stubbing.Answer; + +@RunWith(MockitoJUnitRunner.class) +public abstract class CreateAppEngineProjectTest { + + @Rule public ThreadDumpingWatchdog timer = new ThreadDumpingWatchdog(2, TimeUnit.MINUTES); + + @Rule public TemporaryFolder tempFolder = new TemporaryFolder(); + + @Mock protected ILibraryRepositoryService repositoryService; + + protected final IProgressMonitor monitor = new NullProgressMonitor(); + protected final AppEngineProjectConfig config = new AppEngineProjectConfig(); + protected IProject project; + + protected abstract String getMostImportantFilename(); + protected abstract CreateAppEngineProject newCreateAppEngineProject(); + + @Before + public void setUp() throws CoreException { + IWorkspace workspace = ResourcesPlugin.getWorkspace(); + project = workspace.getRoot().getProject("testproject" + Math.random()); + config.setProject(project); + + mockRepositoryService(); + } + + @After + public void tearDown() throws CoreException { + if (project.exists()) { + // https://github.com/GoogleCloudPlatform/google-cloud-eclipse/issues/1945 + ProjectUtils.waitForProjects(project); + project.delete(true, monitor); + } + } + + private void mockRepositoryService() throws CoreException { + final LoadingCache fakeArtifactStore = CacheBuilder.newBuilder().build( + new CacheLoader() { + @Override + public Artifact load(String artifactKey) throws Exception { + Artifact artifact = mock(Artifact.class); + File jar = tempFolder.newFile("fake-" + artifactKey + ".jar"); + when(artifact.getFile()).thenReturn(jar); + return artifact; + } + }); + + Answer answerFakeArtifact = new Answer() { + @Override + public Artifact answer(InvocationOnMock invocation) throws Throwable { + LibraryFile libraryFile = invocation.getArgumentAt(0, LibraryFile.class); + MavenCoordinates coordinates = libraryFile.getMavenCoordinates(); + String artifactKey = coordinates.getGroupId() + "-" + coordinates.getArtifactId() + + "-" + coordinates.getVersion(); + return fakeArtifactStore.get(artifactKey); + } + }; + when(repositoryService.resolveArtifact(any(LibraryFile.class), any(IProgressMonitor.class))) + .thenAnswer(answerFakeArtifact); + } + + @Test + public void testMostImportantFile() throws InvocationTargetException, CoreException { + CreateAppEngineProject creator = newCreateAppEngineProject(); + creator.execute(monitor); + + String expectedName = getMostImportantFilename(); + assertEquals(expectedName, creator.getMostImportant().getName()); + } + + @Test + public void testUnitTestCreated() throws InvocationTargetException, CoreException { + CreateAppEngineProject creator = newCreateAppEngineProject(); + creator.execute(monitor); + ProjectUtils.waitForProjects(project); + + assertJunitAndHamcrestAreOnClasspath(); + } + + private void assertJunitAndHamcrestAreOnClasspath() throws CoreException { + assertTrue(project.hasNature(JavaCore.NATURE_ID)); + IJavaProject javaProject = JavaCore.create(project); + IType junit = javaProject.findType("org.junit.Assert"); + + // Is findType doing what we think it's doing? + // Locally where it passes it finds JUnit in + // class Assert [in Assert.class [in org.junit [in /Users/elharo/workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.junit_4.12.0.v201504281640/junit.jar]]] + + assertNotNull("Did not find junit", junit); + assertTrue(junit.exists()); + IType hamcrest = javaProject.findType("org.hamcrest.CoreMatchers"); + assertNotNull("Did not find hamcrest", hamcrest); + assertTrue(hamcrest.exists()); + } + + @Test + public void testJavaTestSourceOutput() throws InvocationTargetException, CoreException { + CreateAppEngineProject creator = newCreateAppEngineProject(); + creator.execute(monitor); + + assertCorrectOutputPathForJavaTestSource(); + } + + private void assertCorrectOutputPathForJavaTestSource() throws JavaModelException { + IJavaProject javaProject = JavaCore.create(project); + for (IClasspathEntry entry : javaProject.getRawClasspath()) { + if (entry.getEntryKind() == IClasspathEntry.CPE_SOURCE + && containsSegment(entry.getPath(), "test")) { + assertNotNull(entry.getOutputLocation()); + assertEquals("test-classes", entry.getOutputLocation().lastSegment()); + return; + } + } + fail(); + } + + private boolean containsSegment(IPath path, String segment) { + return Arrays.asList(path.segments()).contains(segment); + } + + @Test + public void testNoTestClassesInDeploymentAssembly() throws InvocationTargetException, + CoreException, OperationCanceledException, InterruptedException { + CreateAppEngineProject creator = newCreateAppEngineProject(); + creator.execute(monitor); + creator.deployAssemblyEntryRemoveJob.join(180000 /* 3 minutes */, monitor); + + assertFalse(DeployAssemblyEntryRemoveJobTest.hasSourcePathInDeployAssembly(project, + new Path("src/test/java"))); + assertTrue(DeployAssemblyEntryRemoveJobTest.hasSourcePathInDeployAssembly(project, + new Path("src/main/java"))); + } + + protected void assertOutputDirectory(String expected) throws JavaModelException { + assertTrue(project.getFolder(expected).exists()); + IJavaProject javaProject = JavaCore.create(project); + assertEquals(new Path(expected), javaProject.getOutputLocation().removeFirstSegments(1)); + } + + @Test + public void testNoJUnit4ClasspathIfUsingMaven() throws InvocationTargetException, CoreException { + config.setUseMaven("my.group.id", "my-other-artifact-id", "12.34.56"); + + CreateAppEngineProject creator = newCreateAppEngineProject(); + creator.execute(monitor); + assertFalse(hasJUnit4Classpath(project)); + } + + protected static boolean hasJUnit4Classpath(IProject project) throws JavaModelException { + IJavaProject javaProject = JavaCore.create(project); + for (IClasspathEntry entry : javaProject.getRawClasspath()) { + if (entry.getPath().equals(JUnitCore.JUNIT4_CONTAINER_PATH)) { + return true; + } + } + return false; + } +} diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/CreateAppEngineWtpProjectTest.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/CreateAppEngineWtpProjectTest.java index b93bd81d56..52f92bc88e 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/CreateAppEngineWtpProjectTest.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/CreateAppEngineWtpProjectTest.java @@ -16,196 +16,33 @@ package com.google.cloud.tools.eclipse.appengine.newproject; -import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; -import com.google.cloud.tools.eclipse.appengine.libraries.model.LibraryFile; -import com.google.cloud.tools.eclipse.appengine.libraries.model.MavenCoordinates; -import com.google.cloud.tools.eclipse.appengine.libraries.repository.ILibraryRepositoryService; -import com.google.cloud.tools.eclipse.test.util.ThreadDumpingWatchdog; import com.google.cloud.tools.eclipse.test.util.project.ProjectUtils; import com.google.cloud.tools.eclipse.util.MavenUtils; -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.CacheLoader; -import com.google.common.cache.LoadingCache; -import java.io.File; import java.lang.reflect.InvocationTargetException; -import java.util.Arrays; -import java.util.concurrent.TimeUnit; -import org.apache.maven.artifact.Artifact; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IWorkspace; -import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.OperationCanceledException; -import org.eclipse.core.runtime.Path; -import org.eclipse.jdt.core.IClasspathEntry; -import org.eclipse.jdt.core.IJavaProject; -import org.eclipse.jdt.core.IType; -import org.eclipse.jdt.core.JavaCore; -import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.jdt.junit.JUnitCore; -import org.junit.After; -import org.junit.Before; -import org.junit.Rule; import org.junit.Test; -import org.junit.rules.TemporaryFolder; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.runners.MockitoJUnitRunner; -import org.mockito.stubbing.Answer; -@RunWith(MockitoJUnitRunner.class) -public abstract class CreateAppEngineWtpProjectTest { +public abstract class CreateAppEngineWtpProjectTest extends CreateAppEngineProjectTest { - @Rule public ThreadDumpingWatchdog timer = new ThreadDumpingWatchdog(2, TimeUnit.MINUTES); - - @Rule public TemporaryFolder tempFolder = new TemporaryFolder(); - - @Mock protected ILibraryRepositoryService repositoryService; - - protected final IProgressMonitor monitor = new NullProgressMonitor(); - protected final AppEngineProjectConfig config = new AppEngineProjectConfig(); - protected IProject project; - - protected abstract CreateAppEngineWtpProject newCreateAppEngineWtpProject(); - - @Before - public void setUp() throws CoreException { - IWorkspace workspace = ResourcesPlugin.getWorkspace(); - project = workspace.getRoot().getProject("testproject" + Math.random()); - config.setProject(project); - - mockRepositoryService(); - } - - @After - public void tearDown() throws CoreException { - if (project.exists()) { - // https://github.com/GoogleCloudPlatform/google-cloud-eclipse/issues/1945 - ProjectUtils.waitForProjects(project); - project.delete(true, monitor); - } - } - - private void mockRepositoryService() throws CoreException { - final LoadingCache fakeArtifactStore = CacheBuilder.newBuilder().build( - new CacheLoader() { - @Override - public Artifact load(String artifactKey) throws Exception { - Artifact artifact = mock(Artifact.class); - File jar = tempFolder.newFile("fake-" + artifactKey + ".jar"); - when(artifact.getFile()).thenReturn(jar); - return artifact; - } - }); - - Answer answerFakeArtifact = new Answer() { - @Override - public Artifact answer(InvocationOnMock invocation) throws Throwable { - LibraryFile libraryFile = invocation.getArgumentAt(0, LibraryFile.class); - MavenCoordinates coordinates = libraryFile.getMavenCoordinates(); - String artifactKey = coordinates.getGroupId() + "-" + coordinates.getArtifactId() - + "-" + coordinates.getVersion(); - return fakeArtifactStore.get(artifactKey); - } - }; - when(repositoryService.resolveArtifact(any(LibraryFile.class), any(IProgressMonitor.class))) - .thenAnswer(answerFakeArtifact); + @Override + protected String getMostImportantFilename() { + return "HelloAppEngine.java"; } @Test public void testFaviconAdded() throws InvocationTargetException, CoreException { - CreateAppEngineWtpProject creator = newCreateAppEngineWtpProject(); + CreateAppEngineProject creator = newCreateAppEngineProject(); creator.execute(monitor); assertTrue("favicon.ico not found", project.getFile("src/main/webapp/favicon.ico").exists()); } - @Test - public void testMostImportantFile() throws InvocationTargetException, CoreException { - CreateAppEngineWtpProject creator = newCreateAppEngineWtpProject(); - creator.execute(monitor); - - assertEquals("HelloAppEngine.java", creator.getMostImportant().getName()); - } - - @Test - public void testUnitTestCreated() throws InvocationTargetException, CoreException { - CreateAppEngineWtpProject creator = newCreateAppEngineWtpProject(); - creator.execute(monitor); - ProjectUtils.waitForProjects(project); - - assertJunitAndHamcrestAreOnClasspath(); - } - - private void assertJunitAndHamcrestAreOnClasspath() throws CoreException { - assertTrue(project.hasNature(JavaCore.NATURE_ID)); - IJavaProject javaProject = JavaCore.create(project); - IType junit = javaProject.findType("org.junit.Assert"); - - // Is findType doing what we think it's doing? - // Locally where it passes it finds JUnit in - // class Assert [in Assert.class [in org.junit [in /Users/elharo/workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.junit_4.12.0.v201504281640/junit.jar]]] - - assertNotNull("Did not find junit", junit); - assertTrue(junit.exists()); - IType hamcrest = javaProject.findType("org.hamcrest.CoreMatchers"); - assertNotNull("Did not find hamcrest", hamcrest); - assertTrue(hamcrest.exists()); - } - - @Test - public void testJavaTestSourceOutput() throws InvocationTargetException, CoreException { - CreateAppEngineWtpProject creator = newCreateAppEngineWtpProject(); - creator.execute(monitor); - - assertCorrectOutputPathForJavaTestSource(); - } - - private void assertCorrectOutputPathForJavaTestSource() throws JavaModelException { - IJavaProject javaProject = JavaCore.create(project); - for (IClasspathEntry entry : javaProject.getRawClasspath()) { - if (entry.getEntryKind() == IClasspathEntry.CPE_SOURCE - && containsSegment(entry.getPath(), "test")) { - assertNotNull(entry.getOutputLocation()); - assertEquals("test-classes", entry.getOutputLocation().lastSegment()); - return; - } - } - fail(); - } - - private boolean containsSegment(IPath path, String segment) { - return Arrays.asList(path.segments()).contains(segment); - } - - @Test - public void testNoTestClassesInDeploymentAssembly() throws InvocationTargetException, - CoreException, OperationCanceledException, InterruptedException { - CreateAppEngineWtpProject creator = newCreateAppEngineWtpProject(); - creator.execute(monitor); - creator.deployAssemblyEntryRemoveJob.join(180000 /* 3 minutes */, monitor); - - assertFalse(DeployAssemblyEntryRemoveJobTest.hasSourcePathInDeployAssembly(project, - new Path("src/test/java"))); - assertTrue(DeployAssemblyEntryRemoveJobTest.hasSourcePathInDeployAssembly(project, - new Path("src/main/java"))); - } - @Test public void testNoMavenNatureByDefault() throws InvocationTargetException, CoreException { assertFalse(config.getUseMaven()); - CreateAppEngineWtpProject creator = newCreateAppEngineWtpProject(); + CreateAppEngineProject creator = newCreateAppEngineProject(); creator.execute(monitor); assertFalse(project.hasNature(MavenUtils.MAVEN2_NATURE_ID)); @@ -217,7 +54,7 @@ public void testNoMavenNatureByDefault() throws InvocationTargetException, CoreE public void testMavenNatureEnabled() throws InvocationTargetException, CoreException { config.setUseMaven("my.group.id", "my-artifact-id", "12.34.56"); - CreateAppEngineWtpProject creator = newCreateAppEngineWtpProject(); + CreateAppEngineProject creator = newCreateAppEngineProject(); creator.execute(monitor); ProjectUtils.waitForProjects(project); @@ -226,41 +63,16 @@ public void testMavenNatureEnabled() throws InvocationTargetException, CoreExcep assertOutputDirectory("target/my-artifact-id-12.34.56/WEB-INF/classes"); } - protected void assertOutputDirectory(String expected) throws JavaModelException { - assertTrue(project.getFolder(expected).exists()); - IJavaProject javaProject = JavaCore.create(project); - assertEquals(new Path(expected), javaProject.getOutputLocation().removeFirstSegments(1)); - } - @Test public void testJUnit4ClasspathIfNotUsingMaven() throws InvocationTargetException, CoreException { - CreateAppEngineWtpProject creator = newCreateAppEngineWtpProject(); + CreateAppEngineProject creator = newCreateAppEngineProject(); creator.execute(monitor); assertTrue(hasJUnit4Classpath(project)); } - @Test - public void testNoJUnit4ClasspathIfUsingMaven() throws InvocationTargetException, CoreException { - config.setUseMaven("my.group.id", "my-other-artifact-id", "12.34.56"); - - CreateAppEngineWtpProject creator = newCreateAppEngineWtpProject(); - creator.execute(monitor); - assertFalse(hasJUnit4Classpath(project)); - } - - private static boolean hasJUnit4Classpath(IProject project) throws JavaModelException { - IJavaProject javaProject = JavaCore.create(project); - for (IClasspathEntry entry : javaProject.getRawClasspath()) { - if (entry.getPath().equals(JUnitCore.JUNIT4_CONTAINER_PATH)) { - return true; - } - } - return false; - } - @Test public void testJstl12JarIfNonMavenProject() throws InvocationTargetException, CoreException { - CreateAppEngineWtpProject creator = newCreateAppEngineWtpProject(); + CreateAppEngineProject creator = newCreateAppEngineProject(); creator.execute(monitor); assertTrue(project.getFile("src/main/webapp/WEB-INF/lib/fake-jstl-jstl-1.2.jar").exists()); @@ -269,7 +81,7 @@ public void testJstl12JarIfNonMavenProject() throws InvocationTargetException, C @Test public void testNoJstl12JarIfMavenProject() throws InvocationTargetException, CoreException { config.setUseMaven("my.group.id", "my-other-artifact-id", "12.34.56"); - CreateAppEngineWtpProject creator = newCreateAppEngineWtpProject(); + CreateAppEngineProject creator = newCreateAppEngineProject(); creator.execute(monitor); assertFalse(project.getFile("src/main/webapp/WEB-INF/lib/fake-jstl-jstl-1.2.jar").exists()); diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/CreateAppEngineFlexWtpProjectTest.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/CreateAppEngineFlexWtpProjectTest.java index 3004687a6f..5516ec22af 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/CreateAppEngineFlexWtpProjectTest.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/CreateAppEngineFlexWtpProjectTest.java @@ -19,7 +19,7 @@ import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; -import com.google.cloud.tools.eclipse.appengine.newproject.CreateAppEngineWtpProject; +import com.google.cloud.tools.eclipse.appengine.newproject.CreateAppEngineProject; import com.google.cloud.tools.eclipse.appengine.newproject.CreateAppEngineWtpProjectTest; import java.io.File; import java.lang.reflect.InvocationTargetException; @@ -39,13 +39,13 @@ public class CreateAppEngineFlexWtpProjectTest extends CreateAppEngineWtpProjectTest { @Override - protected CreateAppEngineWtpProject newCreateAppEngineWtpProject() { + protected CreateAppEngineProject newCreateAppEngineProject() { return new CreateAppEngineFlexWtpProject(config, mock(IAdaptable.class), repositoryService); } @Test public void testServletApi31Added() throws InvocationTargetException, CoreException { - CreateAppEngineWtpProject creator = newCreateAppEngineWtpProject(); + CreateAppEngineProject creator = newCreateAppEngineProject(); creator.execute(monitor); assertTrue(project.getFile("lib/fake-javax.servlet-javax.servlet-api-3.1.0.jar").exists()); @@ -53,7 +53,7 @@ public void testServletApi31Added() throws InvocationTargetException, CoreExcept @Test public void testJspApi231Added() throws InvocationTargetException, CoreException { - CreateAppEngineWtpProject creator = newCreateAppEngineWtpProject(); + CreateAppEngineProject creator = newCreateAppEngineProject(); creator.execute(monitor); assertTrue(project.getFile("lib/fake-javax.servlet.jsp-javax.servlet.jsp-api-2.3.1.jar") @@ -63,7 +63,7 @@ public void testJspApi231Added() throws InvocationTargetException, CoreException @Test public void testNonDependencyAttributeOnJarsInLib() throws InvocationTargetException, CoreException { - CreateAppEngineWtpProject creator = + CreateAppEngineProject creator = new CreateAppEngineFlexWtpProject(config, mock(IAdaptable.class), repositoryService); creator.execute(monitor); @@ -94,7 +94,7 @@ private static boolean isNonDependencyAttribute(IClasspathAttribute attribute) { @Test public void testDynamicWebModuleFacet31Added() throws InvocationTargetException, CoreException { - CreateAppEngineWtpProject creator = newCreateAppEngineWtpProject(); + CreateAppEngineProject creator = newCreateAppEngineProject(); creator.execute(monitor); IFacetedProject facetedProject = ProjectFacetsManager.create(project); diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/standard/CreateAppEngineStandardWtpProjectTest.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/standard/CreateAppEngineStandardWtpProjectTest.java index e0d77befdd..c3f9ac0a7c 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/standard/CreateAppEngineStandardWtpProjectTest.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/standard/CreateAppEngineStandardWtpProjectTest.java @@ -25,7 +25,7 @@ import com.google.cloud.tools.eclipse.appengine.libraries.model.CloudLibraries; import com.google.cloud.tools.eclipse.appengine.libraries.model.Library; import com.google.cloud.tools.eclipse.appengine.libraries.repository.ILibraryRepositoryService; -import com.google.cloud.tools.eclipse.appengine.newproject.CreateAppEngineWtpProject; +import com.google.cloud.tools.eclipse.appengine.newproject.CreateAppEngineProject; import com.google.cloud.tools.eclipse.appengine.newproject.CreateAppEngineWtpProjectTest; import com.google.cloud.tools.eclipse.test.util.project.ProjectUtils; import java.lang.reflect.InvocationTargetException; @@ -48,18 +48,18 @@ public class CreateAppEngineStandardWtpProjectTest extends CreateAppEngineWtpProjectTest { @Override - protected CreateAppEngineWtpProject newCreateAppEngineWtpProject() { + protected CreateAppEngineProject newCreateAppEngineProject() { return new CreateAppEngineStandardWtpProject(config, mock(IAdaptable.class), repositoryService); } @Test public void testConstructor() { - newCreateAppEngineWtpProject(); + newCreateAppEngineProject(); } @Test public void testAppEngineRuntimeAdded() throws InvocationTargetException, CoreException { - CreateAppEngineWtpProject creator = newCreateAppEngineWtpProject(); + CreateAppEngineProject creator = newCreateAppEngineProject(); creator.execute(monitor); ProjectUtils.waitForProjects(project); // App Engine runtime is added via a Job, so wait. @@ -74,7 +74,7 @@ public void testAppEngineLibrariesAdded() throws InvocationTargetException, Core List libraries = new ArrayList<>(); libraries.add(library); config.setAppEngineLibraries(libraries); - CreateAppEngineWtpProject creator = newCreateAppEngineWtpProject(); + CreateAppEngineProject creator = newCreateAppEngineProject(); creator.execute(monitor); assertTrue(project.hasNature(JavaCore.NATURE_ID)); diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineProjectWizard.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineProjectWizard.java index a6c72420af..a517753fdc 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineProjectWizard.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineProjectWizard.java @@ -52,7 +52,7 @@ public AppEngineProjectWizard() { public abstract IStatus validateDependencies(); - public abstract CreateAppEngineWtpProject getAppEngineProjectCreationOperation( + public abstract CreateAppEngineProject getAppEngineProjectCreationOperation( AppEngineProjectConfig config, IAdaptable uiInfoAdapter); @Override @@ -89,7 +89,7 @@ public boolean performFinish() { // todo set up IAdaptable uiInfoAdapter = WorkspaceUndoUtil.getUIInfoAdapter(getShell()); - CreateAppEngineWtpProject runnable = + CreateAppEngineProject runnable = getAppEngineProjectCreationOperation(config, uiInfoAdapter); try { diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/CreateAppEngineWtpProject.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/CreateAppEngineProject.java similarity index 98% rename from plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/CreateAppEngineWtpProject.java rename to plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/CreateAppEngineProject.java index 1a2cf7bd88..7166eea42d 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/CreateAppEngineWtpProject.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/CreateAppEngineProject.java @@ -68,9 +68,9 @@ /** * Utility to make a new Eclipse App Engine project in the workspace. */ -public abstract class CreateAppEngineWtpProject extends WorkspaceModifyOperation { +public abstract class CreateAppEngineProject extends WorkspaceModifyOperation { - private static final Logger logger = Logger.getLogger(CreateAppEngineWtpProject.class.getName()); + private static final Logger logger = Logger.getLogger(CreateAppEngineProject.class.getName()); protected final ILibraryRepositoryService repositoryService; @@ -104,7 +104,7 @@ public IFile getMostImportant() { return mostImportant; } - protected CreateAppEngineWtpProject(AppEngineProjectConfig config, + protected CreateAppEngineProject(AppEngineProjectConfig config, IAdaptable uiInfoAdapter, ILibraryRepositoryService repositoryService) { if (config == null) { throw new NullPointerException("Null App Engine configuration"); //$NON-NLS-1$ diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarProjectWizard.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarProjectWizard.java index dc00898cc6..de786edc5a 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarProjectWizard.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarProjectWizard.java @@ -19,7 +19,7 @@ import com.google.cloud.tools.eclipse.appengine.libraries.repository.ILibraryRepositoryService; import com.google.cloud.tools.eclipse.appengine.newproject.AppEngineProjectConfig; import com.google.cloud.tools.eclipse.appengine.newproject.AppEngineProjectWizard; -import com.google.cloud.tools.eclipse.appengine.newproject.CreateAppEngineWtpProject; +import com.google.cloud.tools.eclipse.appengine.newproject.CreateAppEngineProject; import com.google.cloud.tools.eclipse.appengine.newproject.Messages; import com.google.cloud.tools.eclipse.usagetracker.AnalyticsEvents; import com.google.cloud.tools.eclipse.usagetracker.AnalyticsPingManager; @@ -52,7 +52,7 @@ public IStatus validateDependencies() { } @Override - public CreateAppEngineWtpProject getAppEngineProjectCreationOperation( + public CreateAppEngineProject getAppEngineProjectCreationOperation( AppEngineProjectConfig config, IAdaptable uiInfoAdapter) { return new CreateAppEngineFlexJarProject(config, uiInfoAdapter, repositoryService); } diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexWarProjectWizard.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexWarProjectWizard.java index 8690e1b57d..94664aebf3 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexWarProjectWizard.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexWarProjectWizard.java @@ -19,7 +19,7 @@ import com.google.cloud.tools.eclipse.appengine.libraries.repository.ILibraryRepositoryService; import com.google.cloud.tools.eclipse.appengine.newproject.AppEngineProjectConfig; import com.google.cloud.tools.eclipse.appengine.newproject.AppEngineProjectWizard; -import com.google.cloud.tools.eclipse.appengine.newproject.CreateAppEngineWtpProject; +import com.google.cloud.tools.eclipse.appengine.newproject.CreateAppEngineProject; import com.google.cloud.tools.eclipse.appengine.newproject.Messages; import com.google.cloud.tools.eclipse.usagetracker.AnalyticsEvents; import com.google.cloud.tools.eclipse.usagetracker.AnalyticsPingManager; @@ -52,7 +52,7 @@ public IStatus validateDependencies() { } @Override - public CreateAppEngineWtpProject getAppEngineProjectCreationOperation( + public CreateAppEngineProject getAppEngineProjectCreationOperation( AppEngineProjectConfig config, IAdaptable uiInfoAdapter) { return new CreateAppEngineFlexWtpProject(config, uiInfoAdapter, repositoryService); } diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/CreateAppEngineFlexJarProject.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/CreateAppEngineFlexJarProject.java index b9154858e5..d5c99a69ab 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/CreateAppEngineFlexJarProject.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/CreateAppEngineFlexJarProject.java @@ -20,7 +20,7 @@ import com.google.cloud.tools.eclipse.appengine.libraries.repository.ILibraryRepositoryService; import com.google.cloud.tools.eclipse.appengine.newproject.AppEngineProjectConfig; import com.google.cloud.tools.eclipse.appengine.newproject.CodeTemplates; -import com.google.cloud.tools.eclipse.appengine.newproject.CreateAppEngineWtpProject; +import com.google.cloud.tools.eclipse.appengine.newproject.CreateAppEngineProject; import com.google.cloud.tools.eclipse.appengine.newproject.Messages; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; @@ -30,7 +30,7 @@ import org.eclipse.core.runtime.SubMonitor; import org.eclipse.wst.common.project.facet.core.IFacetedProject; -public class CreateAppEngineFlexJarProject extends CreateAppEngineWtpProject { +public class CreateAppEngineFlexJarProject extends CreateAppEngineProject { CreateAppEngineFlexJarProject(AppEngineProjectConfig config, IAdaptable uiInfoAdapter, ILibraryRepositoryService repositoryService) { diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/CreateAppEngineFlexWtpProject.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/CreateAppEngineFlexWtpProject.java index cf4e21dfee..2386c3f990 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/CreateAppEngineFlexWtpProject.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/CreateAppEngineFlexWtpProject.java @@ -21,7 +21,7 @@ import com.google.cloud.tools.eclipse.appengine.libraries.repository.ILibraryRepositoryService; import com.google.cloud.tools.eclipse.appengine.newproject.AppEngineProjectConfig; import com.google.cloud.tools.eclipse.appengine.newproject.CodeTemplates; -import com.google.cloud.tools.eclipse.appengine.newproject.CreateAppEngineWtpProject; +import com.google.cloud.tools.eclipse.appengine.newproject.CreateAppEngineProject; import com.google.cloud.tools.eclipse.appengine.newproject.Messages; import com.google.cloud.tools.eclipse.util.ClasspathUtil; import com.google.common.collect.ImmutableList; @@ -47,7 +47,7 @@ /** * Utility to create a new App Engine Flexible Eclipse project. */ -public class CreateAppEngineFlexWtpProject extends CreateAppEngineWtpProject { +public class CreateAppEngineFlexWtpProject extends CreateAppEngineProject { private static final List SERVLET_DEPENDENCIES; diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/standard/AppEngineStandardProjectWizard.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/standard/AppEngineStandardProjectWizard.java index fc519f10f7..efedf4708c 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/standard/AppEngineStandardProjectWizard.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/standard/AppEngineStandardProjectWizard.java @@ -20,7 +20,7 @@ import com.google.cloud.tools.eclipse.appengine.libraries.repository.ILibraryRepositoryService; import com.google.cloud.tools.eclipse.appengine.newproject.AppEngineProjectConfig; import com.google.cloud.tools.eclipse.appengine.newproject.AppEngineProjectWizard; -import com.google.cloud.tools.eclipse.appengine.newproject.CreateAppEngineWtpProject; +import com.google.cloud.tools.eclipse.appengine.newproject.CreateAppEngineProject; import com.google.cloud.tools.eclipse.appengine.newproject.Messages; import com.google.cloud.tools.eclipse.appengine.ui.AppEngineRuntime; import com.google.cloud.tools.eclipse.usagetracker.AnalyticsEvents; @@ -78,7 +78,7 @@ public IStatus validateDependencies() { } @Override - public CreateAppEngineWtpProject getAppEngineProjectCreationOperation( + public CreateAppEngineProject getAppEngineProjectCreationOperation( AppEngineProjectConfig config, IAdaptable uiInfoAdapter) { return new CreateAppEngineStandardWtpProject(config, uiInfoAdapter, repositoryService); } diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/standard/CreateAppEngineStandardWtpProject.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/standard/CreateAppEngineStandardWtpProject.java index cc04dafd04..ad3ddaf836 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/standard/CreateAppEngineStandardWtpProject.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/standard/CreateAppEngineStandardWtpProject.java @@ -20,7 +20,7 @@ import com.google.cloud.tools.eclipse.appengine.libraries.repository.ILibraryRepositoryService; import com.google.cloud.tools.eclipse.appengine.newproject.AppEngineProjectConfig; import com.google.cloud.tools.eclipse.appengine.newproject.CodeTemplates; -import com.google.cloud.tools.eclipse.appengine.newproject.CreateAppEngineWtpProject; +import com.google.cloud.tools.eclipse.appengine.newproject.CreateAppEngineProject; import com.google.cloud.tools.eclipse.appengine.newproject.Messages; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; @@ -33,7 +33,7 @@ /** * Utility to make a new Eclipse project with the App Engine Standard facets in the workspace. */ -public class CreateAppEngineStandardWtpProject extends CreateAppEngineWtpProject { +public class CreateAppEngineStandardWtpProject extends CreateAppEngineProject { public CreateAppEngineStandardWtpProject(AppEngineProjectConfig config, IAdaptable uiInfoAdapter, ILibraryRepositoryService repositoryService) { From cf4ed0ffb93369ae634a007ef1041f85b93de6fe Mon Sep 17 00:00:00 2001 From: Chanseok Oh Date: Tue, 31 Oct 2017 15:31:18 -0400 Subject: [PATCH 05/14] WIP --- .../newproject/AppEngineWizardPageTest.java | 102 ++++++++++++++++-- .../maven/MavenCoordinatesWizardUiTest.java | 68 ------------ .../newproject/AppEngineProjectWizard.java | 6 +- .../newproject/AppEngineWizardPage.java | 39 ++++++- .../flex/AppEngineFlexJarProjectWizard.java | 10 +- .../flex/AppEngineFlexJarWizardPage.java | 45 ++++++++ .../flex/AppEngineFlexWarProjectWizard.java | 11 +- ...e.java => AppEngineFlexWarWizardPage.java} | 12 ++- .../maven/MavenCoordinatesInput.java | 39 +++++++ .../newproject/maven/MavenCoordinatesUi.java | 13 ++- .../maven/MavenCoordinatesWizardUi.java | 38 ++----- .../AppEngineStandardProjectWizard.java | 9 +- .../standard/AppEngineStandardWizardPage.java | 10 +- 13 files changed, 269 insertions(+), 133 deletions(-) create mode 100644 plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarWizardPage.java rename plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/{AppEngineFlexWizardPage.java => AppEngineFlexWarWizardPage.java} (74%) create mode 100644 plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/maven/MavenCoordinatesInput.java diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineWizardPageTest.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineWizardPageTest.java index 355a0dcf09..d55b7500d7 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineWizardPageTest.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineWizardPageTest.java @@ -18,13 +18,20 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; +import com.google.cloud.tools.eclipse.appengine.newproject.maven.MavenCoordinatesInput; +import com.google.cloud.tools.eclipse.appengine.newproject.maven.MavenCoordinatesWizardUi; import com.google.cloud.tools.eclipse.test.util.ui.CompositeUtil; import com.google.cloud.tools.eclipse.test.util.ui.ShellTestResource; -import org.eclipse.jface.wizard.WizardPage; +import com.google.common.base.Predicate; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Text; +import org.eclipse.swtbot.swt.finder.widgets.SWTBotCheckBox; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -34,6 +41,7 @@ public class AppEngineWizardPageTest { @Rule public ShellTestResource shellResource = new ShellTestResource(); private AppEngineWizardPage page; + private MavenCoordinatesInput mavenCoordinatesInput; @Before public void setUp() { @@ -42,6 +50,12 @@ public void setUp() { public void setHelp(Composite container) { // Do nothing in tests. } + + @Override + protected MavenCoordinatesInput createMavenCoordinatesInput(Composite container) { + mavenCoordinatesInput = new MavenCoordinatesWizardUi(container, SWT.NONE); + return mavenCoordinatesInput; + } }; page.createControl(shellResource.getShell()); } @@ -58,8 +72,8 @@ public void testSuggestPackageName() { @Test public void testAutoPackageNameSetterOnGroupIdChange_whitespaceInGroupId() { - Text groupIdField = getFieldWithLabel(page, "Group ID:"); - Text javaPackageField = getFieldWithLabel(page, "Java package:"); + Text groupIdField = getFieldWithLabel("Group ID:"); + Text javaPackageField = getFieldWithLabel("Java package:"); groupIdField.setText(" "); // setText() triggers VerifyEvent. assertEquals("", javaPackageField.getText()); @@ -87,8 +101,8 @@ public void testAutoPackageNameSetterOnGroupIdChange_whitespaceInGroupId() { public void testAutoPackageNameSetterOnGroupIdChange_disbledOnUserChange() { assertTrue(page.autoGeneratePackageName); - Text groupIdField = getFieldWithLabel(page, "Group ID:"); - Text javaPackageField = getFieldWithLabel(page, "Java package:"); + Text groupIdField = getFieldWithLabel("Group ID:"); + Text javaPackageField = getFieldWithLabel("Java package:"); groupIdField.setText("abc"); assertEquals("abc", javaPackageField.getText()); @@ -108,8 +122,82 @@ public void testAutoPackageNameSetterOnGroupIdChange_disbledOnUserChange() { assertEquals("", javaPackageField.getText()); } - private static Text getFieldWithLabel(WizardPage page, String label) { - return CompositeUtil.findControlAfterLabel((Composite) page.getControl(), Text.class, label); + @Test + public void testSetMavenValidationMessage_okWhenDisabled() { + assertFalse(mavenCoordinatesInput.uiEnabled()); + assertTrue(page.setMavenValidationMessage()); + } + + @Test + public void testSetMavenValidationMessage_emptyGroupId() { + enableMavenCoordinatesInput(); + + assertFalse(page.setMavenValidationMessage()); + assertEquals("Provide Maven Group ID.", page.getMessage()); + assertNull(page.getErrorMessage()); + } + + @Test + public void testSetMavenValidationMessage_emptyArtifactId() { + enableMavenCoordinatesInput(); + getFieldWithLabel("Group ID:").setText("com.example"); + + assertFalse(page.setMavenValidationMessage()); + assertEquals("Provide Maven Artifact ID.", page.getMessage()); + assertNull(page.getErrorMessage()); + } + + @Test + public void testSetMavenValidationMessage_emptyVersion() { + enableMavenCoordinatesInput(); + getFieldWithLabel("Group ID:").setText("com.example"); + getFieldWithLabel("Artifact ID:").setText("some-artifact-id"); + getFieldWithLabel("Version:").setText(""); + + assertFalse(page.setMavenValidationMessage()); + assertEquals("Provide Maven artifact version.", page.getMessage()); + assertNull(page.getErrorMessage()); + } + + @Test + public void testSetMavenValidationMessage_illegalGroupId() { + enableMavenCoordinatesInput(); + getFieldWithLabel("Artifact ID:").setText("some-artifact-id"); + + getFieldWithLabel("Group ID:").setText("<:#= Illegal ID =#:>"); + assertFalse(page.setMavenValidationMessage()); + assertEquals("Illegal Maven Group ID: <:#= Illegal ID =#:>", page.getErrorMessage()); + } + + @Test + public void testSetMavenValidationMessage_illegalArtifactId() { + enableMavenCoordinatesInput(); + getFieldWithLabel("Group ID:").setText("com.example"); + + getFieldWithLabel("Artifact ID:").setText("<:#= Illegal ID =#:>"); + assertFalse(page.setMavenValidationMessage()); + assertEquals("Illegal Maven Artifact ID: <:#= Illegal ID =#:>", page.getErrorMessage()); + } + + @Test + public void testMavenValidateMavenSettings_noValidationIfUiDisabled() { + getFieldWithLabel("Group ID:").setText("<:#= Illegal ID =#:>"); + assertTrue(page.setMavenValidationMessage()); + } + + private void enableMavenCoordinatesInput() { + Predicate isMavenCheckbox = new Predicate() { + @Override + public boolean apply(Control control) { + return control instanceof Button + && "Create as Maven project".equals(((Button) control).getText()); + } + }; + Button asMaven = (Button) CompositeUtil.findControl(shellResource.getShell(), isMavenCheckbox); + new SWTBotCheckBox(asMaven).click(); } + private Text getFieldWithLabel(String label) { + return CompositeUtil.findControlAfterLabel(shellResource.getShell(), Text.class, label); + } } diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/maven/MavenCoordinatesWizardUiTest.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/maven/MavenCoordinatesWizardUiTest.java index 9d75df2915..28b960c169 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/maven/MavenCoordinatesWizardUiTest.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/maven/MavenCoordinatesWizardUiTest.java @@ -19,12 +19,10 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.verify; import com.google.cloud.tools.eclipse.test.util.ui.CompositeUtil; import com.google.cloud.tools.eclipse.test.util.ui.ShellTestResource; import org.eclipse.jface.dialogs.DialogPage; -import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Shell; @@ -91,72 +89,6 @@ public void testValidateMavenSettings_okWhenDisabled() { assertTrue(ui.validateMavenSettings().isOK()); } - @Test - public void testSetValidationMessage_okWhenDisabled() { - assertFalse(ui.uiEnabled()); - assertTrue(ui.setValidationMessage(dialogPage)); - } - - @Test - public void testSetValidationMessage_emptyGroupId() { - enableUi(); - - assertFalse(ui.setValidationMessage(dialogPage)); - verify(dialogPage).setMessage("Provide Maven Group ID.", IMessageProvider.INFORMATION); - } - - @Test - public void testSetValidationMessage_emptyArtifactId() { - enableUi(); - getGroupIdField().setText("com.example"); - - assertFalse(ui.setValidationMessage(dialogPage)); - verify(dialogPage).setMessage("Provide Maven Artifact ID.", IMessageProvider.INFORMATION); - } - - @Test - public void testSetValidationMessage_emptyVersion() { - enableUi(); - getGroupIdField().setText("com.example"); - getArtifactIdField().setText("some-artifact-id"); - getVersionField().setText(""); - - assertFalse(ui.setValidationMessage(dialogPage)); - verify(dialogPage).setMessage("Provide Maven artifact version.", IMessageProvider.INFORMATION); - } - - @Test - public void testSetValidationMessage_illegalGroupId() { - enableUi(); - - getArtifactIdField().setText("some-artifact-id"); - - getGroupIdField().setText("<:#= Illegal ID =#:>"); - assertFalse(ui.setValidationMessage(dialogPage)); - verify(dialogPage).setErrorMessage("Illegal Maven Group ID: <:#= Illegal ID =#:>"); - } - - @Test - public void testSetValidationMessage_illegalArtifactId() { - enableUi(); - getGroupIdField().setText("com.example"); - - getArtifactIdField().setText("<:#= Illegal ID =#:>"); - assertFalse(ui.setValidationMessage(dialogPage)); - verify(dialogPage).setErrorMessage("Illegal Maven Artifact ID: <:#= Illegal ID =#:>"); - } - - @Test - public void testValidateMavenSettings_noValidationIfUiDisabled() { - getGroupIdField().setText("<:#= Illegal ID =#:>"); - assertTrue(ui.setValidationMessage(dialogPage)); - } - - private void enableUi() { - Button asMavenProject = CompositeUtil.findControl(shell, Button.class); - new SWTBotCheckBox(asMavenProject).click(); - } - private Text getGroupIdField() { return CompositeUtil.findControlAfterLabel(shell, Text.class, "Group ID:"); } diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineProjectWizard.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineProjectWizard.java index a517753fdc..82c8c8215f 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineProjectWizard.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineProjectWizard.java @@ -48,11 +48,11 @@ public AppEngineProjectWizard() { setNeedsProgressMonitor(true); } - public abstract AppEngineWizardPage createWizardPage(); + protected abstract AppEngineWizardPage createWizardPage(); - public abstract IStatus validateDependencies(); + protected abstract IStatus validateDependencies(); - public abstract CreateAppEngineProject getAppEngineProjectCreationOperation( + protected abstract CreateAppEngineProject getAppEngineProjectCreationOperation( AppEngineProjectConfig config, IAdaptable uiInfoAdapter); @Override diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineWizardPage.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineWizardPage.java index b4cfb8de9c..f010e3b826 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineWizardPage.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineWizardPage.java @@ -19,7 +19,7 @@ import com.google.cloud.tools.eclipse.appengine.libraries.model.CloudLibraries; import com.google.cloud.tools.eclipse.appengine.libraries.model.Library; import com.google.cloud.tools.eclipse.appengine.libraries.ui.LibrarySelectorGroup; -import com.google.cloud.tools.eclipse.appengine.newproject.maven.MavenCoordinatesWizardUi; +import com.google.cloud.tools.eclipse.appengine.newproject.maven.MavenCoordinatesInput; import com.google.cloud.tools.eclipse.appengine.ui.AppEngineImages; import com.google.cloud.tools.eclipse.util.JavaPackageValidator; import com.google.cloud.tools.eclipse.util.MavenCoordinatesValidator; @@ -31,6 +31,8 @@ import java.util.HashSet; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.dialogs.DialogPage; +import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; @@ -52,7 +54,7 @@ public abstract class AppEngineWizardPage extends WizardNewProjectCreationPage { private LibrarySelectorGroup appEngineLibrariesSelectorGroup; private Text javaPackageField; private Text serviceNameField; - private MavenCoordinatesWizardUi mavenCoordinatesUi; + private MavenCoordinatesInput mavenCoordinatesUi; private final boolean showLibrariesSelectorGroup; /** True if we should auto-generate the javaPackageField from the provided groupId */ @@ -68,7 +70,9 @@ public AppEngineWizardPage(boolean showLibrariesSelectorGroup) { this.showLibrariesSelectorGroup = showLibrariesSelectorGroup; } - public abstract void setHelp(Composite container); + protected abstract void setHelp(Composite container); + + protected abstract MavenCoordinatesInput createMavenCoordinatesInput(Composite container); @Override public void createControl(Composite parent) { @@ -79,7 +83,7 @@ public void createControl(Composite parent) { createCustomFields(container); - mavenCoordinatesUi = new MavenCoordinatesWizardUi(container, SWT.NONE); + mavenCoordinatesUi = createMavenCoordinatesInput(container); mavenCoordinatesUi.addChangeListener(new Listener() { @Override public void handleEvent(Event event) { @@ -203,7 +207,32 @@ private boolean validateLocalFields() { return false; } - return mavenCoordinatesUi.setValidationMessage(this); + return setMavenValidationMessage(); + } + + /** + * Convenience method to set a validation message on {@link DialogPage} from the result of calling + * {@link MavenCoordinatesInput#validateMavenSettings()}. + * + * @return {@code true} if no validation message was set; {@code false} otherwise + * + * @see MavenCoordinatesInput#validateMavenSettings() + */ + @VisibleForTesting + boolean setMavenValidationMessage() { + IStatus status = mavenCoordinatesUi.validateMavenSettings(); + if (status.isOK()) { + return true; + } + + if (IStatus.ERROR == status.getSeverity()) { + setErrorMessage(status.getMessage()); + } else if (IStatus.WARNING == status.getSeverity()) { + setMessage(status.getMessage(), IMessageProvider.WARNING); + } else if (IStatus.INFO == status.getSeverity()) { + setMessage(status.getMessage(), IMessageProvider.INFORMATION); + } + return false; } public String getPackageName() { diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarProjectWizard.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarProjectWizard.java index de786edc5a..5ec38b462f 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarProjectWizard.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarProjectWizard.java @@ -32,27 +32,27 @@ public class AppEngineFlexJarProjectWizard extends AppEngineProjectWizard { @Inject private ILibraryRepositoryService repositoryService; - public AppEngineFlexJarProjectWizard() { + AppEngineFlexJarProjectWizard() { setWindowTitle(Messages.getString("new.app.engine.flex.jar.project")); } @Override - public AppEngineFlexWizardPage createWizardPage() { + protected AppEngineFlexWarWizardPage createWizardPage() { AnalyticsPingManager.getInstance().sendPing( AnalyticsEvents.APP_ENGINE_NEW_PROJECT_WIZARD, AnalyticsEvents.APP_ENGINE_NEW_PROJECT_WIZARD_TYPE, AnalyticsEvents.APP_ENGINE_NEW_PROJECT_WIZARD_TYPE_FLEX, getShell()); - return new AppEngineFlexWizardPage(); + return new AppEngineFlexWarWizardPage(); } @Override - public IStatus validateDependencies() { + protected IStatus validateDependencies() { return Status.OK_STATUS; } @Override - public CreateAppEngineProject getAppEngineProjectCreationOperation( + protected CreateAppEngineProject getAppEngineProjectCreationOperation( AppEngineProjectConfig config, IAdaptable uiInfoAdapter) { return new CreateAppEngineFlexJarProject(config, uiInfoAdapter, repositoryService); } diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarWizardPage.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarWizardPage.java new file mode 100644 index 0000000000..f6878ae3a9 --- /dev/null +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarWizardPage.java @@ -0,0 +1,45 @@ +/* + * Copyright 2017 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.tools.eclipse.appengine.newproject.flex; + +import com.google.cloud.tools.eclipse.appengine.newproject.AppEngineWizardPage; +import com.google.cloud.tools.eclipse.appengine.newproject.Messages; +import com.google.cloud.tools.eclipse.appengine.newproject.maven.MavenCoordinatesInput; +import com.google.cloud.tools.eclipse.appengine.newproject.maven.MavenCoordinatesUi; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.PlatformUI; + +public class AppEngineFlexJarWizardPage extends AppEngineWizardPage { + + AppEngineFlexJarWizardPage() { + super(false); + setTitle(Messages.getString("app.engine.flex.project")); //$NON-NLS-1$ + setDescription(Messages.getString("create.app.engine.flex.project")); //$NON-NLS-1$ + } + + @Override + protected void setHelp(Composite container) { + PlatformUI.getWorkbench().getHelpSystem().setHelp(container, + "com.google.cloud.tools.eclipse.appengine.newproject.NewFlexProjectContext"); //$NON-NLS-1$ + } + + @Override + protected MavenCoordinatesInput createMavenCoordinatesInput(Composite container) { + return new MavenCoordinatesUi(container, SWT.NONE); + } +} diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexWarProjectWizard.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexWarProjectWizard.java index 94664aebf3..b9e5959731 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexWarProjectWizard.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexWarProjectWizard.java @@ -19,6 +19,7 @@ import com.google.cloud.tools.eclipse.appengine.libraries.repository.ILibraryRepositoryService; import com.google.cloud.tools.eclipse.appengine.newproject.AppEngineProjectConfig; import com.google.cloud.tools.eclipse.appengine.newproject.AppEngineProjectWizard; +import com.google.cloud.tools.eclipse.appengine.newproject.AppEngineWizardPage; import com.google.cloud.tools.eclipse.appengine.newproject.CreateAppEngineProject; import com.google.cloud.tools.eclipse.appengine.newproject.Messages; import com.google.cloud.tools.eclipse.usagetracker.AnalyticsEvents; @@ -32,27 +33,27 @@ public class AppEngineFlexWarProjectWizard extends AppEngineProjectWizard { @Inject private ILibraryRepositoryService repositoryService; - public AppEngineFlexWarProjectWizard() { + AppEngineFlexWarProjectWizard() { setWindowTitle(Messages.getString("new.app.engine.flex.war.project")); } @Override - public AppEngineFlexWizardPage createWizardPage() { + protected AppEngineWizardPage createWizardPage() { AnalyticsPingManager.getInstance().sendPing( AnalyticsEvents.APP_ENGINE_NEW_PROJECT_WIZARD, AnalyticsEvents.APP_ENGINE_NEW_PROJECT_WIZARD_TYPE, AnalyticsEvents.APP_ENGINE_NEW_PROJECT_WIZARD_TYPE_FLEX, getShell()); - return new AppEngineFlexWizardPage(); + return new AppEngineFlexWarWizardPage(); } @Override - public IStatus validateDependencies() { + protected IStatus validateDependencies() { return Status.OK_STATUS; } @Override - public CreateAppEngineProject getAppEngineProjectCreationOperation( + protected CreateAppEngineProject getAppEngineProjectCreationOperation( AppEngineProjectConfig config, IAdaptable uiInfoAdapter) { return new CreateAppEngineFlexWtpProject(config, uiInfoAdapter, repositoryService); } diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexWizardPage.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexWarWizardPage.java similarity index 74% rename from plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexWizardPage.java rename to plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexWarWizardPage.java index 2ec069474b..f810eb0e5c 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexWizardPage.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexWarWizardPage.java @@ -18,21 +18,27 @@ import com.google.cloud.tools.eclipse.appengine.newproject.AppEngineWizardPage; import com.google.cloud.tools.eclipse.appengine.newproject.Messages; +import com.google.cloud.tools.eclipse.appengine.newproject.maven.MavenCoordinatesWizardUi; +import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.PlatformUI; -public class AppEngineFlexWizardPage extends AppEngineWizardPage { +public class AppEngineFlexWarWizardPage extends AppEngineWizardPage { - public AppEngineFlexWizardPage() { + AppEngineFlexWarWizardPage() { super(false); setTitle(Messages.getString("app.engine.flex.project")); //$NON-NLS-1$ setDescription(Messages.getString("create.app.engine.flex.project")); //$NON-NLS-1$ } @Override - public void setHelp(Composite container) { + protected void setHelp(Composite container) { PlatformUI.getWorkbench().getHelpSystem().setHelp(container, "com.google.cloud.tools.eclipse.appengine.newproject.NewFlexProjectContext"); //$NON-NLS-1$ } + @Override + protected MavenCoordinatesWizardUi createMavenCoordinatesInput(Composite container) { + return new MavenCoordinatesWizardUi(container, SWT.NONE); + } } diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/maven/MavenCoordinatesInput.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/maven/MavenCoordinatesInput.java new file mode 100644 index 0000000000..f54bcb2bc3 --- /dev/null +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/maven/MavenCoordinatesInput.java @@ -0,0 +1,39 @@ +/* + * Copyright 2017 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.tools.eclipse.appengine.newproject.maven; + +import org.eclipse.core.runtime.IStatus; +import org.eclipse.swt.events.ModifyListener; +import org.eclipse.swt.widgets.Listener; + +public interface MavenCoordinatesInput { + + void addChangeListener(Listener listener); + + void addGroupIdModifyListener(ModifyListener listener); + + String getArtifactId(); + + boolean uiEnabled(); + + String getGroupId(); + + String getVersion(); + + IStatus validateMavenSettings(); + +} diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/maven/MavenCoordinatesUi.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/maven/MavenCoordinatesUi.java index bd52bbc825..13fccc4c8c 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/maven/MavenCoordinatesUi.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/maven/MavenCoordinatesUi.java @@ -30,7 +30,7 @@ import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Text; -public class MavenCoordinatesUi extends Group { +public class MavenCoordinatesUi extends Group implements MavenCoordinatesInput { private static final String DEFAULT_VERSION = "0.1.0-SNAPSHOT"; //$NON-NLS-1$ @@ -67,24 +67,29 @@ protected void checkSubclass () { // Allow subclassing by not calling super(). } + @Override public String getGroupId() { return groupIdField.getText().trim(); } + @Override public String getArtifactId() { return artifactIdField.getText().trim(); } + @Override public String getVersion() { return versionField.getText().trim(); } + @Override public void addChangeListener(Listener listener) { groupIdField.addListener(SWT.Modify, listener); artifactIdField.addListener(SWT.Modify, listener); versionField.addListener(SWT.Modify, listener); } + @Override public void addGroupIdModifyListener(ModifyListener listener) { groupIdField.addModifyListener(listener); } @@ -104,6 +109,7 @@ public void setEnabled(boolean enabled) { * @return {@link IStatus#OK} if there was no validation problem; otherwise a status describing a * validation problem (with a non-OK status) */ + @Override public IStatus validateMavenSettings() { if (getGroupId().isEmpty()) { return StatusUtil.info(this, Messages.getString("PROVIDE_GROUP_ID")); //$NON-NLS-1$ @@ -123,4 +129,9 @@ public IStatus validateMavenSettings() { } return Status.OK_STATUS; } + + @Override + public boolean uiEnabled() { + return true; + } } diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/maven/MavenCoordinatesWizardUi.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/maven/MavenCoordinatesWizardUi.java index ceebd7bf8a..a59c2d207f 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/maven/MavenCoordinatesWizardUi.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/maven/MavenCoordinatesWizardUi.java @@ -19,8 +19,6 @@ import com.google.cloud.tools.eclipse.appengine.newproject.Messages; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; -import org.eclipse.jface.dialogs.DialogPage; -import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyListener; @@ -30,7 +28,7 @@ import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Listener; -public class MavenCoordinatesWizardUi extends Composite { +public class MavenCoordinatesWizardUi extends Composite implements MavenCoordinatesInput { private final Button asMavenProjectButton; @@ -56,29 +54,33 @@ public void widgetSelected(SelectionEvent event) { GridLayoutFactory.swtDefaults().generateLayout(this); } + @Override public boolean uiEnabled() { return asMavenProjectButton.getSelection(); } + @Override public String getGroupId() { return mavenCoordinatesUi.getGroupId(); } + @Override public String getArtifactId() { return mavenCoordinatesUi.getArtifactId(); } + @Override public String getVersion() { return mavenCoordinatesUi.getVersion(); } + @Override public void addChangeListener(Listener listener) { mavenCoordinatesUi.addChangeListener(listener); - if (asMavenProjectButton != null) { - asMavenProjectButton.addListener(SWT.Selection, listener); - } + asMavenProjectButton.addListener(SWT.Selection, listener); } + @Override public void addGroupIdModifyListener(ModifyListener listener) { mavenCoordinatesUi.addGroupIdModifyListener(listener); } @@ -99,28 +101,4 @@ public IStatus validateMavenSettings() { return mavenCoordinatesUi.validateMavenSettings(); } } - - /** - * Convenience method to set a validation message on {@link DialogPage} from the result of calling - * {@link #validateMavenSettings()}. - * - * @return {@code true} if no validation message was set; {@code false} otherwise - * - * @see #validateMavenSettings() - */ - public boolean setValidationMessage(DialogPage page) { - IStatus status = validateMavenSettings(); - if (status.isOK()) { - return true; - } - - if (IStatus.ERROR == status.getSeverity()) { - page.setErrorMessage(status.getMessage()); - } else if (IStatus.WARNING == status.getSeverity()) { - page.setMessage(status.getMessage(), IMessageProvider.WARNING); - } else if (IStatus.INFO == status.getSeverity()) { - page.setMessage(status.getMessage(), IMessageProvider.INFORMATION); - } - return false; - } } diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/standard/AppEngineStandardProjectWizard.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/standard/AppEngineStandardProjectWizard.java index efedf4708c..656c17daea 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/standard/AppEngineStandardProjectWizard.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/standard/AppEngineStandardProjectWizard.java @@ -20,6 +20,7 @@ import com.google.cloud.tools.eclipse.appengine.libraries.repository.ILibraryRepositoryService; import com.google.cloud.tools.eclipse.appengine.newproject.AppEngineProjectConfig; import com.google.cloud.tools.eclipse.appengine.newproject.AppEngineProjectWizard; +import com.google.cloud.tools.eclipse.appengine.newproject.AppEngineWizardPage; import com.google.cloud.tools.eclipse.appengine.newproject.CreateAppEngineProject; import com.google.cloud.tools.eclipse.appengine.newproject.Messages; import com.google.cloud.tools.eclipse.appengine.ui.AppEngineRuntime; @@ -42,12 +43,12 @@ public class AppEngineStandardProjectWizard extends AppEngineProjectWizard { @Inject private ILibraryRepositoryService repositoryService; - public AppEngineStandardProjectWizard() { + AppEngineStandardProjectWizard() { setWindowTitle(Messages.getString("new.app.engine.standard.project")); } @Override - public AppEngineStandardWizardPage createWizardPage() { + protected AppEngineWizardPage createWizardPage() { AnalyticsPingManager.getInstance().sendPing( AnalyticsEvents.APP_ENGINE_NEW_PROJECT_WIZARD, AnalyticsEvents.APP_ENGINE_NEW_PROJECT_WIZARD_TYPE, @@ -57,7 +58,7 @@ public AppEngineStandardWizardPage createWizardPage() { } @Override - public IStatus validateDependencies() { + protected IStatus validateDependencies() { try { boolean fork = true; boolean cancelable = true; @@ -78,7 +79,7 @@ public IStatus validateDependencies() { } @Override - public CreateAppEngineProject getAppEngineProjectCreationOperation( + protected CreateAppEngineProject getAppEngineProjectCreationOperation( AppEngineProjectConfig config, IAdaptable uiInfoAdapter) { return new CreateAppEngineStandardWtpProject(config, uiInfoAdapter, repositoryService); } diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/standard/AppEngineStandardWizardPage.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/standard/AppEngineStandardWizardPage.java index a00c3d5d47..263dda32c4 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/standard/AppEngineStandardWizardPage.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/standard/AppEngineStandardWizardPage.java @@ -18,6 +18,7 @@ import com.google.cloud.tools.eclipse.appengine.newproject.AppEngineWizardPage; import com.google.cloud.tools.eclipse.appengine.newproject.Messages; +import com.google.cloud.tools.eclipse.appengine.newproject.maven.MavenCoordinatesWizardUi; import com.google.cloud.tools.eclipse.appengine.ui.AppEngineRuntime; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; @@ -40,14 +41,14 @@ public class AppEngineStandardWizardPage extends AppEngineWizardPage { private ComboViewer runtimeField; - public AppEngineStandardWizardPage() { + AppEngineStandardWizardPage() { super(true); setTitle(Messages.getString("app.engine.standard.project")); //$NON-NLS-1$ setDescription(Messages.getString("create.app.engine.standard.project")); //$NON-NLS-1$ } @Override - public void setHelp(Composite container) { + protected void setHelp(Composite container) { PlatformUI.getWorkbench().getHelpSystem().setHelp(container, "com.google.cloud.tools.eclipse.appengine.newproject.NewStandardProjectContext"); //$NON-NLS-1$ } @@ -85,4 +86,9 @@ public String getRuntimeId() { } return selected.getId(); } + + @Override + protected MavenCoordinatesWizardUi createMavenCoordinatesInput(Composite container) { + return new MavenCoordinatesWizardUi(container, SWT.NONE); + } } From ecff8c42ab2611570843f6f99e1ad7a36ad7056a Mon Sep 17 00:00:00 2001 From: Chanseok Oh Date: Tue, 31 Oct 2017 15:33:06 -0400 Subject: [PATCH 06/14] Create correct wizard page --- .../newproject/flex/AppEngineFlexJarProjectWizard.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarProjectWizard.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarProjectWizard.java index 5ec38b462f..52443e8645 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarProjectWizard.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarProjectWizard.java @@ -19,6 +19,7 @@ import com.google.cloud.tools.eclipse.appengine.libraries.repository.ILibraryRepositoryService; import com.google.cloud.tools.eclipse.appengine.newproject.AppEngineProjectConfig; import com.google.cloud.tools.eclipse.appengine.newproject.AppEngineProjectWizard; +import com.google.cloud.tools.eclipse.appengine.newproject.AppEngineWizardPage; import com.google.cloud.tools.eclipse.appengine.newproject.CreateAppEngineProject; import com.google.cloud.tools.eclipse.appengine.newproject.Messages; import com.google.cloud.tools.eclipse.usagetracker.AnalyticsEvents; @@ -37,13 +38,13 @@ public class AppEngineFlexJarProjectWizard extends AppEngineProjectWizard { } @Override - protected AppEngineFlexWarWizardPage createWizardPage() { + protected AppEngineWizardPage createWizardPage() { AnalyticsPingManager.getInstance().sendPing( AnalyticsEvents.APP_ENGINE_NEW_PROJECT_WIZARD, AnalyticsEvents.APP_ENGINE_NEW_PROJECT_WIZARD_TYPE, AnalyticsEvents.APP_ENGINE_NEW_PROJECT_WIZARD_TYPE_FLEX, getShell()); - return new AppEngineFlexWarWizardPage(); + return new AppEngineFlexJarWizardPage(); } @Override From 1debb34f3c7656f3ebe25f9110d87eeb0e7ee056 Mon Sep 17 00:00:00 2001 From: Chanseok Oh Date: Tue, 31 Oct 2017 16:46:26 -0400 Subject: [PATCH 07/14] Add combo for selecting flex jar sample template --- .../newproject/AppEngineProjectWizard.java | 4 ++-- .../newproject/AppEngineWizardPage.java | 18 +++++++++-------- .../flex/AppEngineFlexJarWizardPage.java | 20 +++++++++++++++++++ .../appengine/newproject/messages.properties | 3 +++ 4 files changed, 35 insertions(+), 10 deletions(-) diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineProjectWizard.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineProjectWizard.java index 82c8c8215f..f17ee2fdf8 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineProjectWizard.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineProjectWizard.java @@ -40,8 +40,8 @@ public abstract class AppEngineProjectWizard extends Wizard implements INewWizard { - protected AppEngineWizardPage page = null; - protected final AppEngineProjectConfig config = new AppEngineProjectConfig(); + private AppEngineWizardPage page = null; + private final AppEngineProjectConfig config = new AppEngineProjectConfig(); private IWorkbench workbench; public AppEngineProjectWizard() { diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineWizardPage.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineWizardPage.java index f010e3b826..40e562d13f 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineWizardPage.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineWizardPage.java @@ -81,7 +81,8 @@ public void createControl(Composite parent) { Composite container = (Composite) getControl(); setHelp(container); - createCustomFields(container); + Composite customFieldsArea = new Composite(container, SWT.NONE); + createCustomFields(customFieldsArea); mavenCoordinatesUi = createMavenCoordinatesInput(container); mavenCoordinatesUi.addChangeListener(new Listener() { @@ -104,17 +105,18 @@ public void handleEvent(Event event) { setErrorMessage(null); setMessage(Messages.getString("enter.project.name")); + GridLayoutFactory.swtDefaults().numColumns(2).generateLayout(customFieldsArea); GridLayoutFactory.swtDefaults().generateLayout(container); Dialog.applyDialogFont(container); } - private void createCustomFields(Composite container) { - Composite composite = new Composite(container, SWT.NONE); - createRuntimeField(composite); - createPackageField(composite); - createServiceField(composite); - - GridLayoutFactory.swtDefaults().numColumns(2).generateLayout(composite); + /** + * @param container 2-column composite + */ + protected void createCustomFields(Composite container) { + createRuntimeField(container); + createPackageField(container); + createServiceField(container); } protected void revalidate() { diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarWizardPage.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarWizardPage.java index f6878ae3a9..a124ef815d 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarWizardPage.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarWizardPage.java @@ -20,12 +20,21 @@ import com.google.cloud.tools.eclipse.appengine.newproject.Messages; import com.google.cloud.tools.eclipse.appengine.newproject.maven.MavenCoordinatesInput; import com.google.cloud.tools.eclipse.appengine.newproject.maven.MavenCoordinatesUi; +import com.google.common.collect.ImmutableList; import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; import org.eclipse.ui.PlatformUI; public class AppEngineFlexJarWizardPage extends AppEngineWizardPage { + private static final ImmutableList CODE_SAMPLES = ImmutableList.of( + Messages.getString("FLEX_JAR_SIMPLE_TEMPLATE"), //$NON-NLS-1$ + Messages.getString("FLEX_JAR_SPRING_BOOT_TEMPLATE")); //$NON-NLS-1$ + + private Combo combo; + AppEngineFlexJarWizardPage() { super(false); setTitle(Messages.getString("app.engine.flex.project")); //$NON-NLS-1$ @@ -42,4 +51,15 @@ protected void setHelp(Composite container) { protected MavenCoordinatesInput createMavenCoordinatesInput(Composite container) { return new MavenCoordinatesUi(container, SWT.NONE); } + + @Override + protected void createCustomFields(Composite container) { + super.createCustomFields(container); + + Label label = new Label(container, SWT.LEAD); + label.setText(Messages.getString("FLEX_JAR_SAMPLE_TEMPLATE")); //$NON-NLS-1$ + combo = new Combo(container, SWT.READ_ONLY); + combo.setItems(CODE_SAMPLES.toArray(new String[0])); + combo.select(0); + } } diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/messages.properties b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/messages.properties index 7f38a6cd86..7ba04dcf43 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/messages.properties +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/messages.properties @@ -27,6 +27,9 @@ deploy.assembly.test.source.remove.job=Removing test Java source folder from web CREATE_AS_MAVEN_PROJECT=Create as Maven project MAVEN_PROJECT_COORDINATES=Maven project coordinates GROUP_ID=Group ID: +FLEX_JAR_SAMPLE_TEMPLATE=Sample template: +FLEX_JAR_SIMPLE_TEMPLATE=simple +FLEX_JAR_SPRING_BOOT_TEMPLATE=Spring Boot ARTIFACT_ID=Artifact ID: ARTIFACT_VERSION=Version: GROUP_ID_TOOLTIP=The Maven Group ID. Should Be an Alphanumeric Path Separated by Periods From f2f1bc8f0daaf95f95ec681ee171ed5bbd6d1b9b Mon Sep 17 00:00:00 2001 From: Chanseok Oh Date: Tue, 31 Oct 2017 17:01:21 -0400 Subject: [PATCH 08/14] WIP --- .../flex/AppEngineFlexJarWizardPage.java | 26 +++++++++++++++---- .../appengine/newproject/messages.properties | 2 +- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarWizardPage.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarWizardPage.java index a124ef815d..8312be889f 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarWizardPage.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarWizardPage.java @@ -20,7 +20,9 @@ import com.google.cloud.tools.eclipse.appengine.newproject.Messages; import com.google.cloud.tools.eclipse.appengine.newproject.maven.MavenCoordinatesInput; import com.google.cloud.tools.eclipse.appengine.newproject.maven.MavenCoordinatesUi; -import com.google.common.collect.ImmutableList; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; +import java.util.Map.Entry; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; @@ -29,9 +31,11 @@ public class AppEngineFlexJarWizardPage extends AppEngineWizardPage { - private static final ImmutableList CODE_SAMPLES = ImmutableList.of( - Messages.getString("FLEX_JAR_SIMPLE_TEMPLATE"), //$NON-NLS-1$ - Messages.getString("FLEX_JAR_SPRING_BOOT_TEMPLATE")); //$NON-NLS-1$ + static enum SampleTemplate { SIMPLE, SPRING_BOOT }; + + private static final ImmutableMap TEMPLATE_NAMES = ImmutableMap.of( + SampleTemplate.SIMPLE, Messages.getString("FLEX_JAR_SIMPLE_TEMPLATE"), //$NON-NLS-1$ + SampleTemplate.SPRING_BOOT, Messages.getString("FLEX_SPRING_BOOT_TEMPLATE")); //$NON-NLS-1$ private Combo combo; @@ -59,7 +63,19 @@ protected void createCustomFields(Composite container) { Label label = new Label(container, SWT.LEAD); label.setText(Messages.getString("FLEX_JAR_SAMPLE_TEMPLATE")); //$NON-NLS-1$ combo = new Combo(container, SWT.READ_ONLY); - combo.setItems(CODE_SAMPLES.toArray(new String[0])); + combo.setItems(new String[] { + TEMPLATE_NAMES.get(SampleTemplate.SIMPLE), TEMPLATE_NAMES.get(SampleTemplate.SPRING_BOOT) + }); combo.select(0); } + + SampleTemplate getSelectedTemplate() { + Preconditions.checkState(combo.getSelectionIndex() != -1);; + for (Entry entry : TEMPLATE_NAMES.entrySet()) { + if (entry.getValue().equals(combo.getText())) { + return entry.getKey(); + } + } + throw new RuntimeException("BUG: value selected has never been added"); + } } diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/messages.properties b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/messages.properties index 7ba04dcf43..62b1fc7f54 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/messages.properties +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/messages.properties @@ -29,7 +29,7 @@ MAVEN_PROJECT_COORDINATES=Maven project coordinates GROUP_ID=Group ID: FLEX_JAR_SAMPLE_TEMPLATE=Sample template: FLEX_JAR_SIMPLE_TEMPLATE=simple -FLEX_JAR_SPRING_BOOT_TEMPLATE=Spring Boot +FLEX_SPRING_BOOT_TEMPLATE=Spring Boot ARTIFACT_ID=Artifact ID: ARTIFACT_VERSION=Version: GROUP_ID_TOOLTIP=The Maven Group ID. Should Be an Alphanumeric Path Separated by Periods From 1ec75067f543bcf0febedf9eb8b9b0d81deffa95 Mon Sep 17 00:00:00 2001 From: Chanseok Oh Date: Tue, 31 Oct 2017 17:14:47 -0400 Subject: [PATCH 09/14] Wire up combo selection --- .../newproject/AppEngineProjectConfig.java | 26 ++++++++++++++----- .../newproject/AppEngineProjectWizard.java | 4 +-- .../newproject/AppEngineWizardPage.java | 8 ++++-- .../appengine/newproject/CodeTemplates.java | 9 +++++++ .../flex/AppEngineFlexJarWizardPage.java | 16 ++++++------ .../standard/AppEngineStandardWizardPage.java | 2 +- 6 files changed, 45 insertions(+), 20 deletions(-) diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineProjectConfig.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineProjectConfig.java index b18b7746d7..e258fd0f1e 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineProjectConfig.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineProjectConfig.java @@ -29,6 +29,9 @@ * Collects all data needed to create and configure an App Engine Eclipse Project. */ public class AppEngineProjectConfig { + + public enum Template { DEFAULT, SPRING_BOOT }; + private File cloudSdkLocation = null; private URI eclipseProjectLocationUri = null; private String packageName = ""; @@ -36,6 +39,7 @@ public class AppEngineProjectConfig { private List appEngineLibraries = Collections.emptyList(); private String serviceName; private String runtimeId; + private Template template; private boolean useMaven; private String mavenGroupId; @@ -51,11 +55,11 @@ void setCloudSdkLocation(File cloudSdkLocation) { } void setPackageName(String name) { - this.packageName = name; + packageName = name; } String getPackageName() { - return this.packageName; + return packageName; } /** @@ -66,15 +70,15 @@ void setProject(IProject project) { } IProject getProject() { - return this.project; + return project; } URI getEclipseProjectLocationUri() { - return this.eclipseProjectLocationUri; + return eclipseProjectLocationUri; } void setEclipseProjectLocationUri(URI uri) { - this.eclipseProjectLocationUri = uri; + eclipseProjectLocationUri = uri; } List getAppEngineLibraries() { @@ -82,7 +86,7 @@ List getAppEngineLibraries() { } public void setAppEngineLibraries(Collection libraries) { - this.appEngineLibraries = new ArrayList<>(libraries); + appEngineLibraries = new ArrayList<>(libraries); } String getServiceName() { @@ -101,8 +105,16 @@ void setRuntimeId(String runtimeId) { this.runtimeId = runtimeId; } + Template getTemplate() { + return template; + } + + void setTemplate(Template template) { + this.template = template; + } + void setUseMaven(String mavenGroupId, String mavenArtifactId, String mavenVersion) { - this.useMaven = true; + useMaven = true; this.mavenGroupId = mavenGroupId; this.mavenArtifactId = mavenArtifactId; this.mavenVersion = mavenVersion; diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineProjectWizard.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineProjectWizard.java index f17ee2fdf8..6546614917 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineProjectWizard.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineProjectWizard.java @@ -89,8 +89,7 @@ public boolean performFinish() { // todo set up IAdaptable uiInfoAdapter = WorkspaceUndoUtil.getUIInfoAdapter(getShell()); - CreateAppEngineProject runnable = - getAppEngineProjectCreationOperation(config, uiInfoAdapter); + CreateAppEngineProject runnable = getAppEngineProjectCreationOperation(config, uiInfoAdapter); try { boolean fork = true; @@ -114,6 +113,7 @@ protected void retrieveConfigurationValues() { config.setServiceName(page.getServiceName()); config.setPackageName(page.getPackageName()); config.setRuntimeId(page.getRuntimeId()); + config.setTemplate(page.getTemplate()); config.setProject(page.getProjectHandle()); if (!page.useDefaults()) { config.setEclipseProjectLocationUri(page.getLocationURI()); diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineWizardPage.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineWizardPage.java index 40e562d13f..6afb95f168 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineWizardPage.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineWizardPage.java @@ -111,7 +111,7 @@ public void handleEvent(Event event) { } /** - * @param container 2-column composite + * Creates a custom-field section. Composite is laid out with 2 columns. */ protected void createCustomFields(Composite container) { createRuntimeField(container); @@ -130,7 +130,11 @@ protected void createRuntimeField(@SuppressWarnings("unused") Composite composit // default: do nothing; used by subclasses } - public String getRuntimeId() { + protected String getRuntimeId() { + return null; + } + + protected AppEngineProjectConfig.Template getTemplate() { return null; } diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/CodeTemplates.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/CodeTemplates.java index 6f04f1d110..050956f5d6 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/CodeTemplates.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/CodeTemplates.java @@ -16,6 +16,7 @@ package com.google.cloud.tools.eclipse.appengine.newproject; +import com.google.cloud.tools.eclipse.appengine.newproject.AppEngineProjectConfig.Template; import com.google.cloud.tools.eclipse.appengine.ui.AppEngineRuntime; import com.google.cloud.tools.eclipse.util.Templates; import com.google.cloud.tools.eclipse.util.io.ResourceUtils; @@ -63,6 +64,14 @@ public static IFile materializeAppEngineFlexFiles(IProject project, AppEnginePro return materialize(project, config, false /* isStandardProject */, monitor); } + public static IFile materializeAppEngineFlexJarFiles(IProject project, + AppEngineProjectConfig config, IProgressMonitor monitor) throws CoreException { + if (Template.SPRING_BOOT.equals(config.getTemplate())) { + return materializeFlexSpringBoot(project, config, monitor); + } + return materializeFlexJar(project, config, monitor); + } + /** * Creates files for a sample App Engine project in the supplied Eclipse project. * diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarWizardPage.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarWizardPage.java index 8312be889f..80dc6c6c33 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarWizardPage.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarWizardPage.java @@ -16,6 +16,7 @@ package com.google.cloud.tools.eclipse.appengine.newproject.flex; +import com.google.cloud.tools.eclipse.appengine.newproject.AppEngineProjectConfig.Template; import com.google.cloud.tools.eclipse.appengine.newproject.AppEngineWizardPage; import com.google.cloud.tools.eclipse.appengine.newproject.Messages; import com.google.cloud.tools.eclipse.appengine.newproject.maven.MavenCoordinatesInput; @@ -31,11 +32,9 @@ public class AppEngineFlexJarWizardPage extends AppEngineWizardPage { - static enum SampleTemplate { SIMPLE, SPRING_BOOT }; - - private static final ImmutableMap TEMPLATE_NAMES = ImmutableMap.of( - SampleTemplate.SIMPLE, Messages.getString("FLEX_JAR_SIMPLE_TEMPLATE"), //$NON-NLS-1$ - SampleTemplate.SPRING_BOOT, Messages.getString("FLEX_SPRING_BOOT_TEMPLATE")); //$NON-NLS-1$ + private static final ImmutableMap TEMPLATE_NAMES = ImmutableMap.of( + Template.DEFAULT, Messages.getString("FLEX_JAR_SIMPLE_TEMPLATE"), //$NON-NLS-1$ + Template.SPRING_BOOT, Messages.getString("FLEX_SPRING_BOOT_TEMPLATE")); //$NON-NLS-1$ private Combo combo; @@ -64,14 +63,15 @@ protected void createCustomFields(Composite container) { label.setText(Messages.getString("FLEX_JAR_SAMPLE_TEMPLATE")); //$NON-NLS-1$ combo = new Combo(container, SWT.READ_ONLY); combo.setItems(new String[] { - TEMPLATE_NAMES.get(SampleTemplate.SIMPLE), TEMPLATE_NAMES.get(SampleTemplate.SPRING_BOOT) + TEMPLATE_NAMES.get(Template.DEFAULT), TEMPLATE_NAMES.get(Template.SPRING_BOOT) }); combo.select(0); } - SampleTemplate getSelectedTemplate() { + @Override + protected Template getTemplate() { Preconditions.checkState(combo.getSelectionIndex() != -1);; - for (Entry entry : TEMPLATE_NAMES.entrySet()) { + for (Entry entry : TEMPLATE_NAMES.entrySet()) { if (entry.getValue().equals(combo.getText())) { return entry.getKey(); } diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/standard/AppEngineStandardWizardPage.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/standard/AppEngineStandardWizardPage.java index 263dda32c4..6ae65a9fb0 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/standard/AppEngineStandardWizardPage.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/standard/AppEngineStandardWizardPage.java @@ -76,7 +76,7 @@ public void selectionChanged(SelectionChangedEvent event) { } @Override - public String getRuntimeId() { + protected String getRuntimeId() { AppEngineRuntime selected = DEFAULT_RUNTIME; if (runtimeField != null && !runtimeField.getSelection().isEmpty()) { Preconditions.checkState(runtimeField.getSelection() instanceof IStructuredSelection, From 7ee9c7c1f4a13de41969b6d89d9b17b9bf754273 Mon Sep 17 00:00:00 2001 From: Chanseok Oh Date: Tue, 31 Oct 2017 17:21:05 -0400 Subject: [PATCH 10/14] Wire up combo selection --- .../appengine/newproject/CodeTemplatesTest.java | 10 ++++++---- .../appengine/newproject/AppEngineProjectConfig.java | 2 +- .../appengine/newproject/AppEngineWizardPage.java | 3 ++- .../eclipse/appengine/newproject/CodeTemplates.java | 4 ++-- .../newproject/flex/CreateAppEngineFlexJarProject.java | 3 ++- 5 files changed, 13 insertions(+), 9 deletions(-) diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/CodeTemplatesTest.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/CodeTemplatesTest.java index 3c74de8304..c8deafd16d 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/CodeTemplatesTest.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject.test/src/com/google/cloud/tools/eclipse/appengine/newproject/CodeTemplatesTest.java @@ -18,6 +18,7 @@ import static org.junit.Assert.assertFalse; +import com.google.cloud.tools.eclipse.appengine.newproject.AppEngineProjectConfig.Template; import com.google.cloud.tools.eclipse.appengine.ui.AppEngineRuntime; import com.google.cloud.tools.eclipse.test.util.project.TestProjectCreator; import com.google.cloud.tools.eclipse.util.Templates; @@ -132,7 +133,7 @@ public void testMaterializeAppEngineFlexJarFiles() config.setUseMaven("my.project.group.id", "my-project-artifact-id", "98.76.54"); config.setServiceName("database-service"); - IFile mostImportant = CodeTemplates.materializeFlexJar(project, config, monitor); + IFile mostImportant = CodeTemplates.materializeAppEngineFlexJarFiles(project, config, monitor); validateFlexJarNonConfigFiles(mostImportant); validateAppYaml(); @@ -145,8 +146,9 @@ public void testMaterializeFlexSpringBoot() AppEngineProjectConfig config = new AppEngineProjectConfig(); config.setUseMaven("my.project.group.id", "my-project-artifact-id", "98.76.54"); config.setServiceName("database-service"); + config.setTemplate(Template.SPRING_BOOT); - IFile mostImportant = CodeTemplates.materializeFlexSpringBoot(project, config, monitor); + IFile mostImportant = CodeTemplates.materializeAppEngineFlexJarFiles(project, config, monitor); validateFlexSpringBootNonConfigFiles(mostImportant); validateAppYaml(); @@ -160,7 +162,7 @@ public void testMaterializeAppEngineFlexJarFiles_mainClassSet() config.setUseMaven("my.project.group.id", "my-project-artifact-id", "98.76.54"); config.setPackageName("com.example"); - IFile mostImportant = CodeTemplates.materializeFlexJar(project, config, monitor); + IFile mostImportant = CodeTemplates.materializeAppEngineFlexJarFiles(project, config, monitor); validateMainClassInPomXml("com.example", mostImportant); } @@ -170,7 +172,7 @@ public void testMaterializeAppEngineFlexJarFiles_defaultPackageMainClassSet() AppEngineProjectConfig config = new AppEngineProjectConfig(); config.setUseMaven("my.project.group.id", "my-project-artifact-id", "98.76.54"); - IFile mostImportant = CodeTemplates.materializeFlexJar(project, config, monitor); + IFile mostImportant = CodeTemplates.materializeAppEngineFlexJarFiles(project, config, monitor); validateMainClassInPomXml(null /* expectedPackage */, mostImportant); } diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineProjectConfig.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineProjectConfig.java index e258fd0f1e..7b263a77e5 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineProjectConfig.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineProjectConfig.java @@ -39,7 +39,7 @@ public enum Template { DEFAULT, SPRING_BOOT }; private List appEngineLibraries = Collections.emptyList(); private String serviceName; private String runtimeId; - private Template template; + private Template template = Template.DEFAULT; private boolean useMaven; private String mavenGroupId; diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineWizardPage.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineWizardPage.java index 6afb95f168..b152d58d3a 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineWizardPage.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/AppEngineWizardPage.java @@ -19,6 +19,7 @@ import com.google.cloud.tools.eclipse.appengine.libraries.model.CloudLibraries; import com.google.cloud.tools.eclipse.appengine.libraries.model.Library; import com.google.cloud.tools.eclipse.appengine.libraries.ui.LibrarySelectorGroup; +import com.google.cloud.tools.eclipse.appengine.newproject.AppEngineProjectConfig.Template; import com.google.cloud.tools.eclipse.appengine.newproject.maven.MavenCoordinatesInput; import com.google.cloud.tools.eclipse.appengine.ui.AppEngineImages; import com.google.cloud.tools.eclipse.util.JavaPackageValidator; @@ -135,7 +136,7 @@ protected String getRuntimeId() { } protected AppEngineProjectConfig.Template getTemplate() { - return null; + return Template.DEFAULT; } // Java package name; Composite is laid out with 2 columns. diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/CodeTemplates.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/CodeTemplates.java index 050956f5d6..c962122b5b 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/CodeTemplates.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/CodeTemplates.java @@ -105,7 +105,7 @@ private static IFile materialize(IProject project, AppEngineProjectConfig config return hello; } - public static IFile materializeFlexJar(IProject project, AppEngineProjectConfig config, + private static IFile materializeFlexJar(IProject project, AppEngineProjectConfig config, IProgressMonitor monitor) throws CoreException { SubMonitor subMonitor = SubMonitor.convert(monitor, "Generating code", 30); @@ -119,7 +119,7 @@ public static IFile materializeFlexJar(IProject project, AppEngineProjectConfig return hello; } - public static IFile materializeFlexSpringBoot(IProject project, AppEngineProjectConfig config, + private static IFile materializeFlexSpringBoot(IProject project, AppEngineProjectConfig config, IProgressMonitor monitor) throws CoreException { SubMonitor subMonitor = SubMonitor.convert(monitor, "Generating code", 10); diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/CreateAppEngineFlexJarProject.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/CreateAppEngineFlexJarProject.java index 4d2ce8865f..f711f9f855 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/CreateAppEngineFlexJarProject.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/CreateAppEngineFlexJarProject.java @@ -55,7 +55,8 @@ public String getDescription() { @Override public IFile createAndConfigureProjectContent(IProject newProject, AppEngineProjectConfig config, IProgressMonitor monitor) throws CoreException { - IFile mostImportantFile = CodeTemplates.materializeFlexJar(newProject, config, monitor); + IFile mostImportantFile = + CodeTemplates.materializeAppEngineFlexJarFiles(newProject, config, monitor); return mostImportantFile; } } From ceded7fec7c191c6a92bd103d520451d009ba5ce Mon Sep 17 00:00:00 2001 From: Chanseok Oh Date: Tue, 31 Oct 2017 17:23:24 -0400 Subject: [PATCH 11/14] Set UI message --- .../appengine/newproject/flex/AppEngineFlexJarWizardPage.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarWizardPage.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarWizardPage.java index 80dc6c6c33..2c81c4ad6d 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarWizardPage.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarWizardPage.java @@ -52,7 +52,9 @@ protected void setHelp(Composite container) { @Override protected MavenCoordinatesInput createMavenCoordinatesInput(Composite container) { - return new MavenCoordinatesUi(container, SWT.NONE); + MavenCoordinatesUi ui = new MavenCoordinatesUi(container, SWT.NONE); + ui.setText(Messages.getString("MAVEN_PROJECT_COORDINATES")); + return ui; } @Override From cec3edb8c5f75fda33f003db9d7d351450c2ef1f Mon Sep 17 00:00:00 2001 From: Chanseok Oh Date: Tue, 31 Oct 2017 17:25:21 -0400 Subject: [PATCH 12/14] Add wizard to global toolbar menu --- .../plugin.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.ui/plugin.xml b/plugins/com.google.cloud.tools.eclipse.appengine.ui/plugin.xml index 41b2064e9f..5ff65d874f 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.ui/plugin.xml +++ b/plugins/com.google.cloud.tools.eclipse.appengine.ui/plugin.xml @@ -61,6 +61,14 @@ value="com.google.cloud.tools.eclipse.appengine.newproject.AppEngineFlex"> + + + + From 7f1f46d262a6306e26c4e0813d4d748a97565f3c Mon Sep 17 00:00:00 2001 From: Chanseok Oh Date: Tue, 31 Oct 2017 18:22:25 -0400 Subject: [PATCH 13/14] Update UI messages --- .../plugin.properties | 7 +++---- .../newproject/flex/AppEngineFlexJarWizardPage.java | 2 +- .../tools/eclipse/appengine/newproject/messages.properties | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/plugin.properties b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/plugin.properties index 682d1ed80c..6122a5c181 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/plugin.properties +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/plugin.properties @@ -8,9 +8,8 @@ standard.wizard.name = Google App Engine Standard Java Project standard.wizard.description = Creates an App Engine Standard Java project. flex.war.wizard.name=Google App Engine Flexible Java WAR Project -flex.war.wizard.description=Creates an App Engine Flexible Java project whose deploy artifact is a \ - web application archive (WAR). +flex.war.wizard.description=Creates an App Engine Flexible Java project for the Jetty or Tomcat \ + runtime. flex.jar.wizard.name=Google App Engine Flexible Java JAR Project -flex.jar.wizard.description=Creates an App Engine Flexible Java project whose deploy artifact is a \ - runnable "fat" Java archive (JAR). +flex.jar.wizard.description=Creates an App Engine Flexible Java project for the Java runtime. diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarWizardPage.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarWizardPage.java index 2c81c4ad6d..c2052a3f15 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarWizardPage.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarWizardPage.java @@ -33,7 +33,7 @@ public class AppEngineFlexJarWizardPage extends AppEngineWizardPage { private static final ImmutableMap TEMPLATE_NAMES = ImmutableMap.of( - Template.DEFAULT, Messages.getString("FLEX_JAR_SIMPLE_TEMPLATE"), //$NON-NLS-1$ + Template.DEFAULT, Messages.getString("FLEX_JAR_NO_WEB_FRAMEWORK_TEMPLATE"), //$NON-NLS-1$ Template.SPRING_BOOT, Messages.getString("FLEX_SPRING_BOOT_TEMPLATE")); //$NON-NLS-1$ private Combo combo; diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/messages.properties b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/messages.properties index 62b1fc7f54..4cb02dc4cb 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/messages.properties +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/messages.properties @@ -28,7 +28,7 @@ CREATE_AS_MAVEN_PROJECT=Create as Maven project MAVEN_PROJECT_COORDINATES=Maven project coordinates GROUP_ID=Group ID: FLEX_JAR_SAMPLE_TEMPLATE=Sample template: -FLEX_JAR_SIMPLE_TEMPLATE=simple +FLEX_JAR_NO_WEB_FRAMEWORK_TEMPLATE=No Web Framework FLEX_SPRING_BOOT_TEMPLATE=Spring Boot ARTIFACT_ID=Artifact ID: ARTIFACT_VERSION=Version: From db1ea5831f2114a12082c69123f383a434f6192f Mon Sep 17 00:00:00 2001 From: Chanseok Oh Date: Wed, 1 Nov 2017 12:17:28 -0400 Subject: [PATCH 14/14] Save backup --- .../flex/AppEngineFlexJarWizardPage.java | 22 +++++-------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarWizardPage.java b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarWizardPage.java index c2052a3f15..eaef04f4c8 100644 --- a/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarWizardPage.java +++ b/plugins/com.google.cloud.tools.eclipse.appengine.newproject/src/com/google/cloud/tools/eclipse/appengine/newproject/flex/AppEngineFlexJarWizardPage.java @@ -22,8 +22,6 @@ import com.google.cloud.tools.eclipse.appengine.newproject.maven.MavenCoordinatesInput; import com.google.cloud.tools.eclipse.appengine.newproject.maven.MavenCoordinatesUi; import com.google.common.base.Preconditions; -import com.google.common.collect.ImmutableMap; -import java.util.Map.Entry; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; @@ -32,10 +30,6 @@ public class AppEngineFlexJarWizardPage extends AppEngineWizardPage { - private static final ImmutableMap TEMPLATE_NAMES = ImmutableMap.of( - Template.DEFAULT, Messages.getString("FLEX_JAR_NO_WEB_FRAMEWORK_TEMPLATE"), //$NON-NLS-1$ - Template.SPRING_BOOT, Messages.getString("FLEX_SPRING_BOOT_TEMPLATE")); //$NON-NLS-1$ - private Combo combo; AppEngineFlexJarWizardPage() { @@ -64,20 +58,16 @@ protected void createCustomFields(Composite container) { Label label = new Label(container, SWT.LEAD); label.setText(Messages.getString("FLEX_JAR_SAMPLE_TEMPLATE")); //$NON-NLS-1$ combo = new Combo(container, SWT.READ_ONLY); - combo.setItems(new String[] { - TEMPLATE_NAMES.get(Template.DEFAULT), TEMPLATE_NAMES.get(Template.SPRING_BOOT) - }); + combo.add(Messages.getString("FLEX_JAR_NO_WEB_FRAMEWORK_TEMPLATE")); + combo.setData(Messages.getString("FLEX_JAR_NO_WEB_FRAMEWORK_TEMPLATE"), Template.DEFAULT); + combo.add(Messages.getString("FLEX_SPRING_BOOT_TEMPLATE")); + combo.setData(Messages.getString("FLEX_SPRING_BOOT_TEMPLATE"), Template.SPRING_BOOT); combo.select(0); } @Override protected Template getTemplate() { - Preconditions.checkState(combo.getSelectionIndex() != -1);; - for (Entry entry : TEMPLATE_NAMES.entrySet()) { - if (entry.getValue().equals(combo.getText())) { - return entry.getKey(); - } - } - throw new RuntimeException("BUG: value selected has never been added"); + Preconditions.checkState(combo.getSelectionIndex() != -1); + return (Template) combo.getData(combo.getText()); } }