/* * Copyright (C) 2012 John Casey. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.redhat.rcm.version.mgr.mod; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Set; import org.apache.maven.mae.project.key.VersionlessProjectKey; import org.apache.maven.model.Extension; import org.apache.maven.model.Model; 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 = "extensions-removal" ) public class ExtensionsRemovalModder implements ProjectModder { private final Logger logger = LoggerFactory.getLogger( getClass() ); @Override public String getDescription() { return "Remove <extensions/> elements from the POM."; } /** * {@inheritDoc} * * @see com.redhat.rcm.version.mgr.mod.ProjectModder#inject(com.redhat.rcm.version.model.Project, * com.redhat.rcm.version.mgr.session.VersionManagerSession) */ @Override public boolean inject( final Project project, final VersionManagerSession session ) { final Model model = project.getModel(); boolean changed = false; final List<Extension> extensions = project.getExtensions(); final Set<VersionlessProjectKey> whitelist = session.getExtensionsWhitelist(); if ( !whitelist.isEmpty() ) { final Iterator<Extension> i = extensions.iterator(); while ( i.hasNext() ) { final Extension e = i.next(); final VersionlessProjectKey key = new VersionlessProjectKey( e.getGroupId(), e.getArtifactId() ); logger.info( "ExtensionsRemoval - checking " + key + " against whitelist " + whitelist ); if ( !whitelist.contains( key ) ) { i.remove(); changed = true; } else { e.setVersion( session.replacePropertyVersion( project, e.getGroupId(), e.getArtifactId(), "jar", null ) ); changed = true; } } } else { model.getBuild() .setExtensions( Collections.<Extension> emptyList() ); changed = true; } return changed; } }