jdcasey 2005/03/18 09:06:26
Modified: sandbox/repoclean/src/main/resources/META-INF/plexus components.xml sandbox/repoclean/src/main/java/org/apache/maven/tools/repoclean RepositoryCleaner.java Added: sandbox/repoclean/src/main/java/org/apache/maven/tools/repoclean/translate PomTranslationException.java PomV3ToV4Translator.java Removed: sandbox/repoclean/src/main/java/org/apache/maven/tools/repoclean/pom PomTranslationException.java PomV3ToV4Translator.java Log: o Changed the package name of the POM translator from *.pom to *.translate o Changed the type of notifier created by the nagEmailAddress from 'email' to 'mail' following brett's changes to the maven-components pom. Revision Changes Path 1.2 +3 -3 maven-components/sandbox/repoclean/src/main/resources/META-INF/plexus/components.xml Index: components.xml =================================================================== RCS file: /home/cvs/maven-components/sandbox/repoclean/src/main/resources/META-INF/plexus/components.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- components.xml 17 Mar 2005 22:56:40 -0000 1.1 +++ components.xml 18 Mar 2005 17:06:25 -0000 1.2 @@ -10,7 +10,7 @@ <implementation>org.apache.maven.tools.repoclean.RepositoryCleaner</implementation> <requirements> <requirement> - <role>org.apache.maven.tools.repoclean.pom.PomV3ToV4Translator</role> + <role>org.apache.maven.tools.repoclean.translate.PomV3ToV4Translator</role> </requirement> <requirement> <role>org.apache.maven.tools.repoclean.correlate.ArtifactPomCorrelator</role> @@ -32,8 +32,8 @@ | --> <component> - <role>org.apache.maven.tools.repoclean.pom.PomV3ToV4Translator</role> - <implementation>org.apache.maven.tools.repoclean.pom.PomV3ToV4Translator</implementation> + <role>org.apache.maven.tools.repoclean.translate.PomV3ToV4Translator</role> + <implementation>org.apache.maven.tools.repoclean.translate.PomV3ToV4Translator</implementation> </component> <!-- | 1.1 maven-components/sandbox/repoclean/src/main/java/org/apache/maven/tools/repoclean/translate/PomTranslationException.java Index: PomTranslationException.java =================================================================== package org.apache.maven.tools.repoclean.translate; /* ==================================================================== * Copyright 2001-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ==================================================================== */ /** * @author jdcasey */ public class PomTranslationException extends Exception { private final String groupId; private final String artifactId; private final String version; public PomTranslationException( String groupId, String artifactId, String version, String message ) { this( groupId, artifactId, version, message, null ); } public PomTranslationException( String groupId, String artifactId, String version, Throwable cause ) { this( groupId, artifactId, version, "[No message provided.]", cause ); } public PomTranslationException( String groupId, String artifactId, String version, String message, Throwable cause ) { super( "In POM{" + groupId + ":" + artifactId + ":" + version + "}: " + message, cause ); this.groupId = groupId; this.artifactId = artifactId; this.version = version; } } 1.1 maven-components/sandbox/repoclean/src/main/java/org/apache/maven/tools/repoclean/translate/PomV3ToV4Translator.java Index: PomV3ToV4Translator.java =================================================================== package org.apache.maven.tools.repoclean.translate; import org.apache.maven.model.v4_0_0.Build; import org.apache.maven.model.v4_0_0.CiManagement; import org.apache.maven.model.v4_0_0.Contributor; import org.apache.maven.model.v4_0_0.Dependency; import org.apache.maven.model.v4_0_0.Developer; import org.apache.maven.model.v4_0_0.DistributionManagement; import org.apache.maven.model.v4_0_0.Goal; import org.apache.maven.model.v4_0_0.IssueManagement; import org.apache.maven.model.v4_0_0.License; import org.apache.maven.model.v4_0_0.MailingList; import org.apache.maven.model.v4_0_0.Model; import org.apache.maven.model.v4_0_0.Notifier; import org.apache.maven.model.v4_0_0.Organization; import org.apache.maven.model.v4_0_0.Plugin; import org.apache.maven.model.v4_0_0.Reports; import org.apache.maven.model.v4_0_0.Repository; import org.apache.maven.model.v4_0_0.Resource; import org.apache.maven.model.v4_0_0.Scm; import org.apache.maven.model.v4_0_0.Site; import org.apache.maven.tools.repoclean.report.Reporter; import org.codehaus.plexus.logging.AbstractLogEnabled; import org.codehaus.plexus.util.StringUtils; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Properties; import java.util.regex.Matcher; import java.util.regex.Pattern; /* ==================================================================== * Copyright 2001-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ==================================================================== */ /** * @author jdcasey */ public class PomV3ToV4Translator extends AbstractLogEnabled { public static final String ROLE = PomV3ToV4Translator.class.getName(); public Model translate( org.apache.maven.model.v3_0_0.Model v3Model, Reporter reporter ) { String groupId = v3Model.getGroupId(); String artifactId = v3Model.getArtifactId(); String id = v3Model.getId(); if ( StringUtils.isNotEmpty( id ) ) { if ( StringUtils.isEmpty( groupId ) ) { groupId = id; } if ( StringUtils.isEmpty( artifactId ) ) { artifactId = id; } } String version = v3Model.getCurrentVersion(); if ( version == null ) { version = v3Model.getVersion(); } PomKey pomKey = new PomKey( groupId, artifactId, version ); StringBuffer logHeader = new StringBuffer(); logHeader.append( "Translation of POM {" ).append( v3Model.getGroupId() ).append( ":" ) .append( v3Model.getArtifactId() ).append( ":" ).append( version ).append( "}\n" ); reporter.info( "[START] " + logHeader.toString() ); warnOfUnsupportedMainModelElements( v3Model, reporter ); Model model = null; try { model = new Model(); model.setArtifactId( v3Model.getArtifactId() ); model.setBuild( translateBuild( v3Model.getBuild(), reporter ) ); model.setCiManagement( translateCiManagementInfo( v3Model.getBuild() ) ); model.setContributors( translateContributors( v3Model.getContributors() ) ); model.setDependencies( translateDependencies( v3Model.getDependencies() ) ); model.setDescription( v3Model.getDescription() ); model.setDevelopers( translateDevelopers( v3Model.getDevelopers() ) ); model.setDistributionManagement( translateDistributionManagement( pomKey, v3Model ) ); model.setGroupId( v3Model.getGroupId() ); model.setInceptionYear( v3Model.getInceptionYear() ); model.setIssueManagement( translateIssueManagement( v3Model ) ); model.setLicenses( translateLicenses( v3Model.getLicenses() ) ); model.setMailingLists( translateMailingLists( v3Model.getMailingLists() ) ); model.setModelVersion( "4.0.0" ); model.setName( v3Model.getName() ); model.setOrganization( translateOrganization( v3Model.getOrganization(), reporter ) ); model.setPackaging( "jar" ); model.setReports( translateReports( v3Model.getReports(), reporter ) ); model.setScm( translateScm( v3Model ) ); model.setUrl( v3Model.getUrl() ); model.setVersion( version ); reporter.info( "[END] " + logHeader.toString() ); } catch ( PomTranslationException e ) { reporter.error( "Invalid POM detected. Cannot translate.", e ); } return model; } private CiManagement translateCiManagementInfo( org.apache.maven.model.v3_0_0.Build v3Build ) { CiManagement ciMgmt = null; if ( v3Build != null ) { String nagEmailAddress = v3Build.getNagEmailAddress(); if ( StringUtils.isNotEmpty( nagEmailAddress ) ) { Notifier notifier = new Notifier(); notifier.setAddress( nagEmailAddress ); notifier.setType( "mail" ); ciMgmt = new CiManagement(); ciMgmt.addNotifier( notifier ); } } return ciMgmt; } private void warnOfUnsupportedMainModelElements( org.apache.maven.model.v3_0_0.Model v3Model, Reporter reporter ) { if ( StringUtils.isNotEmpty( v3Model.getExtend() ) ) { reporter.warn( "Ignoring non-portable parent declaration: " + v3Model.getExtend() ); } if ( StringUtils.isNotEmpty( v3Model.getGumpRepositoryId() ) ) { reporter.warn( "Ignoring gump repository id: \'" + v3Model.getGumpRepositoryId() + "\'. This is not supported in v4 POMs." ); } if ( notEmpty( v3Model.getVersions() ) ) { reporter.warn( "Ignoring <versions/> section. This is not supported in v4 POMs." ); } if ( notEmpty( v3Model.getBranches() ) ) { reporter.warn( "Ignoring <branches/> section. This is not supported in v4 POMs." ); } Properties v3ModelProperties = v3Model.getProperties(); if ( v3ModelProperties != null && !v3ModelProperties.isEmpty() ) { reporter.warn( "Ignoring <properties/> section. It is not supported in v4 POMs." ); } if ( StringUtils.isNotEmpty( v3Model.getPackage() ) ) { reporter.warn( "Ignoring <package/>. It is not supported in v4 POMs." ); } if ( notEmpty( v3Model.getPackageGroups() ) ) { reporter.warn( "Ignoring <packageGroups/> section. It is not supported in v4 POMs." ); } if ( StringUtils.isNotEmpty( v3Model.getLogo() ) ) { reporter.warn( "Ignoring <logo/> for project. It is not supported in v4 POMs." ); } if ( StringUtils.isNotEmpty( v3Model.getShortDescription() ) ) { reporter.warn( "Ignoring <shortDescription/>. It is not supported in v4 POMs." ); } } private Scm translateScm( org.apache.maven.model.v3_0_0.Model v3Model ) { Scm scm = null; org.apache.maven.model.v3_0_0.Repository repo = v3Model.getRepository(); if ( repo != null ) { scm = new Scm(); scm.setConnection( repo.getConnection() ); scm.setDeveloperConnection( repo.getDeveloperConnection() ); scm.setUrl( repo.getUrl() ); } return scm; } private Reports translateReports( List v3Reports, Reporter reporter ) { Reports reports = null; if ( v3Reports != null && !v3Reports.isEmpty() ) { reports = new Reports(); for ( Iterator it = v3Reports.iterator(); it.hasNext(); ) { String reportName = (String) it.next(); Pattern pluginNamePattern = Pattern.compile( "maven-(.+)-plugin" ); Matcher matcher = pluginNamePattern.matcher( reportName ); String reportPluginName = null; if ( !matcher.matches() ) { reporter.warn( "Non-standard report name: \'" + reportName + "\'. Using entire name for plugin artifactId." ); reportPluginName = reportName; } else { reportPluginName = matcher.group( 1 ); } Plugin reportPlugin = new Plugin(); reportPlugin.setGroupId( "maven" ); reportPlugin.setArtifactId( reportPluginName ); reportPlugin.setVersion( "1.0-SNAPSHOT" ); StringBuffer info = new StringBuffer(); info.append( "Using some contrived information for report: \'" ).append( reportName ).append( "\'.\n" ) .append( "\to groupId: \'maven\'\n" ).append( "\to artifactId: \'" ).append( reportPluginName ) .append( "\'\n" ).append( "\to version: \'1.0-SNAPSHOT\'\n" ).append( "\to goal: \'report\'\n" ) .append( "\n" ) .append( "These values were extracted using the v3 report naming convention, but may be wrong." ); reporter.info( info.toString() ); Goal reportGoal = new Goal(); reportGoal.setId( "report" ); reportPlugin.addGoal( reportGoal ); reports.addPlugin( reportPlugin ); } } return reports; } private org.apache.maven.model.v4_0_0.Organization translateOrganization( org.apache.maven.model.v3_0_0.Organization v3Organization, Reporter reporter ) { Organization organization = null; if ( v3Organization != null ) { organization = new Organization(); organization.setName( v3Organization.getName() ); organization.setUrl( v3Organization.getUrl() ); if ( StringUtils.isNotEmpty( v3Organization.getLogo() ) ) { reporter.warn( "Ignoring <organization><logo/></organization>. It is not supported in v4 POMs." ); } } return organization; } private List translateMailingLists( List v3MailingLists ) { List mailingLists = new ArrayList(); if ( notEmpty( v3MailingLists ) ) { for ( Iterator it = v3MailingLists.iterator(); it.hasNext(); ) { org.apache.maven.model.v3_0_0.MailingList v3List = (org.apache.maven.model.v3_0_0.MailingList) it .next(); MailingList list = new MailingList(); list.setArchive( v3List.getArchive() ); list.setName( v3List.getName() ); list.setSubscribe( v3List.getSubscribe() ); list.setUnsubscribe( v3List.getUnsubscribe() ); mailingLists.add( list ); } } return mailingLists; } private List translateLicenses( List v3Licenses ) { List licenses = new ArrayList(); if ( notEmpty( v3Licenses ) ) { for ( Iterator it = v3Licenses.iterator(); it.hasNext(); ) { org.apache.maven.model.v3_0_0.License v3License = (org.apache.maven.model.v3_0_0.License) it.next(); License license = new License(); license.setComments( v3License.getComments() ); license.setName( v3License.getName() ); license.setUrl( v3License.getUrl() ); licenses.add( license ); } } return licenses; } private IssueManagement translateIssueManagement( org.apache.maven.model.v3_0_0.Model v3Model ) { IssueManagement issueMgmt = null; String issueTrackingUrl = v3Model.getIssueTrackingUrl(); if ( StringUtils.isNotEmpty( issueTrackingUrl ) ) { issueMgmt = new IssueManagement(); issueMgmt.setUrl( issueTrackingUrl ); } return issueMgmt; } private DistributionManagement translateDistributionManagement( PomKey pomKey, org.apache.maven.model.v3_0_0.Model v3Model ) throws PomTranslationException { DistributionManagement distributionManagement = new DistributionManagement(); Site site = null; String siteAddress = v3Model.getSiteAddress(); String siteDirectory = v3Model.getSiteDirectory(); if ( StringUtils.isEmpty( siteAddress ) ) { if ( !StringUtils.isEmpty( siteDirectory ) ) { site = new Site(); site.setId( "default" ); site.setName( "Default Site" ); site.setUrl( "file://" + siteDirectory ); } } else { if ( StringUtils.isEmpty( siteDirectory ) ) { throw new PomTranslationException( pomKey.groupId(), pomKey.artifactId(), pomKey.version(), "Missing 'siteDirectory': Both siteAddress and siteDirectory must be set at the same time." ); } site = new Site(); site.setId( "default" ); site.setName( "Default Site" ); site.setUrl( "scp://" + siteAddress + "/" + siteDirectory ); } distributionManagement.setSite( site ); String distributionSite = v3Model.getDistributionSite(); String distributionDirectory = v3Model.getDistributionDirectory(); Repository repository = null; if ( StringUtils.isEmpty( distributionSite ) ) { if ( !StringUtils.isEmpty( distributionDirectory ) ) { repository = new Repository(); repository.setId( "default" ); repository.setName( "Default Repository" ); repository.setUrl( "file://" + distributionDirectory ); // throw new Exception( "Missing 'distributionSite': Both distributionSite and distributionDirectory must be set." ); } } else { if ( StringUtils.isEmpty( distributionDirectory ) ) { throw new PomTranslationException( pomKey.groupId(), pomKey.artifactId(), pomKey.version(), "Missing 'distributionDirectory': must be set is 'distributionSite' is set." ); } repository = new Repository(); repository.setId( "default" ); repository.setName( "Default Repository" ); repository.setUrl( distributionSite + "/" + distributionDirectory ); } distributionManagement.setRepository( repository ); if ( site == null && repository == null ) { return null; } return distributionManagement; } private List translateDevelopers( List v3Developers ) { List developers = new ArrayList(); if ( notEmpty( v3Developers ) ) { for ( Iterator it = v3Developers.iterator(); it.hasNext(); ) { org.apache.maven.model.v3_0_0.Developer v3Developer = (org.apache.maven.model.v3_0_0.Developer) it .next(); Developer developer = new Developer(); developer.setEmail( v3Developer.getEmail() ); developer.setId( v3Developer.getId() ); developer.setName( v3Developer.getName() ); developer.setOrganization( v3Developer.getOrganization() ); developer.setRoles( v3Developer.getRoles() ); developer.setTimezone( v3Developer.getTimezone() ); developer.setUrl( v3Developer.getUrl() ); developers.add( developer ); } } return developers; } private List translateDependencies( List v3Deps ) { List deps = new ArrayList(); if ( notEmpty( v3Deps ) ) { for ( Iterator it = v3Deps.iterator(); it.hasNext(); ) { org.apache.maven.model.v3_0_0.Dependency v3Dep = (org.apache.maven.model.v3_0_0.Dependency) it.next(); Dependency dep = new Dependency(); dep.setArtifactId( v3Dep.getArtifactId() ); dep.setGroupId( v3Dep.getGroupId() ); dep.setVersion( v3Dep.getVersion() ); dep.setType( v3Dep.getType() ); deps.add( dep ); } } return deps; } private List translateContributors( List v3Contributors ) { List contributors = new ArrayList(); if ( notEmpty( v3Contributors ) ) { for ( Iterator it = v3Contributors.iterator(); it.hasNext(); ) { org.apache.maven.model.v3_0_0.Contributor v3Contributor = (org.apache.maven.model.v3_0_0.Contributor) it .next(); Contributor contributor = new Contributor(); contributor.setEmail( v3Contributor.getEmail() ); contributor.setName( v3Contributor.getName() ); contributor.setOrganization( v3Contributor.getOrganization() ); contributor.setRoles( v3Contributor.getRoles() ); contributor.setTimezone( v3Contributor.getTimezone() ); contributor.setUrl( v3Contributor.getUrl() ); contributors.add( contributor ); } } return contributors; } private Build translateBuild( org.apache.maven.model.v3_0_0.Build v3Build, Reporter reporter ) { Build build = null; if ( v3Build != null ) { build = new Build(); warnOfUnsupportedBuildElements( v3Build, reporter ); build.setSourceDirectory( v3Build.getSourceDirectory() ); build.setTestSourceDirectory( v3Build.getUnitTestSourceDirectory() ); build.setResources( translateResources( v3Build.getResources() ) ); org.apache.maven.model.v3_0_0.UnitTest unitTest = v3Build.getUnitTest(); if ( unitTest != null ) { build.setTestResources( translateResources( unitTest.getResources() ) ); List testIncludes = unitTest.getIncludes(); List testExcludes = new ArrayList( unitTest.getExcludes() ); testExcludes.addAll( unitTest.getDefaultExcludes() ); if ( notEmpty( testIncludes ) || notEmpty( testExcludes ) ) { Plugin plugin = new Plugin(); plugin.setGroupId( "maven" ); plugin.setArtifactId( "surefire" ); plugin.setVersion( "1.0-SNAPSHOT" ); Properties config = new Properties(); String includes = pathPatternsToString( testIncludes ); if ( StringUtils.isNotEmpty( includes ) ) { config.setProperty( "includes", includes ); } String excludes = pathPatternsToString( testExcludes ); if ( StringUtils.isNotEmpty( excludes ) ) { config.setProperty( "excludes", excludes ); } if ( !config.isEmpty() ) { plugin.setConfiguration( config ); } build.addPlugin( plugin ); } } } return build; } private void warnOfUnsupportedBuildElements( org.apache.maven.model.v3_0_0.Build v3Build, Reporter reporter ) { if ( notEmpty( v3Build.getSourceModifications() ) ) { reporter.warn( "Ignoring <sourceModifications/> section. It is not supported in v4 POMs." ); } if ( StringUtils.isNotEmpty( v3Build.getAspectSourceDirectory() ) ) { reporter.warn( "Ignoring <aspectSourceDirectory/>. It is not supported in v4 POMs." ); } if ( StringUtils.isNotEmpty( v3Build.getIntegrationUnitTestSourceDirectory() ) ) { reporter.warn( "Ignoring <integrationUnitTestSourceDirectory/>. It is not supported in v4 POMs." ); } } private List translateResources( List v3Resources ) { List resources = new ArrayList(); if ( notEmpty( v3Resources ) ) { for ( Iterator it = v3Resources.iterator(); it.hasNext(); ) { org.apache.maven.model.v3_0_0.Resource v3Resource = (org.apache.maven.model.v3_0_0.Resource) it.next(); Resource resource = new Resource(); resource.setDirectory( v3Resource.getDirectory() ); resource.setExcludes( pathPatternsToString( v3Resource.getExcludes() ) ); resource.setIncludes( pathPatternsToString( v3Resource.getIncludes() ) ); resource.setTargetPath( v3Resource.getTargetPath() ); resources.add( resource ); } } return resources; } private String pathPatternsToString( List patterns ) { StringBuffer result = new StringBuffer(); if ( notEmpty( patterns ) ) { for ( Iterator it = patterns.iterator(); it.hasNext(); ) { String pattern = (String) it.next(); result.append( "," ).append( pattern ); } result.setLength( result.length() - 1 ); } return result.toString(); } private boolean notEmpty( List test ) { return test != null && !test.isEmpty(); } private static class PomKey { private final String groupId; private final String artifactId; private final String version; PomKey( String groupId, String artifactId, String version ) { this.groupId = groupId; this.artifactId = artifactId; this.version = version; } public String groupId() { return groupId; } public String artifactId() { return artifactId; } public String version() { return version; } } } 1.2 +1 -1 maven-components/sandbox/repoclean/src/main/java/org/apache/maven/tools/repoclean/RepositoryCleaner.java Index: RepositoryCleaner.java =================================================================== RCS file: /home/cvs/maven-components/sandbox/repoclean/src/main/java/org/apache/maven/tools/repoclean/RepositoryCleaner.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- RepositoryCleaner.java 17 Mar 2005 22:56:41 -0000 1.1 +++ RepositoryCleaner.java 18 Mar 2005 17:06:26 -0000 1.2 @@ -20,8 +20,8 @@ import org.apache.maven.tools.repoclean.correlate.ArtifactMd5Correlator; import org.apache.maven.tools.repoclean.correlate.ArtifactPomCorrelator; import org.apache.maven.tools.repoclean.patch.V4ModelPatcher; -import org.apache.maven.tools.repoclean.pom.PomV3ToV4Translator; import org.apache.maven.tools.repoclean.report.Reporter; +import org.apache.maven.tools.repoclean.translate.PomV3ToV4Translator; import org.apache.maven.tools.repoclean.validate.V4ModelIndependenceValidator; import org.codehaus.plexus.logging.AbstractLogEnabled; import org.codehaus.plexus.logging.Logger;