package com.redhat.rcm.version.mgr.mod; import org.apache.maven.mae.project.key.FullProjectKey; import org.apache.maven.mae.project.key.VersionlessProjectKey; import org.apache.maven.model.Model; import org.apache.maven.model.Parent; import org.codehaus.plexus.component.annotations.Component; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.redhat.rcm.version.mgr.session.VersionManagerSession; import com.redhat.rcm.version.model.Project; @Component( role = ProjectModder.class, hint = "parent-realignment" ) public class ParentModder implements ProjectModder { private final Logger logger = LoggerFactory.getLogger( getClass() ); @Override public String getDescription() { return "Set the project's parent GAV using the declared toolchain GAV"; } @Override public boolean inject( final Project project, final VersionManagerSession session ) { boolean changed = false; if ( session.getToolchainKey() == null ) { return changed; } final Model model = project.getModel(); final FullProjectKey toolchainKey = session.getToolchainKey(); Parent parent = model.getParent(); if ( toolchainKey != null ) { if ( parent == null ) { logger.info( "Injecting toolchain as parent for: " + project.getKey() ); parent = new Parent(); parent.setGroupId( toolchainKey.getGroupId() ); parent.setArtifactId( toolchainKey.getArtifactId() ); parent.setVersion( toolchainKey.getVersion() ); model.setParent( parent ); // session.addProject( project ); changed = true; } else { final FullProjectKey fullParentKey = new FullProjectKey( parent ); final FullProjectKey relocation = session.getRelocation( fullParentKey ); if ( relocation != null ) { logger.info( "Relocating parent: " + parent + " to: " + relocation ); parent.setGroupId( relocation.getGroupId() ); parent.setArtifactId( relocation.getArtifactId() ); parent.setVersion( relocation.getVersion() ); changed = true; } final VersionlessProjectKey vtk = new VersionlessProjectKey( toolchainKey.getGroupId(), toolchainKey.getArtifactId() ); final VersionlessProjectKey vpk = new VersionlessProjectKey( parent ); if ( vtk.equals( vpk ) && !toolchainKey.equals( fullParentKey ) ) { parent.setVersion( toolchainKey.getVersion() ); changed = true; } } } else { logger.info( "Toolchain not specified. Skipping toolchain-parent injection..." ); } return changed; } }