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/25 22:44:38 UTC

svn commit: r778495 - in /maven/components/branches/MNG-2766: maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java maven-model-builder/src/main/java/org/apache/maven/model/DomainModel.java

Author: bentmann
Date: Mon May 25 20:44:38 2009
New Revision: 778495

URL: http://svn.apache.org/viewvc?rev=778495&view=rev
Log:
o Decoupled project builder from DomainModel, we will directly use the model to keep track of the bits

Modified:
    maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
    maven/components/branches/MNG-2766/maven-model-builder/src/main/java/org/apache/maven/model/DomainModel.java

Modified: maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=778495&r1=778494&r2=778495&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java (original)
+++ maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java Mon May 25 20:44:38 2009
@@ -17,7 +17,6 @@
 
 import java.io.File;
 import java.io.IOException;
-import java.io.Reader;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -34,14 +33,14 @@
 import org.apache.maven.lifecycle.LifecycleExecutionException;
 import org.apache.maven.lifecycle.LifecycleExecutor;
 import org.apache.maven.model.Build;
-import org.apache.maven.model.DomainModel;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.ModelEventListener;
+import org.apache.maven.model.Parent;
 import org.apache.maven.model.Profile;
 import org.apache.maven.model.Repository;
 import org.apache.maven.model.inheritance.InheritanceAssembler;
 import org.apache.maven.model.interpolator.Interpolator;
-import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
+import org.apache.maven.model.io.ModelReader;
 import org.apache.maven.model.lifecycle.LifecycleBindingsInjector;
 import org.apache.maven.model.management.ManagementInjector;
 import org.apache.maven.model.normalization.ModelNormalizer;
@@ -56,8 +55,6 @@
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.Logger;
-import org.codehaus.plexus.util.IOUtil;
-import org.codehaus.plexus.util.ReaderFactory;
 import org.codehaus.plexus.util.StringUtils;
 
 /**
@@ -71,6 +68,9 @@
     private Logger logger;
 
     @Requirement
+    private ModelReader modelReader;
+
+    @Requirement
     private ModelValidator validator;
 
     @Requirement
@@ -121,6 +121,12 @@
     public MavenProject build( File pomFile, ProjectBuilderConfiguration configuration )
         throws ProjectBuildingException
     {
+        return build( pomFile, pomFile.getParentFile(), configuration );
+    }
+
+    private MavenProject build( File pomFile, File projectDirectory, ProjectBuilderConfiguration configuration )
+        throws ProjectBuildingException
+    {
         String cacheKey = getCacheKey( pomFile, configuration );
 
         MavenProject project = projectCache.get( cacheKey );
@@ -130,17 +136,21 @@
             return project;
         }
         
-        DomainModel domainModel;
+        List<Model> models;
         
         try
         {
-            domainModel = build( "unknown", pomFile, configuration );
+            models = build( "unknown", pomFile, configuration );
         }
         catch ( IOException e )
         {
             throw new ProjectBuildingException( "", "", e );
         }
 
+        Model model = models.get(0);
+        
+        model.setProjectDirectory( projectDirectory );
+
         //Profiles
         //
         // Active profiles can be contributed to the MavenExecutionRequest as well as from the POM
@@ -150,7 +160,7 @@
         try
         {
             projectProfiles = new ArrayList<Profile>();
-            projectProfiles.addAll( domainModel.getModel().getProfiles() );
+            projectProfiles.addAll( model.getProfiles() );
             if ( configuration.getProfiles() != null )
             {
                 projectProfiles.addAll( configuration.getProfiles() );
@@ -159,29 +169,22 @@
         }
         catch ( ProfileActivationException e )
         {
-            throw new ProjectBuildingException( "", "Failed to activate pom profiles.", e );
+            throw new ProjectBuildingException( model.getId(), "Failed to activate pom profiles.", e );
         }
 
-        try
+        for ( Profile p : projectProfiles )
         {
-            for ( Profile p : projectProfiles )
+            if ( !"pom".equals( p.getSource() ) )
             {
-                if ( !"pom".equals( p.getSource() ) )
-                {
-                    logger.debug( "Merging profile into model (build): Model = " + domainModel.getId() + ", Profile = "
-                        + p.getId() );
-                    profileInjector.injectProfile( domainModel.getModel(), p );
-                }
+                logger.debug( "Merging profile into model (build): Model = " + model.getId() + ", Profile = "
+                    + p.getId() );
+                profileInjector.injectProfile( model, p );
             }
         }
-        catch ( IOException e )
-        {
-            throw new ProjectBuildingException( "", "", e );
-        }
         
         try
         {
-            Model model = interpolateDomainModel( domainModel, configuration, pomFile );
+            model = interpolateModel( model, configuration, pomFile );
 
             if ( configuration.isProcessPlugins() )
             {                
@@ -190,7 +193,11 @@
 
             managementInjector.injectManagement( model );
 
-            project = this.fromDomainModelToMavenProject( model, domainModel.getParentFile(), configuration, pomFile );
+            validateModel( model, pomFile, configuration.istLenientValidation() );
+
+            File parentFile = ( models.size() > 1 ) ? models.get( 1 ).getPomFile() : null;
+
+            project = fromModelToMavenProject( model, parentFile, configuration, pomFile );
 
             if ( configuration.isProcessPlugins() )
             {
@@ -254,7 +261,7 @@
             throw new ProjectBuildingException( artifact.getId(), "Error resolving project artifact.", e );
         }
 
-        return build( artifact.getFile(), configuration );
+        return build( artifact.getFile(), null, configuration );
     }
 
     // This is used by the SITE plugin.
@@ -344,30 +351,25 @@
         return new MavenProjectBuildingResult( project, result );
     }
 
-    private Model interpolateDomainModel( DomainModel domainModel, ProjectBuilderConfiguration config, File projectDescriptor )
+    private Model interpolateModel( Model model, ProjectBuilderConfiguration config, File projectDescriptor )
         throws ProjectBuildingException
     {
-        Model model = domainModel.getModel();
-
-        String projectId = safeVersionlessKey( model.getGroupId(), model.getArtifactId() );
-
         try
         {
-            model = interpolator.interpolateModel( model, config.getExecutionProperties(), domainModel.getProjectDirectory() );
+            model = interpolator.interpolateModel( model, config.getExecutionProperties(), model.getProjectDirectory() );
         }
         catch ( IOException e )
         {
+            String projectId = safeVersionlessKey( model.getGroupId(), model.getArtifactId() );
             throw new ProjectBuildingException( projectId, "", projectDescriptor, e );
         }
 
         return model;
     }
 
-    private MavenProject fromDomainModelToMavenProject( Model model, File parentFile, ProjectBuilderConfiguration config, File projectDescriptor )
+    private MavenProject fromModelToMavenProject( Model model, File parentFile, ProjectBuilderConfiguration config, File projectDescriptor )
         throws InvalidProjectModelException, IOException
     {
-        validateModel( model, projectDescriptor, config.istLenientValidation() );
-
         MavenProject project;
         String projectId = safeVersionlessKey( model.getGroupId(), model.getArtifactId() );
         try
@@ -388,16 +390,15 @@
         return project;
     }
 
-    private DomainModel build( String projectId, File pomFile, ProjectBuilderConfiguration projectBuilderConfiguration )
+    private List<Model> build( String projectId, File pomFile, ProjectBuilderConfiguration projectBuilderConfiguration )
         throws ProjectBuildingException, IOException
     {
-        DomainModel domainModel = new DomainModel( pomFile );
-        domainModel.setProjectDirectory( pomFile.getParentFile() );
-        domainModel.setMostSpecialized( true );
+        Model mainModel = modelReader.read( pomFile, null );
+        mainModel.setProjectDirectory( pomFile.getParentFile() );
 
-        List<DomainModel> domainModels = new ArrayList<DomainModel>();
+        List<Model> domainModels = new ArrayList<Model>();
 
-        domainModels.add( domainModel );
+        domainModels.add( mainModel );
 
         ArtifactRepository localRepository = projectBuilderConfiguration.getLocalRepository();
 
@@ -428,51 +429,39 @@
         }
         remoteRepositories.addAll( projectBuilderConfiguration.getRemoteRepositories() );
 
-        File parentFile = null;
-        int lineageCount = 0;
-        if ( domainModel.getParentId() != null )
+        if ( mainModel.getParent() != null )
         {
-            List<DomainModel> mavenParents;
+            List<Model> mavenParents;
             
-            if ( isParentLocal( domainModel.getRelativePathOfParent(), pomFile.getParentFile() ) )
+            if ( isParentLocal( mainModel.getParent().getRelativePath(), pomFile.getParentFile() ) )
             {
-                mavenParents = getDomainModelParentsFromLocalPath( domainModel, localRepository, remoteRepositories, pomFile.getParentFile(), projectBuilderConfiguration );
+                mavenParents = getDomainModelParentsFromLocalPath( mainModel, localRepository, remoteRepositories, pomFile.getParentFile(), projectBuilderConfiguration );
             }
             else
             {
-                mavenParents = getDomainModelParentsFromRepository( domainModel, localRepository, remoteRepositories );
-            }
-
-            if ( mavenParents.size() > 0 )
-            {
-                DomainModel dm = mavenParents.get( 0 );
-                parentFile = dm.getFile();
-                domainModel.setParentFile( parentFile );
-                lineageCount = mavenParents.size();
+                mavenParents = getDomainModelParentsFromRepository( mainModel, localRepository, remoteRepositories );
             }
 
             domainModels.addAll( mavenParents );
         }
 
-        for ( DomainModel domain : domainModels )
+        for ( Model model : domainModels )
         {
-            normalizer.mergeDuplicates( domain.getModel() );
+            normalizer.mergeDuplicates( model );
         }
 
-        domainModels.add( new DomainModel( getSuperModel(), false ) );
-        List<DomainModel> profileModels = new ArrayList<DomainModel>();
+        domainModels.add( getSuperModel() );
+        List<Model> profileModels = new ArrayList<Model>();
         //Process Profiles
-        for ( DomainModel domain : domainModels )
+        for ( Model model : domainModels )
         {
-            DomainModel dm = domain;
-
-            if ( !dm.getModel().getProfiles().isEmpty() )
+            if ( !model.getProfiles().isEmpty() )
             {
                 Collection<Profile> profiles;
                 try
                 {
                     profiles =
-                        profileSelector.getActiveProfiles( dm.getModel().getProfiles(), projectBuilderConfiguration );
+                        profileSelector.getActiveProfiles( model.getProfiles(), projectBuilderConfiguration );
                 }
                 catch ( ProfileActivationException e )
                 {
@@ -482,98 +471,27 @@
                 {
                     for ( Profile p : profiles )
                     {
-                        logger.debug( "Merging profile into model: Model = " + dm.getId() + ", Profile = " + p.getId() );
-                        profileInjector.injectProfile( dm.getModel(), p );
+                        logger.debug( "Merging profile into model: Model = " + model.getId() + ", Profile = " + p.getId() );
+                        profileInjector.injectProfile( model, p );
                     }
                 }
             }
-            profileModels.add( dm );
+            profileModels.add( model );
         }
 
-        DomainModel transformedDomainModel = build( profileModels, listeners );
-
-        // Lineage count is inclusive to add the POM read in itself.
-        transformedDomainModel.setLineageCount( lineageCount + 1 );
-        transformedDomainModel.setParentFile( parentFile );
+        processModelsForInheritance( profileModels );
 
-        return transformedDomainModel;
-    }
-
-    /**
-     * Parent domain models on bottom.
-     * 
-     * @param domainModels
-     * @param listeners
-     * @return
-     * @throws IOException
-     */
-    private DomainModel build( List<DomainModel> domainModels, List<ModelEventListener> listeners )
-        throws IOException
-    {
-        DomainModel child = null;
-        for ( DomainModel domainModel : domainModels )
-        {
-            if ( domainModel.isMostSpecialized() )
-            {
-                child = domainModel;
-            }
-        }
-        if ( child == null )
-        {
-            throw new IOException( "Could not find child model" );
-        }
-
-        Model target = processModelsForInheritance( convertDomainModelsToMavenModels( domainModels ) );
-        if ( listeners != null )
-        {
-            for ( ModelEventListener listener : listeners )
-            {
-                listener.fire( target );
-            }
-        }
-        DomainModel domainModel = new DomainModel( target, child.isMostSpecialized() );
-        domainModel.setProjectDirectory( child.getProjectDirectory() );
-        domainModel.setParentFile( child.getParentFile() );
-
-        return domainModel;
-    }
-
-    private List<Model> convertDomainModelsToMavenModels( List<DomainModel> domainModels )
-        throws IOException
-    {
-        List<Model> models = new ArrayList<Model>();
-        for ( DomainModel domainModel : domainModels )
-        {
-            DomainModel dm = domainModel;
-            if ( dm.getModel() != null )
-            {
-                if ( dm.isMostSpecialized() )
-                {
-                    models.add( 0, dm.getModel() );
-                }
-                else
-                {
-                    models.add( dm.getModel() );
-                }
-
-            }
-            else
-            {
-                throw new IOException( "model: null" );
-            }
-
-        }
-
-        return models;
+        return profileModels;
     }
 
     private Model processModelsForInheritance( List<Model> models )
     {
-        Collections.reverse( models );
+        List<Model> parentsFirst = new ArrayList<Model>( models );
+        Collections.reverse( parentsFirst );
 
         Model previousModel = null;
 
-        for ( Model currentModel : models )
+        for ( Model currentModel : parentsFirst )
         {
             inheritanceAssembler.assembleModelInheritance( currentModel, previousModel );
             previousModel = currentModel;
@@ -630,36 +548,32 @@
      */
     private static boolean isParentLocal( String relativePath, File projectDirectory )
     {
-        try
-        {
-            File f = new File( projectDirectory, relativePath ).getCanonicalFile();
-
-            if ( f.isDirectory() )
-            {
-                f = new File( f, "pom.xml" );
-            }
+        File f = new File( projectDirectory, relativePath ).getAbsoluteFile();
 
-            return f.isFile();
-        }
-        catch ( IOException e )
+        if ( f.isDirectory() )
         {
-            return false;
+            f = new File( f, "pom.xml" );
         }
+
+        return f.isFile();
     }
 
-    private List<DomainModel> getDomainModelParentsFromRepository( DomainModel domainModel, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories )
+    private List<Model> getDomainModelParentsFromRepository( Model model, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories )
         throws IOException
     {
-        List<DomainModel> domainModels = new ArrayList<DomainModel>();
+        List<Model> models = new ArrayList<Model>();
 
-        String parentId = domainModel.getParentId();
+        Parent parent = model.getParent();
 
-        if ( parentId == null || localRepository == null )
+        if ( parent == null || localRepository == null )
         {
-            return domainModels;
+            return models;
         }
 
-        Artifact artifactParent = repositorySystem.createProjectArtifact( domainModel.getParentGroupId(), domainModel.getParentArtifactId(), domainModel.getParentVersion() );
+        // FIXME: Validate the parent coordinate and throw proper exceptions
+        
+        Artifact artifactParent =
+            repositorySystem.createProjectArtifact( parent.getGroupId(), parent.getArtifactId(), parent.getVersion() );
 
         ArtifactResolutionRequest request = new ArtifactResolutionRequest()
             .setArtifact( artifactParent )
@@ -684,21 +598,22 @@
         {
             throw (IOException) new IOException( "The parent POM " + artifactParent + " could not be retrieved from any repository" ).initCause( e );
         }
+        
+        Model parentModel = modelReader.read( artifactParent.getFile(), null );
 
-        DomainModel parentDomainModel = new DomainModel( artifactParent.getFile() );
-
-        if ( !parentDomainModel.matchesParentOf( domainModel ) )
+        if ( !isMatchingParent( parentModel, parent ) )
         {
             //shane: what does this mean exactly and why does it occur
-            logger.debug( "Parent pom ids do not match: Parent File = " + artifactParent.getFile().getAbsolutePath() + ": Child ID = " + domainModel.getId() );
+            logger.debug( "Parent pom ids do not match: Parent File = " + artifactParent.getFile().getAbsolutePath() + ": Child ID = " + model.getId() );
 
             // return domainModels;
+            // TODO: review the proper handling of this, can it happen at all and if should we really continue or error out?
         }
 
-        domainModels.add( parentDomainModel );
+        models.add( parentModel );
 
-        domainModels.addAll( getDomainModelParentsFromRepository( parentDomainModel, localRepository, remoteRepositories ) );
-        return domainModels;
+        models.addAll( getDomainModelParentsFromRepository( parentModel, localRepository, remoteRepositories ) );
+        return models;
     }
 
     /**
@@ -710,71 +625,103 @@
      * @return
      * @throws IOException
      */
-    private List<DomainModel> getDomainModelParentsFromLocalPath( DomainModel domainModel, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories, File projectDirectory,
+    private List<Model> getDomainModelParentsFromLocalPath( Model model, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories, File projectDirectory,
                                                                   ProjectBuilderConfiguration projectBuilderConfiguration )
         throws IOException
     {
-        List<DomainModel> domainModels = new ArrayList<DomainModel>();
+        List<Model> models = new ArrayList<Model>();
 
-        String parentId = domainModel.getParentId();
+        Parent parent = model.getParent();
 
-        if ( parentId == null )
+        if ( parent == null )
         {
-            return domainModels;
+            return models;
         }
 
-        File parentFile = new File( projectDirectory, domainModel.getRelativePathOfParent() ).getCanonicalFile();
+        File parentFile = new File( projectDirectory, parent.getRelativePath() ).getCanonicalFile();
         if ( parentFile.isDirectory() )
         {
             parentFile = new File( parentFile.getAbsolutePath(), "pom.xml" );
         }
         
-        DomainModel parentDomainModel = null;
         if ( !parentFile.isFile() )
         {
             throw new IOException( "File does not exist: File = " + parentFile.getAbsolutePath() );
         }
-        parentDomainModel = new DomainModel( parentFile );
-        parentDomainModel.setProjectDirectory( parentFile.getParentFile() );
+        
+        Model parentModel = modelReader.read( parentFile, null );
+        parentModel.setProjectDirectory( parentFile.getParentFile() );
 
-        if ( !parentDomainModel.matchesParentOf( domainModel ) )
+        if ( !isMatchingParent( parentModel, parent ) )
         {
-            logger.info( "Parent pom ids do not match: Parent File = " + parentFile.getAbsolutePath() + ", Parent ID = " + parentDomainModel.getId() + ", Child ID = " + domainModel.getId()
-                + ", Expected Parent ID = " + domainModel.getParentId() );
+            logger.info( "Parent pom ids do not match: Parent File = " + parentFile.getAbsolutePath() + ", Parent ID = " + parentModel.getId() + ", Child ID = " + model.getId()
+                + ", Expected Parent ID = " + parent.getId() );
 
-            List<DomainModel> parentDomainModels = getDomainModelParentsFromRepository( domainModel, localRepository, remoteRepositories );
+            List<Model> parentModels = getDomainModelParentsFromRepository( model, localRepository, remoteRepositories );
 
-            if ( parentDomainModels.size() == 0 )
+            if ( parentModels.isEmpty() )
             {
-                throw new IOException( "Unable to find parent pom on local path or repo: " + domainModel.getParentId() );
+                throw new IOException( "Unable to find parent pom on local path or repo: " + parent.getId() );
             }
 
-            domainModels.addAll( parentDomainModels );
-            return domainModels;
+            models.addAll( parentModels );
+            return models;
         }
 
-        domainModels.add( parentDomainModel );
-        if ( domainModel.getParentId() != null )
-        {            
-            if ( isParentLocal( parentDomainModel.getRelativePathOfParent(), parentFile.getParentFile() ) )
+        models.add( parentModel );
+
+        if ( parentModel.getParent() != null )
+        {
+            if ( isParentLocal( parentModel.getParent().getRelativePath(), parentFile.getParentFile() ) )
             {
-                domainModels.addAll( getDomainModelParentsFromLocalPath( parentDomainModel, localRepository, remoteRepositories, parentFile.getParentFile(), projectBuilderConfiguration ) );
+                models.addAll( getDomainModelParentsFromLocalPath( parentModel, localRepository, remoteRepositories,
+                                                                   parentFile.getParentFile(),
+                                                                   projectBuilderConfiguration ) );
             }
             else
             {
-                domainModels.addAll( getDomainModelParentsFromRepository( parentDomainModel, localRepository, remoteRepositories ) );
+                models.addAll( getDomainModelParentsFromRepository( parentModel, localRepository, remoteRepositories ) );
             }
         }
 
-        return domainModels;
+        return models;
+    }
+
+    private boolean isMatchingParent( Model parentModel, Parent parent )
+    {
+        if ( parentModel.getGroupId() != null )
+        {
+            if ( !parent.getGroupId().equals( parentModel.getGroupId() ) )
+            {
+                return false;
+            }
+        }
+        else if ( parentModel.getParent() == null || !parent.getGroupId().equals( parentModel.getParent().getGroupId() ) )
+        {
+            return false;
+        }
+        if ( !parent.getArtifactId().equals( parentModel.getArtifactId() ) )
+        {
+            return false;
+        }
+        if ( parentModel.getVersion() != null )
+        {
+            if ( !parent.getVersion().equals( parentModel.getVersion() ) )
+            {
+                return false;
+            }
+        }
+        else if ( parentModel.getParent() == null || !parent.getVersion().equals( parentModel.getParent().getVersion() ) )
+        {
+            return false;
+        }
+        return true;
     }
 
     // Super Model Handling
 
     private static final String MAVEN_MODEL_VERSION = "4.0.0";
 
-    private MavenXpp3Reader modelReader = new MavenXpp3Reader();
-
     private Model superModel;
 
     protected Model getSuperModel()
@@ -784,23 +731,19 @@
             return superModel;
         }
 
-        Reader reader = null;
+        String superPomResource = "/org/apache/maven/project/pom-" + MAVEN_MODEL_VERSION + ".xml";
 
         try
         {
-            reader = ReaderFactory.newXmlReader( getClass().getClassLoader().getResource( "org/apache/maven/project/pom-" + MAVEN_MODEL_VERSION + ".xml" ) );
-
-            superModel = modelReader.read( reader, true );
+            superModel = modelReader.read( getClass().getResourceAsStream( superPomResource ), null );
         }
-        catch ( Exception e )
-        {
-            // Not going to happen we're reading the super pom embedded in the JAR
-        }
-        finally
+        catch ( IOException e )
         {
-            IOUtil.close( reader );
+            throw new IllegalStateException( "The super POM is damaged"
+                + ", please verify the integrity of your Maven installation", e );
         }
 
         return superModel;
     }
+
 }
\ No newline at end of file

Modified: maven/components/branches/MNG-2766/maven-model-builder/src/main/java/org/apache/maven/model/DomainModel.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-model-builder/src/main/java/org/apache/maven/model/DomainModel.java?rev=778495&r1=778494&r2=778495&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-model-builder/src/main/java/org/apache/maven/model/DomainModel.java (original)
+++ maven/components/branches/MNG-2766/maven-model-builder/src/main/java/org/apache/maven/model/DomainModel.java Mon May 25 20:44:38 2009
@@ -15,6 +15,7 @@
 import org.codehaus.plexus.util.WriterFactory;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
+// TODO: Delete this class
 public class DomainModel
 {
 
@@ -91,6 +92,7 @@
     {
     	this( new FileInputStream( file ) );
         this.file = file;
+        this.model.setPomFile( file );
     }
     
     public DomainModel( InputStream is )