Author: brett
Date: Sat Mar 26 14:00:06 2011
New Revision: 1085722

URL: http://svn.apache.org/viewvc?rev=1085722&view=rev
Log:
[MRM-1327] fix 'used by' to work under JCR store. This will still have problems 
under the file store at the moment

Modified:
    
archiva/sandbox/populate-jcr-repo/src/main/java/org/apache/archiva/metadata/repository/jcr/QueryRepoApp.java
    
archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java
    
archiva/trunk/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java

Modified: 
archiva/sandbox/populate-jcr-repo/src/main/java/org/apache/archiva/metadata/repository/jcr/QueryRepoApp.java
URL: 
http://svn.apache.org/viewvc/archiva/sandbox/populate-jcr-repo/src/main/java/org/apache/archiva/metadata/repository/jcr/QueryRepoApp.java?rev=1085722&r1=1085721&r2=1085722&view=diff
==============================================================================
--- 
archiva/sandbox/populate-jcr-repo/src/main/java/org/apache/archiva/metadata/repository/jcr/QueryRepoApp.java
 (original)
+++ 
archiva/sandbox/populate-jcr-repo/src/main/java/org/apache/archiva/metadata/repository/jcr/QueryRepoApp.java
 Sat Mar 26 14:00:06 2011
@@ -102,13 +102,16 @@ public class QueryRepoApp
         System.out.println( "querying dependencies on project " + namespace + 
":" + project + ":" + version );
 
         long time = System.currentTimeMillis();
-        String q = "SELECT * FROM archiva:dependency WHERE jcr:path LIKE '%/" 
+ namespace + "/" + project;
+
+        // TODO: bind variables instead
+        String q =
+            "SELECT * FROM [archiva:dependency] WHERE 
ISDESCENDANTNODE([/repositories/internal/content]) AND [groupId]='" +
+                namespace + "' AND [artifactId]='" + project + "'";
         if ( version != null )
         {
-            q += "/" + version;
+            q += " AND [version]='" + version + "'";
         }
-        q += "/%' ORDER BY jcr:score";
-        Query query = queryManager.createQuery( q, Query.SQL );
+        Query query = queryManager.createQuery( q, Query.JCR_SQL2 );
 
         QueryResult execute = query.execute();
         System.out.println( "query in " + ( System.currentTimeMillis() - time 
) + " ms" );
@@ -116,11 +119,11 @@ public class QueryRepoApp
         for ( Row r : JcrUtils.getRows( execute ) )
         {
             Node n = r.getNode();
-            n = n.getParent(); // dependency version
+//            n = n.getParent(); // dependency version
             String dependencyVersion = n.getName();
 
-            n = n.getParent(); // dependency project
-            n = n.getParent(); // dependency namespace
+//            n = n.getParent(); // dependency project
+//            n = n.getParent(); // dependency namespace
             n = n.getParent(); // dependencies element
             n = n.getParent(); // project version
 
@@ -132,8 +135,8 @@ public class QueryRepoApp
             n = n.getParent(); // namespace
             String usedByNamespace = n.getProperty( "namespace" ).getString();
 
-//            System.out.println(
-//                usedByNamespace + ":" + usedByProject + ":" + 
usedByProjectVersion + " -> " + dependencyVersion );
+            System.out.println(
+                usedByNamespace + ":" + usedByProject + ":" + 
usedByProjectVersion + " -> " + dependencyVersion );
         }
 
         System.out.println( "results in " + ( System.currentTimeMillis() - 
time ) + " ms" );

Modified: 
archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java?rev=1085722&r1=1085721&r2=1085722&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java
 (original)
+++ 
archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java
 Sat Mar 26 14:00:06 2011
@@ -30,7 +30,6 @@ import org.apache.archiva.metadata.model
 import org.apache.archiva.metadata.model.Organization;
 import org.apache.archiva.metadata.model.ProjectMetadata;
 import org.apache.archiva.metadata.model.ProjectVersionMetadata;
-import org.apache.archiva.metadata.model.ProjectVersionReference;
 import org.apache.archiva.metadata.model.Scm;
 import org.codehaus.plexus.spring.PlexusInSpringTestCase;
 
@@ -307,29 +306,6 @@ public abstract class AbstractMetadataRe
         assertTrue( d.isOptional() );
     }
 
-    public void testUpdateProjectReference()
-        throws Exception
-    {
-        ProjectVersionReference reference = new ProjectVersionReference();
-        reference.setNamespace( "another.namespace" );
-        reference.setProjectId( "another-project-id" );
-        reference.setProjectVersion( "1.1" );
-        reference.setReferenceType( 
ProjectVersionReference.ReferenceType.DEPENDENCY );
-
-        repository.updateProjectReference( TEST_REPO_ID, TEST_NAMESPACE, 
TEST_PROJECT, TEST_PROJECT_VERSION,
-                                           reference );
-
-        Collection<ProjectVersionReference> references = 
repository.getProjectReferences( TEST_REPO_ID, TEST_NAMESPACE,
-                                                                               
           TEST_PROJECT,
-                                                                               
           TEST_PROJECT_VERSION );
-        assertEquals( 1, references.size() );
-        reference = references.iterator().next();
-        assertEquals( "another.namespace", reference.getNamespace() );
-        assertEquals( "another-project-id", reference.getProjectId() );
-        assertEquals( "1.1", reference.getProjectVersion() );
-        assertEquals( ProjectVersionReference.ReferenceType.DEPENDENCY, 
reference.getReferenceType() );
-    }
-
     public void testGetRepositories()
         throws Exception
     {

Modified: 
archiva/trunk/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java?rev=1085722&r1=1085721&r2=1085722&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
 (original)
+++ 
archiva/trunk/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
 Sat Mar 26 14:00:06 2011
@@ -943,42 +943,37 @@ public class JcrMetadataRepository
     {
         List<ProjectVersionReference> references = new 
ArrayList<ProjectVersionReference>();
 
+        // TODO: bind variables instead
+        String q = "SELECT * FROM [archiva:dependency] WHERE 
ISDESCENDANTNODE([/repositories/" + repositoryId +
+            "/content]) AND [groupId]='" + namespace + "' AND [artifactId]='" 
+ projectId + "'";
+        if ( projectVersion != null )
+        {
+            q += " AND [version]='" + projectVersion + "'";
+        }
         try
         {
-            Node root = session.getRootNode();
+            Query query = 
session.getWorkspace().getQueryManager().createQuery( q, Query.JCR_SQL2 );
+            QueryResult result = query.execute();
 
-            String path = getProjectVersionPath( repositoryId, namespace, 
projectId, projectVersion ) + "/references";
-            if ( root.hasNode( path ) )
+            for ( Node n : JcrUtils.getNodes( result ) )
             {
-                Node node = root.getNode( path );
-
-                NodeIterator i = node.getNodes();
-                while ( i.hasNext() )
-                {
-                    Node ns = i.nextNode();
+                n = n.getParent(); // dependencies grouping element
 
-                    NodeIterator j = ns.getNodes();
+                n = n.getParent(); // project version
+                String usedByProjectVersion = n.getName();
 
-                    while ( j.hasNext() )
-                    {
-                        Node project = j.nextNode();
-
-                        NodeIterator k = project.getNodes();
-
-                        while ( k.hasNext() )
-                        {
-                            Node version = k.nextNode();
+                n = n.getParent(); // project
+                String usedByProject = n.getName();
 
-                            ProjectVersionReference ref = new 
ProjectVersionReference();
-                            ref.setNamespace( ns.getName() );
-                            ref.setProjectId( project.getName() );
-                            ref.setProjectVersion( version.getName() );
-                            String type = version.getProperty( "type" 
).getString();
-                            ref.setReferenceType( 
ProjectVersionReference.ReferenceType.valueOf( type ) );
-                            references.add( ref );
-                        }
-                    }
-                }
+                n = n.getParent(); // namespace
+                String usedByNamespace = n.getProperty( "namespace" 
).getString();
+
+                ProjectVersionReference ref = new ProjectVersionReference();
+                ref.setNamespace( usedByNamespace );
+                ref.setProjectId( usedByProject );
+                ref.setProjectVersion( usedByProjectVersion );
+                ref.setReferenceType( 
ProjectVersionReference.ReferenceType.DEPENDENCY );
+                references.add( ref );
             }
         }
         catch ( RepositoryException e )


Reply via email to