Bug 578603 - [Designer, Java] JDT project creation should disable module_info generation
- Avoid redundant code project creation (separate function for maven)
- Disable generation of module-info.java
- Use a dialog to propose changing the project layout, if it is not configured for
separate source folders
Change-Id: I651bae7657c9a5af39f4cfa01869182f17a45471
Signed-off-by: Ansgar Radermacher <ansgar.radermacher@cea.fr>
diff --git a/plugins/languages/java/org.eclipse.papyrus.designer.languages.java.jdt.project/src/org/eclipse/papyrus/designer/languages/java/jdt/project/JavaNamedProjectWizard.java b/plugins/languages/java/org.eclipse.papyrus.designer.languages.java.jdt.project/src/org/eclipse/papyrus/designer/languages/java/jdt/project/JavaNamedProjectWizard.java
index 0babda7..a4254a8 100644
--- a/plugins/languages/java/org.eclipse.papyrus.designer.languages.java.jdt.project/src/org/eclipse/papyrus/designer/languages/java/jdt/project/JavaNamedProjectWizard.java
+++ b/plugins/languages/java/org.eclipse.papyrus.designer.languages.java.jdt.project/src/org/eclipse/papyrus/designer/languages/java/jdt/project/JavaNamedProjectWizard.java
@@ -14,4 +14,9 @@
public JavaNamedProjectWizard(String projectName) {
this.setProjectName(projectName);
}
+
+ public void checkDialogSettings() {
+ Object tst = getDialogSettings();
+ System.err.println(tst);
+ }
}
diff --git a/plugins/languages/java/org.eclipse.papyrus.designer.languages.java.jdt.project/src/org/eclipse/papyrus/designer/languages/java/jdt/project/JavaProjectSupport.java b/plugins/languages/java/org.eclipse.papyrus.designer.languages.java.jdt.project/src/org/eclipse/papyrus/designer/languages/java/jdt/project/JavaProjectSupport.java
index 66c66b8..002a779 100644
--- a/plugins/languages/java/org.eclipse.papyrus.designer.languages.java.jdt.project/src/org/eclipse/papyrus/designer/languages/java/jdt/project/JavaProjectSupport.java
+++ b/plugins/languages/java/org.eclipse.papyrus.designer.languages.java.jdt.project/src/org/eclipse/papyrus/designer/languages/java/jdt/project/JavaProjectSupport.java
@@ -11,9 +11,15 @@
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.jdt.ui.actions.OpenNewJavaProjectWizardAction;
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.wizards.JavaProjectWizard;
+import org.eclipse.jdt.ui.JavaUI;
+import org.eclipse.jdt.ui.PreferenceConstants;
import org.eclipse.jdt.ui.wizards.NewJavaProjectWizardPageOne;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.m2e.core.ui.internal.wizards.MavenProjectWizard;
import org.eclipse.papyrus.designer.languages.common.extensionpoints.AbstractSettings;
@@ -36,11 +42,19 @@
private MavenProject mavenProjectDetails;
/**
+ * Key managed by JavaUI, indicates whether module info should be generated
+ * Code may break, if String of key changes.
+ */
+ protected String LAST_MODULE_NFO = JavaUI.ID_PLUGIN + ".last.selected.create.moduleinfo"; //$NON-NLS-1$
+
+ /**
* Create a Java project. Caller should test before calling, whether the
- * project exists already
+ * project exists already. The project disables the option to generate module-info.
+ * The code proposes to change the JDT preference SRCBIN_FOLDERS_IN_NEWPROJ, if it is configured to
+ * use project folders.
*
* @param projectName
- * @return the created project
+ * @return the created project or null (in case of Cancel)
*/
@Override
public IProject createProject(String projectName) {
@@ -49,19 +63,33 @@
IProject project = root.getProject(projectName);
dialogStatus = 0;
try {
- // create JDT wizard for Java
- final NewJavaProjectWizardPageOne wiz = new JavaNamedProjectWizard(projectName);
-
- // wiz.setWindowTitle("create project " + projectName);
- // //$NON-NLS-1$
- // wiz.init(wb, null);
-
+ // assure that we are running an UI thread
Display.getDefault().syncExec(new Runnable() {
@Override
public void run() {
- OpenNewJavaProjectWizardAction wizDiag = new OpenNewJavaProjectWizardAction();
- wizDiag.setConfiguredWizardPages(wiz, null);
- wizDiag.run();
+ boolean useSrcBin = PreferenceConstants.getPreferenceStore().getBoolean(PreferenceConstants.SRCBIN_FOLDERS_IN_NEWPROJ);
+ if (!useSrcBin) {
+ boolean changePrefs = MessageDialog.openQuestion(Display.getCurrent().getActiveShell(), "Java preference", //$NON-NLS-1$
+ Messages.JavaProjectSupport_PREF_WARN);
+ if (changePrefs) {
+ PreferenceConstants.getPreferenceStore().setValue(PreferenceConstants.SRCBIN_FOLDERS_IN_NEWPROJ, true);
+ }
+ }
+
+ final JavaProjectWizard wiz = new JavaProjectWizard();
+ wiz.init(PlatformUI.getWorkbench(), null);
+
+ WizardDialog wizDiag = new WizardDialog(Display.getCurrent().getActiveShell(), wiz);
+ wizDiag.create();
+ // disable module_info generation
+ IDialogSettings ds = JavaPlugin.getDefault().getDialogSettings();
+ ds.put(LAST_MODULE_NFO, false);
+
+ final IWizardPage page = wiz.getPages()[0];
+ if (page instanceof NewJavaProjectWizardPageOne) {
+ ((NewJavaProjectWizardPageOne) page).setProjectName(projectName);
+ }
+ dialogStatus = wizDiag.open();
}
});
} catch (Exception e) {
@@ -74,55 +102,51 @@
}
if ((project == null) || !project.exists()) {
throw new RuntimeException(
- "Could not create JDT project. This might indicate that there is a problem with your JDT installation."); //$NON-NLS-1$
+ Messages.JavaProjectSupport_COULD_NOT_CREATE);
}
return project;
}
@Override
public IProject createProject(String projectName, Package modelRoot) {
- IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
- IProject project = root.getProject(projectName);
mavenProjectDetails = UMLUtil.getStereotypeApplication(modelRoot, MavenProject.class);
- try {
- if (mavenProjectDetails == null) {
- // create JDT wizard for Java
- final NewJavaProjectWizardPageOne wiz = new JavaNamedProjectWizard(projectName);
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- OpenNewJavaProjectWizardAction wizDiag = new OpenNewJavaProjectWizardAction();
- wizDiag.setConfiguredWizardPages(wiz, null);
- wizDiag.run();
- }
- });
- } else {
- // Create Maven wizard
- final MavenProjectWizard mavenWiz = new MavenProjectWizard();
- mavenWiz.setWindowTitle(projectName);
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- IWorkbench wb = PlatformUI.getWorkbench();
- mavenWiz.init(wb, new StructuredSelection());
- Shell shell = wb.getActiveWorkbenchWindow().getShell();
- WizardDialog dialog = new WizardDialog(shell, mavenWiz);
- dialog.create();
- dialog.open();
- }
- });
- }
+ if (mavenProjectDetails == null) {
+ return createProject(projectName);
+ } else {
+ return createMavenProject(projectName);
+ }
+ }
+ /**
+ * Create a Maven instead of JDT project
+ * TODO: untested
+ *
+ * @param projectName
+ * the project name
+ * @return the created project or null
+ */
+ protected IProject createMavenProject(String projectName) {
+ IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+ try {
+ // Create Maven wizard
+ final MavenProjectWizard mavenWiz = new MavenProjectWizard();
+ mavenWiz.setWindowTitle(projectName);
+ Display.getDefault().syncExec(new Runnable() {
+ @Override
+ public void run() {
+ IWorkbench wb = PlatformUI.getWorkbench();
+ mavenWiz.init(wb, new StructuredSelection());
+ Shell shell = wb.getActiveWorkbenchWindow().getShell();
+ WizardDialog dialog = new WizardDialog(shell, mavenWiz);
+ dialog.create();
+ dialog.open();
+ }
+ });
} catch (Exception e) {
e.printStackTrace();
}
- project = root.getProject(projectName);
-
- /*
- * if ((project == null) || !project.exists()) { throw new
- * RuntimeException("Could not create JDT project. This might indicate that there is a problem with your JDT installation."
- * ); //$NON-NLS-1$ }
- */
+ IProject project = root.getProject(projectName);
+
return project;
}
@@ -130,7 +154,7 @@
public void setSettings(IProject project, AbstractSettings settings) {
if (project != null && mavenProjectDetails != null) {
CustomizePOMFile customizePOMFile = new CustomizePOMFile(project, mavenProjectDetails);
- customizePOMFile.execute();
+ customizePOMFile.execute();
}
}
diff --git a/plugins/languages/java/org.eclipse.papyrus.designer.languages.java.jdt.project/src/org/eclipse/papyrus/designer/languages/java/jdt/project/Messages.java b/plugins/languages/java/org.eclipse.papyrus.designer.languages.java.jdt.project/src/org/eclipse/papyrus/designer/languages/java/jdt/project/Messages.java
new file mode 100644
index 0000000..ce6f711
--- /dev/null
+++ b/plugins/languages/java/org.eclipse.papyrus.designer.languages.java.jdt.project/src/org/eclipse/papyrus/designer/languages/java/jdt/project/Messages.java
@@ -0,0 +1,16 @@
+package org.eclipse.papyrus.designer.languages.java.jdt.project;
+
+import org.eclipse.osgi.util.NLS;
+
+public class Messages extends NLS {
+ private static final String BUNDLE_NAME = Messages.class.getPackageName() + ".messages"; //$NON-NLS-1$
+ public static String JavaProjectSupport_COULD_NOT_CREATE;
+ public static String JavaProjectSupport_PREF_WARN;
+ static {
+ // initialize resource bundle
+ NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+ }
+
+ private Messages() {
+ }
+}
diff --git a/plugins/languages/java/org.eclipse.papyrus.designer.languages.java.jdt.project/src/org/eclipse/papyrus/designer/languages/java/jdt/project/messages.properties b/plugins/languages/java/org.eclipse.papyrus.designer.languages.java.jdt.project/src/org/eclipse/papyrus/designer/languages/java/jdt/project/messages.properties
new file mode 100644
index 0000000..2065930
--- /dev/null
+++ b/plugins/languages/java/org.eclipse.papyrus.designer.languages.java.jdt.project/src/org/eclipse/papyrus/designer/languages/java/jdt/project/messages.properties
@@ -0,0 +1,2 @@
+JavaProjectSupport_COULD_NOT_CREATE=Could not create JDT project. This might indicate that there is a problem with your JDT installation.
+JavaProjectSupport_PREF_WARN=Your current preferences do not use separate source folders. This is not supported by the code generator. Do you want to change this preference?