Author: olamy
Date: Sun Jun  9 12:26:33 2013
New Revision: 1491199

URL: http://svn.apache.org/r1491199
Log:
fix retrieve facets when searching artifact

Modified:
    
archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java

Modified: 
archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java
URL: 
http://svn.apache.org/viewvc/archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java?rev=1491199&r1=1491198&r2=1491199&view=diff
==============================================================================
--- 
archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java
 (original)
+++ 
archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java
 Sun Jun  9 12:26:33 2013
@@ -20,6 +20,8 @@ package org.apache.archiva.metadata.repo
  */
 
 import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
 import com.netflix.astyanax.Keyspace;
 import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
 import com.netflix.astyanax.connectionpool.exceptions.NotFoundException;
@@ -54,6 +56,7 @@ import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
@@ -1762,6 +1765,87 @@ public class CassandraMetadataRepository
             artifactMetadatas.add( artifactMetadata );
         }
 
+        // retrieve facets
+        final List<MetadataFacetModel> metadataFacetModels = new 
ArrayList<MetadataFacetModel>();
+        metadataFacetModelEntityManager.visitAll( new 
Function<MetadataFacetModel, Boolean>()
+        {
+            @Override
+            public Boolean apply( MetadataFacetModel metadataFacetModel )
+            {
+                if ( metadataFacetModel != null )
+                {
+                    if ( StringUtils.equals( repoId, 
metadataFacetModel.getArtifactMetadataModel().getRepositoryId() )
+                        && StringUtils.equals( namespace, 
metadataFacetModel.getArtifactMetadataModel().getNamespace() )
+                        && StringUtils.equals( projectId, 
metadataFacetModel.getArtifactMetadataModel().getProject() )
+                        && StringUtils.equals( projectVersion,
+                                               
metadataFacetModel.getArtifactMetadataModel().getProjectVersion() ) )
+                    {
+                        metadataFacetModels.add( metadataFacetModel );
+                    }
+
+                }
+                return Boolean.TRUE;
+            }
+        } );
+
+        // rebuild MetadataFacet for artifacts
+
+        for ( final ArtifactMetadata artifactMetadata : artifactMetadatas )
+        {
+            Iterable<MetadataFacetModel> metadataFacetModelIterable =
+                Iterables.filter( metadataFacetModels, new 
Predicate<MetadataFacetModel>()
+                {
+                    @Override
+                    public boolean apply( MetadataFacetModel 
metadataFacetModel )
+                    {
+                        if ( metadataFacetModel != null )
+                        {
+                            return StringUtils.equals( 
artifactMetadata.getVersion(),
+                                                       
metadataFacetModel.getArtifactMetadataModel().getVersion() );
+                        }
+                        return false;
+                    }
+                } );
+            Iterator<MetadataFacetModel> iterator = 
metadataFacetModelIterable.iterator();
+            Map<String, List<MetadataFacetModel>> 
metadataFacetValuesPerFacetId =
+                new HashMap<String, List<MetadataFacetModel>>();
+            while ( iterator.hasNext() )
+            {
+                MetadataFacetModel metadataFacetModel = iterator.next();
+                List<MetadataFacetModel> values = 
metadataFacetValuesPerFacetId.get( metadataFacetModel.getName() );
+                if ( values == null )
+                {
+                    values = new ArrayList<MetadataFacetModel>();
+                    metadataFacetValuesPerFacetId.put( 
metadataFacetModel.getFacetId(), values );
+                }
+                values.add( metadataFacetModel );
+
+            }
+
+            for ( Map.Entry<String, List<MetadataFacetModel>> entry : 
metadataFacetValuesPerFacetId.entrySet() )
+            {
+                MetadataFacetFactory metadataFacetFactory = 
metadataFacetFactories.get( entry.getKey() );
+                if ( metadataFacetFactory != null )
+                {
+                    List<MetadataFacetModel> facetModels = entry.getValue();
+                    if ( !facetModels.isEmpty() )
+                    {
+                        MetadataFacet metadataFacet =
+                            metadataFacetFactory.createMetadataFacet( repoId, 
facetModels.get( 0 ).getName() );
+                        Map<String, String> props = new HashMap<String, 
String>( facetModels.size() );
+                        for ( MetadataFacetModel metadataFacetModel : 
facetModels )
+                        {
+                            props.put( metadataFacetModel.getKey(), 
metadataFacetModel.getValue() );
+                        }
+                        metadataFacet.fromProperties( props );
+                        artifactMetadata.addFacet( metadataFacet );
+                    }
+                }
+            }
+
+
+        }
+
         return artifactMetadatas;
     }
 


Reply via email to