Merge "512441: Fix PolymorphicDispatcher selection algorithm"
diff --git a/dsl/org.eclipse.emf.parsley.dsl.ui.tests/src/org/eclipse/emf/parsley/dsl/tests/util/ui/TestableEmfParsleyDslNewProjectWizard.java b/dsl/org.eclipse.emf.parsley.dsl.ui.tests/src/org/eclipse/emf/parsley/dsl/tests/util/ui/TestableEmfParsleyDslNewProjectWizard.java
index 0ddc3f2..70f5ae4 100644
--- a/dsl/org.eclipse.emf.parsley.dsl.ui.tests/src/org/eclipse/emf/parsley/dsl/tests/util/ui/TestableEmfParsleyDslNewProjectWizard.java
+++ b/dsl/org.eclipse.emf.parsley.dsl.ui.tests/src/org/eclipse/emf/parsley/dsl/tests/util/ui/TestableEmfParsleyDslNewProjectWizard.java
@@ -17,7 +17,7 @@
 public class TestableEmfParsleyDslNewProjectWizard extends
 		EmfParsleyDslNewProjectWizard {
 
-	public static final String TEST_PROJECT = "TestProject";
+	public static final String TEST_PROJECT = "testproject";
 
 	@Inject
 	public TestableEmfParsleyDslNewProjectWizard(IProjectCreator projectCreator) {
diff --git a/dsl/org.eclipse.emf.parsley.dsl.ui.tests/src/org/eclipse/emf/parsley/dsl/ui/tests/EmfParsleyDslWorkbenchTest.xtend b/dsl/org.eclipse.emf.parsley.dsl.ui.tests/src/org/eclipse/emf/parsley/dsl/ui/tests/EmfParsleyDslWorkbenchTest.xtend
index 65137b0..3600fe5 100644
--- a/dsl/org.eclipse.emf.parsley.dsl.ui.tests/src/org/eclipse/emf/parsley/dsl/ui/tests/EmfParsleyDslWorkbenchTest.xtend
+++ b/dsl/org.eclipse.emf.parsley.dsl.ui.tests/src/org/eclipse/emf/parsley/dsl/ui/tests/EmfParsleyDslWorkbenchTest.xtend
@@ -44,7 +44,7 @@
 	@Inject PluginProjectHelper projectHelper
 
 	val TEST_MODULE = TestableEmfParsleyDslNewProjectWizard.TEST_PROJECT + "/" +
-		TestableEmfParsleyDslNewProjectWizard.TEST_PROJECT + ".parsley"
+		TestableEmfParsleyDslNewProjectWizard.TEST_PROJECT.toFirstUpper + ".parsley"
 
 	val TEST_PLUGIN_XML_GEN = 
 		EmfParsleyDslOutputConfigurationProvider.EMFPARSLEY_GEN + "/" + TEST_PROJECT + "/" +
diff --git a/dsl/org.eclipse.emf.parsley.dsl.ui/src/org/eclipse/emf/parsley/dsl/ui/wizard/EmfParsleyDslProjectCreatorCustom.java b/dsl/org.eclipse.emf.parsley.dsl.ui/src/org/eclipse/emf/parsley/dsl/ui/wizard/EmfParsleyDslProjectCreatorCustom.java
index fadd796..c6c1a5a 100644
--- a/dsl/org.eclipse.emf.parsley.dsl.ui/src/org/eclipse/emf/parsley/dsl/ui/wizard/EmfParsleyDslProjectCreatorCustom.java
+++ b/dsl/org.eclipse.emf.parsley.dsl.ui/src/org/eclipse/emf/parsley/dsl/ui/wizard/EmfParsleyDslProjectCreatorCustom.java
@@ -78,10 +78,11 @@
 
 	@Override
 	protected String getActivatorClassName() {
-		return getProjectInfo().getProjectName()
+		String projectName = getFixedProjectName();
+		return projectName
 				+ "."
 				+ projectFilesGenerator.activatorName(
-						getProjectInfo().getProjectName()).toString();
+						projectName).toString();
 	}
 
 	@Override
@@ -101,7 +102,7 @@
 	@Override
 	protected void enhanceProject(final IProject project,
 			final IProgressMonitor monitor) throws CoreException {
-		String projectName = getProjectInfo().getProjectName();
+		String projectName = getFixedProjectName();
 
 		String srcFolder = "src";
 		String projectPackagePath = srcFolder + "/"
@@ -137,4 +138,9 @@
 		project.refreshLocal(IResource.DEPTH_INFINITE, subMonitor.newChild(1));
 		subMonitor.done();
 	}
+
+	protected String getFixedProjectName() {
+		return NewEmfParsleyProjectSupport.getValidJavaName(
+				getProjectInfo().getProjectName());
+	}
 }
diff --git a/plugins/org.eclipse.emf.parsley.wizards/src/org/eclipse/emf/parsley/wizards/NewEmfParsleyProjectSupport.java b/plugins/org.eclipse.emf.parsley.wizards/src/org/eclipse/emf/parsley/wizards/NewEmfParsleyProjectSupport.java
index 12e650c..7c14f48 100644
--- a/plugins/org.eclipse.emf.parsley.wizards/src/org/eclipse/emf/parsley/wizards/NewEmfParsleyProjectSupport.java
+++ b/plugins/org.eclipse.emf.parsley.wizards/src/org/eclipse/emf/parsley/wizards/NewEmfParsleyProjectSupport.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2013 RCP Vision (http://www.rcp-vision.com) and others.
+ * Copyright (c) 2013-2017 RCP Vision (http://www.rcp-vision.com) and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,11 +7,13 @@
  * 
  * Contributors:
  * Lorenzo Bettini - Initial contribution and API
+ * Vincenzo Caselli - https://bugs.eclipse.org/bugs/show_bug.cgi?id=512356
  *******************************************************************************/
 package org.eclipse.emf.parsley.wizards;
 
 import java.io.ByteArrayInputStream;
 import java.nio.charset.Charset;
+import java.util.Locale;
 
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
@@ -104,4 +106,13 @@
 		progressMonitor.done();
 	}
 
+	/**
+	 * Replaces any character different from a-zA-Z0-9._ with _, then convert in lowercase
+	 * @param name
+	 * @return
+	 */
+	public static String getValidJavaName(String name) {
+		return name.replaceAll("[^a-zA-Z0-9\\._]", "_").toLowerCase(Locale.ENGLISH);
+	}
+
 }
diff --git a/tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/swtbot/EmfParsleyDslUiAbstractTests.xtend b/tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/swtbot/EmfParsleyDslUiAbstractTests.xtend
index e6aef62..f789ce6 100644
--- a/tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/swtbot/EmfParsleyDslUiAbstractTests.xtend
+++ b/tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/swtbot/EmfParsleyDslUiAbstractTests.xtend
@@ -17,10 +17,18 @@
 public abstract class EmfParsleyDslUiAbstractTests extends EmfParsleySWTBotAbstractTests {
 
 	protected val TEST_PROJ_NAME = "my.emfparsley.proj"
+	protected val TEST_PROJ_NAME_BAD1 = "My-EmfParsley--project"
 
 	def createDslProjectWithWizard() {
 		createProjectWithoutTemplateInWorkspace(EMF_PARSLEY_CATEGORY,
 				NEW_EMF_PARSLEY_DSL_PROJECT, TEST_PROJ_NAME);
 		assertNoIssuesInProjectAfterAutoBuild();
 	}
+
+	def createDslProjectWithWizardFromBadProjectName1() {
+		createProjectWithoutTemplateInWorkspace(EMF_PARSLEY_CATEGORY,
+				NEW_EMF_PARSLEY_DSL_PROJECT, TEST_PROJ_NAME_BAD1);
+		assertNoIssuesInProjectAfterAutoBuild();
+	}
+
 }
diff --git a/tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/swtbot/EmfParsleyDslWizardsTests.xtend b/tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/swtbot/EmfParsleyDslWizardsTests.xtend
index b787b43..e10593a 100644
--- a/tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/swtbot/EmfParsleyDslWizardsTests.xtend
+++ b/tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/swtbot/EmfParsleyDslWizardsTests.xtend
@@ -42,6 +42,12 @@
 	}
 
 	@Test
+	def canCreateDslProjectWithWizardFromBadProjectName1() {
+		createDslProjectWithWizardFromBadProjectName1;
+		assertNoIssuesInProjectAfterAutoBuild();
+	}
+
+	@Test
 	def canCreateDslProjectWithWizardAndTreeFormTemplate() {
 		createProjectWithTemplateInWorkspace(EMF_PARSLEY_CATEGORY,
 				NEW_EMF_PARSLEY_DSL_PROJECT, TEST_PROJ_NAME, TREE_FORM_TEMPLATE);
diff --git a/tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/swtbot/EmfParsleySWTBotAbstractTests.java b/tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/swtbot/EmfParsleySWTBotAbstractTests.java
index 559e5f3..0888b3c 100644
--- a/tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/swtbot/EmfParsleySWTBotAbstractTests.java
+++ b/tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/swtbot/EmfParsleySWTBotAbstractTests.java
@@ -828,7 +828,7 @@
 	}
 
 	protected void assertProjectIsCreated(String projectName) {
-		assertTrue("Project doesn't exist", isProjectCreated(projectName));
+		assertTrue("Project doesn't exist: " + projectName, isProjectCreated(projectName));
 	}
 
 	protected void waitForBuild() throws CoreException {