Carlos,

Can you elaborate on the need for this?

I understand that since MavenProject is non-final and so are the get/ sets they can be overridden and so we should be using the get/set internally. However, it would seem we don't need that funcationality for every field - which particular ones do you see as needing to be overridden?

Also, I don't think the clone() stuff is right:
- you've deprecated the copy constructor even though it is still useful. You also require it's existence which means it shouldn't be deprecated. - clone()'s contract says that it doesn't call any constructors, making the method work but not as documented by the JDK
- clone() should call super.clone() to get a valid MavenProject instance
- MavenProject doesn't implement clonable
Why did you need clone()?

Thanks,
Brett

On 14/02/2008, at 5:40 PM, [EMAIL PROTECTED] wrote:

Author: carlos
Date: Wed Feb 13 22:40:35 2008
New Revision: 627675

URL: http://svn.apache.org/viewvc?rev=627675&view=rev
Log:
[MNG-3400] MavenProject is not extensible. Merge rev 627670 from trunk

Modified:
maven/components/branches/maven-2.0.x/maven-project/src/main/java/ org/apache/maven/project/MavenProject.java maven/components/branches/maven-2.0.x/maven-project/src/test/java/ org/apache/maven/project/MavenProjectTest.java

Modified: maven/components/branches/maven-2.0.x/maven-project/src/ main/java/org/apache/maven/project/MavenProject.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/MavenProject.java?rev=627675&r1=627674&r2=627675&view=diff
= = = = = = = = ====================================================================== --- maven/components/branches/maven-2.0.x/maven-project/src/main/ java/org/apache/maven/project/MavenProject.java (original) +++ maven/components/branches/maven-2.0.x/maven-project/src/main/ java/org/apache/maven/project/MavenProject.java Wed Feb 13 22:40:35 2008
@@ -158,103 +158,107 @@
        model.setArtifactId( EMPTY_PROJECT_ARTIFACT_ID );
        model.setVersion( EMPTY_PROJECT_VERSION );

-        this.model = model;
+        this.setModel( model );
    }

    public MavenProject( Model model )
    {
-        this.model = model;
+        this.setModel( model );
    }

+    /**
+     * @deprecated use [EMAIL PROTECTED] #clone()}
+     */
    public MavenProject( MavenProject project )
    {
        // disown the parent

        // copy fields
-        this.file = project.file;
+        setFile( project.getFile() );

- // don't need a deep copy, they don't get modified or added/ removed to/from - but make them unmodifiable to be sure!
-        if ( project.dependencyArtifacts != null )
+ // don't need a deep copy, they don't get modified or added/ removed to/from - but make them unmodifiable to be
+        // sure!
+        if ( project.getDependencyArtifacts() != null )
        {
- this.dependencyArtifacts = Collections.unmodifiableSet( project.dependencyArtifacts ); + setDependencyArtifacts ( Collections.unmodifiableSet( project.getDependencyArtifacts() ) );
        }
-
-        if ( project.artifacts != null )
+
+        if ( project.getArtifacts() != null )
        {
- this.artifacts = Collections.unmodifiableSet( project.artifacts ); + setArtifacts( Collections.unmodifiableSet( project.getArtifacts() ) );
        }
-
-        if ( project.pluginArtifacts != null )
+
+        if ( project.getPluginArtifacts() != null )
        {
- this.pluginArtifacts = Collections.unmodifiableSet( project.pluginArtifacts ); + setPluginArtifacts ( Collections.unmodifiableSet( project.getPluginArtifacts() ) );
        }
-
-        if ( project.reportArtifacts != null )
+
+        if ( project.getReportArtifacts() != null )
        {
- this.reportArtifacts = Collections.unmodifiableSet( project.reportArtifacts );
-        }
-
-        if ( project.extensionArtifacts != null )
+ setReportArtifacts ( Collections.unmodifiableSet( project.getReportArtifacts() ) );
+        }
+
+        if ( project.getExtensionArtifacts() != null )
        {
- this.extensionArtifacts = Collections.unmodifiableSet( project.extensionArtifacts );
-        }
-
-        this.parentArtifact = project.parentArtifact;
+ setExtensionArtifacts ( Collections.unmodifiableSet( project.getExtensionArtifacts() ) );
+        }
+
+        setParentArtifact( ( project.getParentArtifact() ) );

-        if ( project.remoteArtifactRepositories != null )
+        if ( project.getRemoteArtifactRepositories() != null )
        {
- this.remoteArtifactRepositories = Collections.unmodifiableList( project.remoteArtifactRepositories );
-        }
-
-        if ( project.pluginArtifactRepositories != null )
+ setRemoteArtifactRepositories ( Collections .unmodifiableList( project.getRemoteArtifactRepositories() ) );
+        }
+
+        if ( project.getPluginArtifactRepositories() != null )
        {
- this.pluginArtifactRepositories = Collections.unmodifiableList( project.pluginArtifactRepositories );
-        }
-
-        if ( project.collectedProjects != null )
+ setPluginArtifactRepositories ( ( Collections .unmodifiableList( project.getPluginArtifactRepositories() ) ) );
+        }
+
+        if ( project.getCollectedProjects() != null )
        {
- this.collectedProjects = Collections.unmodifiableList( project.collectedProjects );
-        }
-
-        if ( project.activeProfiles != null )
+ setCollectedProjects ( ( Collections .unmodifiableList( project.getCollectedProjects() ) ) );
+        }
+
+        if ( project.getActiveProfiles() != null )
        {
- this.activeProfiles = Collections.unmodifiableList( project.activeProfiles );
-        }
-
+ setActiveProfiles ( ( Collections.unmodifiableList( project.getActiveProfiles() ) ) );
+        }
+
        if ( project.getAttachedArtifacts() != null )
        {
// clone properties modifyable by plugins in a forked lifecycle - this.attachedArtifacts = new ArrayList( project.getAttachedArtifacts() );
-        }
-
-        if ( project.compileSourceRoots != null )
+ setAttachedArtifacts( new ArrayList( project.getAttachedArtifacts() ) );
+        }
+
+        if ( project.getCompileSourceRoots() != null )
        {
            // clone source roots
- this.compileSourceRoots = new ArrayList( project.compileSourceRoots );
-        }
-
-        if ( project.testCompileSourceRoots != null )
+ setCompileSourceRoots( ( new ArrayList( project.getCompileSourceRoots() ) ) );
+        }
+
+        if ( project.getTestCompileSourceRoots() != null )
        {
- this.testCompileSourceRoots = new ArrayList( project.testCompileSourceRoots );
-        }
-
-        if ( project.scriptSourceRoots != null )
+ setTestCompileSourceRoots( ( new ArrayList( project.getTestCompileSourceRoots() ) ) );
+        }
+
+        if ( project.getScriptSourceRoots() != null )
        {
- this.scriptSourceRoots = new ArrayList( project.scriptSourceRoots );
-        }
-
-        this.model = ModelUtils.cloneModel( project.model );
+ setScriptSourceRoots( ( new ArrayList( project.getScriptSourceRoots() ) ) );
+        }

-        if ( project.originalModel != null )
+        setModel( ( ModelUtils.cloneModel( project.getModel() ) ) );
+
+        if ( project.getOriginalModel() != null )
        {
- this.originalModel = ModelUtils.cloneModel( project.originalModel ); + setOriginalModel ( ( ModelUtils.cloneModel( project.getOriginalModel() ) ) );
        }

-        this.executionRoot = project.executionRoot;
+        setExecutionRoot( project.isExecutionRoot() );

-        if ( project.artifact != null )
+        if ( project.getArtifact() != null )
        {
- this.artifact = ArtifactUtils.copyArtifact( project.artifact ); + setArtifact( ArtifactUtils.copyArtifact( project.getArtifact() ) );
        }

        if ( project.getManagedVersionMap() != null )
@@ -262,14 +266,14 @@
setManagedVersionMap( new ManagedVersionMap( project.getManagedVersionMap() ) );
        }

-        if ( project.releaseArtifactRepository != null )
+        if ( project.getReleaseArtifactRepository() != null )
        {
- releaseArtifactRepository = project.releaseArtifactRepository; + setReleaseArtifactRepository ( project.getReleaseArtifactRepository() );
        }

-        if ( project.snapshotArtifactRepository != null )
+        if ( project.getSnapshotArtifactRepository() != null )
        {
- snapshotArtifactRepository = project.snapshotArtifactRepository; + setSnapshotArtifactRepository ( project.getSnapshotArtifactRepository() );
        }
    }

@@ -403,17 +407,17 @@

    public void setDependencies( List dependencies )
    {
-        model.setDependencies( dependencies );
+        getModel().setDependencies( dependencies );
    }

    public List getDependencies()
    {
-        return model.getDependencies();
+        return getModel().getDependencies();
    }

    public DependencyManagement getDependencyManagement()
    {
-        return model.getDependencyManagement();
+        return getModel().getDependencyManagement();
    }

// ----------------------------------------------------------------------
@@ -427,9 +431,9 @@
            path = path.trim();
            if ( path.length() != 0 )
            {
-                if ( !compileSourceRoots.contains( path ) )
+                if ( !getCompileSourceRoots().contains( path ) )
                {
-                    compileSourceRoots.add( path );
+                    getCompileSourceRoots().add( path );
                }
            }
        }
@@ -442,9 +446,9 @@
            path = path.trim();
            if ( path.length() != 0 )
            {
-                if ( !scriptSourceRoots.contains( path ) )
+                if ( !getScriptSourceRoots().contains( path ) )
                {
-                    scriptSourceRoots.add( path );
+                    getScriptSourceRoots().add( path );
                }
            }
        }
@@ -457,9 +461,9 @@
            path = path.trim();
            if ( path.length() != 0 )
            {
-                if ( !testCompileSourceRoots.contains( path ) )
+                if ( !getTestCompileSourceRoots().contains( path ) )
                {
-                    testCompileSourceRoots.add( path );
+                    getTestCompileSourceRoots().add( path );
                }
            }
        }
@@ -821,31 +825,31 @@

    public void setModelVersion( String pomVersion )
    {
-        model.setModelVersion( pomVersion );
+        getModel().setModelVersion( pomVersion );
    }

    public String getModelVersion()
    {
-        return model.getModelVersion();
+        return getModel().getModelVersion();
    }

    public String getId()
    {
-        return model.getId();
+        return getModel().getId();
    }

    public void setGroupId( String groupId )
    {
-        model.setGroupId( groupId );
+        getModel().setGroupId( groupId );
    }

    public String getGroupId()
    {
-        String groupId = model.getGroupId();
-
-        if ( groupId == null && model.getParent() != null )
+        String groupId = getModel().getGroupId();
+
+ if ( ( groupId == null ) && ( getModel().getParent() != null ) )
        {
-            groupId = model.getParent().getGroupId();
+            groupId = getModel().getParent().getGroupId();
        }

        return groupId;
@@ -853,25 +857,25 @@

    public void setArtifactId( String artifactId )
    {
-        model.setArtifactId( artifactId );
+        getModel().setArtifactId( artifactId );
    }

    public String getArtifactId()
    {
-        return model.getArtifactId();
+        return getModel().getArtifactId();
    }

    public void setName( String name )
    {
-        model.setName( name );
+        getModel().setName( name );
    }

    public String getName()
    {
        // TODO: this should not be allowed to be null.
-        if ( model.getName() != null )
+        if ( getModel().getName() != null )
        {
-            return model.getName();
+            return getModel().getName();
        }
        else
        {
@@ -881,16 +885,16 @@

    public void setVersion( String version )
    {
-        model.setVersion( version );
+        getModel().setVersion( version );
    }

    public String getVersion()
    {
-        String version = model.getVersion();
-
-        if ( version == null && model.getParent() != null )
+        String version = getModel().getVersion();
+
+ if ( ( version == null ) && ( getModel().getParent() != null ) )
        {
-            version = model.getParent().getVersion();
+            version = getModel().getParent().getVersion();
        }

        return version;
@@ -898,149 +902,149 @@

    public String getPackaging()
    {
-        return model.getPackaging();
+        return getModel().getPackaging();
    }

    public void setPackaging( String packaging )
    {
-        model.setPackaging( packaging );
+        getModel().setPackaging( packaging );
    }

    public void setInceptionYear( String inceptionYear )
    {
-        model.setInceptionYear( inceptionYear );
+        getModel().setInceptionYear( inceptionYear );
    }

    public String getInceptionYear()
    {
-        return model.getInceptionYear();
+        return getModel().getInceptionYear();
    }

    public void setUrl( String url )
    {
-        model.setUrl( url );
+        getModel().setUrl( url );
    }

    public String getUrl()
    {
-        return model.getUrl();
+        return getModel().getUrl();
    }

    public Prerequisites getPrerequisites()
    {
-        return model.getPrerequisites();
+        return getModel().getPrerequisites();
    }

    public void setIssueManagement( IssueManagement issueManagement )
    {
-        model.setIssueManagement( issueManagement );
+        getModel().setIssueManagement( issueManagement );
    }

    public CiManagement getCiManagement()
    {
-        return model.getCiManagement();
+        return getModel().getCiManagement();
    }

    public void setCiManagement( CiManagement ciManagement )
    {
-        model.setCiManagement( ciManagement );
+        getModel().setCiManagement( ciManagement );
    }

    public IssueManagement getIssueManagement()
    {
-        return model.getIssueManagement();
+        return getModel().getIssueManagement();
    }

public void setDistributionManagement( DistributionManagement distributionManagement )
    {
-        model.setDistributionManagement( distributionManagement );
+ getModel().setDistributionManagement( distributionManagement );
    }

    public DistributionManagement getDistributionManagement()
    {
-        return model.getDistributionManagement();
+        return getModel().getDistributionManagement();
    }

    public void setDescription( String description )
    {
-        model.setDescription( description );
+        getModel().setDescription( description );
    }

    public String getDescription()
    {
-        return model.getDescription();
+        return getModel().getDescription();
    }

    public void setOrganization( Organization organization )
    {
-        model.setOrganization( organization );
+        getModel().setOrganization( organization );
    }

    public Organization getOrganization()
    {
-        return model.getOrganization();
+        return getModel().getOrganization();
    }

    public void setScm( Scm scm )
    {
-        model.setScm( scm );
+        getModel().setScm( scm );
    }

    public Scm getScm()
    {
-        return model.getScm();
+        return getModel().getScm();
    }

    public void setMailingLists( List mailingLists )
    {
-        model.setMailingLists( mailingLists );
+        getModel().setMailingLists( mailingLists );
    }

    public List getMailingLists()
    {
-        return model.getMailingLists();
+        return getModel().getMailingLists();
    }

    public void addMailingList( MailingList mailingList )
    {
-        model.addMailingList( mailingList );
+        getModel().addMailingList( mailingList );
    }

    public void setDevelopers( List developers )
    {
-        model.setDevelopers( developers );
+        getModel().setDevelopers( developers );
    }

    public List getDevelopers()
    {
-        return model.getDevelopers();
+        return getModel().getDevelopers();
    }

    public void addDeveloper( Developer developer )
    {
-        model.addDeveloper( developer );
+        getModel().addDeveloper( developer );
    }

    public void setContributors( List contributors )
    {
-        model.setContributors( contributors );
+        getModel().setContributors( contributors );
    }

    public List getContributors()
    {
-        return model.getContributors();
+        return getModel().getContributors();
    }

    public void addContributor( Contributor contributor )
    {
-        model.addContributor( contributor );
+        getModel().addContributor( contributor );
    }

    public void setBuild( Build build )
    {
        this.buildOverlay = new BuildOverlay( build );

-        model.setBuild( build );
+        getModel().setBuild( build );
    }

    public Build getBuild()
@@ -1075,27 +1079,27 @@

    public void setReporting( Reporting reporting )
    {
-        model.setReporting( reporting );
+        getModel().setReporting( reporting );
    }

    public Reporting getReporting()
    {
-        return model.getReporting();
+        return getModel().getReporting();
    }

    public void setLicenses( List licenses )
    {
-        model.setLicenses( licenses );
+        getModel().setLicenses( licenses );
    }

    public List getLicenses()
    {
-        return model.getLicenses();
+        return getModel().getLicenses();
    }

    public void addLicense( License license )
    {
-        model.addLicense( license );
+        getModel().addLicense( license );
    }

    public void setArtifacts( Set artifacts )
@@ -1206,7 +1210,7 @@

    public List getRepositories()
    {
-        return model.getRepositories();
+        return getModel().getRepositories();
    }

// ----------------------------------------------------------------------
@@ -1215,33 +1219,33 @@

    public List getReportPlugins()
    {
-        if ( model.getReporting() == null )
+        if ( getModel().getReporting() == null )
        {
            return null;
        }
-        return model.getReporting().getPlugins();
+        return getModel().getReporting().getPlugins();

    }

    public List getBuildPlugins()
    {
-        if ( model.getBuild() == null )
+        if ( getModel().getBuild() == null )
        {
            return null;
        }
-        return model.getBuild().getPlugins();
+        return getModel().getBuild().getPlugins();
    }

    public List getModules()
    {
-        return model.getModules();
+        return getModel().getModules();
    }

    public PluginManagement getPluginManagement()
    {
        PluginManagement pluginMgmt = null;

-        Build build = model.getBuild();
+        Build build = getModel().getBuild();
        if ( build != null )
        {
            pluginMgmt = build.getPluginManagement();
@@ -1252,13 +1256,13 @@

    private Build getModelBuild()
    {
-        Build build = model.getBuild();
+        Build build = getModel().getBuild();

        if ( build == null )
        {
            build = new Build();

-            model.setBuild( build );
+            getModel().setBuild( build );
        }

        return build;
@@ -1322,13 +1326,13 @@

public ArtifactRepository getDistributionManagementArtifactRepository()
    {
- return getArtifact().isSnapshot() && snapshotArtifactRepository != null ? snapshotArtifactRepository
-            : releaseArtifactRepository;
+ return getArtifact().isSnapshot() && ( getSnapshotArtifactRepository() != null ) ? getSnapshotArtifactRepository()
+            : getReleaseArtifactRepository();
    }

    public List getPluginRepositories()
    {
-        return model.getPluginRepositories();
+        return getModel().getPluginRepositories();
    }

    public void setActiveProfiles( List activeProfiles )
@@ -1624,6 +1628,42 @@
return getBuild() != null ? getBuild().getDefaultGoal() : null;
    }

+
+    protected void setModel( Model model )
+    {
+        this.model = model;
+    }
+
+    protected void setAttachedArtifacts( List attachedArtifacts )
+    {
+        this.attachedArtifacts = attachedArtifacts;
+    }
+
+    protected void setCompileSourceRoots( List compileSourceRoots )
+    {
+        this.compileSourceRoots = compileSourceRoots;
+    }
+
+ protected void setTestCompileSourceRoots( List testCompileSourceRoots )
+    {
+        this.testCompileSourceRoots = testCompileSourceRoots;
+    }
+
+    protected void setScriptSourceRoots( List scriptSourceRoots )
+    {
+        this.scriptSourceRoots = scriptSourceRoots;
+    }
+
+    protected ArtifactRepository getReleaseArtifactRepository()
+    {
+        return releaseArtifactRepository;
+    }
+
+    protected ArtifactRepository getSnapshotArtifactRepository()
+    {
+        return snapshotArtifactRepository;
+    }
+
public Artifact replaceWithActiveArtifact( Artifact pluginArtifact )
    {
if ( getProjectReferences() != null && ! getProjectReferences().isEmpty() )
@@ -1743,6 +1783,14 @@
        }

        return sb.toString();
+    }
+
+    /**
+     * @since 2.0.9
+     */
+    public Object clone()
+    {
+        return new MavenProject( this );
    }

}

Modified: maven/components/branches/maven-2.0.x/maven-project/src/ test/java/org/apache/maven/project/MavenProjectTest.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/MavenProjectTest.java?rev=627675&r1=627674&r2=627675&view=diff
= = = = = = = = ====================================================================== --- maven/components/branches/maven-2.0.x/maven-project/src/test/ java/org/apache/maven/project/MavenProjectTest.java (original) +++ maven/components/branches/maven-2.0.x/maven-project/src/test/ java/org/apache/maven/project/MavenProjectTest.java Wed Feb 13 22:40:35 2008
@@ -21,15 +21,13 @@

import java.io.File;
import java.io.IOException;
-import java.util.Map;
-import java.util.Iterator;
import java.util.List;
+import java.util.Map;

+import org.apache.maven.artifact.versioning.ManagedVersionMap;
+import org.apache.maven.model.DependencyManagement;
import org.apache.maven.model.Model;
import org.apache.maven.model.Parent;
-import org.apache.maven.model.DependencyManagement;
-import org.apache.maven.model.Dependency;
-import org.apache.maven.artifact.versioning.ManagedVersionMap;

public class MavenProjectTest
    extends AbstractMavenProjectTestCase
@@ -90,20 +88,20 @@
+ MavenProject.EMPTY_PROJECT_VERSION, project.getId() );
    }

-    public void testCopyConstructor()
+    public void testClone()
        throws Exception
    {
        File f = getFileForClasspathResource( "canonical-pom.xml" );
        MavenProject projectToClone = getProject( f );

- MavenProject clonedProject = new MavenProject( projectToClone ); + MavenProject clonedProject = (MavenProject) projectToClone.clone();
        assertEquals( "maven-core", clonedProject.getArtifactId() );
        Map clonedMap = clonedProject.getManagedVersionMap();
        assertNotNull("ManagedVersionMap not copied", clonedMap);
assertTrue("ManagedVersionMap is not empty", clonedMap.isEmpty());
    }

-    public void testCopyConstructorWithDependencyManagement()
+    public void testCloneWithDependencyManagement()
        throws Exception
    {
File f = getFileForClasspathResource( "dependencyManagement- pom.xml" );
@@ -118,7 +116,7 @@
        assertNotNull("No ManagedVersionMap", map);
        assertTrue("ManagedVersionMap is empty", !map.isEmpty());

- MavenProject clonedProject = new MavenProject( projectToClone ); + MavenProject clonedProject = (MavenProject) projectToClone.clone();
        assertEquals( "maven-core", clonedProject.getArtifactId() );
        Map clonedMap = clonedProject.getManagedVersionMap();
        assertNotNull("ManagedVersionMap not copied", clonedMap);
@@ -146,13 +144,13 @@
        assertEquals( "..", pathAdjustment );
    }

- public void testCopyConstructorWithDistributionManagement() throws Exception + public void testCloneWithDistributionManagement() throws Exception
    {

File f = getFileForClasspathResource( "distributionManagement-pom.xml" );
        MavenProject projectToClone = getProject( f );

- MavenProject clonedProject = new MavenProject( projectToClone ); + MavenProject clonedProject = (MavenProject) projectToClone.clone(); assertNotNull( "clonedProject - distributionManagement", clonedProject.getDistributionManagementArtifactRepository() );
    }
}



--
Brett Porter
[EMAIL PROTECTED]
http://blogs.exist.com/bporter/


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to