You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by be...@apache.org on 2009/05/08 15:31:32 UTC
svn commit: r772980 - in /maven/components/branches/MNG-2766:
maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java
maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java
Author: bentmann
Date: Fri May 8 13:31:32 2009
New Revision: 772980
URL: http://svn.apache.org/viewvc?rev=772980&view=rev
Log:
o Continued work on model merging
Modified:
maven/components/branches/MNG-2766/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java
maven/components/branches/MNG-2766/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java
Modified: maven/components/branches/MNG-2766/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java?rev=772980&r1=772979&r2=772980&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java (original)
+++ maven/components/branches/MNG-2766/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java Fri May 8 13:31:32 2009
@@ -30,12 +30,21 @@
import java.util.StringTokenizer;
import org.apache.maven.model.BuildBase;
+import org.apache.maven.model.CiManagement;
import org.apache.maven.model.Dependency;
+import org.apache.maven.model.DeploymentRepository;
+import org.apache.maven.model.DistributionManagement;
+import org.apache.maven.model.Extension;
+import org.apache.maven.model.IssueManagement;
import org.apache.maven.model.Model;
import org.apache.maven.model.ModelBase;
+import org.apache.maven.model.Organization;
import org.apache.maven.model.Plugin;
import org.apache.maven.model.PluginContainer;
import org.apache.maven.model.PluginExecution;
+import org.apache.maven.model.ReportPlugin;
+import org.apache.maven.model.ReportSet;
+import org.apache.maven.model.Reporting;
import org.apache.maven.model.Repository;
import org.apache.maven.model.RepositoryBase;
import org.apache.maven.model.Scm;
@@ -86,6 +95,57 @@
}
}
+ /*
+ * TODO: Whether the merge continues recursively into an existing node or not could be an option for the generated merger
+ */
+ @Override
+ protected void mergeModel_Organization( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ Organization src = source.getOrganization();
+ if ( source.getOrganization() != null )
+ {
+ Organization tgt = target.getOrganization();
+ if ( tgt == null )
+ {
+ target.setOrganization( tgt = new Organization() );
+ mergeOrganization( tgt, src, sourceDominant, context );
+ }
+ }
+ }
+
+ @Override
+ protected void mergeModel_IssueManagement( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ IssueManagement src = source.getIssueManagement();
+ if ( source.getIssueManagement() != null )
+ {
+ IssueManagement tgt = target.getIssueManagement();
+ if ( tgt == null )
+ {
+ target.setIssueManagement( tgt = new IssueManagement() );
+ mergeIssueManagement( tgt, src, sourceDominant, context );
+ }
+ }
+ }
+
+ @Override
+ protected void mergeModel_CiManagement( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ CiManagement src = source.getCiManagement();
+ if ( source.getCiManagement() != null )
+ {
+ CiManagement tgt = target.getCiManagement();
+ if ( tgt == null )
+ {
+ target.setCiManagement( tgt = new CiManagement() );
+ mergeCiManagement( tgt, src, sourceDominant, context );
+ }
+ }
+ }
+
@Override
protected void mergeModelBase_Modules( ModelBase target, ModelBase source, boolean sourceDominant,
Map<Object, Object> context )
@@ -181,6 +241,56 @@
}
@Override
+ protected void mergeDistributionManagement_Repository( DistributionManagement target,
+ DistributionManagement source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ DeploymentRepository src = source.getRepository();
+ if ( src != null )
+ {
+ DeploymentRepository tgt = target.getRepository();
+ if ( tgt == null )
+ {
+ target.setRepository( tgt = new DeploymentRepository() );
+ mergeDeploymentRepository( tgt, src, sourceDominant, context );
+ }
+ }
+ }
+
+ @Override
+ protected void mergeDistributionManagement_SnapshotRepository( DistributionManagement target,
+ DistributionManagement source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ DeploymentRepository src = source.getSnapshotRepository();
+ if ( src != null )
+ {
+ DeploymentRepository tgt = target.getSnapshotRepository();
+ if ( tgt == null )
+ {
+ target.setSnapshotRepository( tgt = new DeploymentRepository() );
+ mergeDeploymentRepository( tgt, src, sourceDominant, context );
+ }
+ }
+ }
+
+ @Override
+ protected void mergeDistributionManagement_Site( DistributionManagement target, DistributionManagement source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ Site src = source.getSite();
+ if ( src != null )
+ {
+ Site tgt = target.getSite();
+ if ( tgt == null )
+ {
+ target.setSite( tgt = new Site() );
+ mergeSite( tgt, src, sourceDominant, context );
+ }
+ }
+ }
+
+ @Override
protected void mergeSite_Url( Site target, Site source, boolean sourceDominant, Map<Object, Object> context )
{
String src = source.getUrl();
@@ -290,6 +400,43 @@
}
@Override
+ protected void mergeReporting_Plugins( Reporting target, Reporting source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<ReportPlugin> src = source.getPlugins();
+ if ( !src.isEmpty() )
+ {
+ List<ReportPlugin> tgt = target.getPlugins();
+ Map<Object, ReportPlugin> merged =
+ new LinkedHashMap<Object, ReportPlugin>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( Iterator<ReportPlugin> it = tgt.iterator(); it.hasNext(); )
+ {
+ ReportPlugin element = it.next();
+ Object key = getReportPluginKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Iterator<ReportPlugin> it = src.iterator(); it.hasNext(); )
+ {
+ ReportPlugin element = it.next();
+ Object key = getReportPluginKey( element );
+ ReportPlugin existing = merged.get( key );
+ if ( existing != null )
+ {
+ mergeReportPlugin( existing, element, sourceDominant, context );
+ }
+ else
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setPlugins( new ArrayList<ReportPlugin>( merged.values() ) );
+ }
+ }
+
+ @Override
protected Object getDependencyKey( Dependency dependency )
{
return dependency.getManagementKey();
@@ -308,11 +455,29 @@
}
@Override
+ protected Object getReportPluginKey( ReportPlugin object )
+ {
+ return object.getKey();
+ }
+
+ @Override
+ protected Object getReportSetKey( ReportSet object )
+ {
+ return object.getId();
+ }
+
+ @Override
protected Object getRepositoryBaseKey( RepositoryBase object )
{
return object.getId();
}
+ @Override
+ protected Object getExtensionKey( Extension object )
+ {
+ return object.getGroupId() + ':' + object.getArtifactId();
+ }
+
private String appendPath( String parentPath, String childPath, String pathAdjustment )
{
String uncleanPath = parentPath;
Modified: maven/components/branches/MNG-2766/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java?rev=772980&r1=772979&r2=772980&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java (original)
+++ maven/components/branches/MNG-2766/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java Fri May 8 13:31:32 2009
@@ -58,6 +58,7 @@
import org.apache.maven.model.Profile;
import org.apache.maven.model.Relocation;
import org.apache.maven.model.ReportPlugin;
+import org.apache.maven.model.ReportSet;
import org.apache.maven.model.Reporting;
import org.apache.maven.model.Repository;
import org.apache.maven.model.RepositoryBase;
@@ -1097,6 +1098,118 @@
}
}
+ protected void mergeReportPlugin( ReportPlugin target, ReportPlugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeReportPlugin_Inherited( target, source, sourceDominant, context );
+ mergeReportPlugin_Configuration( target, source, sourceDominant, context );
+ mergeReportPlugin_GroupId( target, source, sourceDominant, context );
+ mergeReportPlugin_ArtifactId( target, source, sourceDominant, context );
+ mergeReportPlugin_Version( target, source, sourceDominant, context );
+ mergeReportPlugin_ReportSets( target, source, sourceDominant, context );
+ }
+
+ protected void mergeReportPlugin_GroupId( ReportPlugin target, ReportPlugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getGroupId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getGroupId() == null )
+ {
+ target.setGroupId( src );
+ }
+ }
+ }
+
+ protected void mergeReportPlugin_ArtifactId( ReportPlugin target, ReportPlugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getArtifactId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getArtifactId() == null )
+ {
+ target.setArtifactId( src );
+ }
+ }
+ }
+
+ protected void mergeReportPlugin_Version( ReportPlugin target, ReportPlugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getVersion();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getVersion() == null )
+ {
+ target.setVersion( src );
+ }
+ }
+ }
+
+ protected void mergeReportPlugin_Inherited( ReportPlugin target, ReportPlugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getInherited();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getInherited() == null )
+ {
+ target.setInherited( src );
+ }
+ }
+ }
+
+ protected void mergeReportPlugin_Configuration( ReportPlugin target, ReportPlugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ Xpp3Dom src = (Xpp3Dom) source.getConfiguration();
+ if ( src != null )
+ {
+ Xpp3Dom tgt = (Xpp3Dom) target.getConfiguration();
+ if ( sourceDominant || tgt == null )
+ {
+ tgt = Xpp3Dom.mergeXpp3Dom( new Xpp3Dom( src ), tgt );
+ }
+ else
+ {
+ tgt = Xpp3Dom.mergeXpp3Dom( tgt, src );
+ }
+ target.setConfiguration( tgt );
+ }
+ }
+
+ protected void mergeReportPlugin_ReportSets( ReportPlugin target, ReportPlugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<ReportSet> src = source.getReportSets();
+ if ( !src.isEmpty() )
+ {
+ List<ReportSet> tgt = target.getReportSets();
+ Map<Object, ReportSet> merged = new LinkedHashMap<Object, ReportSet>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( Iterator<ReportSet> it = tgt.iterator(); it.hasNext(); )
+ {
+ ReportSet element = it.next();
+ Object key = getReportSetKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Iterator<ReportSet> it = src.iterator(); it.hasNext(); )
+ {
+ ReportSet element = it.next();
+ Object key = getReportSetKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setReportSets( new ArrayList<ReportSet>( merged.values() ) );
+ }
+ }
+
protected void mergeDependencyManagement( DependencyManagement target, DependencyManagement source,
boolean sourceDominant, Map<Object, Object> context )
{
@@ -2428,6 +2541,11 @@
return object;
}
+ protected Object getReportSetKey( ReportSet object )
+ {
+ return object;
+ }
+
protected Object getLicenseKey( License object )
{
return object;