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 )