This is an automated email from the ASF dual-hosted git repository.

martin_s pushed a commit to branch feature/storage_refactoring
in repository https://gitbox.apache.org/repos/asf/archiva.git


The following commit(s) were added to refs/heads/feature/storage_refactoring by 
this push:
     new 7a5bc65  Implementing stream methods. Changing date arguments to java 
time API.
7a5bc65 is described below

commit 7a5bc65de4877f79b7c8ff30fc4f77976cce46cb
Author: Martin Stockhammer <[email protected]>
AuthorDate: Tue Aug 20 10:01:49 2019 +0200

    Implementing stream methods. Changing date arguments to java time API.
---
 .../processor/NewArtifactsRssFeedProcessor.java    |  13 +-
 .../NewArtifactsRssFeedProcessorTest.java          |  18 ++-
 .../webtest/memory/TestMetadataRepository.java     |   3 +-
 .../repository/AbstractMetadataRepository.java     |   3 +-
 .../metadata/repository/MetadataRepository.java    |  50 ++++++--
 .../repository/AbstractMetadataRepositoryTest.java |  15 ++-
 .../cassandra/CassandraMetadataRepository.java     |   9 +-
 .../repository/file/FileMetadataRepository.java    |  10 +-
 .../repository/jcr/JcrMetadataRepository.java      | 131 +++++++++++----------
 9 files changed, 150 insertions(+), 102 deletions(-)

diff --git 
a/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessor.java
 
b/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessor.java
index ac68bd6..99260c5 100644
--- 
a/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessor.java
+++ 
b/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessor.java
@@ -32,6 +32,11 @@ import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
 import javax.inject.Inject;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
+import java.time.temporal.ChronoUnit;
+import java.time.temporal.TemporalUnit;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
@@ -91,14 +96,14 @@ public class NewArtifactsRssFeedProcessor
     private SyndFeed processNewArtifactsInRepo( String repoId )
         throws FeedException
     {
-        Calendar greaterThanThisDate = Calendar.getInstance( GMT_TIME_ZONE );
-        greaterThanThisDate.add( Calendar.DATE, -( getNumberOfDaysBeforeNow() 
) );
-        greaterThanThisDate.clear( Calendar.MILLISECOND );
 
+        ZonedDateTime greaterThanThisDate = 
ZonedDateTime.of(LocalDateTime.now(), GMT_TIME_ZONE.toZoneId()).minusDays(
+                getNumberOfDaysBeforeNow()
+        ).truncatedTo(ChronoUnit.SECONDS);
         List<ArtifactMetadata> artifacts;
         try(RepositorySession session = 
repositorySessionFactory.createSession())
         {
-            artifacts = 
session.getRepository().getArtifactsByDateRange(session , repoId, 
greaterThanThisDate.getTime(), null );
+            artifacts = 
session.getRepository().getArtifactsByDateRange(session , repoId, 
greaterThanThisDate, null );
         }
         catch ( MetadataRepositoryException e )
         {
diff --git 
a/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessorTest.java
 
b/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessorTest.java
index 9f16007..f6e3310 100644
--- 
a/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessorTest.java
+++ 
b/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessorTest.java
@@ -23,9 +23,7 @@ import com.sun.syndication.feed.synd.SyndEntry;
 import com.sun.syndication.feed.synd.SyndFeed;
 import junit.framework.TestCase;
 import org.apache.archiva.metadata.model.ArtifactMetadata;
-import org.apache.archiva.metadata.model.MetadataFacet;
 import org.apache.archiva.metadata.repository.AbstractMetadataRepository;
-import org.apache.archiva.metadata.repository.MetadataRepositoryException;
 import org.apache.archiva.metadata.repository.RepositorySession;
 import org.apache.archiva.metadata.repository.RepositorySessionFactory;
 import org.apache.archiva.rss.RssFeedGenerator;
@@ -37,6 +35,7 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 
 import java.time.ZonedDateTime;
+import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
@@ -44,7 +43,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.TimeZone;
-import java.util.stream.Stream;
 
 @RunWith (ArchivaBlockJUnit4ClassRunner.class)
 public class NewArtifactsRssFeedProcessorTest
@@ -119,7 +117,7 @@ public class NewArtifactsRssFeedProcessorTest
         // check that the date used in the call is close to the one passed (5 
seconds difference at most)
         Calendar cal = Calendar.getInstance( TimeZone.getTimeZone( "GMT" ) );
         cal.add( Calendar.DATE, -30 );
-        assertTrue( ( metadataRepository.getFrom().getTime() - 
cal.getTimeInMillis() ) < 1000 * 5 );
+        assertTrue( metadataRepository.getFrom().minus(cal.getTimeInMillis(), 
ChronoUnit.MILLIS).toInstant().toEpochMilli() < 1000 * 5 );
         assertEquals( null, metadataRepository.getTo() );
         assertEquals( TEST_REPO, metadataRepository.getRepoId() );
 
@@ -153,7 +151,7 @@ public class NewArtifactsRssFeedProcessorTest
     private class MetadataRepositoryMock
         extends AbstractMetadataRepository
     {
-        private Date from, to;
+        private ZonedDateTime from, to;
 
         private String repoId;
 
@@ -162,7 +160,7 @@ public class NewArtifactsRssFeedProcessorTest
 
 
         @Override
-        public List<ArtifactMetadata> getArtifactsByDateRange( 
RepositorySession session, String repoId, Date from, Date to )
+        public List<ArtifactMetadata> 
getArtifactsByDateRange(RepositorySession session, String repoId, ZonedDateTime 
from, ZonedDateTime to )
         {
             setRepoId( repoId );
             setFrom( from );
@@ -170,22 +168,22 @@ public class NewArtifactsRssFeedProcessorTest
             return artifactsByDateRange;
         }
 
-        public void setFrom( Date from )
+        public void setFrom(ZonedDateTime from )
         {
             this.from = from;
         }
 
-        public Date getFrom()
+        public ZonedDateTime getFrom()
         {
             return from;
         }
 
-        public void setTo( Date to )
+        public void setTo(ZonedDateTime to )
         {
             this.to = to;
         }
 
-        public Date getTo()
+        public ZonedDateTime getTo()
         {
             return to;
         }
diff --git 
a/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/webtest/memory/TestMetadataRepository.java
 
b/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/webtest/memory/TestMetadataRepository.java
index f2d7cf2..6c1e9b8 100644
--- 
a/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/webtest/memory/TestMetadataRepository.java
+++ 
b/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/webtest/memory/TestMetadataRepository.java
@@ -23,6 +23,7 @@ import org.apache.archiva.metadata.model.ArtifactMetadata;
 import org.apache.archiva.metadata.repository.AbstractMetadataRepository;
 import org.apache.archiva.metadata.repository.RepositorySession;
 
+import java.time.ZonedDateTime;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -89,7 +90,7 @@ public class TestMetadataRepository
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByDateRange( RepositorySession 
session, String repoId, Date startTime, Date endTime )
+    public List<ArtifactMetadata> getArtifactsByDateRange(RepositorySession 
session, String repoId, ZonedDateTime startTime, ZonedDateTime endTime )
     {
         return artifacts;
     }
diff --git 
a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/AbstractMetadataRepository.java
 
b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/AbstractMetadataRepository.java
index 20040c4..d3e18c4 100644
--- 
a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/AbstractMetadataRepository.java
+++ 
b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/AbstractMetadataRepository.java
@@ -28,7 +28,6 @@ import 
org.apache.archiva.metadata.model.ProjectVersionReference;
 
 import java.time.ZonedDateTime;
 import java.util.Collection;
-import java.util.Date;
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Stream;
@@ -112,7 +111,7 @@ public abstract class AbstractMetadataRepository
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByDateRange( RepositorySession 
session, String repositoryId, Date startTime, Date endTime )
+    public List<ArtifactMetadata> getArtifactsByDateRange(RepositorySession 
session, String repositoryId, ZonedDateTime startTime, ZonedDateTime endTime )
         throws MetadataRepositoryException
     {
         throw new UnsupportedOperationException();
diff --git 
a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java
 
b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java
index c35d5f9..68ba5e0 100644
--- 
a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java
+++ 
b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java
@@ -24,12 +24,9 @@ import org.apache.archiva.metadata.model.MetadataFacet;
 import org.apache.archiva.metadata.model.ProjectMetadata;
 import org.apache.archiva.metadata.model.ProjectVersionMetadata;
 import org.apache.archiva.metadata.model.ProjectVersionReference;
-import org.apache.maven.index_shaded.lucene.util.packed.DirectMonotonicReader;
 
-import java.time.LocalDateTime;
 import java.time.ZonedDateTime;
 import java.util.Collection;
-import java.util.Date;
 import java.util.List;
 import java.util.stream.Stream;
 
@@ -192,25 +189,51 @@ public interface MetadataRepository
         throws MetadataRepositoryException;
 
     /**
-     * Returns the facet instance using the proper class.
+     * Returns the facet instance for the given class, which is stored on 
repository level for the given name.
+     * If the given name does not point to a instance that can be represented 
by this class, <code>null</code> will be returned.
+     * If the facet is not found the method returns <code>null</code>.
      *
      * @param session The repository session
-     * @param repositoryId The repository
+     * @param repositoryId The id of the repository
      * @param clazz The facet object class
-     * @param name The name of the facet
-     * @param <T> The facet object
-     * @return The facet instance if it exists.
+     * @param name The name of the facet (name or path)
+     * @param <T> The type of the facet object
+     * @return The facet instance, if it exists.
      * @throws MetadataRepositoryException
      */
     <T extends MetadataFacet> T getMetadataFacet(RepositorySession session, 
String repositoryId, Class<T> clazz, String name)
     throws MetadataRepositoryException;
 
+    /**
+     * Adss a facet to the repository level.
+     *
+     * @param session The repository session
+     * @param repositoryId The id of the repository
+     * @param metadataFacet The facet to add
+     * @throws MetadataRepositoryException if the facet cannot be stored.
+     */
     void addMetadataFacet( RepositorySession session, String repositoryId, 
MetadataFacet metadataFacet )
         throws MetadataRepositoryException;
 
+    /**
+     * Removes all facets with the given facetId from the repository level.
+     *
+     * @param session The repository session
+     * @param repositoryId The id of the repository
+     * @param facetId The facet id
+     * @throws MetadataRepositoryException if the removal fails
+     */
     void removeMetadataFacets( RepositorySession session, String repositoryId, 
String facetId )
         throws MetadataRepositoryException;
 
+    /**
+     * Removes the given facet from the repository level, if it exists.
+     *
+     * @param session The repository session
+     * @param repositoryId The id of the repository
+     * @param facetId The facet id
+     * @param name The facet name or path
+     */
     void removeMetadataFacet( RepositorySession session, String repositoryId, 
String facetId, String name )
         throws MetadataRepositoryException;
 
@@ -225,9 +248,18 @@ public interface MetadataRepository
      * @return
      * @throws MetadataRepositoryException
      */
-    List<ArtifactMetadata> getArtifactsByDateRange( RepositorySession session, 
String repositoryId, Date startTime, Date endTime )
+    List<ArtifactMetadata> getArtifactsByDateRange(RepositorySession session, 
String repositoryId, ZonedDateTime startTime, ZonedDateTime endTime )
         throws MetadataRepositoryException;
 
+    /**
+     * Returns all the artifacts
+     * @param session
+     * @param repositoryId
+     * @param startTime
+     * @param endTime
+     * @return
+     * @throws MetadataRepositoryException
+     */
     Stream<ArtifactMetadata> getArtifactsByDateRangeStream( RepositorySession 
session, String repositoryId, ZonedDateTime startTime, ZonedDateTime endTime )
         throws MetadataRepositoryException;
 
diff --git 
a/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java
 
b/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java
index 3da98c9..0b48041 100644
--- 
a/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java
+++ 
b/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java
@@ -35,7 +35,10 @@ import org.springframework.format.annotation.NumberFormat;
 import org.springframework.test.context.ContextConfiguration;
 
 import java.text.SimpleDateFormat;
+import java.time.ZonedDateTime;
+import java.time.temporal.TemporalUnit;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -1221,7 +1224,7 @@ public abstract class AbstractMetadataRepositoryTest
             getRepository( ).updateArtifact( session, TEST_REPO_ID, 
TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
             session.save( );
 
-            Date date = new Date( artifact.getWhenGathered( ).getTime( ) - 
10000 );
+            ZonedDateTime date = 
ZonedDateTime.from(artifact.getWhenGathered().toInstant()).minusSeconds(10);
 
             tryAssert( ( ) -> {
                 List<ArtifactMetadata> artifacts = getRepository( 
).getArtifactsByDateRange( session, TEST_REPO_ID, date, null );
@@ -1240,7 +1243,7 @@ public abstract class AbstractMetadataRepositoryTest
             ArtifactMetadata artifact = createArtifact( );
             getRepository( ).updateArtifact( session, TEST_REPO_ID, 
TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
 
-            Date date = new Date( artifact.getWhenGathered( ).getTime( ) + 
10000 );
+            ZonedDateTime date = 
ZonedDateTime.from(artifact.getWhenGathered().toInstant()).plusSeconds(10);
 
             tryAssert( ( ) -> {
                 List<ArtifactMetadata> artifacts = getRepository( 
).getArtifactsByDateRange( session, TEST_REPO_ID, date, null );
@@ -1260,8 +1263,8 @@ public abstract class AbstractMetadataRepositoryTest
             getRepository( ).updateArtifact( session, TEST_REPO_ID, 
TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
             session.save( );
 
-            Date lower = new Date( artifact.getWhenGathered( ).getTime( ) - 
10000 );
-            Date upper = new Date( artifact.getWhenGathered( ).getTime( ) + 
10000 );
+            ZonedDateTime lower = 
ZonedDateTime.from(artifact.getWhenGathered().toInstant()).minusSeconds(10);
+            ZonedDateTime upper = 
ZonedDateTime.from(artifact.getWhenGathered().toInstant()).plusSeconds(10);
 
             tryAssert( ( ) -> {
                 List<ArtifactMetadata> artifacts = getRepository( 
).getArtifactsByDateRange( session, TEST_REPO_ID, lower, upper );
@@ -1281,7 +1284,7 @@ public abstract class AbstractMetadataRepositoryTest
             getRepository( ).updateArtifact( session, TEST_REPO_ID, 
TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
             session.save( );
 
-            Date upper = new Date( artifact.getWhenGathered( ).getTime( ) + 
10000 );
+            ZonedDateTime upper = 
ZonedDateTime.from(artifact.getWhenGathered().toInstant()).plusSeconds(10);
 
             tryAssert( ( ) -> {
                 List<ArtifactMetadata> artifacts = getRepository( 
).getArtifactsByDateRange( session, TEST_REPO_ID, null, upper );
@@ -1301,7 +1304,7 @@ public abstract class AbstractMetadataRepositoryTest
             getRepository( ).updateArtifact( session, TEST_REPO_ID, 
TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
             session.save( );
 
-            Date upper = new Date( artifact.getWhenGathered( ).getTime( ) - 
10000 );
+            ZonedDateTime upper = 
ZonedDateTime.from(artifact.getWhenGathered().toInstant()).minusSeconds(10);
 
             tryAssert( ( ) -> {
                 List<ArtifactMetadata> artifacts = getRepository( 
).getArtifactsByDateRange( session, TEST_REPO_ID, null, upper );
diff --git 
a/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java
 
b/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java
index 757d50a..4d9ef2b 100644
--- 
a/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java
+++ 
b/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java
@@ -64,7 +64,6 @@ import 
org.apache.archiva.metadata.repository.cassandra.model.Namespace;
 import org.apache.archiva.metadata.repository.cassandra.model.Project;
 import 
org.apache.archiva.metadata.repository.cassandra.model.ProjectVersionMetadataModel;
 import org.apache.archiva.metadata.repository.cassandra.model.Repository;
-import org.apache.archiva.repository.RepositoryException;
 import org.apache.commons.lang.StringUtils;
 import org.modelmapper.ModelMapper;
 import org.slf4j.Logger;
@@ -1748,8 +1747,8 @@ public class CassandraMetadataRepository
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByDateRange( RepositorySession 
session, final String repositoryId, final Date startTime,
-                                                           final Date endTime )
+    public List<ArtifactMetadata> getArtifactsByDateRange( RepositorySession 
session, final String repositoryId, final ZonedDateTime startTime,
+                                                           final ZonedDateTime 
endTime )
         throws MetadataRepositoryException
     {
 
@@ -1761,11 +1760,11 @@ public class CassandraMetadataRepository
 
         if ( startTime != null )
         {
-            query = query.addGteExpression( WHEN_GATHERED.toString(), 
startTime.getTime() );
+            query = query.addGteExpression( WHEN_GATHERED.toString(), 
startTime.toInstant().toEpochMilli() );
         }
         if ( endTime != null )
         {
-            query = query.addLteExpression( WHEN_GATHERED.toString(), 
endTime.getTime() );
+            query = query.addLteExpression( WHEN_GATHERED.toString(), 
endTime.toInstant().toEpochMilli() );
         }
         QueryResult<OrderedRows<String, String, Long>> result = 
query.execute();
 
diff --git 
a/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
 
b/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
index 6cf7c35..30db83a 100644
--- 
a/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
+++ 
b/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
@@ -486,7 +486,7 @@ public class FileMetadataRepository
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByDateRange( RepositorySession 
session, String repoId, Date startTime, Date endTime )
+    public List<ArtifactMetadata> getArtifactsByDateRange(RepositorySession 
session, String repoId, ZonedDateTime startTime, ZonedDateTime endTime )
         throws MetadataRepositoryException
     {
         try
@@ -520,8 +520,8 @@ public class FileMetadataRepository
         return null;
     }
 
-    private void getArtifactsByDateRange( RepositorySession session, 
List<ArtifactMetadata> artifacts, String repoId, String ns, Date startTime,
-                                          Date endTime )
+    private void getArtifactsByDateRange( RepositorySession session, 
List<ArtifactMetadata> artifacts, String repoId, String ns, ZonedDateTime 
startTime,
+                                          ZonedDateTime endTime )
         throws MetadataRepositoryException
     {
         try
@@ -537,9 +537,9 @@ public class FileMetadataRepository
                 {
                     for ( ArtifactMetadata artifact : getArtifacts( session, 
repoId, ns, project, version ) )
                     {
-                        if ( startTime == null || startTime.before( 
artifact.getWhenGathered() ) )
+                        if ( startTime == null || startTime.isBefore( 
ZonedDateTime.from(artifact.getWhenGathered().toInstant()) ) )
                         {
-                            if ( endTime == null || endTime.after( 
artifact.getWhenGathered() ) )
+                            if ( endTime == null || endTime.isAfter( 
ZonedDateTime.from(artifact.getWhenGathered().toInstant()) ) )
                             {
                                 artifacts.add( artifact );
                             }
diff --git 
a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
 
b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
index 0d8a164..e862151 100644
--- 
a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
+++ 
b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
@@ -73,20 +73,8 @@ import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.Reader;
 import java.time.ZonedDateTime;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.Map.Entry;
-import java.util.Set;
-import java.util.Spliterator;
 import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.stream.Stream;
@@ -549,15 +537,18 @@ public class JcrMetadataRepository
         final MetadataFacetFactory<T> factory = metadataService.getFactory( 
facetClazz );
         final String facetId = factory.getFacetId( );
         final String facetPath = '/'+getFacetPath( repositoryId, facetId );
-        String q = "SELECT * FROM ["+FACET_NODE_TYPE+"] AS facet WHERE 
ISDESCENDANTNODE(facet, ["+facetPath+"]) ORDER BY [facet].[archiva:name]";
-        Map<String, String> params = new HashMap<>( );
+        StringBuilder query = new StringBuilder("SELECT * FROM [");
+        query.append(FACET_NODE_TYPE).append("] AS facet WHERE 
ISDESCENDANTNODE(facet, [")
+                .append(facetPath).append("]) ORDER BY 
[facet].[archiva:name]");
+        String q = query.toString();
+         Map<String, String> params = new HashMap<>( );
         QueryResult result = runNativeJcrQuery( jcrSession, q, params, offset, 
maxEntries );
         return StreamSupport.stream( createResultSpliterator( result, (Row 
row)-> {
             try
             {
                 Node node = row.getNode( "facet" );
                 String facetName = node.getProperty( "archiva:name" 
).getString();
-                return createFacet( factory, node, repositoryId, facetName );
+                return createFacetFromNode( factory, node, repositoryId, 
facetName );
             }
             catch ( RepositoryException e )
             {
@@ -606,7 +597,7 @@ public class JcrMetadataRepository
                 return null;
             }
 
-            return createFacet( factory, node, repositoryId, name );
+            return createFacetFromNode( factory, node, repositoryId, name );
         }
         catch ( PathNotFoundException e )
         {
@@ -619,12 +610,21 @@ public class JcrMetadataRepository
         return null;
     }
 
-    @Nullable
-    private <T extends MetadataFacet> T createFacet( MetadataFacetFactory<T> 
factory, Node node, String repositoryId, String name ) throws 
RepositoryException
+    private <T extends MetadataFacet> T createFacetFromNode(final 
MetadataFacetFactory<T> factory, final Node node) throws RepositoryException {
+        return createFacetFromNode(factory, node, null, null);
+    }
+
+    private <T extends MetadataFacet> T createFacetFromNode(final 
MetadataFacetFactory<T> factory, final Node node,
+                                                            final String 
repositoryId, final String name ) throws RepositoryException
     {
         if ( factory != null )
         {
-            T metadataFacet = factory.createMetadataFacet( repositoryId, name 
);
+            T metadataFacet;
+            if (repositoryId!=null) {
+                metadataFacet = factory.createMetadataFacet( repositoryId, 
name );
+            } else {
+                metadataFacet = factory.createMetadataFacet();
+            }
             Map<String, String> map = new HashMap<>();
             for ( Property property : JcrUtils.getProperties( node ) )
             {
@@ -745,38 +745,53 @@ public class JcrMetadataRepository
         }
     }
 
-    @Override
-    public List<ArtifactMetadata> getArtifactsByDateRange( RepositorySession 
session, String repoId, Date startTime, Date endTime )
-        throws MetadataRepositoryException
-    {
-        final Session jcrSession = getSession( session );
-
-        List<ArtifactMetadata> artifacts;
-
-        String q = getArtifactQuery( repoId );
+    private String buildArtifactByDateRangeQuery(String repoId, ZonedDateTime 
startTime, ZonedDateTime endTime) {
+        StringBuilder q = getArtifactQuery( repoId );
 
         if ( startTime != null )
         {
-            q += " AND [whenGathered] >= $start";
+            q.append(" AND [artifact].[whenGathered] >= $start");
         }
         if ( endTime != null )
         {
-            q += " AND [whenGathered] <= $end";
+            q.append(" AND [artifact].[whenGathered] <= $end");
         }
+        q.append(" ORDER BY [artifact].[whenGathered]");
+        return q.toString();
+    }
 
-        try
-        {
-            Query query = 
jcrSession.getWorkspace().getQueryManager().createQuery( q, Query.JCR_SQL2 );
+    private QueryResult queryArtifactByDateRange(Session jcrSession, String 
repositoryId,
+                                                 ZonedDateTime startTime, 
ZonedDateTime endTime,
+                                                 long offset, long maxEntries) 
throws MetadataRepositoryException {
+        String q = buildArtifactByDateRangeQuery(repositoryId, startTime, 
endTime);
+
+        try {
+            Query query = 
jcrSession.getWorkspace().getQueryManager().createQuery(q, Query.JCR_SQL2);
+            query.setOffset(offset);
+            query.setLimit(maxEntries);
             ValueFactory valueFactory = jcrSession.getValueFactory();
-            if ( startTime != null )
-            {
-                query.bindValue( "start", valueFactory.createValue( 
createCalendar( startTime ) ) );
+            if (startTime != null) {
+                query.bindValue("start", 
valueFactory.createValue(createCalendar(startTime)));
             }
-            if ( endTime != null )
-            {
-                query.bindValue( "end", valueFactory.createValue( 
createCalendar( endTime ) ) );
+            if (endTime != null) {
+                query.bindValue("end", 
valueFactory.createValue(createCalendar(endTime)));
             }
-            QueryResult result = query.execute();
+            return query.execute();
+        } catch (RepositoryException e) {
+            throw new MetadataRepositoryException(e.getMessage(), e);
+        }
+    }
+
+    @Override
+    public List<ArtifactMetadata> getArtifactsByDateRange(RepositorySession 
session, String repoId, ZonedDateTime startTime, ZonedDateTime endTime )
+        throws MetadataRepositoryException
+    {
+        final Session jcrSession = getSession( session );
+
+        List<ArtifactMetadata> artifacts;
+        try
+        {
+            QueryResult result = queryArtifactByDateRange(jcrSession, repoId, 
startTime, endTime, 0, Long.MAX_VALUE);
 
             artifacts = new ArrayList<>();
             for ( Node n : JcrUtils.getNodes( result ) )
@@ -794,7 +809,15 @@ public class JcrMetadataRepository
     @Override
     public Stream<ArtifactMetadata> getArtifactsByDateRangeStream( 
RepositorySession session, String repositoryId, ZonedDateTime startTime, 
ZonedDateTime endTime, long offset, long maxEntries ) throws 
MetadataRepositoryException
     {
-        return null;
+        final Session jcrSession = getSession( session );
+        QueryResult result = queryArtifactByDateRange(jcrSession, 
repositoryId, startTime, endTime, offset, maxEntries);
+        return StreamSupport.stream(createResultSpliterator(result, (row) -> {
+            try {
+                return getArtifactFromNode(repositoryId, 
row.getNode("artifact"));
+            } catch (RepositoryException e) {
+                return null;
+            }
+        }), false);
     }
 
 
@@ -970,7 +993,7 @@ public class JcrMetadataRepository
         final Session jcrSession = getSession( session );
         List<ArtifactMetadata> artifacts;
 
-        String q = getArtifactQuery( repositoryId );
+        String q = getArtifactQuery( repositoryId ).toString();
 
         try
         {
@@ -993,9 +1016,9 @@ public class JcrMetadataRepository
         return artifacts;
     }
 
-    private static String getArtifactQuery( String repositoryId )
+    private static StringBuilder getArtifactQuery( String repositoryId )
     {
-        return new 
StringBuilder(QUERY_ARTIFACT_1).append(getRepositoryContentPath( repositoryId 
)).append(QUERY_ARTIFACT_2).toString();
+        return new 
StringBuilder(QUERY_ARTIFACT_1).append(getRepositoryContentPath( repositoryId 
)).append(QUERY_ARTIFACT_2);
     }
 
     @Override
@@ -1210,17 +1233,7 @@ public class JcrMetadataRepository
                 }
                 else
                 {
-                    MetadataFacet facet = factory.createMetadataFacet();
-                    Map<String, String> map = new HashMap<>();
-                    for ( Property property : JcrUtils.getProperties( n ) )
-                    {
-                        String p = property.getName();
-                        if ( !p.startsWith( "jcr:" ) )
-                        {
-                            map.put( p, property.getString() );
-                        }
-                    }
-                    facet.fromProperties( map );
+                    MetadataFacet facet = createFacetFromNode(factory, n);
                     metadata.addFacet( facet );
                 }
             }
@@ -1869,11 +1882,9 @@ public class JcrMetadataRepository
         return node;
     }
 
-    private static Calendar createCalendar( Date time )
+    private static Calendar createCalendar( ZonedDateTime time )
     {
-        Calendar cal = Calendar.getInstance();
-        cal.setTime( time );
-        return cal;
+        return GregorianCalendar.from(time);
     }
 
     private String join( Collection<String> ids )

Reply via email to