Mercurial > hg > thermostat-tools-eclipse
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"; }