Package org.jboss.forge.addon.maven.projects

Source Code of org.jboss.forge.addon.maven.projects.MavenMultiModuleProvider

/*
* Copyright 2012 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.jboss.forge.addon.maven.projects;

import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;

import javax.inject.Inject;

import org.apache.maven.model.Model;
import org.apache.maven.model.Parent;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.projects.ProjectAssociationProvider;
import org.jboss.forge.addon.projects.ProjectFactory;
import org.jboss.forge.addon.resource.Resource;
import org.jboss.forge.furnace.util.Strings;

/**
* Setup parent-child relation of Maven projects.
*
* @author <a href="mailto:torben@jit-central.com">Torben Jaeger</a>
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
public class MavenMultiModuleProvider implements ProjectAssociationProvider
{
   @Inject
   private ProjectFactory projectFactory;

   @Override
   public void associate(final Project project, final Resource<?> parentResource)
   {
      if (canAssociate(project, parentResource))
      {
         Project parent = projectFactory.findProject(parentResource);
         MavenFacet parentMavenFacet = parent.getFacet(MavenFacet.class);
         Model parentPom = parentMavenFacet.getModel();

         if (parentPom.getPackaging().equalsIgnoreCase("pom"))
         {
            String moduleDir = project.getRoot().getFullyQualifiedName()
                     .substring(parent.getRoot().getFullyQualifiedName().length());
            if (moduleDir.startsWith(File.separator))
               moduleDir = moduleDir.substring(1);

            parentPom.addModule(moduleDir);
            parentMavenFacet.setModel(parentPom);

            MavenFacet projectMavenFacet = project.getFacet(MavenFacet.class);
            Model pom = projectMavenFacet.getModel();

            Parent projectParent = new Parent();
            projectParent.setGroupId(parentPom.getGroupId());
            projectParent.setArtifactId(parentPom.getArtifactId());

            String version = resolveVersion(parentPom);
            projectParent.setVersion(version);

            // Calculate parent relative path
            Path parentPomPath = Paths.get(parentMavenFacet.getModelResource().getFullyQualifiedName());
            Path childPath = Paths.get(project.getRoot().getFullyQualifiedName());
            Path relativePath = childPath.relativize(parentPomPath).normalize();

            projectParent.setRelativePath(relativePath.toString());

            // Reuse GroupId and version from parent
            pom.setGroupId(null);
            pom.setVersion(null);
            pom.setParent(projectParent);
            projectMavenFacet.setModel(pom);
         }
      }
   }

   private String resolveVersion(Model parent)
   {
      String version = parent.getVersion();
      if (Strings.isNullOrEmpty(version)
               && parent.getParent() != null
               && !Strings.isNullOrEmpty(parent.getParent().getVersion()))
      {
         version = parent.getParent().getVersion();
      }
      return version;
   }

   @Override
   public boolean canAssociate(final Project project, final Resource<?> parent)
   {
      return parent.getChild("pom.xml").exists() && project.getRoot().getChild("pom.xml").exists();
   }
}
TOP

Related Classes of org.jboss.forge.addon.maven.projects.MavenMultiModuleProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.