This commit is contained in:
Lucio Lelii 2018-09-26 13:24:21 +00:00
parent 17ae467950
commit 2fd18396ce
9 changed files with 157 additions and 72 deletions

View File

@ -25,8 +25,8 @@ public class FolderContainer extends ItemContainer<FolderItem>{
return ContainerType.FOLDER;
}
public ListResolver list() {
return new ListResolver(excludes -> itemclient.getChildren(itemId, excludes), itemclient);
public ListResolverTyped list() {
return new ListResolverTyped((onlyType, excludes) -> itemclient.getChildren(itemId, onlyType, excludes), itemclient) ;
}
public FileContainer uploadFile(InputStream stream, String filename, String description) {
@ -47,7 +47,7 @@ public class FolderContainer extends ItemContainer<FolderItem>{
}
public ListResolver findByName(String namePattern) {
return new ListResolver(excludes -> itemclient.findChildrenByNamePattern(itemId, namePattern , excludes), itemclient);
return new ListResolver((onlyType, excludes) -> itemclient.findChildrenByNamePattern(itemId, namePattern , excludes), itemclient);
}
public FolderContainer share(Set<String> users, AccessType accessType) throws Exception {

View File

@ -42,7 +42,7 @@ public abstract class ItemContainer<I extends Item> {
}
public ListResolver getAnchestors() {
return new ListResolver(excludes -> itemclient.getAnchestors(this.itemId,excludes) , itemclient);
return new ListResolver((onlyType, excludes) -> itemclient.getAnchestors(this.itemId,excludes) , itemclient);
}
public void delete() {

View File

@ -17,6 +17,8 @@ public class ListResolver {
Set<String> excludes = new HashSet<>(Arrays.asList(NodeConstants.ACCOUNTING_NAME, NodeConstants.CONTENT_NAME, NodeConstants.METADATA_NAME));
Class<? extends Item> onlyType = null;
protected ListResolver(ListRetriever retriever, ItemManagerClient itemClient) {
this.retriever = retriever;
@ -38,8 +40,9 @@ public class ListResolver {
return this;
}
public List<? extends Item> getItems(){
return retriever.getList(excludes.toArray(new String[excludes.size()]));
return retriever.getList(onlyType, excludes.toArray(new String[excludes.size()]));
}
public List<ItemContainer<? extends Item>> getContainers(){

View File

@ -0,0 +1,16 @@
package org.gcube.common.storagehub.client.dsl;
import org.gcube.common.storagehub.client.proxies.ItemManagerClient;
import org.gcube.common.storagehub.model.items.Item;
public class ListResolverTyped extends ListResolver {
protected ListResolverTyped(ListRetriever retriever, ItemManagerClient itemClient) {
super(retriever, itemClient);
}
public ListResolver ofType(Class<? extends Item> type){
onlyType = type;
return this;
}
}

View File

@ -6,5 +6,5 @@ import org.gcube.common.storagehub.model.items.Item;
public interface ListRetriever {
List<? extends Item> getList(String ... excludes);
List<? extends Item> getList(Class<? extends Item> onlyType, String ... excludes);
}

View File

@ -22,6 +22,7 @@ import org.gcube.common.gxrest.response.inbound.GXInboundResponse;
import org.gcube.common.storagehub.client.StreamDescriptor;
import org.gcube.common.storagehub.model.acls.ACL;
import org.gcube.common.storagehub.model.acls.AccessType;
import org.gcube.common.storagehub.model.annotations.RootNode;
import org.gcube.common.storagehub.model.exceptions.BackendGenericError;
import org.gcube.common.storagehub.model.items.Item;
import org.gcube.common.storagehub.model.service.ItemList;
@ -41,7 +42,7 @@ public class DefaultItemManager implements ItemManagerClient {
@Override
public List<? extends Item> getChildren(String id, String ... excludeNodes) {
public List<? extends Item> getChildren(String id, Class<? extends Item> onlyOfType, String ... excludeNodes) {
Call<GXWebTargetAdapterRequest, ItemList> call = new Call<GXWebTargetAdapterRequest, ItemList>() {
@Override
public ItemList call(GXWebTargetAdapterRequest manager) throws Exception {
@ -50,6 +51,9 @@ public class DefaultItemManager implements ItemManagerClient {
if (excludeNodes !=null && excludeNodes.length>0)
params.put("exclude",excludeNodes);
if (onlyOfType!=null)
params.put("onlyType", new Object[] {resolveNodeType(onlyOfType)});
GXInboundResponse response = myManager.setAcceptedResponseType(MediaType.APPLICATION_JSON_TYPE).queryParams(params).get();
if (response.hasGXError())
@ -67,8 +71,96 @@ public class DefaultItemManager implements ItemManagerClient {
throw new RuntimeException(e);
}
}
@Override
public List<? extends Item> getChildren(String id, int start, int limit, Class<? extends Item> onlyOfType, String... excludeNodes) {
Call<GXWebTargetAdapterRequest, ItemList> call = new Call<GXWebTargetAdapterRequest, ItemList>() {
@Override
public ItemList call(GXWebTargetAdapterRequest manager) throws Exception {
GXWebTargetAdapterRequest myManager = manager.path(id).path("children").path("paged");
Map<String, Object[]> params = new HashMap<>();
if (excludeNodes !=null && excludeNodes.length>0)
params.put("exclude",excludeNodes);
if (onlyOfType!=null)
params.put("onlyType", new Object[] {resolveNodeType(onlyOfType)});
params.put("start", new Object[] {start});
params.put("limit", new Object[] {limit});
GXInboundResponse response = myManager.setAcceptedResponseType(MediaType.APPLICATION_JSON_TYPE).queryParams(params).get();
if (response.hasGXError())
throw response.getException();
ItemList items = response.getSource().readEntity(ItemList.class);
return items;
}
};
try {
ItemList result = delegate.make(call);
return result.getItemlist();
}catch(Exception e) {
throw new RuntimeException(e);
}
}
@Override
public List<? extends Item> getChildren(String id, int start, int limit,
String... excludeNodes) {
return getChildren(id, start, limit, null, excludeNodes);
}
@Override
public List<? extends Item> getChildren(String id, String ... excludeNodes) {
return getChildren(id, null, excludeNodes);
}
@Override
public Integer childrenCount(String id , Class<? extends Item> onlyOfType) {
Call<GXWebTargetAdapterRequest, Integer> call = new Call<GXWebTargetAdapterRequest, Integer>() {
@Override
public Integer call(GXWebTargetAdapterRequest manager) throws Exception {
GXWebTargetAdapterRequest myManager = manager.path(id).path("children").path("count");
Map<String, Object[]> params = new HashMap<>();
if (onlyOfType!=null)
params.put("onlyType", new Object[] {resolveNodeType(onlyOfType)});
GXInboundResponse response = myManager.queryParams(params).setAcceptedResponseType(MediaType.TEXT_PLAIN_TYPE).get();
if (response.hasGXError())
throw response.getException();
return response.getSource().readEntity(Integer.class);
}
};
try {
Integer result = delegate.make(call);
return result;
}catch(Exception e) {
throw new RuntimeException(e);
}
}
@Override
public Integer childrenCount(String id) {
return childrenCount(null);
}
private String resolveNodeType(Class<? extends Item> itemClass){
if (!itemClass.isAnnotationPresent(RootNode.class)) return null;
String nodeType= itemClass.getAnnotation(RootNode.class).value();
return nodeType;
}
@Override
public StreamDescriptor download(String id, String... excludeNodes) {
Call<GXWebTargetAdapterRequest, StreamDescriptor> call = new Call<GXWebTargetAdapterRequest, StreamDescriptor>() {
@ -182,40 +274,6 @@ public class DefaultItemManager implements ItemManagerClient {
}
}
@Override
public List<? extends Item> getChildren(String id, int start, int limit, String... excludeNodes) {
Call<GXWebTargetAdapterRequest, ItemList> call = new Call<GXWebTargetAdapterRequest, ItemList>() {
@Override
public ItemList call(GXWebTargetAdapterRequest manager) throws Exception {
GXWebTargetAdapterRequest myManager = manager.path(id).path("children").path("paged");
Map<String, Object[]> params = new HashMap<>();
if (excludeNodes !=null && excludeNodes.length>0)
params.put("exclude",excludeNodes);
params.put("start", new Object[] {start});
params.put("limit", new Object[] {limit});
GXInboundResponse response = myManager.setAcceptedResponseType(MediaType.APPLICATION_JSON_TYPE).queryParams(params).get();
if (response.hasGXError())
throw response.getException();
ItemList items = response.getSource().readEntity(ItemList.class);
return items;
}
};
try {
ItemList result = delegate.make(call);
return result.getItemlist();
}catch(Exception e) {
throw new RuntimeException(e);
}
}
@Override
public List<? extends Item> findChildrenByNamePattern(String id, String name, String... excludeNodes) {
Call<GXWebTargetAdapterRequest, ItemList> call = new Call<GXWebTargetAdapterRequest, ItemList>() {
@ -246,30 +304,6 @@ public class DefaultItemManager implements ItemManagerClient {
}
@Override
public Integer childrenCount(String id) {
Call<GXWebTargetAdapterRequest, Integer> call = new Call<GXWebTargetAdapterRequest, Integer>() {
@Override
public Integer call(GXWebTargetAdapterRequest manager) throws Exception {
GXWebTargetAdapterRequest myManager = manager.path(id).path("children").path("count");
GXInboundResponse response = myManager.setAcceptedResponseType(MediaType.TEXT_PLAIN_TYPE).get();
if (response.hasGXError())
throw response.getException();
return response.getSource().readEntity(Integer.class);
}
};
try {
Integer result = delegate.make(call);
return result;
}catch(Exception e) {
throw new RuntimeException(e);
}
}
@Override
public String uploadFile(InputStream stream, String parentId, String fileName, String description) {
Call<GXWebTargetAdapterRequest, String> call = new Call<GXWebTargetAdapterRequest, String>() {
@ -513,5 +547,4 @@ public class DefaultItemManager implements ItemManagerClient {
}
}

View File

@ -16,12 +16,18 @@ public interface ItemManagerClient {
List<? extends Item> getChildren(String id, String ... excludeNodes);
List<? extends Item> getChildren(String id, Class<? extends Item> onlyOfType, String ... excludeNodes);
List<? extends Item> getChildren(String id, int start, int limit, Class<? extends Item> onlyOfType, String ... excludeNodes);
List<? extends Item> getChildren(String id, int start, int limit, String ... excludeNodes);
List<? extends Item> getAnchestors(String id, String ... excludeNodes);
Integer childrenCount(String id);
Integer childrenCount(String id, Class<? extends Item> onlyOfType);
Item get(String id, String ... excludeNodes);
StreamDescriptor download(String id, String... excludeNodes);
@ -47,5 +53,7 @@ public interface ItemManagerClient {
String uploadArchive(InputStream stream, String parentId, String extractionFolderName);
String unshareFolder(String id, Set<String> users);
}

View File

@ -1,5 +1,6 @@
package org.gcube.data.access.fs;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
@ -26,8 +27,10 @@ import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.common.storagehub.client.StreamDescriptor;
import org.gcube.common.storagehub.client.dsl.ContainerType;
import org.gcube.common.storagehub.client.dsl.FileContainer;
import org.gcube.common.storagehub.client.dsl.FolderContainer;
import org.gcube.common.storagehub.client.dsl.ItemContainer;
import org.gcube.common.storagehub.client.dsl.StorageHubClient;
import org.gcube.common.storagehub.model.items.FolderItem;
import org.gcube.common.storagehub.model.items.Item;
import org.glassfish.jersey.client.ClientProperties;
import org.glassfish.jersey.media.multipart.FormDataMultiPart;
@ -42,7 +45,9 @@ public class Items {
@BeforeClass
public static void setUp(){
//SecurityTokenProvider.instance.set("b7c80297-e4ed-42ab-ab42-fdc0b8b0eabf-98187548");
SecurityTokenProvider.instance.set("b7c80297-e4ed-42ab-ab42-fdc0b8b0eabf-98187548");
ScopeProvider.instance.set("/gcube");
}
@ -65,6 +70,28 @@ public class Items {
}
}
@Test
public void download() throws Exception {
StorageHubClient shc = new StorageHubClient();
FolderContainer openResolver = shc.open("5cf82ba3-53b9-4352-b37a-c4a94800eaec").asFolder();
StreamDescriptor streamDescr = openResolver.findByName("stat_algo.project").getContainers().get(0).download();
File output = Files.createTempFile("down", streamDescr.getFileName()).toFile();
try (BufferedInputStream bi = new BufferedInputStream(streamDescr.getStream()); FileOutputStream fo = new FileOutputStream(output)){
byte[] buf = new byte[2048];
int read = -1;
while ((read=bi.read(buf))!=-1) {
fo.write(buf, 0, read);
}
}
System.out.println("file written "+output.getAbsolutePath());
}
@Test
public void emptyTrash() throws Exception {
@ -103,9 +130,9 @@ public class Items {
@Test
public void findByName() throws Exception{
StorageHubClient shc = new StorageHubClient();
List<? extends Item> containers = shc.getWSRoot().findByName("DataMiner").getItems();
List<? extends Item> containers = shc.getWSRoot().list().ofType(FolderItem.class).getItems();
for (Item container : containers) {
System.out.println("name is :"+container.getName());
System.out.println("name is :"+container.getClass().getSimpleName());
}
}

View File

@ -51,7 +51,7 @@ public class TestCall {
//SecurityTokenProvider.instance.set("0e2c7963-8d3e-4ea6-a56d-ffda530dd0fa-98187548");
//token costantino 9ca79556-54b0-4bbf-ab0f-151ae326f4cf-98187548
SecurityTokenProvider.instance.set("d9431600-9fef-41a7-946d-a5b402de30d6-98187548");
SecurityTokenProvider.instance.set("ae1208f0-210d-47c9-9b24-d3f2dfcce05f-98187548");
ScopeProvider.instance.set("/gcube");
}
@ -182,7 +182,7 @@ public class TestCall {
@Test
public void download() throws Exception{
ItemManagerClient client = AbstractPlugin.item().build();
StreamDescriptor streamDescr = client.download("07cd8d55-a35b-4445-9680-c98f158c55de");
StreamDescriptor streamDescr = client.download("6875651d-6510-4b82-a0f3-cc3356c1a143");
File output = Files.createTempFile("down", streamDescr.getFileName()).toFile();
try (BufferedInputStream bi = new BufferedInputStream(streamDescr.getStream()); FileOutputStream fo = new FileOutputStream(output)){
byte[] buf = new byte[2048];
@ -193,8 +193,6 @@ public class TestCall {
}
System.out.println("file written "+output.getAbsolutePath());
}
@Test