diff --git a/pom.xml b/pom.xml index af32215..64db6ce 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ org.gcube.common storagehub-client-library - 1.3.0 + 1.3.0-SNAPSHOT storagehub-client-library diff --git a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultItemManager.java b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultItemManager.java index 6f76b97..efd9038 100644 --- a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultItemManager.java +++ b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultItemManager.java @@ -1,6 +1,7 @@ package org.gcube.common.storagehub.client.proxies; import java.io.InputStream; +import java.net.URI; import java.net.URL; import java.net.URLEncoder; import java.util.HashMap; @@ -618,7 +619,7 @@ public class DefaultItemManager implements ItemManagerClient { } } - +/* @Override public String uploadFile(InputStream stream, String parentId, String fileName, String description) throws StorageHubException { Call call = new Call() { @@ -661,7 +662,94 @@ public class DefaultItemManager implements ItemManagerClient { throw new RuntimeException(e1); } } +*/ + @Override + public String uploadFile(InputStream stream, String parentId, String fileName, String description) throws StorageHubException { + Call call = new Call() { + @Override + public String call(GXWebTargetAdapterRequest manager) throws Exception { + Objects.requireNonNull(stream, "stream cannot be null"); + Objects.requireNonNull(parentId, "parentId cannot be null"); + Objects.requireNonNull(fileName, "parentId cannot be null"); + Objects.requireNonNull(description, "parentId cannot be null"); + + + GXWebTargetAdapterRequest myManager = manager.register(MultiPartFeature.class).path(parentId) + .path("create").path("FILE"); + + GXInboundResponse response =null; + Entity entity = Entity.entity(stream, MediaType.APPLICATION_OCTET_STREAM_TYPE); + + Map params = new HashMap<>(); + + params.put("name", new Object[] {fileName}); + params.put("description", new Object[] {description}); + + response = myManager.post(entity); + + if (response.isErrorResponse()) { + if (response.hasException()) { + throw response.getException(); + }else + throw new BackendGenericError("HTTP error code is "+response.getHTTPCode()); + } + + return response.getSource().readEntity(String.class); + } + }; + try { + return delegate.make(call); + }catch(StorageHubException e) { + throw e; + }catch(Exception e1) { + throw new RuntimeException(e1); + } + } + + @Override + public String uploadFile(URI uri, String parentId, String fileName, String description) throws StorageHubException { + Call call = new Call() { + @Override + public String call(GXWebTargetAdapterRequest manager) throws Exception { + Objects.requireNonNull(uri, "uri cannot be null"); + Objects.requireNonNull(parentId, "parentId cannot be null"); + Objects.requireNonNull(fileName, "parentId cannot be null"); + Objects.requireNonNull(description, "parentId cannot be null"); + + GXWebTargetAdapterRequest myManager = manager.register(MultiPartFeature.class).path(parentId) + .path("create").path("FILE"); + + MultivaluedMap formData = new MultivaluedHashMap(); + formData.add("url", uri.toString()); + formData.add("name", fileName); + formData.add("description", description); + + + GXInboundResponse response = myManager.post(Entity.entity(formData, MediaType.APPLICATION_FORM_URLENCODED)); + + + if (response.isErrorResponse()) { + if (response.hasException()) { + throw response.getException(); + }else + throw new BackendGenericError("HTTP error code is "+response.getHTTPCode()); + } + + return response.getSource().readEntity(String.class); + } + }; + try { + return delegate.make(call); + }catch(StorageHubException e) { + throw e; + }catch(Exception e1) { + throw new RuntimeException(e1); + } + } + + + @Override public String uploadArchive(InputStream stream, String parentId, String extractionFolderName) throws StorageHubException { Call call = new Call() { diff --git a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultMessageManager.java b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultMessageManager.java index b98b835..33248ad 100644 --- a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultMessageManager.java +++ b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultMessageManager.java @@ -101,7 +101,7 @@ public class DefaultMessageManager implements MessageManagerClient { public Void call(GXWebTargetAdapterRequest manager) throws Exception { GXWebTargetAdapterRequest myManager = manager.path(id).path(prop); - GXInboundResponse response = myManager.put(Entity.json(Boolean.TRUE)); + GXInboundResponse response = myManager.put(Entity.json(bool)); if (response.isErrorResponse()) { if (response.hasException()) throw response.getException(); diff --git a/src/main/java/org/gcube/common/storagehub/client/proxies/ItemManagerClient.java b/src/main/java/org/gcube/common/storagehub/client/proxies/ItemManagerClient.java index 8b75ea7..6f5169d 100644 --- a/src/main/java/org/gcube/common/storagehub/client/proxies/ItemManagerClient.java +++ b/src/main/java/org/gcube/common/storagehub/client/proxies/ItemManagerClient.java @@ -1,6 +1,7 @@ package org.gcube.common.storagehub.client.proxies; import java.io.InputStream; +import java.net.URI; import java.net.URL; import java.util.List; import java.util.Set; @@ -42,6 +43,8 @@ public interface ItemManagerClient { String uploadFile(InputStream stream, String parentId, String fileName, String description) throws StorageHubException; + String uploadFile(URI uri, String parentId, String fileName, String description) throws StorageHubException; + String createFolder(String parentId, String name, String description, boolean hidden) throws StorageHubException; String createURL(String parentId, String name, String description, URL url) throws StorageHubException; diff --git a/src/test/java/org/gcube/data/access/fs/Items.java b/src/test/java/org/gcube/data/access/fs/Items.java index a7e35dd..d9ed64c 100644 --- a/src/test/java/org/gcube/data/access/fs/Items.java +++ b/src/test/java/org/gcube/data/access/fs/Items.java @@ -5,21 +5,29 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URL; import java.nio.file.Files; import java.util.Arrays; import java.util.Enumeration; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Map.Entry; import java.util.Properties; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; 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.OpenResolver; import org.gcube.common.storagehub.client.dsl.StorageHubClient; +import org.gcube.common.storagehub.client.dsl.VREFolderManager; import org.gcube.common.storagehub.client.plugins.AbstractPlugin; import org.gcube.common.storagehub.client.proxies.UserManagerClient; import org.gcube.common.storagehub.model.Metadata; @@ -36,7 +44,7 @@ public class Items { private static final String propFile = "C:\\Users\\tilli\\Documents\\eclipse\\tokens.properties"; - private static final String tokens = "dev-root"; + private static final String tokens = "prod-root"; //private static final String tokens = "prod-root"; @BeforeClass @@ -57,10 +65,12 @@ public class Items { } + @Test public void addUserToVRe() throws StorageHubException { StorageHubClient shc = new StorageHubClient(); + String vresFile = "C:\\Users\\tilli\\Downloads\\vresToAddGCat.txt"; try(InputStream is = new FileInputStream(new File(vresFile))){ @@ -85,6 +95,7 @@ public class Items { } + @Test public void search() { try { @@ -108,9 +119,19 @@ public class Items { public void changeAcls() throws Exception{ StorageHubClient shc = new StorageHubClient(); + StringBuilder builder = new StringBuilder(); + //System.out.println(shc.open("65e502ff-92ef-46cc-afbd-3e91f4b680be").asFolder().canWrite()); + OpenResolver openResolver= shc.open("1322e7b2-bad6-4d64-a063-db0d05b16a67"); + if(openResolver.resolve().getType()==ContainerType.FILE) { + String publicLink = openResolver.asFile().getPublicLink().toString(); + String itemName = openResolver.asFile().get().getTitle(); - System.out.println(shc.open("65e502ff-92ef-46cc-afbd-3e91f4b680be").asFolder().canWrite()); - + builder.append(itemName + " ("+publicLink+")"); + builder.append("\n"); + } else { + System.out.println("\n\n\nNON e' un FILE cosè? = " + openResolver.resolve().getType()); + } + System.out.println(builder.toString()); } @@ -137,41 +158,26 @@ public class Items { } } + + + @Test - public void renameFile() throws Exception{ + public void uploadFile() throws Exception{ StorageHubClient shc = new StorageHubClient(); FolderContainer myRoot = shc.getWSRoot(); - myRoot.findByName(""); - - - FolderContainer children = myRoot.newFolder("build", "build folder"); - - - FileContainer file = null; - - - try(InputStream is = new FileInputStream(new File("/home/lucio/Downloads/mg.jpg"))){ - file = myRoot.uploadFile(is, "mg.jpg", "file"); + + try(InputStream is = new FileInputStream(new File("C:\\\\Users\\\\tilli\\\\Downloads\\\\Blue-Cloud_order_2021_10_15_1.zip"))){ + myRoot.uploadFile(is, "testUpload.zip", "file"); } catch (Exception e) { e.printStackTrace(); } - - FileContainer copiedFile = file.copy(children, "mg.jpg"); - - try(InputStream is = new FileInputStream(new File("/home/lucio/Downloads/bck.jpg"))){ - file = myRoot.uploadFile(is, "mg.jpg", "file"); - } catch (Exception e) { - e.printStackTrace(); - } - - FileContainer secodncopiedFile = file.copy(children, "mg.jpg"); } @@ -216,14 +222,23 @@ public class Items { } @Test - public void emptyTrash() throws Exception { + public void addUser() throws Exception { + StorageHubClient shc = new StorageHubClient(); + shc.createUserAccount("service-account-sergencovid19"); + + shc.getVreFolderManager("d4science.research-infrastructures.eu-FARM-SerGen-Covid19_Ricercatore").addUser("service-account-sergencovid19"); + } + + @Test + public void removeUser() throws Exception { StorageHubClient shc = new StorageHubClient(); - shc.emptyTrash(); + shc.deleteUserAccount("_sergencovid19"); } - + + @Test public void changeProp() throws Exception { StorageHubClient shc = new StorageHubClient(); @@ -251,18 +266,53 @@ public class Items { } + /*private InputStream urlToInputStream(URL url, Map args) { + HttpURLConnection con = null; + InputStream inputStream = null; + try { + con = (HttpURLConnection) url.openConnection(); + con.setConnectTimeout(15000); + con.setReadTimeout(15000); + if (args != null) { + for (Entry e : args.entrySet()) { + con.setRequestProperty(e.getKey(), e.getValue()); + } + } + con.connect(); + int responseCode = con.getResponseCode(); + + if (responseCode < 400 && responseCode > 299) { + String redirectUrl = con.getHeaderField("Location"); + try { + URL newUrl = new URL(redirectUrl); + return urlToInputStream(newUrl, args); + } catch (MalformedURLException e) { + URL newUrl = new URL(url.getProtocol() + "://" + url.getHost() + redirectUrl); + return urlToInputStream(newUrl, args); + } + } + + inputStream = con.getInputStream(); + return inputStream; + } catch (Exception e) { + throw new RuntimeException(e); + } + }*/ @Test public void uploadArchive() throws Exception { StorageHubClient shc = new StorageHubClient(); - String afi = null; + URL remote = new URI("https://data.bluecloud.cineca.it/api/download/gAAAAABhaSJN8TUA71la3mKMOL9D" + + "mioSBvOehbZlu54_jvscz8Zu3LXgqhr8RfJemd83QIh47z6TyMn3mD0OjpcG5g0qf9WUZCeW1J4btEqNObkaWv" + + "pMhabvswweyFn1Jg4m5GpwCoKayvgsYYwjbjsGsQW5Hileiw==").toURL(); + + + try(InputStream is = remote.openStream() ){ + shc.getWSRoot().uploadArchive(is, "testUploadArchive"); - try(InputStream is = new FileInputStream(new File("/tmp/down724121986692880606my new folder.zip"))){ - shc.getWSRoot().uploadArchive(is, "testUpload2"); - - System.out.println(afi); + } catch (Exception e) { e.printStackTrace(); } @@ -428,6 +478,12 @@ public class Items { } + @Test + public void removeGroup() throws Exception{ + StorageHubClient sh = new StorageHubClient(); + VREFolderManager vreMan = sh.getVreFolderManager("d4science.research-infrastructures.eu-OpenAIRE-OpenAIRE-Connect_EAB"); + vreMan.removeVRE(); + } /* diff --git a/src/test/java/org/gcube/data/access/fs/TestCall.java b/src/test/java/org/gcube/data/access/fs/TestCall.java index c088e09..22991d9 100644 --- a/src/test/java/org/gcube/data/access/fs/TestCall.java +++ b/src/test/java/org/gcube/data/access/fs/TestCall.java @@ -6,6 +6,7 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.net.URI; +import java.net.URL; import java.nio.file.Files; import java.util.Arrays; import java.util.HashMap; @@ -41,11 +42,13 @@ import org.gcube.common.storagehub.model.expressions.logical.ISDescendant; import org.gcube.common.storagehub.model.items.AbstractFileItem; import org.gcube.common.storagehub.model.items.GCubeItem; import org.gcube.common.storagehub.model.items.Item; +import org.gcube.common.storagehub.model.messages.Message; import org.gcube.common.storagehub.model.query.Queries; import org.gcube.common.storagehub.model.query.Query; import org.glassfish.jersey.client.ClientProperties; import org.glassfish.jersey.media.multipart.FormDataMultiPart; import org.glassfish.jersey.media.multipart.MultiPartFeature; +import org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException; import org.junit.BeforeClass; import org.junit.Test; import org.slf4j.Logger; @@ -79,27 +82,17 @@ public class TestCall { @Test - public void sendMessages() throws StorageHubException { + public void sendMessagesWithAttachment() throws Exception { MessageManagerClient client = AbstractPlugin.messages().build(); - for (int i=1500; i<3000; i++ ) { - try { - Thread.sleep(200); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - client.sendMessage(Arrays.asList("andrea.rossi"), "testMessage"+i, "body for ttrtetatrtrrttrtrtrar\ndfafsdfadsfafdsdsfafdsafaddsffdsf\nfsdafdjdjskhjghshjhdahjkasdhjjhsd" - + "\ndfsjkfdasjklòjffafadjksò\ndfskfjklaajjfadsjkòfjòfdsajòfadòjk\ndsaffadsffbdsfajfdsbsafdsjkfdsakjlsdafjfkdsjklajlkfadsjfsasjd\n" - + "dsfjkfdsajhdsfsdfahhflhjfdkshlkjfhjafdsjhlkjkhfjkdshjkfhsjklsdah fhadfjahlfdsjfdhjfads fdsfdhsajdfsahjfdsaljhhfahafshjsfdalhlfash\n" - + "dfsakldfjdajfdsjòdsfaj fdsajkadskk dfsjòkdsfaj sjdfsjdja aòfs jsfadfsdò saj òa fafòadsj jsafads\n" - + "dsfjfdhdsaljkhfdsljhdfsajkhsf fdshsajkhshjksdfhjkfdsh dsfjkh h dfshj ds\n" - + "dfjdfahjklhjhaajkshkshjdsafhldslhkdsfaljkadsfhlfjasjkhdasfjhkhfdf ads hldfsasahfdsdfshjfdsa jjhfdsh dfhjs hsajfdhdfhfdshhjdfsjhdf\n" - + "fdsjadsjkdfahjlkdfshkjdshjkfsdhjklsadfjkhjsaslfdhjalkdsfhjfshkfjlsldshjfsdhj\ndastest\n\n\nMessage"+i, null ); - System.out.println("sending message "+i); - } + client.sendMessage(Arrays.asList("massimiliano.assante"), "subject encodato ? è ", "è econdato ??", Arrays.asList("4827dd33-6eea-4bba-b78b-b98e2fd2ddfa")); } - - + + @Test + public void setUnread() throws Exception { + MessageManagerClient client = AbstractPlugin.messages().build(); + client.setRead("f3b7ce40-28df-40b3-ad17-f0b9bd658016", false); + } + public void addUserToGroup() throws StorageHubException { GroupManagerClient client = AbstractPlugin.groups().build(); client.addUserToGroup("andrea.rossi", "gcube-devsec-devVRE"); @@ -135,6 +128,8 @@ public class TestCall { WorkspaceManagerClient client = AbstractPlugin.workspace().build(); System.out.println(client.restoreFromTrash("4fc0a9df-9a51-42ef-98f2-06c21bd0669b", "f3d336cc-cd00-48ba-8339-2bffcbef825e")); } + + public void unshareFolder() throws Exception{ ItemManagerClient itemclient = AbstractPlugin.item().build(); @@ -188,23 +183,16 @@ public class TestCall { client.createGcubeItem(ws.getId(), item); } + @Test public void upload() throws Exception{ - //final ItemManagerClient client = AbstractPlugin.item().at(new URI("http://workspace-repository1-d.d4science.org:8080/storagehub")).build(); + final ItemManagerClient client = AbstractPlugin.item().build(); - Client client = ClientBuilder.newClient(); - client.register(MultiPartFeature.class).property(ClientProperties.CHUNKED_ENCODING_SIZE, 1024).property(ClientProperties.OUTBOUND_CONTENT_LENGTH_BUFFER, -1) - .property(ClientProperties.REQUEST_ENTITY_PROCESSING, "CHUNKED"); - WebTarget target = client.target("http://workspace-repository1-d.d4science.org:8080/storagehub/workspace/items/bc1c9525-43f7-4565-b5ea-0a0f9d7853a0/create/test-upload?gcube-token=595ca591-9921-423c-bfca-f8be19f05882-98187548"); + URI remote = new URI("https://data.bluecloud.cineca.it/api/download/gAAAAABhaSJN8TUA71la3mKMOL9D" + + "mioSBvOehbZlu54_jvscz8Zu3LXgqhr8RfJemd83QIh47z6TyMn3mD0OjpcG5g0qf9WUZCeW1J4btEqNObkaWv" + + "pMhabvswweyFn1Jg4m5GpwCoKayvgsYYwjbjsGsQW5Hileiw=="); - FormDataMultiPart multipart = new FormDataMultiPart(); - - multipart.field("name", "test1Gb2.db"); - multipart.field("description", "description"); - multipart.field("file", new FileInputStream("/home/lucio/Downloads/ar_bigdata_201705.csv"), MediaType.APPLICATION_OCTET_STREAM_TYPE); - - target.request().post(Entity.entity(multipart, MediaType.MULTIPART_FORM_DATA)); - - //client.uploadFile(new FileInputStream("/home/lucio/Downloads/test5Gb.zip"), "bc1c9525-43f7-4565-b5ea-0a0f9d7853a0", "5gb.zip", "description"); + + client.uploadFile(remote, "bc1c9525-43f7-4565-b5ea-0a0f9d7853a0", "5gb.zip", "description"); @@ -269,16 +257,16 @@ public class TestCall { } + @Test public void getRecents() { - ItemManagerClient itemclient = AbstractPlugin.item().build(); - + WorkspaceManagerClient wsclient = AbstractPlugin.workspace().build(); List items = wsclient.getRecentModifiedFilePerVre(); System.out.println("items are "+items.size()); for (Item item: items) - System.out.println(item.getName()+ " "+item.getPath()); + System.out.println(item.getName()+ " "+item.getLastModificationTime().getTimeInMillis()); } public void createFolder() throws Exception{