From nmaven-commits-return-418-apmail-incubator-nmaven-commits-archive=incubator.apache.org@incubator.apache.org Thu Jul 12 19:08:58 2007 Return-Path: Delivered-To: apmail-incubator-nmaven-commits-archive@locus.apache.org Received: (qmail 4561 invoked from network); 12 Jul 2007 19:08:38 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 12 Jul 2007 19:08:38 -0000 Received: (qmail 16446 invoked by uid 500); 12 Jul 2007 19:08:41 -0000 Delivered-To: apmail-incubator-nmaven-commits-archive@incubator.apache.org Received: (qmail 16420 invoked by uid 500); 12 Jul 2007 19:08:41 -0000 Mailing-List: contact nmaven-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: nmaven-dev@incubator.apache.org Delivered-To: mailing list nmaven-commits@incubator.apache.org Received: (qmail 16411 invoked by uid 99); 12 Jul 2007 19:08:41 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 12 Jul 2007 12:08:41 -0700 X-ASF-Spam-Status: No, hits=-99.5 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 12 Jul 2007 12:08:32 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id 7C0E51A9820; Thu, 12 Jul 2007 12:08:12 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r555722 [2/4] - in /incubator/nmaven/branches/SI_GAC: ./ archetypes/ archetypes/maven-archetype-dotnet-simple/ archetypes/maven-archetype-netexecutable/ assemblies/ assemblies/NMaven.Artifact/ assemblies/NMaven.Artifact/src/main/csharp/NMav... Date: Thu, 12 Jul 2007 19:08:06 -0000 To: nmaven-commits@incubator.apache.org From: sisbell@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070712190812.7C0E51A9820@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Modified: incubator/nmaven/branches/SI_GAC/components/dotnet-artifact/src/main/java/org/apache/maven/dotnet/artifact/impl/AssemblyResolverImpl.java URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_GAC/components/dotnet-artifact/src/main/java/org/apache/maven/dotnet/artifact/impl/AssemblyResolverImpl.java?view=diff&rev=555722&r1=555721&r2=555722 ============================================================================== --- incubator/nmaven/branches/SI_GAC/components/dotnet-artifact/src/main/java/org/apache/maven/dotnet/artifact/impl/AssemblyResolverImpl.java (original) +++ incubator/nmaven/branches/SI_GAC/components/dotnet-artifact/src/main/java/org/apache/maven/dotnet/artifact/impl/AssemblyResolverImpl.java Thu Jul 12 12:07:57 2007 @@ -19,34 +19,27 @@ package org.apache.maven.dotnet.artifact.impl; import org.apache.maven.dotnet.artifact.AssemblyResolver; -import org.apache.maven.dotnet.artifact.AssemblyRepositoryLayout; +import org.apache.maven.dotnet.dao.ProjectDao; +import org.apache.maven.dotnet.dao.impl.ProjectFactory; +import org.apache.maven.dotnet.repository.Project; +import org.apache.maven.dotnet.repository.ProjectDependency; import org.apache.maven.project.MavenProject; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.factory.ArtifactFactory; -import org.apache.maven.artifact.metadata.ArtifactMetadataSource; -import org.apache.maven.artifact.resolver.ArtifactResolutionResult; import org.apache.maven.artifact.resolver.ArtifactResolutionException; import org.apache.maven.artifact.resolver.ArtifactNotFoundException; -import org.apache.maven.artifact.resolver.ArtifactResolver; import org.apache.maven.artifact.resolver.filter.ArtifactFilter; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.repository.ArtifactRepositoryFactory; -import org.apache.maven.artifact.repository.DefaultArtifactRepository; -import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout; -import org.apache.maven.artifact.versioning.VersionRange; import org.apache.maven.model.Dependency; import org.codehaus.plexus.logging.LogEnabled; import org.codehaus.plexus.logging.Logger; -import org.codehaus.plexus.util.FileUtils; +import org.codehaus.plexus.util.CollectionUtils; import java.util.Set; import java.util.HashSet; import java.util.List; -import java.util.ArrayList; - -import java.io.File; -import java.io.IOException; /** * Provides a way to resolve transitive assemblies that do not have versions within their file name. @@ -57,17 +50,6 @@ implements AssemblyResolver, LogEnabled { /** - * An artifact resolver component for locating artifacts and pulling them into the local repo if they do not - * already exist. - */ - private ArtifactResolver resolver; - - /** - * Metadata component used by the ArtifactResolver. - */ - private ArtifactMetadataSource metadata; - - /** * The artifact factory component, which is used for creating artifacts. */ private ArtifactFactory artifactFactory; @@ -82,6 +64,10 @@ */ private Logger logger; + private org.apache.maven.dotnet.registry.DataAccessObjectRegistry daoRegistry; + + private org.apache.maven.artifact.manager.WagonManager wagonManager; + /** * Constructor. This method is intended to by invoked by the plexus-container, not by the application developer. */ @@ -97,116 +83,149 @@ this.logger = logger; } - /** - * @see AssemblyResolver#resolveTransitivelyFor - */ - public void resolveTransitivelyFor( MavenProject project, Artifact sourceArtifact, List dependencies, - List remoteArtifactRepositories, - ArtifactRepository localArtifactRepository, - boolean addResolvedDependenciesToProject ) - throws ArtifactResolutionException, ArtifactNotFoundException + private Set subtractProjectDependencies( List b, Set a ) { - List releaseRepositories = new ArrayList(); - List snapshotRepositories = new ArrayList(); - for ( ArtifactRepository artifactRepository : remoteArtifactRepositories ) + Set d = new HashSet( b ); + + for ( Dependency dependency : b ) { - if ( artifactRepository.getSnapshots().isEnabled() ) + if ( containsDependency( a, dependency ) ) { - snapshotRepositories.add( artifactRepository ); + d.remove( dependency ); } - if ( artifactRepository.getReleases().isEnabled() ) + } + Set projectDependencies = new HashSet(); + for ( Dependency dependency : d ) + { + ProjectDependency projectDependency = new ProjectDependency(); + projectDependency.setGroupId( dependency.getGroupId() ); + projectDependency.setArtifactId( dependency.getArtifactId() ); + projectDependency.setVersion( dependency.getVersion() ); + projectDependencies.add( projectDependency ); + } + return projectDependencies; + } + + private Set substractDependencies( Set a, List b ) + { + Set pd = new HashSet( a ); + for ( ProjectDependency projectDependency : a ) + { + if ( containsProjectDependency( b, projectDependency ) ) { - releaseRepositories.add( artifactRepository ); + pd.remove( projectDependency ); } } + return pd; + } - Set artifactDependencies = new HashSet(); - Set snapshotArtifactDependencies = new HashSet(); - Set gacDependencies = new HashSet(); - - ArtifactFilter gacFilter = new GacFilter(); + private boolean containsProjectDependency( List dependencies, ProjectDependency projectDependency ) + { for ( Dependency dependency : dependencies ) { - String scope = ( dependency.getScope() == null ) ? Artifact.SCOPE_COMPILE : dependency.getScope(); - Artifact artifact = artifactFactory.createDependencyArtifact( dependency.getGroupId(), - dependency.getArtifactId(), - VersionRange.createFromVersion( - dependency.getVersion() ), - dependency.getType(), - dependency.getClassifier(), scope, null ); - if ( artifact.getType().startsWith( "gac" ) ) - { - logger.debug( - "NMAVEN-000-000: GAC Dependency = " + artifact.getType() + ", ID = " + artifact.getArtifactId() ); - gacDependencies.add( artifact ); - } - else if ( artifact.isSnapshot() ) - { - logger.debug( "NMAVEN-000-000: Snapshot Dependency: Type = " + artifact.getType() + - ", Artifact ID = " + artifact.getArtifactId() ); - snapshotArtifactDependencies.add( artifact ); - } - else + if ( isEqual( projectDependency, dependency ) ) { - logger.debug( "NMAVEN-000-000: Dependency: Type = " + artifact.getType() + ", Artifact ID = " + - artifact.getArtifactId() ); - artifactDependencies.add( artifact ); + return true; } } - //Releases - ArtifactResolutionResult result = resolver.resolveTransitively( artifactDependencies, sourceArtifact, - localArtifactRepository, releaseRepositories, - metadata, gacFilter ); - Set resolvedReleaseDependencies = result.getArtifacts(); - - //Snapshots - ArtifactRepository artifactRepository = new DefaultArtifactRepository( "local", "file://" + - localArtifactRepository.getBasedir(), new DefaultRepositoryLayout() ); - - ArtifactResolutionResult snapshotResult = resolver.resolveTransitively( snapshotArtifactDependencies, - sourceArtifact, artifactRepository, - snapshotRepositories, metadata, - gacFilter ); - Set resolvedSnapshotDependencies = snapshotResult.getArtifacts(); - AssemblyRepositoryLayout layout = new AssemblyRepositoryLayout(); - for ( Artifact artifact : resolvedSnapshotDependencies ) + return false; + } + + private boolean containsDependency( Set projectDependencies, Dependency dependency ) + { + for ( ProjectDependency projectDependency : projectDependencies ) { - File originalFileWithVersion = artifact.getFile(); - if ( artifact.isSnapshot() ) + if ( isEqual( projectDependency, dependency ) ) { - artifact.setVersion( artifact.getBaseVersion() ); + return true; } - File targetFileWithoutVersion = - new File( localArtifactRepository.getBasedir() + "/" + layout.pathOf( artifact ) ); - if ( originalFileWithVersion.lastModified() > targetFileWithoutVersion.lastModified() ) - { - logger.debug( "Original = " + originalFileWithVersion.getAbsolutePath() + ", Target = " + - targetFileWithoutVersion.getAbsolutePath() ); + } + return false; + } + + private boolean isEqual( ProjectDependency projectDependency, Dependency dependency ) + { + return ( projectDependency.getArtifactId().equals( dependency.getArtifactId() ) && + projectDependency.getGroupId().equals( dependency.getGroupId() ) && + projectDependency.getVersion().equals( dependency.getVersion() ) ); + } + + /** + * @see AssemblyResolver#resolveTransitivelyFor + */ + public void resolveTransitivelyFor( MavenProject mavenProject, Artifact sourceArtifact, + List dependencies, + List remoteArtifactRepositories, + ArtifactRepository localArtifactRepository, + boolean addResolvedDependenciesToProject ) + throws ArtifactResolutionException, ArtifactNotFoundException + { + //Check that the list of dependencies matches the first level RDF Repo + //If not, resolve missing dependencies and add to repo or delete additional dependencies from repo + ProjectDao dao = (ProjectDao) daoRegistry.find( "dao:project" ); + dao.init( artifactFactory, wagonManager ); + + Project project = new Project(); + project.setGroupId( mavenProject.getGroupId() ); + project.setArtifactId( mavenProject.getArtifactId() ); + project.setVersion( mavenProject.getVersion() ); + project.setArtifactType( mavenProject.getArtifact().getType() ); + + project.setPublicKeyTokenId( mavenProject.getArtifact().getClassifier() ); + + for ( Dependency dependency : dependencies ) + { + ProjectDependency projectDependency = new ProjectDependency(); + projectDependency.setGroupId( dependency.getGroupId() ); + projectDependency.setArtifactId( dependency.getArtifactId() ); + projectDependency.setVersion( dependency.getVersion() ); + projectDependency.setPublicKeyTokenId( dependency.getClassifier() ); + projectDependency.setArtifactType( dependency.getType() ); + project.addProjectDependency( projectDependency ); + } + + /* try { - FileUtils.copyFile( originalFileWithVersion, targetFileWithoutVersion ); + project = dao.getProjectFor( mavenProject ); } - catch ( IOException e ) + catch ( java.io.IOException e ) { e.printStackTrace(); } - } - if ( originalFileWithVersion.length() != 0 && targetFileWithoutVersion.length() == 0 ) - { - throw new ArtifactResolutionException( "NMAVEN-000-000: Artifact is corrupted:", artifact ); - } + */ - if ( targetFileWithoutVersion.exists() ) - { - artifact.setFile( targetFileWithoutVersion.getAbsoluteFile() ); - } + //Set projectDependencies = project.getProjectDependencies(); + + /* + Set pd = new HashSet( CollectionUtils.subtract( projectDependencies, + substractDependencies( + projectDependencies, + dependencies ) ) ); + pd.addAll( subtractProjectDependencies( dependencies, projectDependencies ) ); + */ + + Set artifactDependencies = new HashSet(); + try + { + artifactDependencies = dao.storeProjectAndResolveDependencies( project, remoteArtifactRepositories ); + } + catch ( java.io.IOException e ) + { + e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } + + //Resolve content + + //Resolve and store pom + + //Add rdf info to mavenProject + System.out.println( "Dependencies = " + artifactDependencies.size() ); if ( addResolvedDependenciesToProject ) { - resolvedReleaseDependencies.addAll( gacDependencies ); - resolvedReleaseDependencies.addAll( resolvedSnapshotDependencies ); - project.setDependencyArtifacts( resolvedReleaseDependencies ); + mavenProject.setDependencyArtifacts( artifactDependencies ); } + } private static class GacFilter Modified: incubator/nmaven/branches/SI_GAC/components/dotnet-artifact/src/main/resources/META-INF/plexus/components.xml URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_GAC/components/dotnet-artifact/src/main/resources/META-INF/plexus/components.xml?view=diff&rev=555722&r1=555721&r2=555722 ============================================================================== --- incubator/nmaven/branches/SI_GAC/components/dotnet-artifact/src/main/resources/META-INF/plexus/components.xml (original) +++ incubator/nmaven/branches/SI_GAC/components/dotnet-artifact/src/main/resources/META-INF/plexus/components.xml Thu Jul 12 12:07:57 2007 @@ -99,11 +99,17 @@ + org.apache.maven.artifact.resolver.ArtifactResolver + dummy + org.apache.maven.dotnet.artifact.DummyResolver + + org.apache.maven.dotnet.artifact.ArtifactContext org.apache.maven.dotnet.artifact.impl.ArtifactContextImpl org.apache.maven.artifact.resolver.ArtifactResolver + dummy org.apache.maven.artifact.metadata.ArtifactMetadataSource @@ -142,6 +148,7 @@ org.apache.maven.artifact.resolver.ArtifactResolver + dummy org.apache.maven.artifact.metadata.ArtifactMetadataSource @@ -152,6 +159,9 @@ org.apache.maven.dotnet.registry.RepositoryRegistry + + org.apache.maven.dotnet.registry.DataAccessObjectRegistry + @@ -164,18 +174,30 @@ org.apache.maven.dotnet.artifact.impl.AssemblyResolverImpl - org.apache.maven.artifact.resolver.ArtifactResolver + org.apache.maven.artifact.factory.ArtifactFactory - org.apache.maven.artifact.factory.ArtifactFactory + org.apache.maven.artifact.repository.ArtifactRepositoryFactory - org.apache.maven.artifact.metadata.ArtifactMetadataSource + org.apache.maven.dotnet.registry.DataAccessObjectRegistry - org.apache.maven.artifact.repository.ArtifactRepositoryFactory + org.apache.maven.artifact.manager.WagonManager + + org.apache.maven.dotnet.dao.ProjectDao + org.apache.maven.dotnet.dao.impl.ProjectDaoImpl + + + org.apache.maven.artifact.manager.WagonManager + + + org.apache.maven.artifact.factory.ArtifactFactory + + + Modified: incubator/nmaven/branches/SI_GAC/components/dotnet-assembler/pom.xml URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_GAC/components/dotnet-assembler/pom.xml?view=diff&rev=555722&r1=555721&r2=555722 ============================================================================== --- incubator/nmaven/branches/SI_GAC/components/dotnet-assembler/pom.xml (original) +++ incubator/nmaven/branches/SI_GAC/components/dotnet-assembler/pom.xml Thu Jul 12 12:07:57 2007 @@ -20,7 +20,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> org.apache.maven.dotnet - 0.14-SNAPSHOT + 0.14 dotnet-components 4.0.0 Modified: incubator/nmaven/branches/SI_GAC/components/dotnet-core/pom.xml URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_GAC/components/dotnet-core/pom.xml?view=diff&rev=555722&r1=555721&r2=555722 ============================================================================== --- incubator/nmaven/branches/SI_GAC/components/dotnet-core/pom.xml (original) +++ incubator/nmaven/branches/SI_GAC/components/dotnet-core/pom.xml Thu Jul 12 12:07:57 2007 @@ -20,7 +20,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> org.apache.maven.dotnet - 0.14-SNAPSHOT + 0.14 dotnet-components 4.0.0 Modified: incubator/nmaven/branches/SI_GAC/components/dotnet-core/src/main/resources/META-INF/nmaven/registry-config.xml URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_GAC/components/dotnet-core/src/main/resources/META-INF/nmaven/registry-config.xml?view=diff&rev=555722&r1=555721&r2=555722 ============================================================================== --- incubator/nmaven/branches/SI_GAC/components/dotnet-core/src/main/resources/META-INF/nmaven/registry-config.xml (original) +++ incubator/nmaven/branches/SI_GAC/components/dotnet-core/src/main/resources/META-INF/nmaven/registry-config.xml Thu Jul 12 12:07:57 2007 @@ -40,7 +40,16 @@ /META-INF/nmaven/net-dependencies.xml nmaven.version - 0.14-SNAPSHOT + 0.14 + + + + connections + org.apache.maven.dotnet.registry.ConnectionsRepository + /META-INF/nmaven/jpox.properties + + dao:project + org.apache.maven.dotnet.dao.impl.ProjectDaoImpl Added: incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/pom.xml URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/pom.xml?view=auto&rev=555722 ============================================================================== --- incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/pom.xml (added) +++ incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/pom.xml Thu Jul 12 12:07:57 2007 @@ -0,0 +1,75 @@ + + + + org.apache.maven.dotnet + 0.14 + dotnet-components + ..\..\pom.xml + + 4.0.0 + org.apache.maven.dotnet + dotnet-dao-project + dotnet-dao-project + + + + + org.apache.maven.dotnet + dotnet-jdo + 0.14 + + + org.apache.maven.dotnet + dotnet-registry + 0.14 + + + org.openrdf + openrdf-model + 2.0-beta4 + + + org.openrdf + openrdf-repository-api + 2.0-beta4 + + + org.openrdf + openrdf-sail-nativerdf + 2.0-beta4 + + + org.openrdf + openrdf-queryparser-sparql + 2.0-beta4 + + + info.aduna + aduna-iteration + 1.1 + + + org.slf4j + slf4j-jdk14 + 1.3.0 + + + \ No newline at end of file Propchange: incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/pom.xml ------------------------------------------------------------------------------ svn:eol-style = native Added: incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/main/java/org/apache/maven/dotnet/dao/ProjectDao.java URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/main/java/org/apache/maven/dotnet/dao/ProjectDao.java?view=auto&rev=555722 ============================================================================== --- incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/main/java/org/apache/maven/dotnet/dao/ProjectDao.java (added) +++ incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/main/java/org/apache/maven/dotnet/dao/ProjectDao.java Thu Jul 12 12:07:57 2007 @@ -0,0 +1,42 @@ +package org.apache.maven.dotnet.dao; + +import org.apache.maven.dotnet.repository.Project; +import org.apache.maven.dotnet.registry.DataAccessObject; + +import org.apache.maven.project.MavenProject; +import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.manager.WagonManager; +import org.apache.maven.artifact.factory.ArtifactFactory; +import org.apache.maven.model.Model; + +import java.util.Set; +import java.util.List; +import java.io.IOException; +import java.io.File; + +public interface ProjectDao + extends DataAccessObject +{ + /** + * Role used to register component implementations with the container. + */ + String ROLE = ProjectDao.class.getName(); + + Project getProjectFor( String groupId, String artifactId, String version, String artifactType, + String publicKeyTokenId ) + throws IOException; + + Project getProjectFor( MavenProject mavenProject ) + throws IOException; + + Set storeProjectAndResolveDependencies( Project project, List artifactRepositories ) + throws IOException; + + Set storeModelAndResolveDependencies( Model model, File pomFileDirectory, + List artifactRepositories ) + throws IOException; + + void init( ArtifactFactory artifactFactory, WagonManager wagonManager ); + +} Propchange: incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/main/java/org/apache/maven/dotnet/dao/ProjectDao.java ------------------------------------------------------------------------------ svn:eol-style = native Added: incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/main/java/org/apache/maven/dotnet/dao/ProjectUri.java URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/main/java/org/apache/maven/dotnet/dao/ProjectUri.java?view=auto&rev=555722 ============================================================================== --- incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/main/java/org/apache/maven/dotnet/dao/ProjectUri.java (added) +++ incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/main/java/org/apache/maven/dotnet/dao/ProjectUri.java Thu Jul 12 12:07:57 2007 @@ -0,0 +1,59 @@ +package org.apache.maven.dotnet.dao; + +public enum ProjectUri +{ + GROUP_ID( "http://maven.apache.org/artifact/groupId", "groupId", false ), + + ARTIFACT_ID( "http://maven.apache.org/artifact/artifactId", "artifactId", false ), + + VERSION( "http://maven.apache.org/artifact/version", "versionValue", false ), + + ARTIFACT_TYPE( "http://maven.apache.org/artifact/artifactType", "artifactType", false ), + + CLASSIFIER( "http://maven.apache.org/artifact/classifier", "classifier", true ), + + IS_RESOLVED( "http://maven.apache.org/artifact/dependency/isResolved", "isResolved", false ), + + ARTIFACT( "http://maven.apache.org/Artifact", "artifact", false ), + + DEPENDENCY( "http://maven.apache.org/artifact/dependency", "dependency", true ), + + PARENT( "http://maven.apache.org/artifact/parent", "parent", true ), + + VENDOR( "http://maven.apache.org/artifact/requirement/vendor", "vendor", false ), + + FRAMEWORK_VERSION( "http://maven.apache.org/artifact/requirement/frameworkVersion", "frameworkVersion", false ); + + private String uri; + + private String bindingName; + + private boolean isOptional; + + ProjectUri( String uri, String bindingName, boolean isOptional ) + { + this.uri = uri; + this.bindingName = bindingName; + this.isOptional = isOptional; + } + + public String getPredicate() + { + return uri; + } + + public String getObjectBinding() + { + return bindingName; + } + + public boolean isOptional() + { + return isOptional; + } + + public void setOptional( boolean isOptional ) + { + this.isOptional = isOptional; + } +} Propchange: incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/main/java/org/apache/maven/dotnet/dao/ProjectUri.java ------------------------------------------------------------------------------ svn:eol-style = native Added: incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/main/java/org/apache/maven/dotnet/dao/impl/ProjectDaoImpl.java URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/main/java/org/apache/maven/dotnet/dao/impl/ProjectDaoImpl.java?view=auto&rev=555722 ============================================================================== --- incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/main/java/org/apache/maven/dotnet/dao/impl/ProjectDaoImpl.java (added) +++ incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/main/java/org/apache/maven/dotnet/dao/impl/ProjectDaoImpl.java Thu Jul 12 12:07:57 2007 @@ -0,0 +1,573 @@ +package org.apache.maven.dotnet.dao.impl; + +import org.apache.maven.dotnet.dao.ProjectDao; +import org.apache.maven.dotnet.dao.ProjectUri; +import org.apache.maven.dotnet.repository.Project; +import org.apache.maven.dotnet.repository.ProjectDependency; +import org.apache.maven.dotnet.repository.Requirement; +import org.apache.maven.dotnet.registry.RepositoryRegistry; +import org.apache.maven.project.MavenProject; +import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.manager.WagonManager; +import org.apache.maven.artifact.factory.ArtifactFactory; +import org.apache.maven.wagon.TransferFailedException; +import org.apache.maven.wagon.ResourceDoesNotExistException; +import org.apache.maven.model.io.xpp3.MavenXpp3Reader; +import org.apache.maven.model.Model; + +import org.openrdf.model.ValueFactory; +import org.openrdf.model.URI; +import org.openrdf.model.Value; +import org.openrdf.model.BNode; +import org.openrdf.model.vocabulary.RDF; + +import org.openrdf.repository.RepositoryConnection; +import org.openrdf.repository.RepositoryException; +import org.openrdf.OpenRDFException; +import org.openrdf.query.QueryLanguage; +import org.openrdf.query.QueryEvaluationException; +import org.openrdf.query.MalformedQueryException; +import org.openrdf.query.TupleQuery; +import org.openrdf.query.TupleQueryResult; +import org.openrdf.query.BindingSet; +import org.openrdf.query.Binding; +import org.codehaus.plexus.util.xml.pull.XmlPullParserException; + + +import java.util.logging.Logger; +import java.util.Set; +import java.util.HashSet; +import java.util.List; +import java.util.Iterator; +import java.util.ArrayList; +import java.io.File; +import java.io.IOException; +import java.io.FileReader; +import java.net.URISyntaxException; + +public final class ProjectDaoImpl + implements ProjectDao +{ + + private String className; + + private String id; + + private static Logger logger = Logger.getAnonymousLogger(); + + private org.openrdf.repository.Repository rdfRepository; + + private org.apache.maven.artifact.manager.WagonManager wagonManager; + + /** + * The artifact factory component, which is used for creating artifacts. + */ + private org.apache.maven.artifact.factory.ArtifactFactory artifactFactory; + + public void init( ArtifactFactory artifactFactory, WagonManager wagonManager ) + { + this.artifactFactory = artifactFactory; + this.wagonManager = wagonManager; + } + + public Project getProjectFor( String groupId, String artifactId, String version, String artifactType, + String publicKeyTokenId ) + throws IOException + { + RepositoryConnection repositoryConnection; + try + { + repositoryConnection = rdfRepository.getConnection(); + } + catch ( RepositoryException e ) + { + throw new IOException( e.getMessage() ); + } + ValueFactory valueFactory = rdfRepository.getValueFactory(); + + Project project = new ProjectDependency(); + project.setArtifactId( artifactId ); + project.setGroupId( groupId ); + project.setVersion( version ); + project.setArtifactType( artifactType ); + project.setPublicKeyTokenId( publicKeyTokenId ); + + try + { + List projectUris = new ArrayList(); + projectUris.add( ProjectUri.GROUP_ID ); + projectUris.add( ProjectUri.ARTIFACT_ID ); + projectUris.add( ProjectUri.VERSION ); + projectUris.add( ProjectUri.ARTIFACT_TYPE ); + projectUris.add( ProjectUri.IS_RESOLVED ); + projectUris.add( ProjectUri.DEPENDENCY ); + projectUris.add( ProjectUri.CLASSIFIER ); + projectUris.add( ProjectUri.PARENT ); + + String query = "SELECT * FROM " + this.constructQueryFragmentFor( "{x}", projectUris ); + System.out.println( query ); + // "SELECT * FROM {x} {groupIdValue}; {artifactIdValue}; {versionValue}; [ {dependency}]"; + TupleQuery tupleQuery = repositoryConnection.prepareTupleQuery( QueryLanguage.SERQL, query ); + + tupleQuery.setBinding( ProjectUri.GROUP_ID.getObjectBinding(), valueFactory.createLiteral( groupId ) ); + tupleQuery.setBinding( ProjectUri.ARTIFACT_ID.getObjectBinding(), + valueFactory.createLiteral( artifactId ) ); + tupleQuery.setBinding( ProjectUri.VERSION.getObjectBinding(), valueFactory.createLiteral( version ) ); + + TupleQueryResult result = tupleQuery.evaluate(); + if ( !result.hasNext() ) + { + if ( artifactType != null && artifactType.startsWith( "gac" ) ) + { + Artifact artifact = + ProjectFactory.createArtifactFrom( (ProjectDependency) project, artifactFactory ); + if ( !artifact.getFile().exists() ) + { + throw new IOException( "Could not find GAC assembly: Group ID = " + groupId + + ", Artifact ID = " + artifactId + ", Version = " + version + ", Artifact Type = " + + artifactType + ", File Path = " + artifact.getFile().getAbsolutePath() ); + } + project.setResolved( true ); + return project; + } + + throw new IOException( "NMAVEN-000-000: Could not find the project: Group ID = " + groupId + + ", Artifact ID = " + artifactId + ", Version = " + version + ", Artifact Type = " + artifactType ); + } + + while ( result.hasNext() ) + { + BindingSet set = result.next(); + for ( Iterator i = set.iterator(); i.hasNext(); ) + { + Binding b = i.next(); + System.out.println( b.getName() + ":" + b.getValue() ); + } + + if ( set.getBinding( ProjectUri.IS_RESOLVED.getObjectBinding() ).getValue().toString().equalsIgnoreCase( + "true" ) ) + { + project.setResolved( true ); + } + + project.setArtifactType( + set.getBinding( ProjectUri.ARTIFACT_TYPE.getObjectBinding() ).getValue().toString() ); + + if ( set.hasBinding( ProjectUri.PARENT.getObjectBinding() ) ) + { + String pid = set.getBinding( ProjectUri.PARENT.getObjectBinding() ).getValue().toString(); + String[] tokens = pid.split( "[:]" ); + Project parentProject = getProjectFor( tokens[0], tokens[1], tokens[2], null, null ); + project.setParentProject( parentProject ); + } + + if ( set.hasBinding( ProjectUri.DEPENDENCY.getObjectBinding() ) ) + { + Binding binding = set.getBinding( ProjectUri.DEPENDENCY.getObjectBinding() ); + addDependenciesToProject( project, repositoryConnection, binding.getValue() ); + } + + if ( set.hasBinding( ProjectUri.CLASSIFIER.getObjectBinding() ) ) + { + Binding binding = set.getBinding( ProjectUri.CLASSIFIER.getObjectBinding() ); + addClassifiersToProject( project, repositoryConnection, binding.getValue() ); + } + } + /* + String query = "CONSTRUCT * FROM {x} p {y} "; + GraphQueryResult graphResult = repositoryConnection.prepareGraphQuery( QueryLanguage.SERQL, query ).evaluate(); + Map map = graphResult.getNamespaces(); + System.out.println( map ); + while ( graphResult.hasNext() ) + { + Statement st = graphResult.next(); + + System.out.println( + "RESULT = " + st.getSubject() + " : " + st.getPredicate() + " : " + st.getObject() ); + } + */ + + } + catch ( QueryEvaluationException e ) + { + e.printStackTrace(); + } + catch ( RepositoryException e ) + { + e.printStackTrace(); + } + catch ( MalformedQueryException e ) + { + e.printStackTrace(); + } + finally + { + try + { + repositoryConnection.close(); + } + catch ( RepositoryException e ) + { + e.printStackTrace(); + } + } + + return project; + } + + public Project getProjectFor( MavenProject mavenProject ) + throws IOException + { + return getProjectFor( mavenProject.getGroupId(), mavenProject.getArtifactId(), mavenProject.getVersion(), + mavenProject.getArtifact().getType(), mavenProject.getArtifact().getClassifier() ); + } + + public Set storeProjectAndResolveDependencies( Project project, + List artifactRepositories ) + throws IOException, IllegalArgumentException + { + if ( project == null ) + { + throw new IllegalArgumentException( "NMAVEN-000-000: Project is null" ); + } + + if ( project.getGroupId() == null || project.getArtifactId() == null || project.getVersion() == null ) + { + throw new IllegalArgumentException( "NMAVEN-000-000: Project value is null: Group Id =" + + project.getGroupId() + ", Artifact Id = " + project.getArtifactId() + ", Version = " + + project.getVersion() ); + } + + Set artifactDependencies = new HashSet(); + + ValueFactory valueFactory = rdfRepository.getValueFactory(); + URI id = + valueFactory.createURI( project.getGroupId() + ":" + project.getArtifactId() + ":" + project.getVersion() ); + //BNode id = valueFactory.createBNode(); + URI groupId = valueFactory.createURI( ProjectUri.GROUP_ID.getPredicate() ); + URI artifactId = valueFactory.createURI( ProjectUri.ARTIFACT_ID.getPredicate() ); + URI version = valueFactory.createURI( ProjectUri.VERSION.getPredicate() ); + URI artifactType = valueFactory.createURI( ProjectUri.ARTIFACT_TYPE.getPredicate() ); + URI classifier = valueFactory.createURI( ProjectUri.CLASSIFIER.getPredicate() ); + URI isResolved = valueFactory.createURI( ProjectUri.IS_RESOLVED.getPredicate() ); + + URI artifact = valueFactory.createURI( ProjectUri.ARTIFACT.getPredicate() ); + URI dependency = valueFactory.createURI( ProjectUri.DEPENDENCY.getPredicate() ); + URI parent = valueFactory.createURI( ProjectUri.PARENT.getPredicate() ); + + Set modelDependencies = new HashSet(); + try + { + RepositoryConnection repositoryConnection = rdfRepository.getConnection(); + + try + { + repositoryConnection.add( id, RDF.TYPE, artifact ); + repositoryConnection.add( id, groupId, valueFactory.createLiteral( project.getGroupId() ) ); + repositoryConnection.add( id, artifactId, valueFactory.createLiteral( project.getArtifactId() ) ); + repositoryConnection.add( id, version, valueFactory.createLiteral( project.getVersion() ) ); + repositoryConnection.add( id, artifactType, valueFactory.createLiteral( project.getArtifactType() ) ); + + BNode classifierNode = valueFactory.createBNode(); + for ( Requirement requirement : project.getRequirements() ) + { + System.out.println( "Add requirement: " + requirement.getUri() ); + URI uri = valueFactory.createURI( requirement.getUri().toString() ); + repositoryConnection.add( classifierNode, uri, + valueFactory.createLiteral( requirement.getValue() ) ); + } + + repositoryConnection.add( id, classifier, classifierNode ); + + if ( project.getParentProject() != null ) + { + Project parentProject = project.getParentProject(); + URI pid = valueFactory.createURI( parentProject.getGroupId() + ":" + parentProject.getArtifactId() + + ":" + parentProject.getVersion() ); + repositoryConnection.add( id, parent, pid ); + artifactDependencies.addAll( + storeProjectAndResolveDependencies( parentProject, artifactRepositories ) ); + } + + for ( ProjectDependency projectDependency : project.getProjectDependencies() ) + { + System.out.println( "Project Dependency: Artifact ID = " + projectDependency.getArtifactId() + + ", Group ID = " + projectDependency.getGroupId() + ", Version = " + + projectDependency.getVersion() + ", Artifact Type = " + projectDependency.getArtifactType() ); + if ( !projectDependency.isResolved() ) + { + try + { + Project dep = this.getProjectFor( projectDependency.getGroupId(), + projectDependency.getArtifactId(), + projectDependency.getVersion(), + projectDependency.getArtifactType(), + projectDependency.getPublicKeyTokenId() ); + if ( dep.isResolved() ) + { + projectDependency = (ProjectDependency) dep; + Artifact assembly = + ProjectFactory.createArtifactFrom( projectDependency, artifactFactory ); + artifactDependencies.add( assembly ); + } + } + catch ( IOException e ) + { + e.printStackTrace(); + //safe to ignore: dependency not found + } + } + + if ( !projectDependency.isResolved() ) + { + + Artifact assembly = ProjectFactory.createArtifactFrom( projectDependency, artifactFactory ); + Artifact pomArtifact = artifactFactory.createProjectArtifact( projectDependency.getGroupId(), + projectDependency.getArtifactId(), + projectDependency.getVersion() ); + + pomArtifact.setFile( File.createTempFile( "pomFile", "pom.xml" ) ); + + try + { + wagonManager.getArtifact( pomArtifact, artifactRepositories ); + wagonManager.getArtifact( assembly, artifactRepositories ); + } + catch ( TransferFailedException e ) + { + throw new IOException( + "NMAVEN-000-000: Problem in resolving artifact: Message = " + e.getMessage() ); + } + catch ( ResourceDoesNotExistException e ) + { + throw new IOException( + "NMAVEN-000-000: Problem in resolving artifact: Message = " + e.getMessage() ); + } + + File pomArtifactFile = pomArtifact.getFile(); + FileReader fileReader = new FileReader( pomArtifactFile ); + + MavenXpp3Reader reader = new MavenXpp3Reader(); + Model model; + try + { + model = reader.read( fileReader ); + } + catch ( XmlPullParserException e ) + { + throw new IOException( + "NMAVEN-000-000: Unable to read model: Message = " + e.getMessage() ); + + } + if ( !( model.getGroupId().equals( projectDependency.getGroupId() ) && + model.getArtifactId().equals( projectDependency.getArtifactId() ) && + model.getVersion().equals( projectDependency.getVersion() ) ) ) + { + throw new IOException( "Model parameters do not match project dependencies parameters" ); + } + modelDependencies.add( model ); + artifactDependencies.add( assembly ); + }//end if dependency not resolved + // BNode did = valueFactory.createBNode(); + URI did = valueFactory.createURI( projectDependency.getGroupId() + ":" + + projectDependency.getArtifactId() + ":" + projectDependency.getVersion() ); + repositoryConnection.add( did, RDF.TYPE, artifact ); + repositoryConnection.add( did, groupId, + valueFactory.createLiteral( projectDependency.getGroupId() ) ); + repositoryConnection.add( did, artifactId, + valueFactory.createLiteral( projectDependency.getArtifactId() ) ); + repositoryConnection.add( did, version, + valueFactory.createLiteral( projectDependency.getVersion() ) ); + repositoryConnection.add( did, artifactType, + valueFactory.createLiteral( projectDependency.getArtifactType() ) ); + repositoryConnection.add( id, dependency, did ); + + }//end for + repositoryConnection.add( id, isResolved, valueFactory.createLiteral( true ) ); + repositoryConnection.commit(); + } + finally + { + repositoryConnection.close(); + } + } + catch ( OpenRDFException e ) + { + throw new IOException( "NMAVEN-000-000: Could not open RDF Repository: Message =" + e.getMessage() ); + } + + for ( Model model : modelDependencies ) + { + System.out.println( "Storing dependency: Artifact Id = " + model.getArtifactId() ); + artifactDependencies.addAll( storeProjectAndResolveDependencies( + ProjectFactory.createProjectFrom( model, null ), artifactRepositories ) ); + } + + return artifactDependencies; + } + + public Set storeModelAndResolveDependencies( Model model, File pomFileDirectory, + List artifactRepositories ) + throws IOException + { + return storeProjectAndResolveDependencies( ProjectFactory.createProjectFrom( model, pomFileDirectory ), + artifactRepositories ); + } + + public String getClassName() + { + return className; + } + + public String getID() + { + return id; + } + + public void init( Object dataStoreObject, String id, String className ) + throws IllegalArgumentException + { + if ( dataStoreObject == null || !( dataStoreObject instanceof org.openrdf.repository.Repository ) ) + { + throw new IllegalArgumentException( + "NMAVEN: Must initialize with an instance of org.openrdf.repository.Repository" ); + } + + this.id = id; + this.className = className; + this.rdfRepository = (org.openrdf.repository.Repository) dataStoreObject; + } + + public void setRepositoryRegistry( RepositoryRegistry repositoryRegistry ) + { + + } + + protected void initForUnitTest( Object dataStoreObject, String id, String className, WagonManager wagonManager, + ArtifactFactory artifactFactory ) + { + this.init( dataStoreObject, id, className ); + this.wagonManager = wagonManager; + this.artifactFactory = artifactFactory; + } + + + private void addClassifiersToProject( Project project, RepositoryConnection repositoryConnection, + Value classifierUri ) + throws RepositoryException, MalformedQueryException, QueryEvaluationException + { + String query = "SELECT * FROM {x} p {y}"; + System.out.println( query ); + TupleQuery tq = repositoryConnection.prepareTupleQuery( QueryLanguage.SERQL, query ); + tq.setBinding( "x", classifierUri ); + TupleQueryResult result = tq.evaluate(); + while ( result.hasNext() ) + { + BindingSet set = result.next(); + for ( Iterator i = set.iterator(); i.hasNext(); ) + { + Binding binding = i.next(); + System.out.println( "-" + binding.getName() + ":" + binding.getValue() ); + if ( binding.getValue().toString().startsWith( "http://maven.apache.org/artifact/requirement" ) ) + { + try + { + project.addRequirement( Requirement.Factory.createDefaultRequirement( + new java.net.URI( binding.getValue().toString() ), set.getValue( "y" ).toString() ) ); + } + catch ( URISyntaxException e ) + { + e.printStackTrace(); + } + } + } + } + } + + private void addDependenciesToProject( Project project, RepositoryConnection repositoryConnection, + Value dependencyUri ) + throws RepositoryException, MalformedQueryException, QueryEvaluationException + { + List projectUris = new ArrayList(); + projectUris.add( ProjectUri.GROUP_ID ); + projectUris.add( ProjectUri.ARTIFACT_ID ); + projectUris.add( ProjectUri.VERSION ); + projectUris.add( ProjectUri.ARTIFACT_TYPE ); + projectUris.add( ProjectUri.IS_RESOLVED ); + projectUris.add( ProjectUri.DEPENDENCY ); + + String query = "SELECT * FROM " + this.constructQueryFragmentFor( "{x}", projectUris ); + System.out.println( query ); + + Set projectDependencies = new HashSet(); + // String dependencyQuery = + // "SELECT DISTINCT * FROM {x} {groupIdValue}; {artifactIdValue}; {versionValue}"; + TupleQuery tq = repositoryConnection.prepareTupleQuery( QueryLanguage.SERQL, query ); + tq.setBinding( "x", dependencyUri ); + TupleQueryResult dependencyResult = tq.evaluate(); + while ( dependencyResult.hasNext() ) + { + ProjectDependency projectDependency = new ProjectDependency(); + BindingSet bs = dependencyResult.next(); + projectDependency.setGroupId( bs.getBinding( ProjectUri.GROUP_ID.getObjectBinding() ).toString() ); + projectDependency.setArtifactId( bs.getBinding( ProjectUri.ARTIFACT_ID.getObjectBinding() ).toString() ); + projectDependency.setVersion( bs.getBinding( ProjectUri.VERSION.getObjectBinding() ).toString() ); + + projectDependencies.add( projectDependency ); + if ( bs.hasBinding( ProjectUri.DEPENDENCY.getObjectBinding() ) ) + { + addDependenciesToProject( projectDependency, repositoryConnection, + bs.getValue( ProjectUri.DEPENDENCY.getObjectBinding() ) ); + } + } + project.setProjectDependencies( projectDependencies ); + } + + private String constructQueryFragmentFor( String subject, List projectUris ) + { + // ProjectUri nonOptionalUri = this.getNonOptionalUriFrom( projectUris ); + // projectUris.remove( nonOptionalUri ); + + StringBuffer buffer = new StringBuffer(); + buffer.append( subject ); + for ( Iterator i = projectUris.iterator(); i.hasNext(); ) + { + ProjectUri projectUri = i.next(); + buffer.append( " " ); + if ( projectUri.isOptional() ) + { + buffer.append( "[" ); + } + buffer.append( "<" ).append( projectUri.getPredicate() ).append( "> {" ).append( + projectUri.getObjectBinding() ).append( "}" ); + if ( projectUri.isOptional() ) + { + buffer.append( "]" ); + } + if ( i.hasNext() ) + { + buffer.append( ";" ); + } + } + return buffer.toString(); + } + + private ProjectUri getNonOptionalUriFrom( List projectUris ) + { + for ( ProjectUri projectUri : projectUris ) + { + if ( !projectUri.isOptional() ) + { + return projectUri; + } + } + return null; + } + + + private void mergeProjects( Project parent, Project child ) + { + + } +} Propchange: incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/main/java/org/apache/maven/dotnet/dao/impl/ProjectDaoImpl.java ------------------------------------------------------------------------------ svn:eol-style = native Added: incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/main/java/org/apache/maven/dotnet/dao/impl/ProjectFactory.java URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/main/java/org/apache/maven/dotnet/dao/impl/ProjectFactory.java?view=auto&rev=555722 ============================================================================== --- incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/main/java/org/apache/maven/dotnet/dao/impl/ProjectFactory.java (added) +++ incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/main/java/org/apache/maven/dotnet/dao/impl/ProjectFactory.java Thu Jul 12 12:07:57 2007 @@ -0,0 +1,98 @@ +package org.apache.maven.dotnet.dao.impl; + +import org.apache.maven.dotnet.repository.Project; +import org.apache.maven.dotnet.repository.ProjectDependency; +import org.apache.maven.model.Model; +import org.apache.maven.model.Dependency; +import org.apache.maven.model.Parent; +import org.apache.maven.model.io.xpp3.MavenXpp3Reader; +import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.factory.ArtifactFactory; +import org.apache.maven.artifact.versioning.VersionRange; +import org.codehaus.plexus.util.xml.pull.XmlPullParserException; +import org.codehaus.plexus.util.FileUtils; + +import java.util.List; +import java.io.FileReader; +import java.io.IOException; +import java.io.File; + +public class ProjectFactory +{ + public static Project createProjectFrom( Model model, File pomFileDirectory ) + throws IOException + { + Project project = new Project(); + project.setGroupId( model.getGroupId() ); + project.setArtifactId( model.getArtifactId() ); + project.setVersion( model.getVersion() ); + project.setArtifactType( model.getPackaging() ); + Parent parent = model.getParent(); + if ( parent != null && pomFileDirectory != null) + { + String parentPomName = FileUtils.filename( parent.getRelativePath() ); + File parentPomFile = new File( pomFileDirectory, parentPomName ); + FileReader fileReader = new FileReader( parentPomFile ); + + MavenXpp3Reader reader = new MavenXpp3Reader(); + Model parentModel; + try + { + parentModel = reader.read( fileReader ); + } + catch ( XmlPullParserException e ) + { + throw new IOException( "NMAVEN-000-000: Unable to read model: Message = " + e.getMessage() ); + + } + System.out.println("Pom File: " + pomFileDirectory.getAbsolutePath()); + System.out.println("Parent: " + parentPomFile.getParentFile().getAbsolutePath()); + Project parentProject = createProjectFrom( parentModel, parentPomFile.getParentFile() ); + project.setParentProject( parentProject ); + } + + //TODO: publickey/classifier + List sourceArtifactDependencies = model.getDependencies(); + for ( Dependency dependency : sourceArtifactDependencies ) + { + project.addProjectDependency( createProjectDependencyFrom( dependency ) ); + } + return project; + } + + public static ProjectDependency createProjectDependencyFrom( Dependency dependency ) + { + ProjectDependency projectDependency = new ProjectDependency(); + projectDependency.setGroupId( dependency.getGroupId() ); + projectDependency.setArtifactId( dependency.getArtifactId() ); + projectDependency.setVersion( dependency.getVersion() ); + projectDependency.setPublicKeyTokenId( dependency.getClassifier() ); + projectDependency.setArtifactType( dependency.getType() ); + return projectDependency; + } + + public static Artifact createArtifactFrom( ProjectDependency projectDependency, ArtifactFactory artifactFactory ) + { + String scope = ( projectDependency.getScope() == null ) ? Artifact.SCOPE_COMPILE : projectDependency.getScope(); + Artifact assembly = artifactFactory.createDependencyArtifact( projectDependency.getGroupId(), + projectDependency.getArtifactId(), + VersionRange.createFromVersion( + projectDependency.getVersion() ), + projectDependency.getArtifactType(), + projectDependency.getPublicKeyTokenId(), scope, + null ); + + File artifactFile = ( ( projectDependency.getArtifactType().startsWith( "gac") ) ) ? new File( + "C:\\WINDOWS\\assembly\\gac_msil\\", projectDependency.getArtifactId() + "\\" + + projectDependency.getVersion() + "__" + projectDependency.getPublicKeyTokenId() + "\\" + + projectDependency.getArtifactId() + ".dll" ) : new File( System.getProperty( "user.home" ), + "\\.m2\\uac\\gac_msil\\" + + projectDependency.getArtifactId() + "\\" + + projectDependency.getVersion() + "__" + + projectDependency.getGroupId() + "\\" + + projectDependency.getArtifactId() + ".dll" ); + + assembly.setFile( artifactFile ); + return assembly; + } +} Propchange: incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/main/java/org/apache/maven/dotnet/dao/impl/ProjectFactory.java ------------------------------------------------------------------------------ svn:eol-style = native Added: incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/main/resources/META-INF/plexus/components.xml URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/main/resources/META-INF/plexus/components.xml?view=auto&rev=555722 ============================================================================== --- incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/main/resources/META-INF/plexus/components.xml (added) +++ incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/main/resources/META-INF/plexus/components.xml Thu Jul 12 12:07:57 2007 @@ -0,0 +1,16 @@ + + + + org.apache.maven.dotnet.dao.ProjectDao + org.apache.maven.dotnet.dao.impl.ProjectDaoImpl + + + org.apache.maven.artifact.manager.WagonManager + + + org.apache.maven.artifact.factory.ArtifactFactory + + + + + Propchange: incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/main/resources/META-INF/plexus/components.xml ------------------------------------------------------------------------------ svn:eol-style = native Added: incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/test/java/org/apache/maven/dotnet/dao/impl/ArtifactFactoryTestStub.java URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/test/java/org/apache/maven/dotnet/dao/impl/ArtifactFactoryTestStub.java?view=auto&rev=555722 ============================================================================== --- incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/test/java/org/apache/maven/dotnet/dao/impl/ArtifactFactoryTestStub.java (added) +++ incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/test/java/org/apache/maven/dotnet/dao/impl/ArtifactFactoryTestStub.java Thu Jul 12 12:07:57 2007 @@ -0,0 +1,135 @@ +package org.apache.maven.dotnet.dao.impl; + +import org.apache.maven.artifact.factory.ArtifactFactory; +import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.DefaultArtifact; +import org.apache.maven.artifact.handler.ArtifactHandler; +import org.apache.maven.artifact.handler.DefaultArtifactHandler; +import org.apache.maven.artifact.versioning.VersionRange; + +public class ArtifactFactoryTestStub + implements ArtifactFactory +{ + + public Artifact createArtifact( String groupId, String artifactId, String version, String scope, String type ) + { + return createArtifact( groupId, artifactId, version, scope, type, null, null ); + } + + public Artifact createArtifactWithClassifier( String groupId, String artifactId, String version, String type, + String classifier ) + { + return createArtifact( groupId, artifactId, version, null, type, classifier, null ); + } + + public Artifact createDependencyArtifact( String groupId, String artifactId, VersionRange versionRange, String type, + String classifier, String scope ) + { + return createArtifact( groupId, artifactId, versionRange, type, classifier, null, null ); + } + + public Artifact createDependencyArtifact( String groupId, String artifactId, VersionRange versionRange, String type, + String classifier, String scope, boolean optional ) + { + return createArtifact( groupId, artifactId, versionRange, type, classifier, scope, null, optional ); + } + + public Artifact createDependencyArtifact( String groupId, String artifactId, VersionRange versionRange, String type, + String classifier, String scope, String inheritedScope ) + { + return createArtifact( groupId, artifactId, versionRange, type, classifier, scope, inheritedScope ); + } + + public Artifact createDependencyArtifact( String groupId, String artifactId, VersionRange versionRange, String type, + String classifier, String scope, String inheritedScope, boolean optional ) + { + return createArtifact( groupId, artifactId, versionRange, type, classifier, scope, inheritedScope, optional ); + } + + public Artifact createBuildArtifact( String groupId, String artifactId, String version, String packaging ) + { + return createArtifact( groupId, artifactId, version, null, packaging, null, null ); + } + + public Artifact createProjectArtifact( String groupId, String artifactId, String version ) + { + return createProjectArtifact( groupId, artifactId, version, null ); + } + + public Artifact createParentArtifact( String groupId, String artifactId, String version ) + { + return createProjectArtifact( groupId, artifactId, version ); + } + + public Artifact createPluginArtifact( String groupId, String artifactId, VersionRange versionRange ) + { + return createArtifact( groupId, artifactId, versionRange, "maven-plugin", null, Artifact.SCOPE_RUNTIME, null ); + } + + public Artifact createProjectArtifact( String groupId, String artifactId, String version, String scope ) + { + return createArtifact( groupId, artifactId, version, scope, "pom" ); + } + + public Artifact createExtensionArtifact( String groupId, String artifactId, VersionRange versionRange ) + { + return createArtifact( groupId, artifactId, versionRange, "jar", null, Artifact.SCOPE_RUNTIME, null ); + } + + private Artifact createArtifact( String groupId, String artifactId, String version, String scope, String type, + String classifier, String inheritedScope ) + { + VersionRange versionRange = null; + if ( version != null ) + { + versionRange = VersionRange.createFromVersion( version ); + } + return createArtifact( groupId, artifactId, versionRange, type, classifier, scope, inheritedScope ); + } + + private Artifact createArtifact( String groupId, String artifactId, VersionRange versionRange, String type, + String classifier, String scope, String inheritedScope ) + { + return createArtifact( groupId, artifactId, versionRange, type, classifier, scope, inheritedScope, false ); + } + + private Artifact createArtifact( String groupId, String artifactId, VersionRange versionRange, String type, + String classifier, String scope, String inheritedScope, boolean optional ) + { + // TODO: can refactor - inherited scope calculation belongs in the collector, use scope handler + + String desiredScope = Artifact.SCOPE_RUNTIME; + if ( inheritedScope == null ) + { + desiredScope = scope; + } + else if ( Artifact.SCOPE_TEST.equals( scope ) || Artifact.SCOPE_PROVIDED.equals( scope ) ) + { + return null; + } + else if ( Artifact.SCOPE_COMPILE.equals( scope ) && Artifact.SCOPE_COMPILE.equals( inheritedScope ) ) + { + // added to retain compile scope. Remove if you want compile inherited as runtime + desiredScope = Artifact.SCOPE_COMPILE; + } + + if ( Artifact.SCOPE_TEST.equals( inheritedScope ) ) + { + desiredScope = Artifact.SCOPE_TEST; + } + + if ( Artifact.SCOPE_PROVIDED.equals( inheritedScope ) ) + { + desiredScope = Artifact.SCOPE_PROVIDED; + } + + if ( Artifact.SCOPE_SYSTEM.equals( scope ) ) + { + // system scopes come through unchanged... + desiredScope = Artifact.SCOPE_SYSTEM; + } + + return new DefaultArtifact( groupId, artifactId, versionRange, desiredScope, type, classifier, + new DefaultArtifactHandler(type), optional ); + } +} Propchange: incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/test/java/org/apache/maven/dotnet/dao/impl/ArtifactFactoryTestStub.java ------------------------------------------------------------------------------ svn:eol-style = native Added: incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/test/java/org/apache/maven/dotnet/dao/impl/ProjectDaoImplTest.java URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/test/java/org/apache/maven/dotnet/dao/impl/ProjectDaoImplTest.java?view=auto&rev=555722 ============================================================================== --- incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/test/java/org/apache/maven/dotnet/dao/impl/ProjectDaoImplTest.java (added) +++ incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/test/java/org/apache/maven/dotnet/dao/impl/ProjectDaoImplTest.java Thu Jul 12 12:07:57 2007 @@ -0,0 +1,270 @@ +package org.apache.maven.dotnet.dao.impl; + +import junit.framework.TestCase; + +import java.io.File; +import java.util.Set; +import java.util.HashSet; +import java.util.ArrayList; +import java.net.URI; + +import org.openrdf.repository.sail.SailRepository; +import org.openrdf.repository.RepositoryException; +import org.openrdf.sail.memory.MemoryStore; +import org.openrdf.sail.memory.MemoryStoreRDFSInferencer; +import org.apache.maven.dotnet.repository.Project; +import org.apache.maven.dotnet.repository.ProjectDependency; +import org.apache.maven.dotnet.repository.Requirement; +import org.apache.maven.dotnet.dao.ProjectDao; +import org.apache.maven.dotnet.dao.ProjectUri; +import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.artifact.Artifact; + +public class ProjectDaoImplTest + extends TestCase +{ + + private static File basedir = new File( System.getProperty( "basedir" ) ); + + public void testStore_WithRequirements() + { + ProjectDao dao = this.createProjectDao(); + + Project project = new Project(); + project.setGroupId( "NMaven.Model" ); + project.setArtifactId( "NMaven.Model.Pom" ); + project.setVersion( "0.14.0.0" ); + Set requirements = new HashSet(); + try + { + requirements.add( Requirement.Factory.createDefaultRequirement( new URI( ProjectUri.VENDOR.getPredicate() ), + "MICROSOFT" ) ); + requirements.add( Requirement.Factory.createDefaultRequirement( + new URI( ProjectUri.FRAMEWORK_VERSION.getPredicate() ), "2.0" ) ); + } + catch ( Exception e ) + { + e.printStackTrace(); + } + project.setRequirements( requirements ); + + Set artifacts = null; + try + { + artifacts = dao.storeProjectAndResolveDependencies( project, new ArrayList() ); + } + catch ( java.io.IOException e ) + { + e.printStackTrace(); + fail( "Could not store the project: " + e.getMessage() ); + } + + Project proj = null; + try + { + proj = dao.getProjectFor( "NMaven.Model", "NMaven.Model.Pom", "0.14.0.0", null, null ); + } + catch ( java.io.IOException e ) + { + e.printStackTrace(); + fail( "Could not query the project: " + e.getMessage() ); + } + + requirements = proj.getRequirements(); + + assertEquals( "Incorrect number of requirements.", 2, requirements.size() ); + assertTrue( "Could not find framework requirement", + hasRequirement( ProjectUri.FRAMEWORK_VERSION.getPredicate(), "2.0", requirements ) ); + assertTrue( "Could not find vendor requirement", + hasRequirement( ProjectUri.VENDOR.getPredicate(), "MICROSOFT", requirements ) ); + } + + private boolean hasRequirement( String uri, String value, Set requirements ) + { + for ( Requirement requirement : requirements ) + { + if ( uri.equals( requirement.getUri().toString() ) && value.equals( requirement.getValue() ) ) + { + return true; + } + } + return false; + } + + public void testSingleStore() + { + ProjectDao dao = this.createProjectDao(); + + Project project = new Project(); + project.setGroupId( "NMaven.Model" ); + project.setArtifactId( "NMaven.Model.Pom" ); + project.setVersion( "0.14.0.0" ); + Set artifacts = null; + try + { + artifacts = dao.storeProjectAndResolveDependencies( project, new ArrayList() ); + } + catch ( java.io.IOException e ) + { + e.printStackTrace(); + fail( "Could not store the project: " + e.getMessage() ); + } + + Project proj = null; + try + { + proj = dao.getProjectFor( "NMaven.Model", "NMaven.Model.Pom", "0.14.0.0", null, null ); + } + catch ( java.io.IOException e ) + { + e.printStackTrace(); + fail( "Could not query the project: " + e.getMessage() ); + } + + assertEquals( "Group IDs do not match", project.getGroupId(), proj.getGroupId() ); + assertEquals( "Artifact IDs do not match", project.getArtifactId(), proj.getArtifactId() ); + assertEquals( "Versions do not match", project.getVersion(), proj.getVersion() ); + + assertEquals( "Found dependency when there should be none", 0, artifacts.size() ); + } + + public void testSingleStore_WithIncorrectVersion() + { + ProjectDao dao = this.createProjectDao(); + + Project project = new Project(); + project.setGroupId( "NMaven.Model" ); + project.setArtifactId( "NMaven.Model.Pom" ); + project.setVersion( "0.14.0.0" ); + try + { + dao.storeProjectAndResolveDependencies( project, new ArrayList() ); + } + catch ( java.io.IOException e ) + { + e.printStackTrace(); + fail( e.getMessage() ); + } + + try + { + Project proj = dao.getProjectFor( "NMaven.Model", "NMaven.Model.Pom", "0.15.0.0", null, null ); + } + catch ( java.io.IOException e ) + { + return; + + } + fail( "Found project when none should exist." ); + } +/* + public void testAAA() + { + + ProjectDao dao = this.createProjectDao(); + Project project = new Project(); + project.setArtifactId( "NMaven.Model.Pom" ); + project.setGroupId( "NMaven.Model" ); + project.setVersion( "0.14.0.0" ); + + Set projectDependencies = new HashSet(); + projectDependencies.add( this.createProjectDependency( "NMaven", "NMaven.Test", "1.0.0" ) ); + ProjectDependency pj2 = this.createProjectDependency( "NMaven", "NMaven.Test2", "1.0.0" ); + pj2.addProjectDependency( this.createProjectDependency( "NMaven", "NMaven.Test3", "1.0.0" ) ); + projectDependencies.add( pj2 ); + project.setProjectDependencies( projectDependencies ); + + Set projects = new HashSet(); + projects.add( project ); + + try + { + dao.storeProjectsAndResolveDependencies( projects, new ArrayList() ); + } + catch ( java.io.IOException e ) + { + e.printStackTrace(); + fail( e.getMessage() ); + } + } +/* + public void testStore() + { + long start = System.currentTimeMillis(); + File dataDir = new File( "c:\\tmp\\myRepository\\" ); + org.openrdf.repository.Repository rdfRepository = new SailRepository( new MemoryStore( dataDir ) ); + try + { + rdfRepository.initialize(); + } + catch ( RepositoryException e ) + { + e.printStackTrace(); + } + System.out.println( "Time = " + ( System.currentTimeMillis() - start ) ); + ProjectDaoImpl dao = new ProjectDaoImpl(); + dao.init( rdfRepository, "", "" ); + + Project project = new Project(); + project.setArtifactId( "NMaven.Model.Pom" ); + project.setGroupId( "NMaven.Model" ); + project.setVersion( "0.14.0.0" ); + + Set projectDependencies = new HashSet(); + projectDependencies.add( this.createProjectDependency( "NMaven", "NMaven.Test", "1.0.0" ) ); + ProjectDependency pj = this.createProjectDependency( "NMaven", "NMaven.Test2", "1.0.0" ); + pj.addProjectDependency( this.createProjectDependency( "NMaven", "NMaven.Test3", "1.0.0" )); + projectDependencies.add( pj); + project.setProjectDependencies( projectDependencies ); + + Set projects = new HashSet(); + projects.add( project ); + + dao.storeProjectsAndResolveDependencies( projects, new ArrayList() ); + + Project queriedProject = dao.getProjectFor( "", "", "" ); + // queriedProject.setProjectDependencies( projectDependencies ); + + System.out.println( "Artifact ID = " + project.getArtifactId() ); + for ( ProjectDependency projectDependency : project.getProjectDependencies() ) + { + System.out.println( "PJ-1 = " + projectDependency.getArtifactId() ); + for ( ProjectDependency dep : projectDependency.getProjectDependencies() ) + { + System.out.println( "PJ-2 = " + dep.getArtifactId() ); + } + } + + } +*/ + + private ProjectDependency createProjectDependency( String groupId, String artifactId, String version ) + { + ProjectDependency projectDependency = new ProjectDependency(); + projectDependency.setGroupId( groupId ); + projectDependency.setArtifactId( artifactId ); + projectDependency.setVersion( version ); + return projectDependency; + } + + private ProjectDao createProjectDao() + { + File dataDir = new File( basedir, ( "/target/rdf-repos/rdf-repo-" + System.currentTimeMillis() ) ); + org.openrdf.repository.Repository rdfRepository = + new SailRepository( new MemoryStoreRDFSInferencer( new MemoryStore( dataDir ) ) ); + // new SailRepository( new MemoryStoreRDFSInferencer( new MemoryStore( dataDir ) ) ); + try + { + rdfRepository.initialize(); + } + catch ( RepositoryException e ) + { + return null; + } + ProjectDaoImpl dao = new ProjectDaoImpl(); + WagonManagerTestStub stub = new WagonManagerTestStub(); + stub.setBaseDir( basedir ); + dao.initForUnitTest( rdfRepository, "", "", stub, new ArtifactFactoryTestStub() ); + return dao; + } +} Propchange: incubator/nmaven/branches/SI_GAC/components/dotnet-dao/project/src/test/java/org/apache/maven/dotnet/dao/impl/ProjectDaoImplTest.java ------------------------------------------------------------------------------ svn:eol-style = native