mirror of
https://github.com/apache/archiva.git
synced 2025-02-12 13:06:12 +00:00
Adding query param object for search queries
This commit is contained in:
parent
f100559586
commit
37a92817ef
@ -0,0 +1,98 @@
|
|||||||
|
package org.apache.archiva.metadata;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* This class is used to provide additional query parameters to search queries.
|
||||||
|
* These parameters are hints for the metadata repository implementation, some parameters may be ignored.
|
||||||
|
*
|
||||||
|
* The defaults are:
|
||||||
|
* <li>
|
||||||
|
* <ul>Sort order: ascending</ul>
|
||||||
|
* <ul>Offset: 0</ul>
|
||||||
|
* <ul>Limit: Long.MAX_VALUE</ul>
|
||||||
|
* <ul>Sort fields: empty, which means it depends on the query</ul>
|
||||||
|
* </li>
|
||||||
|
*
|
||||||
|
* @author Martin Stockhammer <martin_s@apache.org>
|
||||||
|
*/
|
||||||
|
public class QueryParameter {
|
||||||
|
|
||||||
|
final boolean ascending;
|
||||||
|
final List<String> sortFields;
|
||||||
|
final long offset;
|
||||||
|
final long limit;
|
||||||
|
|
||||||
|
public QueryParameter(boolean isAscending, long offset, long limit, String... sortFields) {
|
||||||
|
this.ascending = isAscending;
|
||||||
|
this.offset = offset;
|
||||||
|
this.limit = limit;
|
||||||
|
this.sortFields = Arrays.asList(sortFields);
|
||||||
|
}
|
||||||
|
|
||||||
|
public QueryParameter(long offset, long limit) {
|
||||||
|
this.offset=offset;
|
||||||
|
this.limit = limit;
|
||||||
|
this.ascending = true;
|
||||||
|
this.sortFields = Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public QueryParameter(boolean isAscending, long offset, long limit) {
|
||||||
|
this.ascending = isAscending;
|
||||||
|
this.offset = offset;
|
||||||
|
this.limit = limit;
|
||||||
|
this.sortFields = Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public QueryParameter(long limit) {
|
||||||
|
this.offset=0;
|
||||||
|
this.ascending=true;
|
||||||
|
this.limit=limit;
|
||||||
|
this.sortFields = Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public QueryParameter() {
|
||||||
|
this.ascending = true;
|
||||||
|
this.sortFields = Collections.emptyList();
|
||||||
|
this.offset = 0;
|
||||||
|
this.limit = Long.MAX_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAscending() {
|
||||||
|
return ascending;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getSortFields() {
|
||||||
|
return sortFields;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getOffset() {
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getLimit() {
|
||||||
|
return limit;
|
||||||
|
}
|
||||||
|
}
|
@ -19,6 +19,7 @@
|
|||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import org.apache.archiva.metadata.QueryParameter;
|
||||||
import org.apache.archiva.metadata.model.ArtifactMetadata;
|
import org.apache.archiva.metadata.model.ArtifactMetadata;
|
||||||
import org.apache.archiva.metadata.model.MetadataFacet;
|
import org.apache.archiva.metadata.model.MetadataFacet;
|
||||||
import org.apache.archiva.metadata.model.MetadataFacetFactory;
|
import org.apache.archiva.metadata.model.MetadataFacetFactory;
|
||||||
@ -111,7 +112,7 @@ public void removeMetadataFacet( RepositorySession session, String repositoryId,
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ArtifactMetadata> getArtifactsByDateRange(RepositorySession session, String repositoryId, ZonedDateTime startTime, ZonedDateTime endTime )
|
public List<ArtifactMetadata> getArtifactsByDateRange(RepositorySession session, String repositoryId, ZonedDateTime startTime, ZonedDateTime endTime, QueryParameter queryParameter )
|
||||||
throws MetadataRepositoryException
|
throws MetadataRepositoryException
|
||||||
{
|
{
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
@ -306,13 +307,13 @@ public List<ArtifactMetadata> searchArtifacts( RepositorySession session, String
|
|||||||
@Override
|
@Override
|
||||||
public <T extends MetadataFacet> Stream<T> getMetadataFacetStream( RepositorySession session, String repositoryId, Class<T> facetClazz ) throws MetadataRepositoryException
|
public <T extends MetadataFacet> Stream<T> getMetadataFacetStream( RepositorySession session, String repositoryId, Class<T> facetClazz ) throws MetadataRepositoryException
|
||||||
{
|
{
|
||||||
return getMetadataFacetStream( session, repositoryId, facetClazz, 0, Long.MAX_VALUE );
|
return getMetadataFacetStream( session, repositoryId, facetClazz, new QueryParameter());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Stream<ArtifactMetadata> getArtifactsByDateRangeStream( RepositorySession session, String repositoryId, ZonedDateTime startTime, ZonedDateTime endTime ) throws MetadataRepositoryException
|
public Stream<ArtifactMetadata> getArtifactsByDateRangeStream( RepositorySession session, String repositoryId, ZonedDateTime startTime, ZonedDateTime endTime ) throws MetadataRepositoryException
|
||||||
{
|
{
|
||||||
return getArtifactsByDateRangeStream( session, repositoryId, startTime, endTime, 0, Long.MAX_VALUE );
|
return getArtifactsByDateRangeStream( session, repositoryId, startTime, endTime, new QueryParameter());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -323,7 +324,7 @@ public MetadataFacet getMetadataFacet( RepositorySession session, String reposit
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <T extends MetadataFacet> Stream<T> getMetadataFacetStream( RepositorySession session, String repositoryId, Class<T> facetClazz, long offset, long maxEntries ) throws MetadataRepositoryException
|
public <T extends MetadataFacet> Stream<T> getMetadataFacetStream(RepositorySession session, String repositoryId, Class<T> facetClazz, QueryParameter queryParameter) throws MetadataRepositoryException
|
||||||
{
|
{
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
@ -337,7 +338,7 @@ public <T extends MetadataFacet> T getMetadataFacet( RepositorySession session,
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Stream<ArtifactMetadata> getArtifactsByDateRangeStream( RepositorySession session, String repositoryId, ZonedDateTime startTime, ZonedDateTime endTime, long offset, long maxEntries ) throws MetadataRepositoryException
|
public Stream<ArtifactMetadata> getArtifactsByDateRangeStream(RepositorySession session, String repositoryId, ZonedDateTime startTime, ZonedDateTime endTime, QueryParameter queryParameter) throws MetadataRepositoryException
|
||||||
{
|
{
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
@ -358,4 +359,13 @@ protected Set<String> getSupportedFacets() {
|
|||||||
protected Class<? extends MetadataFacet> getFactoryClassForId( String facetId ) {
|
protected Class<? extends MetadataFacet> getFactoryClassForId( String facetId ) {
|
||||||
return metadataService.getFactoryClassForId( facetId );
|
return metadataService.getFactoryClassForId( facetId );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ArtifactMetadata> getArtifactsByDateRange(RepositorySession session, String repoId, ZonedDateTime startTime, ZonedDateTime endTime)
|
||||||
|
throws MetadataRepositoryException {
|
||||||
|
return getArtifactsByDateRange(session, repoId, startTime, endTime, new QueryParameter());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import org.apache.archiva.metadata.QueryParameter;
|
||||||
import org.apache.archiva.metadata.model.ArtifactMetadata;
|
import org.apache.archiva.metadata.model.ArtifactMetadata;
|
||||||
import org.apache.archiva.metadata.model.MetadataFacet;
|
import org.apache.archiva.metadata.model.MetadataFacet;
|
||||||
import org.apache.archiva.metadata.model.ProjectMetadata;
|
import org.apache.archiva.metadata.model.ProjectMetadata;
|
||||||
@ -157,7 +158,7 @@ List<String> getMetadataFacets( RepositorySession session, String repositoryId,
|
|||||||
<T extends MetadataFacet> Stream<T> getMetadataFacetStream( RepositorySession session, String repositoryId, Class<T> facetClazz)
|
<T extends MetadataFacet> Stream<T> getMetadataFacetStream( RepositorySession session, String repositoryId, Class<T> facetClazz)
|
||||||
throws MetadataRepositoryException;
|
throws MetadataRepositoryException;
|
||||||
|
|
||||||
<T extends MetadataFacet> Stream<T> getMetadataFacetStream( RepositorySession session, String repositoryId, Class<T> facetClazz, long offset, long maxEntries)
|
<T extends MetadataFacet> Stream<T> getMetadataFacetStream(RepositorySession session, String repositoryId, Class<T> facetClazz, QueryParameter queryParameter)
|
||||||
throws MetadataRepositoryException;
|
throws MetadataRepositoryException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -251,6 +252,10 @@ void removeMetadataFacet( RepositorySession session, String repositoryId, String
|
|||||||
List<ArtifactMetadata> getArtifactsByDateRange(RepositorySession session, String repositoryId, ZonedDateTime startTime, ZonedDateTime endTime )
|
List<ArtifactMetadata> getArtifactsByDateRange(RepositorySession session, String repositoryId, ZonedDateTime startTime, ZonedDateTime endTime )
|
||||||
throws MetadataRepositoryException;
|
throws MetadataRepositoryException;
|
||||||
|
|
||||||
|
List<ArtifactMetadata> getArtifactsByDateRange(RepositorySession session, String repositoryId, ZonedDateTime startTime, ZonedDateTime endTime, QueryParameter queryParameter )
|
||||||
|
throws MetadataRepositoryException;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns all the artifacts
|
* Returns all the artifacts
|
||||||
* @param session
|
* @param session
|
||||||
@ -263,8 +268,8 @@ List<ArtifactMetadata> getArtifactsByDateRange(RepositorySession session, String
|
|||||||
Stream<ArtifactMetadata> getArtifactsByDateRangeStream( RepositorySession session, String repositoryId, ZonedDateTime startTime, ZonedDateTime endTime )
|
Stream<ArtifactMetadata> getArtifactsByDateRangeStream( RepositorySession session, String repositoryId, ZonedDateTime startTime, ZonedDateTime endTime )
|
||||||
throws MetadataRepositoryException;
|
throws MetadataRepositoryException;
|
||||||
|
|
||||||
Stream<ArtifactMetadata> getArtifactsByDateRangeStream( RepositorySession session, String repositoryId,
|
Stream<ArtifactMetadata> getArtifactsByDateRangeStream(RepositorySession session, String repositoryId,
|
||||||
ZonedDateTime startTime, ZonedDateTime endTime, long offset, long maxEntries )
|
ZonedDateTime startTime, ZonedDateTime endTime, QueryParameter queryParameter)
|
||||||
throws MetadataRepositoryException;
|
throws MetadataRepositoryException;
|
||||||
|
|
||||||
Collection<ArtifactMetadata> getArtifactsByChecksum( RepositorySession session, String repositoryId, String checksum )
|
Collection<ArtifactMetadata> getArtifactsByChecksum( RepositorySession session, String repositoryId, String checksum )
|
||||||
|
@ -20,26 +20,21 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
import org.apache.archiva.metadata.QueryParameter;
|
||||||
import org.apache.archiva.metadata.generic.GenericMetadataFacet;
|
import org.apache.archiva.metadata.generic.GenericMetadataFacet;
|
||||||
import org.apache.archiva.metadata.generic.GenericMetadataFacetFactory;
|
import org.apache.archiva.metadata.generic.GenericMetadataFacetFactory;
|
||||||
import org.apache.archiva.metadata.model.*;
|
import org.apache.archiva.metadata.model.*;
|
||||||
import org.apache.archiva.metadata.model.facets.AbstractMetadataFacetFactory;
|
|
||||||
import org.apache.archiva.repository.Repository;
|
|
||||||
import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
|
import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.format.annotation.NumberFormat;
|
|
||||||
import org.springframework.test.context.ContextConfiguration;
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
import java.time.ZonedDateTime;
|
import java.time.ZonedDateTime;
|
||||||
import java.time.temporal.TemporalUnit;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
@ -915,7 +910,7 @@ public void testGetMetadataFacetsStreamWithLimit( )
|
|||||||
try ( RepositorySession session = getSessionFactory( ).createSession( ) )
|
try ( RepositorySession session = getSessionFactory( ).createSession( ) )
|
||||||
{
|
{
|
||||||
tryAssert( ( ) -> {
|
tryAssert( ( ) -> {
|
||||||
Stream<TestMetadataFacet> str = getRepository( ).getMetadataFacetStream( session, TEST_REPO_ID, TestMetadataFacet.class, 0, 100 );
|
Stream<TestMetadataFacet> str = getRepository( ).getMetadataFacetStream( session, TEST_REPO_ID, TestMetadataFacet.class, new QueryParameter(0, 100));
|
||||||
assertNotNull( str );
|
assertNotNull( str );
|
||||||
List<TestMetadataFacet> result = str.collect( Collectors.toList( ) );
|
List<TestMetadataFacet> result = str.collect( Collectors.toList( ) );
|
||||||
assertEquals( 100, result.size( ) );
|
assertEquals( 100, result.size( ) );
|
||||||
|
@ -38,6 +38,7 @@
|
|||||||
import me.prettyprint.hector.api.query.QueryResult;
|
import me.prettyprint.hector.api.query.QueryResult;
|
||||||
import me.prettyprint.hector.api.query.RangeSlicesQuery;
|
import me.prettyprint.hector.api.query.RangeSlicesQuery;
|
||||||
import org.apache.archiva.configuration.ArchivaConfiguration;
|
import org.apache.archiva.configuration.ArchivaConfiguration;
|
||||||
|
import org.apache.archiva.metadata.QueryParameter;
|
||||||
import org.apache.archiva.metadata.model.ArtifactMetadata;
|
import org.apache.archiva.metadata.model.ArtifactMetadata;
|
||||||
import org.apache.archiva.metadata.model.CiManagement;
|
import org.apache.archiva.metadata.model.CiManagement;
|
||||||
import org.apache.archiva.metadata.model.Dependency;
|
import org.apache.archiva.metadata.model.Dependency;
|
||||||
@ -70,13 +71,11 @@
|
|||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
import java.time.ZonedDateTime;
|
import java.time.ZonedDateTime;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
@ -88,7 +87,6 @@
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.function.BiFunction;
|
import java.util.function.BiFunction;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import java.util.function.Function;
|
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
import java.util.stream.StreamSupport;
|
import java.util.stream.StreamSupport;
|
||||||
|
|
||||||
@ -1590,17 +1588,16 @@ public int characteristics( )
|
|||||||
* Implementation is not very performant, because sorting is part of the stream. I do not know how to specify the sort
|
* Implementation is not very performant, because sorting is part of the stream. I do not know how to specify the sort
|
||||||
* in the query.
|
* in the query.
|
||||||
*
|
*
|
||||||
|
* @param <T>
|
||||||
* @param session
|
* @param session
|
||||||
* @param repositoryId
|
* @param repositoryId
|
||||||
* @param facetClazz
|
* @param facetClazz
|
||||||
* @param offset
|
* @param queryParameter
|
||||||
* @param maxEntries
|
|
||||||
* @param <T>
|
|
||||||
* @return
|
* @return
|
||||||
* @throws MetadataRepositoryException
|
* @throws MetadataRepositoryException
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public <T extends MetadataFacet> Stream<T> getMetadataFacetStream( RepositorySession session, String repositoryId, Class<T> facetClazz, long offset, long maxEntries ) throws MetadataRepositoryException
|
public <T extends MetadataFacet> Stream<T> getMetadataFacetStream(RepositorySession session, String repositoryId, Class<T> facetClazz, QueryParameter queryParameter) throws MetadataRepositoryException
|
||||||
{
|
{
|
||||||
final MetadataFacetFactory<T> metadataFacetFactory = getFacetFactory( facetClazz );
|
final MetadataFacetFactory<T> metadataFacetFactory = getFacetFactory( facetClazz );
|
||||||
final String facetId = metadataFacetFactory.getFacetId( );
|
final String facetId = metadataFacetFactory.getFacetId( );
|
||||||
@ -1637,7 +1634,7 @@ public <T extends MetadataFacet> Stream<T> getMetadataFacetStream( RepositorySes
|
|||||||
}
|
}
|
||||||
return updateItem;
|
return updateItem;
|
||||||
|
|
||||||
}), false ).sorted( (f1, f2) -> f1.getName()!=null ? f1.getName().compareTo( f2.getName() ) : 1 ).skip( offset ).limit( maxEntries );
|
}), false ).sorted( (f1, f2) -> f1.getName()!=null ? f1.getName().compareTo( f2.getName() ) : 1 ).skip( queryParameter.getOffset()).limit( queryParameter.getLimit());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -1835,7 +1832,7 @@ public List<ArtifactMetadata> getArtifactsByDateRange( RepositorySession session
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Stream<ArtifactMetadata> getArtifactsByDateRangeStream( RepositorySession session, String repositoryId, ZonedDateTime startTime, ZonedDateTime endTime, long offset, long maxEntries ) throws MetadataRepositoryException
|
public Stream<ArtifactMetadata> getArtifactsByDateRangeStream(RepositorySession session, String repositoryId, ZonedDateTime startTime, ZonedDateTime endTime, QueryParameter queryParameter) throws MetadataRepositoryException
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
import org.apache.archiva.configuration.ArchivaConfiguration;
|
import org.apache.archiva.configuration.ArchivaConfiguration;
|
||||||
import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
|
import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
|
||||||
|
import org.apache.archiva.metadata.QueryParameter;
|
||||||
import org.apache.archiva.metadata.model.ArtifactMetadata;
|
import org.apache.archiva.metadata.model.ArtifactMetadata;
|
||||||
import org.apache.archiva.metadata.model.CiManagement;
|
import org.apache.archiva.metadata.model.CiManagement;
|
||||||
import org.apache.archiva.metadata.model.Dependency;
|
import org.apache.archiva.metadata.model.Dependency;
|
||||||
@ -60,7 +61,6 @@
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
@ -352,7 +352,7 @@ public List<String> getMetadataFacets( RepositorySession session, String repoId,
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <T extends MetadataFacet> Stream<T> getMetadataFacetStream( RepositorySession session, String repositoryId, Class<T> facetClazz, long offset, long maxEntries ) throws MetadataRepositoryException
|
public <T extends MetadataFacet> Stream<T> getMetadataFacetStream(RepositorySession session, String repositoryId, Class<T> facetClazz, QueryParameter queryParameter) throws MetadataRepositoryException
|
||||||
{
|
{
|
||||||
final MetadataFacetFactory<T> metadataFacetFactory = getFacetFactory( facetClazz );
|
final MetadataFacetFactory<T> metadataFacetFactory = getFacetFactory( facetClazz );
|
||||||
if (metadataFacetFactory==null) {
|
if (metadataFacetFactory==null) {
|
||||||
@ -367,8 +367,8 @@ public <T extends MetadataFacet> Stream<T> getMetadataFacetStream( RepositorySes
|
|||||||
.filter( path -> Files.exists( path.resolve( searchFile ) ) )
|
.filter( path -> Files.exists( path.resolve( searchFile ) ) )
|
||||||
.map(path -> directory.relativize(path).toString())
|
.map(path -> directory.relativize(path).toString())
|
||||||
.sorted()
|
.sorted()
|
||||||
.skip( offset )
|
.skip( queryParameter.getOffset())
|
||||||
.limit(maxEntries)
|
.limit(queryParameter.getLimit())
|
||||||
.map(name -> getMetadataFacet( session, repositoryId, facetClazz, name ));
|
.map(name -> getMetadataFacet( session, repositoryId, facetClazz, name ));
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new MetadataRepositoryException( e.getMessage( ), e );
|
throw new MetadataRepositoryException( e.getMessage( ), e );
|
||||||
@ -517,7 +517,7 @@ public Stream<ArtifactMetadata> getArtifactsByDateRangeStream( RepositorySession
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Stream<ArtifactMetadata> getArtifactsByDateRangeStream( RepositorySession session, String repositoryId, ZonedDateTime startTime, ZonedDateTime endTime, long offset, long maxEntries ) throws MetadataRepositoryException
|
public Stream<ArtifactMetadata> getArtifactsByDateRangeStream(RepositorySession session, String repositoryId, ZonedDateTime startTime, ZonedDateTime endTime, QueryParameter queryParameter) throws MetadataRepositoryException
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
import org.apache.archiva.metadata.QueryParameter;
|
||||||
import org.apache.archiva.metadata.model.ArtifactMetadata;
|
import org.apache.archiva.metadata.model.ArtifactMetadata;
|
||||||
import org.apache.archiva.metadata.model.CiManagement;
|
import org.apache.archiva.metadata.model.CiManagement;
|
||||||
import org.apache.archiva.metadata.model.Dependency;
|
import org.apache.archiva.metadata.model.Dependency;
|
||||||
@ -49,7 +50,6 @@
|
|||||||
import org.apache.jackrabbit.commons.JcrUtils;
|
import org.apache.jackrabbit.commons.JcrUtils;
|
||||||
import org.apache.jackrabbit.commons.cnd.CndImporter;
|
import org.apache.jackrabbit.commons.cnd.CndImporter;
|
||||||
import org.apache.jackrabbit.commons.cnd.ParseException;
|
import org.apache.jackrabbit.commons.cnd.ParseException;
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
@ -72,7 +72,6 @@
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.io.Reader;
|
import java.io.Reader;
|
||||||
import java.time.ZoneId;
|
|
||||||
import java.time.ZonedDateTime;
|
import java.time.ZonedDateTime;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
@ -528,9 +527,30 @@ public int characteristics( )
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private StringBuilder appendQueryParams(StringBuilder query, String selector, String defaultProperty, QueryParameter queryParameter) {
|
||||||
|
if (queryParameter.getSortFields().size()==0) {
|
||||||
|
query.append(" ORDER BY [").append(selector).append("].[").append(defaultProperty).append("]");
|
||||||
|
if (queryParameter.isAscending()) {
|
||||||
|
query.append(" ASC");
|
||||||
|
} else {
|
||||||
|
query.append(" DESC");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
query.append(" ORDER BY");
|
||||||
|
for (String property : queryParameter.getSortFields()) {
|
||||||
|
query.append(" [").append(selector).append("].[").append(property).append("]");
|
||||||
|
if (queryParameter.isAscending()) {
|
||||||
|
query.append(" ASC");
|
||||||
|
} else {
|
||||||
|
query.append(" DESC");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return query;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <T extends MetadataFacet> Stream<T> getMetadataFacetStream( RepositorySession session, String repositoryId, Class<T> facetClazz,
|
public <T extends MetadataFacet> Stream<T> getMetadataFacetStream(RepositorySession session, String repositoryId, Class<T> facetClazz, QueryParameter queryParameter) throws MetadataRepositoryException
|
||||||
long offset, long maxEntries) throws MetadataRepositoryException
|
|
||||||
{
|
{
|
||||||
final Session jcrSession = getSession( session );
|
final Session jcrSession = getSession( session );
|
||||||
final MetadataFacetFactory<T> factory = metadataService.getFactory( facetClazz );
|
final MetadataFacetFactory<T> factory = metadataService.getFactory( facetClazz );
|
||||||
@ -538,10 +558,11 @@ public <T extends MetadataFacet> Stream<T> getMetadataFacetStream( RepositorySes
|
|||||||
final String facetPath = '/'+getFacetPath( repositoryId, facetId );
|
final String facetPath = '/'+getFacetPath( repositoryId, facetId );
|
||||||
StringBuilder query = new StringBuilder("SELECT * FROM [");
|
StringBuilder query = new StringBuilder("SELECT * FROM [");
|
||||||
query.append(FACET_NODE_TYPE).append("] AS facet WHERE ISDESCENDANTNODE(facet, [")
|
query.append(FACET_NODE_TYPE).append("] AS facet WHERE ISDESCENDANTNODE(facet, [")
|
||||||
.append(facetPath).append("]) ORDER BY [facet].[archiva:name]");
|
.append(facetPath).append("])");
|
||||||
|
appendQueryParams(query, "facet", "archiva:name", queryParameter);
|
||||||
String q = query.toString();
|
String q = query.toString();
|
||||||
Map<String, String> params = new HashMap<>( );
|
Map<String, String> params = new HashMap<>( );
|
||||||
QueryResult result = runNativeJcrQuery( jcrSession, q, params, offset, maxEntries );
|
QueryResult result = runNativeJcrQuery( jcrSession, q, params, queryParameter.getOffset(), queryParameter.getLimit());
|
||||||
return StreamSupport.stream( createResultSpliterator( result, (Row row)-> {
|
return StreamSupport.stream( createResultSpliterator( result, (Row row)-> {
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -744,7 +765,8 @@ public void removeMetadataFacet( RepositorySession session, String repositoryId,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private String buildArtifactByDateRangeQuery(String repoId, ZonedDateTime startTime, ZonedDateTime endTime) {
|
private StringBuilder buildArtifactByDateRangeQuery(String repoId, ZonedDateTime startTime, ZonedDateTime endTime,
|
||||||
|
QueryParameter queryParameter) {
|
||||||
StringBuilder q = getArtifactQuery( repoId );
|
StringBuilder q = getArtifactQuery( repoId );
|
||||||
|
|
||||||
if ( startTime != null )
|
if ( startTime != null )
|
||||||
@ -755,19 +777,19 @@ private String buildArtifactByDateRangeQuery(String repoId, ZonedDateTime startT
|
|||||||
{
|
{
|
||||||
q.append(" AND [artifact].[whenGathered] <= $end");
|
q.append(" AND [artifact].[whenGathered] <= $end");
|
||||||
}
|
}
|
||||||
q.append(" ORDER BY [artifact].[whenGathered]");
|
appendQueryParams(q, "artifact", "whenGathered", queryParameter);
|
||||||
return q.toString();
|
return q;
|
||||||
}
|
}
|
||||||
|
|
||||||
private QueryResult queryArtifactByDateRange(Session jcrSession, String repositoryId,
|
private QueryResult queryArtifactByDateRange(Session jcrSession, String repositoryId,
|
||||||
ZonedDateTime startTime, ZonedDateTime endTime,
|
ZonedDateTime startTime, ZonedDateTime endTime,
|
||||||
long offset, long maxEntries) throws MetadataRepositoryException {
|
QueryParameter queryParameter) throws MetadataRepositoryException {
|
||||||
String q = buildArtifactByDateRangeQuery(repositoryId, startTime, endTime);
|
String q = buildArtifactByDateRangeQuery(repositoryId, startTime, endTime, queryParameter).toString();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Query query = jcrSession.getWorkspace().getQueryManager().createQuery(q, Query.JCR_SQL2);
|
Query query = jcrSession.getWorkspace().getQueryManager().createQuery(q, Query.JCR_SQL2);
|
||||||
query.setOffset(offset);
|
query.setOffset(queryParameter.getOffset());
|
||||||
query.setLimit(maxEntries);
|
query.setLimit(queryParameter.getLimit());
|
||||||
ValueFactory valueFactory = jcrSession.getValueFactory();
|
ValueFactory valueFactory = jcrSession.getValueFactory();
|
||||||
if (startTime != null) {
|
if (startTime != null) {
|
||||||
query.bindValue("start", valueFactory.createValue(createCalendar(startTime)));
|
query.bindValue("start", valueFactory.createValue(createCalendar(startTime)));
|
||||||
@ -782,7 +804,7 @@ private QueryResult queryArtifactByDateRange(Session jcrSession, String reposito
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ArtifactMetadata> getArtifactsByDateRange(RepositorySession session, String repoId, ZonedDateTime startTime, ZonedDateTime endTime )
|
public List<ArtifactMetadata> getArtifactsByDateRange(RepositorySession session, String repoId, ZonedDateTime startTime, ZonedDateTime endTime, QueryParameter queryParameter )
|
||||||
throws MetadataRepositoryException
|
throws MetadataRepositoryException
|
||||||
{
|
{
|
||||||
final Session jcrSession = getSession( session );
|
final Session jcrSession = getSession( session );
|
||||||
@ -790,7 +812,7 @@ public List<ArtifactMetadata> getArtifactsByDateRange(RepositorySession session,
|
|||||||
List<ArtifactMetadata> artifacts;
|
List<ArtifactMetadata> artifacts;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
QueryResult result = queryArtifactByDateRange(jcrSession, repoId, startTime, endTime, 0, Long.MAX_VALUE);
|
QueryResult result = queryArtifactByDateRange(jcrSession, repoId, startTime, endTime, queryParameter);
|
||||||
|
|
||||||
artifacts = new ArrayList<>();
|
artifacts = new ArrayList<>();
|
||||||
for ( Node n : JcrUtils.getNodes( result ) )
|
for ( Node n : JcrUtils.getNodes( result ) )
|
||||||
@ -806,10 +828,10 @@ public List<ArtifactMetadata> getArtifactsByDateRange(RepositorySession session,
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Stream<ArtifactMetadata> getArtifactsByDateRangeStream( RepositorySession session, String repositoryId, ZonedDateTime startTime, ZonedDateTime endTime, long offset, long maxEntries ) throws MetadataRepositoryException
|
public Stream<ArtifactMetadata> getArtifactsByDateRangeStream(RepositorySession session, String repositoryId, ZonedDateTime startTime, ZonedDateTime endTime, QueryParameter queryParameter) throws MetadataRepositoryException
|
||||||
{
|
{
|
||||||
final Session jcrSession = getSession( session );
|
final Session jcrSession = getSession( session );
|
||||||
QueryResult result = queryArtifactByDateRange(jcrSession, repositoryId, startTime, endTime, offset, maxEntries);
|
QueryResult result = queryArtifactByDateRange(jcrSession, repositoryId, startTime, endTime, queryParameter);
|
||||||
return StreamSupport.stream(createResultSpliterator(result, (row) -> {
|
return StreamSupport.stream(createResultSpliterator(result, (row) -> {
|
||||||
try {
|
try {
|
||||||
return getArtifactFromNode(repositoryId, row.getNode("artifact"));
|
return getArtifactFromNode(repositoryId, row.getNode("artifact"));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user