diff --git a/src/main/java/org/commonjava/indy/service/repository/controller/AdminController.java b/src/main/java/org/commonjava/indy/service/repository/controller/AdminController.java index 0125b23..f857a49 100644 --- a/src/main/java/org/commonjava/indy/service/repository/controller/AdminController.java +++ b/src/main/java/org/commonjava/indy/service/repository/controller/AdminController.java @@ -30,6 +30,7 @@ import org.commonjava.indy.service.repository.model.RemoteRepository; import org.commonjava.indy.service.repository.model.StoreKey; import org.commonjava.indy.service.repository.model.StoreType; +import org.commonjava.indy.service.repository.model.dto.ListArtifactStoreDTO; import org.eclipse.microprofile.context.ManagedExecutor; import org.eclipse.microprofile.rest.client.inject.RestClient; import org.slf4j.Logger; @@ -39,6 +40,7 @@ import jakarta.inject.Inject; import jakarta.ws.rs.core.Response; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import static jakarta.ws.rs.core.Response.Status.FORBIDDEN; @@ -114,7 +116,7 @@ public List getAllOfType( final StoreType type ) } - public List getAllOfType( final String packageType, final StoreType type, String page ) + public ListArtifactStoreDTO getAllOfType( final String packageType, final StoreType type, String page ) throws IndyWorkflowException { try @@ -122,11 +124,12 @@ public List getAllOfType( final String packageType, final StoreTy ArtifactStoreQuery query = storeManager.query().storeTypes( type ); if ( !ALL_PACKAGE_TYPES.equals( packageType ) ) { - return new ArrayList<>( storeManager.getArtifactStoresByPkgAndType( packageType, type, page ) ); + return storeManager.getArtifactStoresByPkgAndType( packageType, type, page ); } else { - return query.getAllByDefaultPackageTypes(); + List result = query.getAllByDefaultPackageTypes(); + return new ListArtifactStoreDTO( new HashSet<>(result) ); } } catch ( final IndyDataException e ) @@ -140,7 +143,8 @@ public List getAllOfType( final String packageType, final StoreTy public List getAllOfType( final String packageType, final StoreType type ) throws IndyWorkflowException { - return getAllOfType( packageType, type, "" ); + ListArtifactStoreDTO result = getAllOfType( packageType, type, "" ); + return new ArrayList<>(result.getItems()); } public List getAllStores() diff --git a/src/main/java/org/commonjava/indy/service/repository/data/StoreDataManager.java b/src/main/java/org/commonjava/indy/service/repository/data/StoreDataManager.java index 7412c42..0ad8534 100644 --- a/src/main/java/org/commonjava/indy/service/repository/data/StoreDataManager.java +++ b/src/main/java/org/commonjava/indy/service/repository/data/StoreDataManager.java @@ -23,6 +23,7 @@ import org.commonjava.indy.service.repository.model.StoreType; import org.commonjava.indy.service.repository.audit.ChangeSummary; import org.commonjava.indy.service.repository.exception.IndyDataException; +import org.commonjava.indy.service.repository.model.dto.ListArtifactStoreDTO; import java.util.Collection; import java.util.Map; @@ -165,6 +166,6 @@ Set affectedBy( Collection keys ) Set getArtifactStoresByPkgAndType( String packageType, StoreType storeType ); - Set getArtifactStoresByPkgAndType( String packageType, StoreType storeType, String page ); + ListArtifactStoreDTO getArtifactStoresByPkgAndType( String packageType, StoreType storeType, String page ); } diff --git a/src/main/java/org/commonjava/indy/service/repository/data/cassandra/CassandraStoreDataManager.java b/src/main/java/org/commonjava/indy/service/repository/data/cassandra/CassandraStoreDataManager.java index f506e5c..4032fc2 100644 --- a/src/main/java/org/commonjava/indy/service/repository/data/cassandra/CassandraStoreDataManager.java +++ b/src/main/java/org/commonjava/indy/service/repository/data/cassandra/CassandraStoreDataManager.java @@ -31,6 +31,8 @@ import org.commonjava.indy.service.repository.model.RemoteRepository; import org.commonjava.indy.service.repository.model.StoreKey; import org.commonjava.indy.service.repository.model.StoreType; +import org.commonjava.indy.service.repository.model.dto.ListArtifactStoreDTO; +import org.commonjava.indy.service.repository.model.dto.ListDtxArtifactStoreDTO; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -184,22 +186,22 @@ public Set getStoreKeysByPkgAndType( final String pkg, final StoreType } @Override - public Set getArtifactStoresByPkgAndType( final String pkg, final StoreType type, String page ) + public ListArtifactStoreDTO getArtifactStoresByPkgAndType( final String pkg, final StoreType type, String page ) { logger.trace( "Get stores: {}/{}", pkg, type ); - - Set dtxArtifactStoreSet = storeQuery.getArtifactStoresByPkgAndType( pkg, type, page ); + ListDtxArtifactStoreDTO result = storeQuery.getArtifactStoresByPkgAndType( pkg, type, page ); + Set dtxArtifactStoreSet = result.getItems(); Set storeSet = new HashSet<>(); dtxArtifactStoreSet.forEach( dtxArtifactStore -> storeSet.add( toArtifactStore( dtxArtifactStore ) ) ); - return storeSet; + return new ListArtifactStoreDTO( storeSet, result.getCurrentPage(), result.getNextPage()); } @Override public Set getArtifactStoresByPkgAndType( final String pkg, final StoreType type ) { - - return getArtifactStoresByPkgAndType( pkg, type, "" ); + ListArtifactStoreDTO result = getArtifactStoresByPkgAndType( pkg, type, "" ); + return result.getItems(); } @Override diff --git a/src/main/java/org/commonjava/indy/service/repository/data/cassandra/CassandraStoreQuery.java b/src/main/java/org/commonjava/indy/service/repository/data/cassandra/CassandraStoreQuery.java index 9cbba7b..cfb11d8 100644 --- a/src/main/java/org/commonjava/indy/service/repository/data/cassandra/CassandraStoreQuery.java +++ b/src/main/java/org/commonjava/indy/service/repository/data/cassandra/CassandraStoreQuery.java @@ -25,6 +25,7 @@ import com.datastax.driver.mapping.MappingManager; import org.commonjava.indy.service.repository.model.StoreKey; import org.commonjava.indy.service.repository.model.StoreType; +import org.commonjava.indy.service.repository.model.dto.ListDtxArtifactStoreDTO; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -143,7 +144,7 @@ public DtxArtifactStore getArtifactStore( String packageType, StoreType type, St return toDtxArtifactStore( result.one() ); } - public Set getArtifactStoresByPkgAndType( String packageType, StoreType type, String page ) + public ListDtxArtifactStoreDTO getArtifactStoresByPkgAndType( String packageType, StoreType type, String page ) { BoundStatement bound = preparedArtifactStoresQueryByKeys.bind( CassandraStoreUtil.getTypeKey( packageType, type.name() ) ); @@ -171,12 +172,13 @@ public Set getArtifactStoresByPkgAndType( String packageType, } } - return dtxArtifactStoreSet; + return new ListDtxArtifactStoreDTO( dtxArtifactStoreSet, page, nextPage.toString() ); } public Set getArtifactStoresByPkgAndType( String packageType, StoreType type ) { - return getArtifactStoresByPkgAndType( packageType, type, "" ); + ListDtxArtifactStoreDTO result = getArtifactStoresByPkgAndType( packageType, type, "" ); + return result.getItems(); } public Set getAllArtifactStores() diff --git a/src/main/java/org/commonjava/indy/service/repository/data/mem/MemoryStoreDataManager.java b/src/main/java/org/commonjava/indy/service/repository/data/mem/MemoryStoreDataManager.java index 9a55ae9..a769dc2 100644 --- a/src/main/java/org/commonjava/indy/service/repository/data/mem/MemoryStoreDataManager.java +++ b/src/main/java/org/commonjava/indy/service/repository/data/mem/MemoryStoreDataManager.java @@ -23,6 +23,7 @@ import org.commonjava.indy.service.repository.model.ArtifactStore; import org.commonjava.indy.service.repository.model.StoreKey; import org.commonjava.indy.service.repository.model.StoreType; +import org.commonjava.indy.service.repository.model.dto.ListArtifactStoreDTO; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -156,19 +157,21 @@ public Stream streamArtifactStoreKeys() } @Override - public Set getArtifactStoresByPkgAndType( String packageType, StoreType storeType, String page ) + public ListArtifactStoreDTO getArtifactStoresByPkgAndType( String packageType, StoreType storeType, String page ) { - return stores.values() - .stream() - .filter( item -> packageType.equals( item.getPackageType() ) && storeType.equals( - item.getType() ) ) - .collect( Collectors.toSet() ); + Set resultStores = stores.values() + .stream() + .filter( item -> packageType.equals( item.getPackageType() ) && storeType.equals( + item.getType() ) ) + .collect( Collectors.toSet() ); + return new ListArtifactStoreDTO( resultStores); } @Override public Set getArtifactStoresByPkgAndType( String packageType, StoreType storeType ) { - return getArtifactStoresByPkgAndType( packageType, storeType, "" ); + ListArtifactStoreDTO result = getArtifactStoresByPkgAndType( packageType, storeType, "" ); + return result.getItems(); } @Override diff --git a/src/main/java/org/commonjava/indy/service/repository/jaxrs/RepositoryAdminResources.java b/src/main/java/org/commonjava/indy/service/repository/jaxrs/RepositoryAdminResources.java index 6bfe0f2..8098193 100644 --- a/src/main/java/org/commonjava/indy/service/repository/jaxrs/RepositoryAdminResources.java +++ b/src/main/java/org/commonjava/indy/service/repository/jaxrs/RepositoryAdminResources.java @@ -25,6 +25,7 @@ import org.commonjava.indy.service.repository.model.RemoteRepository; import org.commonjava.indy.service.repository.model.StoreKey; import org.commonjava.indy.service.repository.model.StoreType; +import org.commonjava.indy.service.repository.model.dto.ListArtifactStoreDTO; import org.commonjava.indy.service.repository.model.dto.StoreListingDTO; import org.commonjava.indy.service.repository.util.jackson.MapperUtil; import org.commonjava.indy.service.security.common.SecurityManager; @@ -59,6 +60,7 @@ import java.io.IOException; import java.net.URI; import java.nio.charset.Charset; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -326,11 +328,13 @@ public Response getAll( final @Parameter( Response response; try { - final List stores = adminController.getAllOfType( packageType, st, page ); + final ListArtifactStoreDTO result = adminController.getAllOfType( packageType, st, page ); - logger.info( "Returning listing containing stores:\n\t{}", new JoinString( "\n\t", stores ) ); + logger.info( "Returning listing for page {} containing stores:\n\t{}", result.getCurrentPage(), + new JoinString( "\n\t", result.getItems() ) ); - final StoreListingDTO dto = new StoreListingDTO<>( stores ); + final StoreListingDTO dto = new StoreListingDTO<>( new ArrayList<>(result.getItems()), result.getCurrentPage(), + result.getNextPage() ); response = responseHelper.formatOkResponseWithJsonEntity( dto ); } diff --git a/src/main/java/org/commonjava/indy/service/repository/model/dto/ListArtifactStoreDTO.java b/src/main/java/org/commonjava/indy/service/repository/model/dto/ListArtifactStoreDTO.java new file mode 100644 index 0000000..90f882d --- /dev/null +++ b/src/main/java/org/commonjava/indy/service/repository/model/dto/ListArtifactStoreDTO.java @@ -0,0 +1,61 @@ +package org.commonjava.indy.service.repository.model.dto; + +import org.commonjava.indy.service.repository.model.ArtifactStore; + +import java.util.Set; + +public class ListArtifactStoreDTO +{ + private Set items; + + private String currentPage; + + private String nextPage; + + public ListArtifactStoreDTO() + { + + } + + public ListArtifactStoreDTO( Set items, String currentPage, String nextPage ) + { + this.items = items; + this.currentPage = currentPage; + this.nextPage = nextPage; + } + + public ListArtifactStoreDTO( Set items ) + { + this.items = items; + } + + public Set getItems() + { + return items; + } + + public void setItems( Set items ) + { + this.items = items; + } + + public String getCurrentPage() + { + return currentPage; + } + + public void setCurrentPage( String currentPage ) + { + this.currentPage = currentPage; + } + + public String getNextPage() + { + return nextPage; + } + + public void setNextPage( String nextPage ) + { + this.nextPage = nextPage; + } +} diff --git a/src/main/java/org/commonjava/indy/service/repository/model/dto/ListDtxArtifactStoreDTO.java b/src/main/java/org/commonjava/indy/service/repository/model/dto/ListDtxArtifactStoreDTO.java new file mode 100644 index 0000000..d179c53 --- /dev/null +++ b/src/main/java/org/commonjava/indy/service/repository/model/dto/ListDtxArtifactStoreDTO.java @@ -0,0 +1,56 @@ +package org.commonjava.indy.service.repository.model.dto; + +import org.commonjava.indy.service.repository.data.cassandra.DtxArtifactStore; + +import java.util.Set; + +public class ListDtxArtifactStoreDTO +{ + private Set items; + + private String currentPage; + + private String nextPage; + + public ListDtxArtifactStoreDTO() + { + + } + + public ListDtxArtifactStoreDTO( Set items, String currentPage, String nextPage ) + { + this.items = items; + this.currentPage = currentPage; + this.nextPage = nextPage; + } + + public Set getItems() + { + return items; + } + + public void setItems( Set items ) + { + this.items = items; + } + + public String getCurrentPage() + { + return currentPage; + } + + public void setCurrentPage( String currentPage ) + { + this.currentPage = currentPage; + } + + public String getNextPage() + { + return nextPage; + } + + public void setNextPage( String nextPage ) + { + this.nextPage = nextPage; + } +} diff --git a/src/test/java/org/commonjava/indy/service/repository/jaxrs/mock/MockAdminController.java b/src/test/java/org/commonjava/indy/service/repository/jaxrs/mock/MockAdminController.java index af5e82a..fefb558 100644 --- a/src/test/java/org/commonjava/indy/service/repository/jaxrs/mock/MockAdminController.java +++ b/src/test/java/org/commonjava/indy/service/repository/jaxrs/mock/MockAdminController.java @@ -24,6 +24,7 @@ import org.commonjava.indy.service.repository.model.RemoteRepository; import org.commonjava.indy.service.repository.model.StoreKey; import org.commonjava.indy.service.repository.model.StoreType; +import org.commonjava.indy.service.repository.model.dto.ListArtifactStoreDTO; import org.junit.jupiter.api.Test; import jakarta.enterprise.context.ApplicationScoped; @@ -31,6 +32,7 @@ import jakarta.ws.rs.core.Response; import java.util.Arrays; import java.util.Collections; +import java.util.HashSet; import java.util.List; import static org.commonjava.indy.service.repository.model.pkg.MavenPackageTypeDescriptor.MAVEN_PKG_KEY; @@ -67,7 +69,7 @@ public List getAllOfType( final String packageType, final StoreTy } @Override - public List getAllOfType( final String packageType, final StoreType type, String page ) + public ListArtifactStoreDTO getAllOfType( final String packageType, final StoreType type, String page ) throws IndyWorkflowException { if ( MAVEN_PKG_KEY.equals( packageType ) ) @@ -76,11 +78,11 @@ public List getAllOfType( final String packageType, final StoreTy { RemoteRepository repo1 = new RemoteRepository( MAVEN_PKG_KEY, "test1", "http://repo.test1" ); RemoteRepository repo2 = new RemoteRepository( MAVEN_PKG_KEY, "test2", "http://repo.test2" ); - return Arrays.asList( repo1, repo2 ); + return new ListArtifactStoreDTO( new HashSet<>(Arrays.asList( repo1, repo2 ))); } if ( type == StoreType.hosted ) { - return Collections.emptyList(); + return new ListArtifactStoreDTO( new HashSet<>(Collections.emptyList())); } } throw new IndyWorkflowException( Response.Status.NOT_FOUND.getStatusCode(), "Not found" );