Author: olamy
Date: Wed Dec 19 15:19:53 2012
New Revision: 1423878

URL: http://svn.apache.org/viewvc?rev=1423878&view=rev
Log:
[MRM-1729] add MetadataRepository#hasMetadataFacet to prevent slow startup time.

Modified:
    archiva/trunk/archiva-modules/archiva-base/archiva-policies/pom.xml
    
archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/DefaultRepositoryArchivaTaskScheduler.java
    
archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.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
    
archiva/trunk/archiva-modules/plugins/metadata-store-jcr/src/test/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepositoryTest.java
    
archiva/trunk/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java
    
archiva/trunk/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/RepositoryStatisticsManager.java
    
archiva/trunk/archiva-modules/plugins/repository-statistics/src/test/java/org/apache/archiva/metadata/repository/stats/JcrRepositoryStatisticsGatheringTest.java
    archiva/trunk/pom.xml

Modified: archiva/trunk/archiva-modules/archiva-base/archiva-policies/pom.xml
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-policies/pom.xml?rev=1423878&r1=1423877&r2=1423878&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-base/archiva-policies/pom.xml 
(original)
+++ archiva/trunk/archiva-modules/archiva-base/archiva-policies/pom.xml Wed Dec 
19 15:19:53 2012
@@ -41,10 +41,6 @@
       <groupId>commons-lang</groupId>
       <artifactId>commons-lang</artifactId>
     </dependency>
-    <!--dependency>
-      <groupId>org.springframework</groupId>
-      <artifactId>spring-asm</artifactId>
-    </dependency-->
     <dependency>
       <groupId>org.apache.archiva.redback.components.cache</groupId>
       <artifactId>spring-cache-api</artifactId>

Modified: 
archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/DefaultRepositoryArchivaTaskScheduler.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/DefaultRepositoryArchivaTaskScheduler.java?rev=1423878&r1=1423877&r2=1423878&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/DefaultRepositoryArchivaTaskScheduler.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/DefaultRepositoryArchivaTaskScheduler.java
 Wed Dec 19 15:19:53 2012
@@ -309,6 +309,7 @@ public class DefaultRepositoryArchivaTas
                                          MetadataRepository metadataRepository 
)
         throws MetadataRepositoryException
     {
+
         return repositoryStatisticsManager.getLastStatistics( 
metadataRepository, repoConfig.getId() ) != null;
     }
 

Modified: 
archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java?rev=1423878&r1=1423877&r2=1423878&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java
 (original)
+++ 
archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java
 Wed Dec 19 15:19:53 2012
@@ -54,6 +54,17 @@ public interface MetadataRepository
     List<String> getMetadataFacets( String repositoryId, String facetId )
         throws MetadataRepositoryException;
 
+    /**
+     *
+     * @param repositoryId
+     * @param facetId
+     * @return true if the repository datas for this facetId
+     * @since 1.4-M4
+     * @throws MetadataRepositoryException
+     */
+    boolean hasMetadataFacet( String repositoryId, String facetId )
+        throws MetadataRepositoryException;
+
     MetadataFacet getMetadataFacet( String repositoryId, String facetId, 
String name )
         throws MetadataRepositoryException;
 

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=1423878&r1=1423877&r2=1423878&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
 Wed Dec 19 15:19:53 2012
@@ -40,8 +40,10 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.test.context.ContextConfiguration;
 
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Calendar;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
@@ -49,9 +51,10 @@ import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.TimeZone;
 
-@RunWith (ArchivaSpringJUnit4ClassRunner.class)
-@ContextConfiguration (locations = { 
"classpath*:/META-INF/spring-context.xml", "classpath*:/spring-context.xml" })
+@RunWith( ArchivaSpringJUnit4ClassRunner.class )
+@ContextConfiguration( locations = { 
"classpath*:/META-INF/spring-context.xml", "classpath*:/spring-context.xml" } )
 public abstract class AbstractMetadataRepositoryTest
     extends TestCase
 {
@@ -704,6 +707,52 @@ public abstract class AbstractMetadataRe
     }
 
     @Test
+    public void hasMetadataFacetStart()
+        throws Exception
+    {
+        assertFalse( repository.hasMetadataFacet( TEST_REPO_ID, 
KindOfRepositoryStatistics.class.getName() ) );
+
+    }
+
+    @Test
+    public void hasMetadataFacet()
+        throws Exception
+    {
+
+        assertFalse( repository.hasMetadataFacet( TEST_REPO_ID, 
KindOfRepositoryStatistics.class.getName() ) );
+
+        Calendar cal = Calendar.getInstance();
+
+        repository.addMetadataFacet( TEST_REPO_ID, new 
KindOfRepositoryStatistics( "first", cal.getTime() ) );
+
+        assertTrue( repository.hasMetadataFacet( TEST_REPO_ID, 
KindOfRepositoryStatistics.class.getName() ) );
+
+        cal.add( Calendar.MINUTE, 2 );
+
+        repository.addMetadataFacet( TEST_REPO_ID, new 
KindOfRepositoryStatistics( "second", cal.getTime() ) );
+
+        cal.add( Calendar.MINUTE, 2 );
+
+        repository.addMetadataFacet( TEST_REPO_ID, new 
KindOfRepositoryStatistics( "third", cal.getTime() ) );
+
+        List<String> facets = repository.getMetadataFacets( TEST_REPO_ID, 
KindOfRepositoryStatistics.class.getName() );
+
+        Assertions.assertThat( facets ).isNotNull().isNotEmpty().hasSize( 3 );
+
+        assertTrue( repository.hasMetadataFacet( TEST_REPO_ID, 
KindOfRepositoryStatistics.class.getName() ) );
+
+        repository.removeMetadataFacets( TEST_REPO_ID, 
KindOfRepositoryStatistics.class.getName() );
+
+        assertFalse( repository.hasMetadataFacet( TEST_REPO_ID, 
KindOfRepositoryStatistics.class.getName() ) );
+
+        facets = repository.getMetadataFacets( TEST_REPO_ID, 
KindOfRepositoryStatistics.class.getName() );
+
+        Assertions.assertThat( facets ).isNotNull().isEmpty();
+
+    }
+
+
+    @Test
     public void testGetArtifacts()
         throws Exception
     {
@@ -1231,6 +1280,7 @@ public abstract class AbstractMetadataRe
         Assertions.assertThat( artifactMetadatas ).isNotNull().isEmpty();
     }
 
+
     private static ProjectMetadata createProject()
     {
         return createProject( TEST_NAMESPACE );
@@ -1274,6 +1324,51 @@ public abstract class AbstractMetadataRe
         }
     }
 
+    private static class KindOfRepositoryStatistics
+        implements MetadataFacet
+    {
+        private String value;
+
+        private Date date;
+
+        static final String SCAN_TIMESTAMP_FORMAT = "yyyy/MM/dd/HHmmss.SSS";
+
+        private static final TimeZone UTC_TIME_ZONE = TimeZone.getTimeZone( 
"UTC" );
+
+        private KindOfRepositoryStatistics( String value, Date date )
+        {
+            this.value = value;
+            this.date = date;
+        }
+
+        public String getName()
+        {
+            return createNameFormat().format( date );
+        }
+
+        private static SimpleDateFormat createNameFormat()
+        {
+            SimpleDateFormat fmt = new SimpleDateFormat( SCAN_TIMESTAMP_FORMAT 
);
+            fmt.setTimeZone( UTC_TIME_ZONE );
+            return fmt;
+        }
+
+        public String getFacetId()
+        {
+            return KindOfRepositoryStatistics.class.getName();
+        }
+
+        public Map<String, String> toProperties()
+        {
+            return Collections.emptyMap();
+        }
+
+        public void fromProperties( Map<String, String> properties )
+        {
+            // no op
+        }
+    }
+
     private static class TestMetadataFacet
         implements MetadataFacet
     {

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=1423878&r1=1423877&r2=1423878&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
 Wed Dec 19 15:19:53 2012
@@ -400,6 +400,26 @@ public class JcrMetadataRepository
 
     }
 
+
+    public boolean hasMetadataFacet( String repositoryId, String facetId )
+        throws MetadataRepositoryException
+    {
+        try
+        {
+            Node node = getJcrSession().getRootNode().getNode( getFacetPath( 
repositoryId, facetId ) );
+            return JcrUtils.getChildNodes( node ).iterator().hasNext();
+        }
+        catch ( PathNotFoundException e )
+        {
+            // ignored - the facet doesn't exist, so return false
+            return false;
+        }
+        catch ( RepositoryException e )
+        {
+            throw new MetadataRepositoryException( e.getMessage(), e );
+        }
+    }
+
     public List<String> getMetadataFacets( String repositoryId, String facetId 
)
         throws MetadataRepositoryException
     {

Modified: 
archiva/trunk/archiva-modules/plugins/metadata-store-jcr/src/test/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepositoryTest.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/metadata-store-jcr/src/test/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepositoryTest.java?rev=1423878&r1=1423877&r2=1423878&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/plugins/metadata-store-jcr/src/test/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepositoryTest.java
 (original)
+++ 
archiva/trunk/archiva-modules/plugins/metadata-store-jcr/src/test/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepositoryTest.java
 Wed Dec 19 15:19:53 2012
@@ -24,6 +24,7 @@ import org.apache.archiva.metadata.repos
 import org.apache.commons.io.FileUtils;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Test;
 import org.springframework.context.ApplicationContext;
 
 import java.io.File;
@@ -48,7 +49,7 @@ public class JcrMetadataRepositoryTest
         super.setUp();
 
         File directory = new File( "target/test-repositories" );
-        if (directory.exists())
+        if ( directory.exists() )
         {
             FileUtils.deleteDirectory( directory );
         }
@@ -86,4 +87,6 @@ public class JcrMetadataRepositoryTest
 
         super.tearDown();
     }
+
+
 }

Modified: 
archiva/trunk/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java?rev=1423878&r1=1423877&r2=1423878&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java
 (original)
+++ 
archiva/trunk/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java
 Wed Dec 19 15:19:53 2012
@@ -59,6 +59,12 @@ public class DefaultRepositoryStatistics
 
     private static final TimeZone UTC_TIME_ZONE = TimeZone.getTimeZone( "UTC" 
);
 
+    public boolean hasStatistics( MetadataRepository metadataRepository, 
String repositoryId )
+        throws MetadataRepositoryException
+    {
+        return metadataRepository.hasMetadataFacet( repositoryId, 
RepositoryStatistics.FACET_ID );
+    }
+
     public RepositoryStatistics getLastStatistics( MetadataRepository 
metadataRepository, String repositoryId )
         throws MetadataRepositoryException
     {

Modified: 
archiva/trunk/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/RepositoryStatisticsManager.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/RepositoryStatisticsManager.java?rev=1423878&r1=1423877&r2=1423878&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/RepositoryStatisticsManager.java
 (original)
+++ 
archiva/trunk/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/RepositoryStatisticsManager.java
 Wed Dec 19 15:19:53 2012
@@ -30,6 +30,9 @@ public interface RepositoryStatisticsMan
     RepositoryStatistics getLastStatistics( MetadataRepository 
metadataRepository, String repositoryId )
         throws MetadataRepositoryException;
 
+    boolean hasStatistics( MetadataRepository metadataRepository, String 
repositoryId )
+        throws MetadataRepositoryException;
+
     void addStatisticsAfterScan( MetadataRepository metadataRepository, String 
repositoryId, Date startTime,
                                  Date endTime, long totalFiles, long newFiles )
         throws MetadataRepositoryException;

Modified: 
archiva/trunk/archiva-modules/plugins/repository-statistics/src/test/java/org/apache/archiva/metadata/repository/stats/JcrRepositoryStatisticsGatheringTest.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/repository-statistics/src/test/java/org/apache/archiva/metadata/repository/stats/JcrRepositoryStatisticsGatheringTest.java?rev=1423878&r1=1423877&r2=1423878&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/plugins/repository-statistics/src/test/java/org/apache/archiva/metadata/repository/stats/JcrRepositoryStatisticsGatheringTest.java
 (original)
+++ 
archiva/trunk/archiva-modules/plugins/repository-statistics/src/test/java/org/apache/archiva/metadata/repository/stats/JcrRepositoryStatisticsGatheringTest.java
 Wed Dec 19 15:19:53 2012
@@ -21,10 +21,12 @@ package org.apache.archiva.metadata.repo
 
 import junit.framework.TestCase;
 import org.apache.archiva.metadata.repository.MetadataRepository;
+import org.apache.archiva.metadata.repository.RepositorySessionFactory;
 import org.apache.commons.io.FileUtils;
 import org.apache.jackrabbit.commons.JcrUtils;
 import org.apache.jackrabbit.core.TransientRepository;
 
+import javax.inject.Inject;
 import javax.jcr.ImportUUIDBehavior;
 import javax.jcr.NamespaceRegistry;
 import javax.jcr.Node;
@@ -39,6 +41,7 @@ import java.io.IOException;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.zip.GZIPInputStream;
+
 import org.apache.archiva.test.utils.ArchivaBlockJUnit4ClassRunner;
 import org.junit.After;
 import org.junit.Before;
@@ -46,6 +49,7 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 
 import static org.mockito.Mockito.*;
+
 @RunWith( ArchivaBlockJUnit4ClassRunner.class )
 public class JcrRepositoryStatisticsGatheringTest
     extends TestCase
@@ -60,6 +64,9 @@ public class JcrRepositoryStatisticsGath
 
     private MetadataRepository metadataRepository;
 
+    @Inject
+    private RepositorySessionFactory repositorySessionFactory;
+
     private Session session;
 
     @Override

Modified: archiva/trunk/pom.xml
URL: 
http://svn.apache.org/viewvc/archiva/trunk/pom.xml?rev=1423878&r1=1423877&r2=1423878&view=diff
==============================================================================
--- archiva/trunk/pom.xml (original)
+++ archiva/trunk/pom.xml Wed Dec 19 15:19:53 2012
@@ -1357,17 +1357,6 @@
           </exclusion>
         </exclusions>
       </dependency>
-      <!--dependency>
-        <groupId>org.springframework</groupId>
-        <artifactId>spring-asm</artifactId>
-        <version>${spring.version}</version>
-        <exclusions>
-          <exclusion>
-            <groupId>commons-logging</groupId>
-            <artifactId>commons-logging</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency-->
       <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-core</artifactId>


Reply via email to