changeset 131:b40698bda910

Create a nested project structure Put the parent pom in parent directory and the submodules in nested directories. Use explicit paths when creating projects to teach eclipse about this nested layout.
author Omair Majid <omajid@redhat.com>
date Fri, 30 May 2014 16:37:22 -0400
parents df34d0465d83
children 84fcb0e8646f
files com.redhat.thermostat.tools.eclipse.plugin/src/com/redhat/thermostat/tools/eclipse/plugin/wizards/ProjectCreator.java
diffstat 1 files changed, 67 insertions(+), 36 deletions(-) [+]
line wrap: on
line diff
--- a/com.redhat.thermostat.tools.eclipse.plugin/src/com/redhat/thermostat/tools/eclipse/plugin/wizards/ProjectCreator.java	Thu May 29 16:49:15 2014 -0400
+++ b/com.redhat.thermostat.tools.eclipse.plugin/src/com/redhat/thermostat/tools/eclipse/plugin/wizards/ProjectCreator.java	Fri May 30 16:37:22 2014 -0400
@@ -20,6 +20,7 @@
 import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.IWorkspace;
 import org.eclipse.core.resources.IWorkspaceRoot;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
@@ -137,29 +138,31 @@
         List<Project> projects = new ArrayList<>();
         Project project;
 
-        project = createParentModuleProject();
+        Project parent;
+        project = parent = createParentModuleProject();
         projects.add(project);
 
-        project = createCommonSubproject();
+        project = createCommonSubproject(parent);
         projects.add(project);
 
-        project = createJavaSubproject("agent");
+        project = createJavaSubproject(parent, "agent");
         projects.add(project);
 
-        project = createJavaSubproject("client");
+        project = createJavaSubproject(parent, "client");
         projects.add(project);
 
-        project = createJavaSubproject("cli");
+        project = createJavaSubproject(parent, "cli");
         projects.add(project);
 
-        project = createDistributionProject();
+        project = createDistributionProject(parent);
         projects.add(project);
 
         refreshProjects(projects);
     }
 
     private Project createParentModuleProject() throws CoreException, IOException {
-        Project project = createJavaProject(parentId);
+        String projectName = artifactId;
+        Project project = createMavenProject(null, projectName);
 
         String pomContents = ""
                 + POM_HEADER
@@ -169,11 +172,11 @@
                 + "  <packaging>pom</packaging>\n"
                 + "\n"
                 + "  <modules>\n"
-                + "    <module>../" + this.artifactId + "-agent</module>\n"
-                + "    <module>../" + this.artifactId + "-common</module>\n"
-                + "    <module>../" + this.artifactId + "-client</module>\n"
-                + "    <module>../" + this.artifactId + "-cli</module>\n"
-                + "    <module>../" + this.artifactId + "-distribution</module>\n"
+                + "    <module>" + this.artifactId + "-agent</module>\n"
+                + "    <module>" + this.artifactId + "-common</module>\n"
+                + "    <module>" + this.artifactId + "-client</module>\n"
+                + "    <module>" + this.artifactId + "-cli</module>\n"
+                + "    <module>" + this.artifactId + "-distribution</module>\n"
                 + "  </modules>\n"
                 + "\n"
                 + "  <build>\n"
@@ -196,11 +199,11 @@
         return project;
     }
 
-    private Project createCommonSubproject() throws IOException, CoreException {
+    private Project createCommonSubproject(Project parent) throws IOException, CoreException {
         String suffix = "common";
         String artifactId = this.artifactId + "-" + suffix;
         String packageName = packagePrefix + "." + suffix;
-        Project project = createJavaCodeProject(artifactId, packageName);
+        Project project = createJavaCodeProject(parent, artifactId, packageName);
 
         String pomContents = ""
                 + POM_HEADER
@@ -226,11 +229,11 @@
         return project;
     }
 
-    private Project createJavaSubproject(String subproject) throws CoreException, IOException {
+    private Project createJavaSubproject(Project parent, String subproject) throws CoreException, IOException {
         String artifactId = this.artifactId + "-" + subproject;
         String subpackage = this.packagePrefix + "." + subproject;
 
-        Project project = createJavaCodeProject(artifactId, subpackage);
+        Project project = createJavaCodeProject(parent, artifactId, subpackage);
 
         String pomContents = ""
                 + POM_HEADER
@@ -260,8 +263,8 @@
         return project;
     }
 
-    private Project createJavaCodeProject(String projectName, String packageName) throws CoreException {
-        Project projects = createJavaProject(projectName);
+    private Project createJavaCodeProject(Project parent, String projectName, String packageName) throws CoreException {
+        Project projects = createJavaAndMavenProject(parent, projectName);
 
         IProject project = projects.project;
 
@@ -295,10 +298,10 @@
         pack.createCompilationUnit(BUNDLE_ACTIVATOR_NAME + ".java", bundleActivatorContents, false, null);
     }
 
-    private Project createDistributionProject() throws CoreException, IOException {
+    private Project createDistributionProject(Project parent) throws CoreException, IOException {
         String artifactId = this.artifactId + "-distribution";
 
-        Project projects = createJavaProject(artifactId);
+        Project projects = createJavaAndMavenProject(parent, artifactId);
 
         String pomContents = ""
                 + POM_HEADER
@@ -395,40 +398,69 @@
         });
     }
 
-    private Project createJavaProject(String projectName) throws CoreException {
-        IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+    private Project createJavaAndMavenProject(Project parent, String projectName) throws CoreException {
+        Project project = createMavenProject(parent, projectName);
+
+        addJavaNature(project.project);
+
+        IJavaProject javaProject = JavaCore.create(project.project);
+
+        return new Project(project.project, javaProject);
+    }
+
+    private Project createMavenProject(Project parent, String projectName) throws CoreException {
+        IWorkspace workspace = ResourcesPlugin.getWorkspace();
+        IWorkspaceRoot root = workspace.getRoot();
+
         IProject project = root.getProject(projectName);
+
         if (project.exists()) {
             project.delete(true, null);
         }
         try {
-            project.create(null);
+            if (parent == null) {
+                project.create(null);
+            } else {
+                IProjectDescription description = workspace.newProjectDescription(projectName);
+                description.setLocation(parent.project.getLocation().append(projectName));
+                project.create(description, null);
+            }
             project.open(null);
         } catch (CoreException e) {
             e.printStackTrace();
         }
 
-        addJavaAndMavenNature(project);
+        addMavenNature(project);
 
-        // Create Java project
-        IJavaProject javaProject = JavaCore.create(project);
-
-        return new Project(project, javaProject);
+        return new Project(project, null);
     }
 
-    private void addJavaAndMavenNature(IProject project) throws CoreException {
+    private void addJavaNature(IProject project) throws CoreException {
         IProjectDescription description = project.getDescription();
-        addJavaAndMavenNature(description);
+        addJavaNature(description);
         project.setDescription(description, null);
     }
 
-    private void addJavaAndMavenNature(IProjectDescription description) {
+    private void addJavaNature(IProjectDescription description) {
+        addNature(description, JavaCore.NATURE_ID);
+    }
+
+    private void addMavenNature(IProject project) throws CoreException {
+        IProjectDescription description = project.getDescription();
+        addMavenNature(description);
+        project.setDescription(description, null);
+    }
+
+    private void addMavenNature(IProjectDescription description) {
+        // provided by m2e
+        // TODO what's the symbolic constant for this? IMavenConstants.NATURE_ID?
+        addNature(description, "org.eclipse.m2e.core.maven2Nature");
+    }
+
+    private void addNature(IProjectDescription description, String nature) {
         String[] existingNatureIds = description.getNatureIds();
         Set<String> natures = new TreeSet<>(Arrays.asList(existingNatureIds));
-        natures.add(JavaCore.NATURE_ID);
-        // provided by m2e
-        // TODO what's the symbolic constant for this? IMavenConstants.NATURE_ID?
-        natures.add("org.eclipse.m2e.core.maven2Nature");
+        natures.add(nature);
         String[] newNatureIds = natures.toArray(new String[natures.size()]);
         description.setNatureIds(newNatureIds);
     }
@@ -451,7 +483,6 @@
             + "    <groupId>" + groupId + "</groupId>\n"
             + "    <artifactId>" + parentId + "</artifactId>\n"
             + "    <version>" + version + "</version>\n"
-            + "    <relativePath>../" + parentId + "</relativePath>\n"
             + "  </parent>\n";
     }