diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component
index 3de826f..75d0c87 100644
--- a/.settings/org.eclipse.wst.common.component
+++ b/.settings/org.eclipse.wst.common.component
@@ -4,7 +4,7 @@
-
+
uses
diff --git a/pom.xml b/pom.xml
index 7928607..1027fb7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
2.16.0
7.0.40
6.1.26
- 1.7
+ 1.21
1.6.6
1.7.4
1.0.12
@@ -149,6 +149,21 @@
${jackrabbit.version}
+
+
+ org.apache.tika
+ tika-parsers
+ 1.21
+
+
+
+
+ org.apache.tika
+ tika-core
+ 1.21
+
+
+
javax.ws.rs
diff --git a/src/main/java/org/gcube/data/access/storagehub/Utils.java b/src/main/java/org/gcube/data/access/storagehub/Utils.java
index ef6cb6e..62f4ec8 100644
--- a/src/main/java/org/gcube/data/access/storagehub/Utils.java
+++ b/src/main/java/org/gcube/data/access/storagehub/Utils.java
@@ -4,6 +4,7 @@ import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.net.URL;
import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.Calendar;
@@ -31,6 +32,7 @@ import org.gcube.common.storagehub.model.Paths;
import org.gcube.common.storagehub.model.exceptions.BackendGenericError;
import org.gcube.common.storagehub.model.exceptions.ItemLockedException;
import org.gcube.common.storagehub.model.items.AbstractFileItem;
+import org.gcube.common.storagehub.model.items.ExternalLink;
import org.gcube.common.storagehub.model.items.FolderItem;
import org.gcube.common.storagehub.model.items.GCubeItem;
import org.gcube.common.storagehub.model.items.Item;
@@ -325,6 +327,32 @@ public class Utils {
accountingHandler.createFolderAddObj(name, item.getClass().getSimpleName(), null, ses, newNode, false);
return newNode;
}
+
+ public static Node createURLInternally(Session ses, Node destinationNode, String name, URL value, String description, String login, AccountingHandler accountingHandler) throws BackendGenericError {
+
+ String uniqueName = Utils.checkExistanceAndGetUniqueName(ses, destinationNode, name);
+
+ ExternalLink item = new ExternalLink();
+ Calendar now = Calendar.getInstance();
+ item.setName(uniqueName);
+ item.setTitle(uniqueName);
+ item.setDescription(description);
+ //item.setCreationTime(now);
+ item.setLastAction(ItemAction.CREATED);
+ item.setLastModificationTime(now);
+ item.setLastModifiedBy(login);
+ item.setOwner(login);
+ item.setPublicItem(false);
+ item.setValue(value);
+
+ //to inherit hidden property
+ //item.setHidden(destinationItem.isHidden());
+
+ Node newNode = new Item2NodeConverter().getNode(destinationNode, item);
+ if (accountingHandler!=null)
+ accountingHandler.createFolderAddObj(name, item.getClass().getSimpleName(), null, ses, newNode, false);
+ return newNode;
+ }
public static Node createGcubeItemInternally(Session ses, Node destinationNode, String name, String description, String login, GCubeItem gcubeItem, AccountingHandler accountingHandler) throws BackendGenericError {
diff --git a/src/main/java/org/gcube/data/access/storagehub/handlers/Item2NodeConverter.java b/src/main/java/org/gcube/data/access/storagehub/handlers/Item2NodeConverter.java
index 90fea62..1b72bd0 100644
--- a/src/main/java/org/gcube/data/access/storagehub/handlers/Item2NodeConverter.java
+++ b/src/main/java/org/gcube/data/access/storagehub/handlers/Item2NodeConverter.java
@@ -1,6 +1,7 @@
package org.gcube.data.access.storagehub.handlers;
import java.lang.reflect.Field;
+import java.net.URL;
import java.util.Arrays;
import java.util.Calendar;
import java.util.HashSet;
@@ -149,6 +150,7 @@ public class Item2NodeConverter {
if (returnType.equals(String.class)) return new Values(new StringValue((String) value));
if (returnType.isEnum()) return new Values(new StringValue(((Enum) value).toString()));
if (returnType.equals(Calendar.class)) return new Values(new DateValue((Calendar) value));
+ if (returnType.equals(URL.class)) return new Values(new StringValue(((URL) value).toString()));
if (returnType.equals(Boolean.class) || returnType.equals(boolean.class)) return new Values(new BooleanValue((Boolean) value));
if (returnType.equals(Long.class) || returnType.equals(long.class)) return new Values(new LongValue((Long) value));
if (returnType.equals(Integer.class) || returnType.equals(int.class)) return new Values(new LongValue((Long) value));
@@ -224,19 +226,25 @@ public class Item2NodeConverter {
Node metadataNode;
try {
metadataNode = node.getNode(NodeProperty.METADATA.toString());
+ metadataNode.remove();
}catch (PathNotFoundException e) {
- metadataNode = node.addNode(NodeProperty.METADATA.toString());
+
}
-
+
+ metadataNode = node.addNode(NodeProperty.METADATA.toString());
+
for (Field field : retrieveAllFields(Metadata.class)){
if (field.isAnnotationPresent(MapAttribute.class)){
//logger.debug("found field {} of type annotated as MapAttribute in class {}", field.getName(), clazz.getName());
field.setAccessible(true);
for (Entry entry : meta.entrySet())
try{
- Values values = getObjectValue(entry.getValue().getClass(), entry.getValue());
- if (values.isMulti()) metadataNode.setProperty(entry.getKey(), values.getValues());
- else metadataNode.setProperty(entry.getKey(), values.getValue());
+ if (entry.getValue() != null) {
+ Values values = getObjectValue(entry.getValue().getClass(), entry.getValue());
+ if (values.isMulti()) metadataNode.setProperty(entry.getKey(), values.getValues());
+ else metadataNode.setProperty(entry.getKey(), values.getValue());
+ }
+
} catch (Exception e ) {
logger.warn("error setting value",e);
}
diff --git a/src/main/java/org/gcube/data/access/storagehub/handlers/Node2ItemConverter.java b/src/main/java/org/gcube/data/access/storagehub/handlers/Node2ItemConverter.java
index f0680a2..f139d93 100644
--- a/src/main/java/org/gcube/data/access/storagehub/handlers/Node2ItemConverter.java
+++ b/src/main/java/org/gcube/data/access/storagehub/handlers/Node2ItemConverter.java
@@ -1,6 +1,8 @@
package org.gcube.data.access.storagehub.handlers;
import java.lang.reflect.Field;
+import java.net.URI;
+import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
@@ -255,6 +257,7 @@ public class Node2ItemConverter {
if (returnType.equals(String.class)) return prop.getString();
if (returnType.isEnum()) return Enum.valueOf(returnType, prop.getString());
if (returnType.equals(Calendar.class)) return prop.getDate();
+ if (returnType.equals(URL.class)) return new URI(prop.getString()).toURL();
if (returnType.equals(Boolean.class) || returnType.equals(boolean.class)) return prop.getBoolean();
if (returnType.equals(Long.class) || returnType.equals(long.class)) return prop.getLong();
if (returnType.equals(Integer.class) || returnType.equals(int.class)) return prop.getLong();
diff --git a/src/main/java/org/gcube/data/access/storagehub/handlers/StorageBackendHandler.java b/src/main/java/org/gcube/data/access/storagehub/handlers/StorageBackendHandler.java
index 490f874..69aab64 100644
--- a/src/main/java/org/gcube/data/access/storagehub/handlers/StorageBackendHandler.java
+++ b/src/main/java/org/gcube/data/access/storagehub/handlers/StorageBackendHandler.java
@@ -40,4 +40,12 @@ public class StorageBackendHandler {
defaultBackend.delete(id);
}
+ public String getTotalVolume() {
+ return defaultBackend.getTotalSizeStored();
+ }
+
+ public String getTotalItemsCount() {
+ return defaultBackend.getTotalItemsCount();
+ }
+
}
diff --git a/src/main/java/org/gcube/data/access/storagehub/handlers/content/ContentHandler.java b/src/main/java/org/gcube/data/access/storagehub/handlers/content/ContentHandler.java
index 913512b..0155184 100644
--- a/src/main/java/org/gcube/data/access/storagehub/handlers/content/ContentHandler.java
+++ b/src/main/java/org/gcube/data/access/storagehub/handlers/content/ContentHandler.java
@@ -7,11 +7,10 @@ import org.gcube.common.storagehub.model.items.nodes.Content;
public interface ContentHandler {
- void initiliseSpecificContent(InputStream is, String fileName) throws Exception;
+ void initiliseSpecificContent(InputStream is, String fileName, String mimeType) throws Exception;
Content getContent();
AbstractFileItem buildItem(String name, String description, String login);
-
-
+
}
diff --git a/src/main/java/org/gcube/data/access/storagehub/handlers/content/GenericFileHandler.java b/src/main/java/org/gcube/data/access/storagehub/handlers/content/GenericFileHandler.java
index d5423e1..3e6f223 100644
--- a/src/main/java/org/gcube/data/access/storagehub/handlers/content/GenericFileHandler.java
+++ b/src/main/java/org/gcube/data/access/storagehub/handlers/content/GenericFileHandler.java
@@ -11,8 +11,11 @@ public class GenericFileHandler implements ContentHandler{
Content content = new Content();
+
@Override
- public void initiliseSpecificContent(InputStream is, String filename) throws Exception {}
+ public void initiliseSpecificContent(InputStream is, String filename, String mimeType) throws Exception {
+ content.setMimeType(mimeType);
+ }
@Override
public Content getContent() {
diff --git a/src/main/java/org/gcube/data/access/storagehub/handlers/content/ImageHandler.java b/src/main/java/org/gcube/data/access/storagehub/handlers/content/ImageHandler.java
index 4d0cd91..4a88b82 100644
--- a/src/main/java/org/gcube/data/access/storagehub/handlers/content/ImageHandler.java
+++ b/src/main/java/org/gcube/data/access/storagehub/handlers/content/ImageHandler.java
@@ -29,7 +29,7 @@ public class ImageHandler implements ContentHandler{
private static final Logger logger = LoggerFactory.getLogger(ImageHandler.class);
@Override
- public void initiliseSpecificContent(InputStream is, String fileName) throws Exception {
+ public void initiliseSpecificContent(InputStream is, String fileName, String mimeType) throws Exception {
Image image = javax.imageio.ImageIO.read(is);
int width = image.getWidth(null);
@@ -50,6 +50,7 @@ public class ImageHandler implements ContentHandler{
}catch(Throwable t) {
logger.warn("thumbnail for file {} cannot be created ", fileName,t);
}
+ content.setMimeType(mimeType);
}
diff --git a/src/main/java/org/gcube/data/access/storagehub/handlers/content/OfficeAppHandler.java b/src/main/java/org/gcube/data/access/storagehub/handlers/content/OfficeAppHandler.java
new file mode 100644
index 0000000..d77e28f
--- /dev/null
+++ b/src/main/java/org/gcube/data/access/storagehub/handlers/content/OfficeAppHandler.java
@@ -0,0 +1,57 @@
+package org.gcube.data.access.storagehub.handlers.content;
+
+import java.io.InputStream;
+import java.util.Calendar;
+
+import org.apache.tika.metadata.Metadata;
+import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.microsoft.ooxml.OOXMLParser;
+import org.apache.tika.sax.BodyContentHandler;
+import org.gcube.common.storagehub.model.annotations.MimeTypeHandler;
+import org.gcube.common.storagehub.model.items.GenericFileItem;
+import org.gcube.common.storagehub.model.items.nodes.Content;
+import org.gcube.common.storagehub.model.types.ItemAction;
+
+
+public class OfficeAppHandler implements ContentHandler{
+
+ Content content = new Content();
+
+ @Override
+ public void initiliseSpecificContent(InputStream is, String filename, String mimeType) throws Exception {
+ //detecting the file type
+ BodyContentHandler handler = new BodyContentHandler();
+ Metadata metadata = new Metadata();
+ ParseContext pcontext = new ParseContext();
+
+ //OOXml parser
+ OOXMLParser msofficeparser = new OOXMLParser ();
+ msofficeparser.parse(is, handler, metadata,pcontext);
+ String appname = metadata.get("Application-Name");
+ content.setMimeType("application/"+appname);
+ }
+
+ @Override
+ public Content getContent() {
+ return content;
+ }
+
+ @Override
+ public GenericFileItem buildItem(String name, String description, String login) {
+ GenericFileItem item = new GenericFileItem();
+ Calendar now = Calendar.getInstance();
+ item.setName(name);
+ item.setTitle(name);
+ item.setDescription(description);
+ //item.setCreationTime(now);
+ item.setHidden(false);
+ item.setLastAction(ItemAction.CREATED);
+ item.setLastModificationTime(now);
+
+ item.setLastModifiedBy(login);
+ item.setOwner(login);
+ item.setContent(this.content);
+ return item;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/org/gcube/data/access/storagehub/handlers/content/PdfHandler.java b/src/main/java/org/gcube/data/access/storagehub/handlers/content/PdfHandler.java
index a63fd5e..bfd5833 100644
--- a/src/main/java/org/gcube/data/access/storagehub/handlers/content/PdfHandler.java
+++ b/src/main/java/org/gcube/data/access/storagehub/handlers/content/PdfHandler.java
@@ -21,10 +21,10 @@ public class PdfHandler implements ContentHandler {
public static final String TITLE = "dc:title";
PDFContent content = new PDFContent();
-
+
@Override
- public void initiliseSpecificContent(InputStream is, String fileName) throws Exception {
+ public void initiliseSpecificContent(InputStream is, String fileName, String mimeType) throws Exception {
PdfReader reader = new PdfReader(is);
content.setNumberOfPages(Long.valueOf(reader.getNumberOfPages()));
content.setVersion(String.valueOf(reader.getPdfVersion()));
@@ -32,6 +32,7 @@ public class PdfHandler implements ContentHandler {
content.setAuthor(fileInfo.containsKey(AUTHOR)?fileInfo.get(AUTHOR):"n/a");
content.setProducer(fileInfo.containsKey(PRODUCER)?fileInfo.get(PRODUCER):"n/a");
content.setTitle(fileInfo.containsKey(TITLE)?fileInfo.get(TITLE):"n/a");
+ content.setMimeType(mimeType);
}
@Override
diff --git a/src/main/java/org/gcube/data/access/storagehub/services/ACLManager.java b/src/main/java/org/gcube/data/access/storagehub/services/ACLManager.java
index d0c8773..31941ac 100644
--- a/src/main/java/org/gcube/data/access/storagehub/services/ACLManager.java
+++ b/src/main/java/org/gcube/data/access/storagehub/services/ACLManager.java
@@ -14,7 +14,6 @@ import javax.jcr.security.AccessControlManager;
import javax.jcr.security.Privilege;
import javax.servlet.ServletContext;
import javax.ws.rs.Consumes;
-import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
@@ -24,7 +23,10 @@ import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
+import org.apache.jackrabbit.api.JackrabbitSession;
import org.apache.jackrabbit.api.security.JackrabbitAccessControlList;
+import org.apache.jackrabbit.api.security.user.Group;
+import org.apache.jackrabbit.api.security.user.User;
import org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils;
import org.gcube.common.gxrest.response.outbound.GXOutboundErrorResponse;
import org.gcube.common.storagehub.model.Excludes;
@@ -38,6 +40,7 @@ import org.gcube.common.storagehub.model.exceptions.UserNotAuthorizedException;
import org.gcube.common.storagehub.model.items.FolderItem;
import org.gcube.common.storagehub.model.items.Item;
import org.gcube.common.storagehub.model.items.SharedFolder;
+import org.gcube.common.storagehub.model.items.VreFolder;
import org.gcube.common.storagehub.model.types.ACLList;
import org.gcube.data.access.storagehub.AuthorizationChecker;
import org.gcube.data.access.storagehub.handlers.CredentialHandler;
@@ -152,13 +155,28 @@ public class ACLManager {
if (accessType!=AccessType.ADMINISTRATOR)
throw new InvalidCallParameters("acls in vreFolder cannot be changed, only new admin can be set");
+ org.apache.jackrabbit.api.security.user.UserManager usrManager = ((JackrabbitSession)ses).getUserManager();
+
+ String groupId = folder.getTitle();
+ Group group = (Group)usrManager.getAuthorizable(groupId);
+ User authUser = (User)usrManager.getAuthorizable(user);
- //TODO if is a VRE FOLDER
+ if (!group.isMember(authUser))
+ throw new InvalidCallParameters("user "+user+" is not in the group "+groupId);
+
+ String path = node.getPath();
+ AccessControlManager acm = ses.getAccessControlManager();
+ JackrabbitAccessControlList acls = AccessControlUtils.getAccessControlList(acm, path);
+ Privilege[] userPrivileges = new Privilege[] { acm.privilegeFromName(AccessType.ADMINISTRATOR.getValue()) };
+ Principal principal = AccessControlUtils.getPrincipal(ses, user);
+ acls.addAccessControlEntry(principal, userPrivileges);
+ acm.setPolicy(path, acls);
+ ses.save();
} else {
-
+ //TODO: probably must be changed with the shared set
if (!((SharedFolder) item).getUsers().getMap().containsKey(user))
throw new InvalidCallParameters("shared folder with id "+item.getId()+" is not shared with user "+user);
diff --git a/src/main/java/org/gcube/data/access/storagehub/services/GroupManager.java b/src/main/java/org/gcube/data/access/storagehub/services/GroupManager.java
index f5f84e7..77da7af 100644
--- a/src/main/java/org/gcube/data/access/storagehub/services/GroupManager.java
+++ b/src/main/java/org/gcube/data/access/storagehub/services/GroupManager.java
@@ -30,7 +30,6 @@ import org.apache.jackrabbit.api.security.user.Query;
import org.apache.jackrabbit.api.security.user.QueryBuilder;
import org.apache.jackrabbit.api.security.user.User;
import org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils;
-import org.gcube.common.authorization.control.annotations.AuthorizationControl;
import org.gcube.common.authorization.library.provider.AuthorizationProvider;
import org.gcube.common.gxrest.response.outbound.GXOutboundErrorResponse;
import org.gcube.common.storagehub.model.acls.AccessType;
@@ -39,7 +38,6 @@ import org.gcube.common.storagehub.model.types.NodeProperty;
import org.gcube.common.storagehub.model.types.PrimaryNodeType;
import org.gcube.data.access.storagehub.Constants;
import org.gcube.data.access.storagehub.Utils;
-import org.gcube.data.access.storagehub.exception.MyAuthException;
import org.gcube.data.access.storagehub.handlers.CredentialHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -57,7 +55,7 @@ public class GroupManager {
@GET
@Path("")
@Produces(MediaType.APPLICATION_JSON)
- @AuthorizationControl(allowed={"lucio.lelii"}, exception=MyAuthException.class)
+ //@AuthorizationControl(allowed={"lucio.lelii"}, exception=MyAuthException.class)
public List getGroups(){
JackrabbitSession session = null;
@@ -91,7 +89,7 @@ public class GroupManager {
@POST
@Path("")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
- @AuthorizationControl(allowed={"lucio.lelii"}, exception=MyAuthException.class)
+ //@AuthorizationControl(allowed={"lucio.lelii"}, exception=MyAuthException.class)
public String createGroup(@FormParam("group") String group, @FormParam("accessType") AccessType accessType){
JackrabbitSession session = null;
@@ -120,7 +118,7 @@ public class GroupManager {
@DELETE
@Path("{group}")
- @AuthorizationControl(allowed={"lucio.lelii"}, exception=MyAuthException.class)
+ //@AuthorizationControl(allowed={"lucio.lelii"}, exception=MyAuthException.class)
public String deleteGroup(@PathParam("group") String group){
JackrabbitSession session = null;
@@ -153,7 +151,7 @@ public class GroupManager {
@PUT
@Path("{id}")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
- @AuthorizationControl(allowed={"lucio.lelii"}, exception=MyAuthException.class)
+ //@AuthorizationControl(allowed={"lucio.lelii"}, exception=MyAuthException.class)
public boolean addUserToGroup(@PathParam("id") String groupId, @FormParam("userId") String userId){
JackrabbitSession session = null;
@@ -190,7 +188,7 @@ public class GroupManager {
@DELETE
@Path("{groupId}/users/{userId}")
- @AuthorizationControl(allowed={"lucio.lelii"}, exception=MyAuthException.class)
+ //@AuthorizationControl(allowed={"lucio.lelii"}, exception=MyAuthException.class)
public boolean removeUserFromGroup(@PathParam("groupId") String groupId, @PathParam("userId") String userId){
JackrabbitSession session = null;
@@ -234,7 +232,7 @@ public class GroupManager {
@GET
@Path("{groupId}/users")
@Produces(MediaType.APPLICATION_JSON)
- @AuthorizationControl(allowed={"lucio.lelii"}, exception=MyAuthException.class)
+ //@AuthorizationControl(allowed={"lucio.lelii"}, exception=MyAuthException.class)
public List getUsersOfGroup(@PathParam("groupId") String groupId){
JackrabbitSession session = null;
diff --git a/src/main/java/org/gcube/data/access/storagehub/services/ItemsCreator.java b/src/main/java/org/gcube/data/access/storagehub/services/ItemsCreator.java
index 3501b50..e669bdd 100644
--- a/src/main/java/org/gcube/data/access/storagehub/services/ItemsCreator.java
+++ b/src/main/java/org/gcube/data/access/storagehub/services/ItemsCreator.java
@@ -3,6 +3,7 @@ package org.gcube.data.access.storagehub.services;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.net.URL;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
@@ -154,6 +155,60 @@ public class ItemsCreator {
return Response.ok(toReturn).build();
}
+ @POST
+ @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
+ @Path("/{id}/create/URL")
+ public Response createURL(@PathParam("id") String id, @FormParam("name") String name, @FormParam("description") String description, @FormParam("value") URL value) {
+ InnerMethodName.instance.set("createItem(URL)");
+ log.info("create url called");
+ Session ses = null;
+ String toReturn = null;
+ try{
+ final String login = AuthorizationProvider.instance.get().getClient().getId();
+ long start = System.currentTimeMillis();
+
+ ses = repository.getRepository().login(CredentialHandler.getAdminCredentials(context));
+
+ log.info("time to connect to repo {}",(System.currentTimeMillis()-start));
+
+ Node destination;
+ try {
+ destination = ses.getNodeByIdentifier(id);
+ }catch(RepositoryException inf) {
+ throw new IdNotFoundException(id);
+ }
+
+ if (!node2Item.checkNodeType(destination, FolderItem.class))
+ throw new InvalidItemException("the destination item is not a folder");
+
+ authChecker.checkWriteAuthorizationControl(ses, destination.getIdentifier(), true);
+
+ Utils.acquireLockWithWait(ses, destination.getPath(), false, login, 10);
+ Node newNode;
+ try {
+ newNode = Utils.createURLInternally(ses, destination, name, value, description, login, accountingHandler);
+ ses.save();
+ } finally {
+ ses.getWorkspace().getLockManager().unlock(destination.getPath());
+ }
+
+ log.info("item with id {} correctly created",newNode.getIdentifier());
+ toReturn = newNode.getIdentifier();
+ }catch(StorageHubException she ){
+ log.error(she.getErrorMessage(), she);
+ GXOutboundErrorResponse.throwException(she, Response.Status.fromStatusCode(she.getStatus()));
+ }catch(RepositoryException re ){
+ log.error("jcr error creating item", re);
+ GXOutboundErrorResponse.throwException(new BackendGenericError("jcr error creating item", re));
+ }finally{
+ if (ses!=null)
+ ses.logout();
+
+ }
+ return Response.ok(toReturn).build();
+ }
+
+
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Path("/{id}/create/GCUBEITEM")
@@ -452,8 +507,8 @@ public class ItemsCreator {
handler = contenthandlerFactory.create(mimeType);
is1.reset();
- handler.initiliseSpecificContent(is1, name);
- handler.getContent().setMimeType(mimeType);
+ handler.initiliseSpecificContent(is1, name, mimeType);
+
log.trace("TIMING: reading the mimetype - finished in {}",System.currentTimeMillis()-start);
} catch (Throwable e) {
log.error("error retrieving mimeType",e);
diff --git a/src/main/java/org/gcube/data/access/storagehub/services/UserManager.java b/src/main/java/org/gcube/data/access/storagehub/services/UserManager.java
index 4b59a63..951f7cf 100644
--- a/src/main/java/org/gcube/data/access/storagehub/services/UserManager.java
+++ b/src/main/java/org/gcube/data/access/storagehub/services/UserManager.java
@@ -55,7 +55,7 @@ public class UserManager {
@GET
@Path("")
@Produces(MediaType.APPLICATION_JSON)
- @AuthorizationControl(allowed={"lucio.lelii"}, exception=MyAuthException.class)
+ //@AuthorizationControl(allowed={"lucio.lelii"}, exception=MyAuthException.class)
public List getUsers(){
JackrabbitSession session = null;
@@ -89,7 +89,7 @@ public class UserManager {
@POST
@Path("")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
- @AuthorizationControl(allowed={"lucio.lelii"}, exception=MyAuthException.class)
+ //@AuthorizationControl(allowed={"lucio.lelii"}, exception=MyAuthException.class)
public String createUser(@FormParam("user") String user, @FormParam("password") String password){
JackrabbitSession session = null;
@@ -127,7 +127,7 @@ public class UserManager {
@DELETE
@Path("{id}")
- @AuthorizationControl(allowed={"lucio.lelii"}, exception=MyAuthException.class)
+ //@AuthorizationControl(allowed={"lucio.lelii"}, exception=MyAuthException.class)
public String deleteUser(@PathParam("id") String id){
JackrabbitSession session = null;
diff --git a/src/main/java/org/gcube/data/access/storagehub/services/WorkspaceManager.java b/src/main/java/org/gcube/data/access/storagehub/services/WorkspaceManager.java
index 2dcbb95..6168e7e 100644
--- a/src/main/java/org/gcube/data/access/storagehub/services/WorkspaceManager.java
+++ b/src/main/java/org/gcube/data/access/storagehub/services/WorkspaceManager.java
@@ -49,6 +49,7 @@ import org.gcube.data.access.storagehub.Utils;
import org.gcube.data.access.storagehub.handlers.CredentialHandler;
import org.gcube.data.access.storagehub.handlers.Item2NodeConverter;
import org.gcube.data.access.storagehub.handlers.Node2ItemConverter;
+import org.gcube.data.access.storagehub.handlers.StorageBackendHandler;
import org.gcube.data.access.storagehub.handlers.TrashHandler;
import org.gcube.data.access.storagehub.handlers.VRE;
import org.gcube.data.access.storagehub.handlers.VREManager;
@@ -91,6 +92,8 @@ public class WorkspaceManager {
@Inject Node2ItemConverter node2Item;
@Inject Item2NodeConverter item2Node;
+ @Inject StorageBackendHandler storageBackend;
+
@Path("")
@GET
@Produces(MediaType.APPLICATION_JSON)
@@ -416,5 +419,21 @@ public class WorkspaceManager {
return new ItemList(toReturn);
}
+
+ @Path("count")
+ @GET
+ public String getTotalItemsCount(){
+ InnerMethodName.instance.set("getTotalItemsCount");
+ return storageBackend.getTotalItemsCount();
+ }
+
+
+ @Path("size")
+ @GET
+ public String getTotalVolume(){
+ InnerMethodName.instance.set("getTotalSize");
+ return storageBackend.getTotalVolume();
+
+ }
}
diff --git a/src/main/java/org/gcube/data/access/storagehub/storage/backend/impl/GCubeStorageBackend.java b/src/main/java/org/gcube/data/access/storagehub/storage/backend/impl/GCubeStorageBackend.java
index 78705e3..d19340f 100644
--- a/src/main/java/org/gcube/data/access/storagehub/storage/backend/impl/GCubeStorageBackend.java
+++ b/src/main/java/org/gcube/data/access/storagehub/storage/backend/impl/GCubeStorageBackend.java
@@ -69,6 +69,18 @@ public class GCubeStorageBackend implements StorageBackend {
}
+ @Override
+ public String getTotalSizeStored() {
+ IClient storageClient = getStorageClient(AuthorizationProvider.instance.get().getClient().getId()).getClient();
+ return storageClient.getUserTotalItems();
+ }
+
+ @Override
+ public String getTotalItemsCount() {
+ IClient storageClient = getStorageClient(AuthorizationProvider.instance.get().getClient().getId()).getClient();
+ return storageClient.getTotalUserVolume();
+ }
+
diff --git a/src/main/webapp/WEB-INF/README b/src/main/webapp/WEB-INF/README
index b945906..aa0d645 100644
--- a/src/main/webapp/WEB-INF/README
+++ b/src/main/webapp/WEB-INF/README
@@ -25,7 +25,7 @@ no. 654119), SoBigData (grant no. 654024), AGINFRA PLUS (grant no. 731001).
Version
--------------------------------------------------
-1.0.7-SNAPSHOT (2019-07-03)
+1.0.7-SNAPSHOT (2019-07-29)
Please see the file named "changelog.xml" in this directory for the release notes.
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
index 4dbf04d..88995ec 100644
--- a/src/main/webapp/WEB-INF/web.xml
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -10,7 +10,7 @@
resolver-basepath
- https://data-pre.d4science.org/shub
+ https://data-d.d4science.org/shub
org.gcube.data.access.storagehub.StorageHub