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 ac68bd6f7..99260c52b 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.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 SyndFeed process( Map reqParams ) 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 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 9f16007d0..f6e33101a 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.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.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.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 void testProcess() // 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 @@ private ArtifactMetadata createArtifact( String artifactId, String version, Date private class MetadataRepositoryMock extends AbstractMetadataRepository { - private Date from, to; + private ZonedDateTime from, to; private String repoId; @@ -162,7 +160,7 @@ private class MetadataRepositoryMock @Override - public List getArtifactsByDateRange( RepositorySession session, String repoId, Date from, Date to ) + public List getArtifactsByDateRange(RepositorySession session, String repoId, ZonedDateTime from, ZonedDateTime to ) { setRepoId( repoId ); setFrom( from ); @@ -170,22 +168,22 @@ public List getArtifactsByDateRange( RepositorySession session 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 f2d7cf2de..6c1e9b87d 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.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 void removeMetadataFacet( RepositorySession session, String repoId, Strin } @Override - public List getArtifactsByDateRange( RepositorySession session, String repoId, Date startTime, Date endTime ) + public List 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 20040c44b..d3e18c48d 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 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 void removeMetadataFacet( RepositorySession session, String repositoryId, } @Override - public List getArtifactsByDateRange( RepositorySession session, String repositoryId, Date startTime, Date endTime ) + public List 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 c35d5f937..68ba5e0e7 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.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 @@ MetadataFacet getMetadataFacet( RepositorySession session, String repositoryId, 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, null will be returned. + * If the facet is not found the method returns null. * * @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 The facet object - * @return The facet instance if it exists. + * @param name The name of the facet (name or path) + * @param The type of the facet object + * @return The facet instance, if it exists. * @throws MetadataRepositoryException */ T getMetadataFacet(RepositorySession session, String repositoryId, Class 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 @@ void removeMetadataFacet( RepositorySession session, String repositoryId, String * @return * @throws MetadataRepositoryException */ - List getArtifactsByDateRange( RepositorySession session, String repositoryId, Date startTime, Date endTime ) + List 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 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 3da98c9fd..0b48041d4 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.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 void testGetArtifactsByDateRangeLowerBound( ) 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 artifacts = getRepository( ).getArtifactsByDateRange( session, TEST_REPO_ID, date, null ); @@ -1240,7 +1243,7 @@ public void testGetArtifactsByDateRangeLowerBoundOutOfRange( ) 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 artifacts = getRepository( ).getArtifactsByDateRange( session, TEST_REPO_ID, date, null ); @@ -1260,8 +1263,8 @@ public void testGetArtifactsByDateRangeLowerAndUpperBound( ) 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 artifacts = getRepository( ).getArtifactsByDateRange( session, TEST_REPO_ID, lower, upper ); @@ -1281,7 +1284,7 @@ public void testGetArtifactsByDateRangeUpperBound( ) 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 artifacts = getRepository( ).getArtifactsByDateRange( session, TEST_REPO_ID, null, upper ); @@ -1301,7 +1304,7 @@ public void testGetArtifactsByDateRangeUpperBoundOutOfRange( ) 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 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 757d50a50..4d9ef2b0b 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.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 void removeMetadataFacet( RepositorySession session, final String reposit } @Override - public List getArtifactsByDateRange( RepositorySession session, final String repositoryId, final Date startTime, - final Date endTime ) + public List getArtifactsByDateRange( RepositorySession session, final String repositoryId, final ZonedDateTime startTime, + final ZonedDateTime endTime ) throws MetadataRepositoryException { @@ -1761,11 +1760,11 @@ public List getArtifactsByDateRange( RepositorySession session 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> 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 6cf7c3519..30db83ae3 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 void removeMetadataFacet( RepositorySession session, String repoId, Strin } @Override - public List getArtifactsByDateRange( RepositorySession session, String repoId, Date startTime, Date endTime ) + public List getArtifactsByDateRange(RepositorySession session, String repoId, ZonedDateTime startTime, ZonedDateTime endTime ) throws MetadataRepositoryException { try @@ -520,8 +520,8 @@ public Stream getArtifactsByDateRangeStream( RepositorySession return null; } - private void getArtifactsByDateRange( RepositorySession session, List artifacts, String repoId, String ns, Date startTime, - Date endTime ) + private void getArtifactsByDateRange( RepositorySession session, List artifacts, String repoId, String ns, ZonedDateTime startTime, + ZonedDateTime endTime ) throws MetadataRepositoryException { try @@ -537,9 +537,9 @@ private void getArtifactsByDateRange( RepositorySession session, List Stream getMetadataFacetStream( RepositorySes final MetadataFacetFactory 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 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 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 T getMetadataFacet( RepositorySession session, return null; } - return createFacet( factory, node, repositoryId, name ); + return createFacetFromNode( factory, node, repositoryId, name ); } catch ( PathNotFoundException e ) { @@ -619,12 +610,21 @@ public T getMetadataFacet( RepositorySession session, return null; } - @Nullable - private T createFacet( MetadataFacetFactory factory, Node node, String repositoryId, String name ) throws RepositoryException + private T createFacetFromNode(final MetadataFacetFactory factory, final Node node) throws RepositoryException { + return createFacetFromNode(factory, node, null, null); + } + + private T createFacetFromNode(final MetadataFacetFactory 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 map = new HashMap<>(); for ( Property property : JcrUtils.getProperties( node ) ) { @@ -745,38 +745,53 @@ public void removeMetadataFacet( RepositorySession session, String repositoryId, } } + private String buildArtifactByDateRangeQuery(String repoId, ZonedDateTime startTime, ZonedDateTime endTime) { + StringBuilder q = getArtifactQuery( repoId ); + + if ( startTime != null ) + { + q.append(" AND [artifact].[whenGathered] >= $start"); + } + if ( endTime != null ) + { + q.append(" AND [artifact].[whenGathered] <= $end"); + } + q.append(" ORDER BY [artifact].[whenGathered]"); + return q.toString(); + } + + 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 (endTime != null) { + query.bindValue("end", valueFactory.createValue(createCalendar(endTime))); + } + return query.execute(); + } catch (RepositoryException e) { + throw new MetadataRepositoryException(e.getMessage(), e); + } + } + @Override - public List getArtifactsByDateRange( RepositorySession session, String repoId, Date startTime, Date endTime ) + public List getArtifactsByDateRange(RepositorySession session, String repoId, ZonedDateTime startTime, ZonedDateTime endTime ) throws MetadataRepositoryException { final Session jcrSession = getSession( session ); List artifacts; - - String q = getArtifactQuery( repoId ); - - if ( startTime != null ) - { - q += " AND [whenGathered] >= $start"; - } - if ( endTime != null ) - { - q += " AND [whenGathered] <= $end"; - } - try { - Query query = jcrSession.getWorkspace().getQueryManager().createQuery( q, Query.JCR_SQL2 ); - ValueFactory valueFactory = jcrSession.getValueFactory(); - if ( startTime != null ) - { - query.bindValue( "start", valueFactory.createValue( createCalendar( startTime ) ) ); - } - if ( endTime != null ) - { - query.bindValue( "end", valueFactory.createValue( createCalendar( endTime ) ) ); - } - QueryResult result = query.execute(); + 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 List getArtifactsByDateRange( RepositorySession session @Override public Stream 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 List getArtifacts( RepositorySession session, String re final Session jcrSession = getSession( session ); List artifacts; - String q = getArtifactQuery( repositoryId ); + String q = getArtifactQuery( repositoryId ).toString(); try { @@ -993,9 +1016,9 @@ public List getArtifacts( RepositorySession session, String re 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 @@ private void retrieveFacetProperties( FacetedMetadata metadata, Node node ) thro } else { - MetadataFacet facet = factory.createMetadataFacet(); - Map 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 @@ private Node getOrAddArtifactNode( Session jcrSession, String repositoryId, Stri 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 ids )