Author: lcorneliussen
Date: Fri Apr 27 20:10:06 2012
New Revision: 1331567

URL: http://svn.apache.org/viewvc?rev=1331567&view=rev
Log:
[NPANDAY-556] Importer for Nuget Packages

o added support for redirecting references to other packages

Modified:
    
incubator/npanday/trunk/components/dotnet-model/dotnet-model-library-import/library-import.mdo
    
incubator/npanday/trunk/components/dotnet-model/dotnet-model-library-import/src/test/groovy/AssemblyPluginXpp3ReaderTest.groovy
    
incubator/npanday/trunk/components/dotnet-model/dotnet-model-library-import/src/test/resources/sample-nuget-imports.xml
    
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/generate/GeneratePackageArtifactsMojo.java
    
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/install/AbstractInstallMojo.java
    
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/model/NugetPackage.java
    
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/model/NugetPackageLibrary.java
    
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/skeletons/AbstractHandleEachLibraryMojo.java

Modified: 
incubator/npanday/trunk/components/dotnet-model/dotnet-model-library-import/library-import.mdo
URL: 
http://svn.apache.org/viewvc/incubator/npanday/trunk/components/dotnet-model/dotnet-model-library-import/library-import.mdo?rev=1331567&r1=1331566&r2=1331567&view=diff
==============================================================================
--- 
incubator/npanday/trunk/components/dotnet-model/dotnet-model-library-import/library-import.mdo
 (original)
+++ 
incubator/npanday/trunk/components/dotnet-model/dotnet-model-library-import/library-import.mdo
 Fri Apr 27 20:10:06 2012
@@ -135,8 +135,33 @@
         </field>
 
         <!-- TODO: add 'namePattern' for regex matching -->
+
+        <field xml.tagName="toPackage">
+          <name>mapToPackage</name>
+          <association>
+            <type>ReferenceToPackageMapping</type>
+            <multiplicity>1</multiplicity>
+          </association>
+        </field>
+
         <!-- TODO: allow for specify mapping to different artifact -->
       </fields>
     </class>
+
+    <class>
+      <name>ReferenceToPackageMapping</name>
+      <fields>
+        <field xml.attribute="true">
+          <name>id</name>
+          <type>String</type>
+        </field>
+
+        <field xml.attribute="true">
+          <name>version</name>
+          <type>String</type>
+        </field>
+
+      </fields>
+    </class>
   </classes>
 </model>
\ No newline at end of file

Modified: 
incubator/npanday/trunk/components/dotnet-model/dotnet-model-library-import/src/test/groovy/AssemblyPluginXpp3ReaderTest.groovy
URL: 
http://svn.apache.org/viewvc/incubator/npanday/trunk/components/dotnet-model/dotnet-model-library-import/src/test/groovy/AssemblyPluginXpp3ReaderTest.groovy?rev=1331567&r1=1331566&r2=1331567&view=diff
==============================================================================
--- 
incubator/npanday/trunk/components/dotnet-model/dotnet-model-library-import/src/test/groovy/AssemblyPluginXpp3ReaderTest.groovy
 (original)
+++ 
incubator/npanday/trunk/components/dotnet-model/dotnet-model-library-import/src/test/groovy/AssemblyPluginXpp3ReaderTest.groovy
 Fri Apr 27 20:10:06 2012
@@ -50,6 +50,11 @@ class AssemblyPluginXpp3ReaderTest
     assert model.nugetImports[0].referenceMappings[0].name == "AssemblyName"
     assert model.nugetImports[0].referenceMappings[0].ignore
 
+    assert model.nugetImports[0].referenceMappings[0].mapToPackage != null
+    assert model.nugetImports[0].referenceMappings[0].mapToPackage.id == 
"pname"
+    assert model.nugetImports[0].referenceMappings[0].mapToPackage.version == 
"1.0"
+
+
     assert model.nugetSources != null
     assert model.nugetSources.addNugetGallery
     assert model.nugetSources.customSources.size() == 1

Modified: 
incubator/npanday/trunk/components/dotnet-model/dotnet-model-library-import/src/test/resources/sample-nuget-imports.xml
URL: 
http://svn.apache.org/viewvc/incubator/npanday/trunk/components/dotnet-model/dotnet-model-library-import/src/test/resources/sample-nuget-imports.xml?rev=1331567&r1=1331566&r2=1331567&view=diff
==============================================================================
--- 
incubator/npanday/trunk/components/dotnet-model/dotnet-model-library-import/src/test/resources/sample-nuget-imports.xml
 (original)
+++ 
incubator/npanday/trunk/components/dotnet-model/dotnet-model-library-import/src/test/resources/sample-nuget-imports.xml
 Fri Apr 27 20:10:06 2012
@@ -33,7 +33,9 @@
 
     <mapReference
       name="AssemblyName"
-      ignore="true"/>
+      ignore="true">
+      <toPackage id="pname" version="1.0" />
+    </mapReference>
 
   </nuget>
 </libs>

Modified: 
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/generate/GeneratePackageArtifactsMojo.java
URL: 
http://svn.apache.org/viewvc/incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/generate/GeneratePackageArtifactsMojo.java?rev=1331567&r1=1331566&r2=1331567&view=diff
==============================================================================
--- 
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/generate/GeneratePackageArtifactsMojo.java
 (original)
+++ 
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/generate/GeneratePackageArtifactsMojo.java
 Fri Apr 27 20:10:06 2012
@@ -74,7 +74,7 @@ public class GeneratePackageArtifactsMoj
 
         for ( NugetPackage nuget : nugetImports )
         {
-            for ( NugetPackageLibrary lib : 
nuget.getLibraries(mavenProjectsCacheDirectory) )
+            for ( NugetPackageLibrary lib : nuget.getLibraries(getLog(), 
mavenProjectsCacheDirectory) )
             {
                 imports.add( lib );
             }

Modified: 
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/install/AbstractInstallMojo.java
URL: 
http://svn.apache.org/viewvc/incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/install/AbstractInstallMojo.java?rev=1331567&r1=1331566&r2=1331567&view=diff
==============================================================================
--- 
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/install/AbstractInstallMojo.java
 (original)
+++ 
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/install/AbstractInstallMojo.java
 Fri Apr 27 20:10:06 2012
@@ -229,7 +229,7 @@ public abstract class AbstractInstallMoj
         {
             String localRepoUrl = new File( localRepository 
).toURI().toString();
 
-            getLog().info( "NPANDAY-146-002: Using alternate local repository 
" + localRepository );
+            getLog().debug( "NPANDAY-146-002: Using alternate local repository 
" + localRepository );
 
             localArtifactRepository = 
artifactRepositoryFactory.createArtifactRepository(
                 "library-importer-local", localRepoUrl, layout, null, null

Modified: 
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/model/NugetPackage.java
URL: 
http://svn.apache.org/viewvc/incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/model/NugetPackage.java?rev=1331567&r1=1331566&r2=1331567&view=diff
==============================================================================
--- 
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/model/NugetPackage.java
 (original)
+++ 
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/model/NugetPackage.java
 Fri Apr 27 20:10:06 2012
@@ -30,12 +30,14 @@ import npanday.model.library.imports.Nug
 import npanday.model.library.imports.NugetSources;
 import npanday.model.library.imports.ReferenceMapping;
 import npanday.nuget.NugetSemanticVersion;
+import npanday.nuget.NugetVersionSpec;
 import npanday.plugin.libraryimporter.AssemblyInfo;
 import npanday.plugin.libraryimporter.LibImporterPathUtils;
 import npanday.plugin.libraryimporter.NuspecDependency;
 import npanday.plugin.libraryimporter.NuspecMetadata;
 import npanday.plugin.libraryimporter.NuspecParser;
 import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.logging.Log;
 
 import java.io.File;
 import java.util.Collection;
@@ -51,6 +53,8 @@ public class NugetPackage
 
     private List<NugetPackage> dependencies;
 
+    private Collection<NugetPackage> knownPackages;
+
     public static List<NugetPackage> Convert(
         Iterable<NugetImport> imports, NugetSources nugetSources, File 
packageRootDirectory )
     {
@@ -109,16 +113,35 @@ public class NugetPackage
         return new File( packageRootDirectory, getName() + "." + getVersion() 
);
     }
 
-    public Iterable<NugetPackageLibrary> getLibraries(File 
mavenProjectsCacheDirectory) throws MojoExecutionException
+    public Iterable<NugetPackageLibrary> getLibraries( Log log, File 
mavenProjectsCacheDirectory ) throws
+        MojoExecutionException
     {
         List<File> libDirectories = getLibraryDirectories();
 
         List<NugetPackageLibrary> libImports = Lists.newArrayList();
         for ( File libDir : libDirectories )
         {
-            for ( File lib : LibImporterPathUtils.getLibraries( libDir ) )
+            for ( File libFile : LibImporterPathUtils.getLibraries( libDir ) )
             {
-                libImports.add( new NugetPackageLibrary( this, lib, 
mavenProjectsCacheDirectory ) );
+                NugetPackageLibrary lib = new NugetPackageLibrary( this, 
libFile, mavenProjectsCacheDirectory );
+
+                ReferenceMapping referenceMapping = 
tryFindReferenceMappingFor( lib.getAssemblyInfo() );
+                if ( referenceMapping != null && 
referenceMapping.getMapToPackage() != null )
+                {
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug(
+                            "NPANDAY-142-004: Will skip inclusion for " + lib
+                                + " since references to it are mapped to a 
different package ("
+                                + referenceMapping.getMapToPackage().getId() + 
", v"
+                                + 
referenceMapping.getMapToPackage().getVersion() + ")."
+                        );
+                    }
+
+                    continue;
+                }
+
+                libImports.add( lib );
             }
         }
         return libImports;
@@ -200,43 +223,52 @@ public class NugetPackage
     {
         Preconditions.checkArgument( dependencies == null, "Dependencies have 
already been resolved" );
 
+        knownPackages = packages;
         dependencies = Lists.newArrayList();
         for ( Object depO : getNuspec().getDependencies() )
         {
             // NOTE: stub-generator should IMHO generate List<NuspecDependency>
             NuspecDependency dep = (NuspecDependency) depO;
+            NugetPackage highest = resolveDependencyAmongAllKnown( dep );
 
-            NugetPackage highest = null;
-            for ( NugetPackage pkg : packages )
-            {
-                if ( !pkg.getName().equals( dep.getId() ) )
-                {
-                    continue;
-                }
+            dependencies.add( highest );
+        }
 
-                if ( dep.getVersion() != null && 
!dep.getVersion().isSatisfiedBy( pkg.getVersion() ) )
-                {
-                    continue;
-                }
+        return dependencies;
+    }
 
-                if ( highest == null || highest.getVersion().compareTo( 
pkg.getVersion() ) < 0 )
-                {
-                    highest = pkg;
-                }
+    public NugetPackage resolveDependencyAmongAllKnown( NuspecDependency dep ) 
throws MojoExecutionException
+    {
+        NugetVersionSpec depVersion = dep.getVersion();
+        String depId = dep.getId();
 
+        NugetPackage highest = null;
+        for ( NugetPackage pkg : getKnownPackages() )
+        {
+            if ( !pkg.getName().equals( depId ) )
+            {
+                continue;
             }
 
-            if ( highest == null )
+            if ( depVersion != null && !depVersion.isSatisfiedBy( 
pkg.getVersion() ) )
             {
-                throw new MojoExecutionException(
-                    "NPANDAY-142-004: Could not resolve dependency " + dep + " 
among the nuget imports."
-                );
+                continue;
+            }
+
+            if ( highest == null || highest.getVersion().compareTo( 
pkg.getVersion() ) < 0 )
+            {
+                highest = pkg;
             }
 
-            dependencies.add( highest );
         }
 
-        return dependencies;
+        if ( highest == null )
+        {
+            throw new MojoExecutionException(
+                "NPANDAY-142-004: Could not resolve dependency " + dep + " 
among the nuget imports."
+            );
+        }
+        return highest;
     }
 
     public Collection<NugetPackage> getDependencies()
@@ -279,7 +311,8 @@ public class NugetPackage
 
             sources.addAll( nugetSources.getCustomSources() );
 
-            if (nugetSources.isAddNugetGallery()){
+            if ( nugetSources.isAddNugetGallery() )
+            {
                 sources.add( "https://go.microsoft.com/fwlink/?LinkID=206669"; 
);
             }
 
@@ -288,4 +321,13 @@ public class NugetPackage
 
         return null;
     }
+
+    public Collection<NugetPackage> getKnownPackages()
+    {
+        Preconditions.checkNotNull(
+            dependencies, "Dependencies have not been resolved yet, there fore 
known packages are not available either"
+        );
+
+        return knownPackages;
+    }
 }

Modified: 
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/model/NugetPackageLibrary.java
URL: 
http://svn.apache.org/viewvc/incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/model/NugetPackageLibrary.java?rev=1331567&r1=1331566&r2=1331567&view=diff
==============================================================================
--- 
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/model/NugetPackageLibrary.java
 (original)
+++ 
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/model/NugetPackageLibrary.java
 Fri Apr 27 20:10:06 2012
@@ -23,9 +23,12 @@ import com.google.common.base.Preconditi
 import com.google.common.base.Strings;
 import com.google.common.collect.Lists;
 import npanday.model.library.imports.ReferenceMapping;
+import npanday.model.library.imports.ReferenceToPackageMapping;
+import npanday.nuget.NugetVersionSpec;
 import npanday.plugin.libraryimporter.AssemblyInfo;
 import npanday.plugin.libraryimporter.LibImporterPathUtils;
 import npanday.plugin.libraryimporter.ManifestInfoParser;
+import npanday.plugin.libraryimporter.NuspecDependency;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.model.Model;
@@ -56,6 +59,8 @@ public class NugetPackageLibrary
 
     private List<NugetPackageLibrary> dependencies;
 
+    private List<NugetPackageLibrary> known;
+
     public NugetPackageLibrary( NugetPackage nuget, File lib, File 
mavenProjectsCacheDirectory )
     {
         this.nuget = nuget;
@@ -124,6 +129,7 @@ public class NugetPackageLibrary
     {
         Iterable<AssemblyInfo> references = getAssemblyInfo().getReferences();
 
+        known = imports;
         dependencies = Lists.newArrayList();
 
         for ( final AssemblyInfo ref : references )
@@ -137,20 +143,31 @@ public class NugetPackageLibrary
             List<NugetPackageLibrary> matchingStrongNameAndPackage = 
Lists.newArrayList();
             List<NugetPackageLibrary> matchingName = Lists.newArrayList();
             List<NugetPackageLibrary> matchingNameAndPackage = 
Lists.newArrayList();
+            String exactPackageScope = "";
+
             for ( NugetPackageLibrary lib : imports )
             {
-                boolean inScope = nuget.isDependentOn( lib.getNugetPackage() ) 
|| nuget == lib.getNugetPackage();
-
-                if ( lib.getAssemblyInfo().getStrongName().equals( 
ref.getStrongName() ) )
+                if ( lib.name.equals( ref.getName() ) )
                 {
-                    matchingStrongName.add( lib );
-                    if ( inScope )
+                    NugetPackage targetPackage = tryGetToPackageMapping( 
lib.getAssemblyInfo() );
+                    if (targetPackage != null){
+                        exactPackageScope = targetPackage.toString() + "/";
+                    }
+
+                    boolean inScope =
+                        targetPackage != null
+                        ? lib.getNugetPackage() == targetPackage
+                        : nuget.isDependentOn( lib.getNugetPackage() ) || 
nuget == lib.getNugetPackage();
+
+                    if ( lib.getAssemblyInfo().getStrongName().equals( 
ref.getStrongName() ) )
                     {
-                        matchingStrongNameAndPackage.add( lib );
+                        matchingStrongName.add( lib );
+                        if ( inScope )
+                        {
+                            matchingStrongNameAndPackage.add( lib );
+                        }
                     }
-                }
-                if ( lib.name.equals( ref.getName() ) )
-                {
+
                     matchingName.add( lib );
                     if ( inScope )
                     {
@@ -164,25 +181,25 @@ public class NugetPackageLibrary
                 String help = "";
                 if ( matchingNameAndPackage.size() > 0 )
                 {
-                    help = ", but found matches by name and package: " + 
matchingName;
+                    help += System.getProperty("line.separator") + " - but 
found matches by name and package: " + matchingName;
                 }
                 if ( matchingStrongName.size() > 0 )
                 {
-                    help = ", but found exact matches in different package(s): 
" + matchingStrongName;
+                    help += System.getProperty("line.separator") + " - but 
found exact matches in different package(s): " + matchingStrongName;
                 }
                 if ( matchingName.size() > 0 )
                 {
-                    help = ", but found matches by name only: " + matchingName;
+                    help += System.getProperty("line.separator") + " - but 
found matches by name only: " + matchingName;
                 }
 
                 if ( !Strings.isNullOrEmpty( help ) )
                 {
-                    help += ". Please use the config to tweak reference 
resolving.";
+                    help += System.getProperty("line.separator") + "Please use 
the config to tweak reference resolving.";
                 }
 
                 throw new MojoExecutionException(
-                    "NPANDAY-145-002: Could not find exact match for reference 
from " + nuget.getName() + " / " + name
-                        + " to '" + ref.getStrongName() + "'" + help
+                    "NPANDAY-145-002: Could not find exact match for reference 
from " + nuget.getName() + "/" + name
+                        + " to " + exactPackageScope + "[" + 
ref.getStrongName() + "]" + help
                 );
             }
 
@@ -201,6 +218,23 @@ public class NugetPackageLibrary
         return dependencies;
     }
 
+    private NugetPackage tryGetToPackageMapping(AssemblyInfo ref) throws 
MojoExecutionException
+    {
+        ReferenceMapping referenceMapping = nuget.tryFindReferenceMappingFor( 
ref );
+        if (referenceMapping != null && referenceMapping.getMapToPackage() != 
null)
+        {
+            NuspecDependency dep = new NuspecDependency();
+            ReferenceToPackageMapping mapToPackage = 
referenceMapping.getMapToPackage();
+            dep.setId( mapToPackage.getId() );
+
+            // TODO: support real version ranges here?
+            dep.setVersion( NugetVersionSpec.parse( "[" + 
mapToPackage.getVersion() + "]" ) );
+            return nuget.resolveDependencyAmongAllKnown( dep );
+        }
+
+        return null;
+    }
+
     private boolean isExcluded( AssemblyInfo ref )
     {
         if ( ref.getStrongName().endsWith( /* .NET 2.0 BCL, mscorlib, ... */ 
"b77a5c561934e089" ) )

Modified: 
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/skeletons/AbstractHandleEachLibraryMojo.java
URL: 
http://svn.apache.org/viewvc/incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/skeletons/AbstractHandleEachLibraryMojo.java?rev=1331567&r1=1331566&r2=1331567&view=diff
==============================================================================
--- 
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/skeletons/AbstractHandleEachLibraryMojo.java
 (original)
+++ 
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/skeletons/AbstractHandleEachLibraryMojo.java
 Fri Apr 27 20:10:06 2012
@@ -38,7 +38,7 @@ public abstract class AbstractHandleEach
 
         for ( NugetPackage nuget : getNugetImports() )
         {
-            for ( NugetPackageLibrary lib : nuget.getLibraries( 
mavenProjectsCacheDirectory ) )
+            for ( NugetPackageLibrary lib : nuget.getLibraries( getLog(), 
mavenProjectsCacheDirectory ) )
             {
 
                 handleLibrary( lib );


Reply via email to