diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000..ace8266
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.project b/.project
new file mode 100644
index 0000000..a9b54dd
--- /dev/null
+++ b/.project
@@ -0,0 +1,23 @@
+
+
+ storagehub-model
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+
+
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..29abf99
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
+encoding//src/test/java=UTF-8
+encoding//src/test/resources=UTF-8
+encoding/=UTF-8
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..672496e
--- /dev/null
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..d57f355
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,75 @@
+
+ 4.0.0
+
+
+ maven-parent
+ org.gcube.tools
+ 1.0.0
+
+
+
+ org.gcube.common
+ storagehub-model
+ 1.0.0-SNAPSHOT
+ storagehub-model
+
+
+
+
+ org.gcube.distribution
+ gcube-bom
+ LATEST
+ pom
+ import
+
+
+
+
+
+
+ org.projectlombok
+ lombok
+ 1.14.8
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+
+ com.fasterxml.jackson.core
+ jackson-annotations
+
+
+ org.slf4j
+ slf4j-api
+
+
+ org.slf4j
+ slf4j-log4j12
+ 1.6.4
+ test
+
+
+ junit
+ junit
+ 4.10
+ test
+
+
+
+
+
+
+
+ maven-compiler-plugin
+ 2.3.2
+
+ 1.8
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/org/gcube/common/storagehub/model/Metadata.java b/src/main/java/org/gcube/common/storagehub/model/Metadata.java
new file mode 100644
index 0000000..8ffd6a0
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/Metadata.java
@@ -0,0 +1,19 @@
+package org.gcube.common.storagehub.model;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import org.gcube.common.storagehub.model.annotations.MapAttribute;
+
+@Getter
+@Setter
+@NoArgsConstructor
+public class Metadata {
+
+ @MapAttribute(excludeStartWith="jcr:")
+ Map value = new HashMap();
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/Path.java b/src/main/java/org/gcube/common/storagehub/model/Path.java
new file mode 100644
index 0000000..f18b7f4
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/Path.java
@@ -0,0 +1,46 @@
+package org.gcube.common.storagehub.model;
+
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class Path {
+
+ protected List paths = null;
+
+ private Path(){}
+
+ protected Path(String path){
+ if (!(path==null || path.isEmpty()))
+ paths = Arrays.asList(path.split("/")).stream().filter(s -> !s.isEmpty()).collect(Collectors.toList());
+ }
+
+ public String toPath(){
+ if (paths ==null || paths.isEmpty()) return "/";
+ else return "/"+paths.stream().collect(Collectors.joining("/"))+"/";
+ }
+
+ public String getLastDirName(){
+ return paths.get(paths.size()-1);
+ }
+
+ protected Path append(Path anotherPath){
+ Path path = new Path();
+ path.paths = new LinkedList(this.paths);
+ if (anotherPath.paths!=null)
+ path.paths.addAll(anotherPath.paths);
+ return path;
+ }
+
+ protected Path append(String anotherPath){
+ return this.append(new Path(anotherPath));
+ }
+
+ protected Path remove(Path anotherPath){
+ Path path = new Path();
+ path.paths = new LinkedList(this.paths);
+ path.paths.removeAll(anotherPath.paths);
+ return path;
+ }
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/Paths.java b/src/main/java/org/gcube/common/storagehub/model/Paths.java
new file mode 100644
index 0000000..7aea374
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/Paths.java
@@ -0,0 +1,21 @@
+package org.gcube.common.storagehub.model;
+
+public class Paths {
+
+ public static Path getPath(String path){
+ return new Path(path);
+ }
+
+ public static Path append(Path path, Path anotherPath){
+ return path.append(anotherPath);
+ }
+
+ public static Path append(Path path, String anotherPath){
+ return path.append(anotherPath);
+ }
+
+ public static Path remove(Path path, Path anotherPath){
+ return path.remove(anotherPath);
+ }
+
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/annotations/Attribute.java b/src/main/java/org/gcube/common/storagehub/model/annotations/Attribute.java
new file mode 100644
index 0000000..3d95081
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/annotations/Attribute.java
@@ -0,0 +1,13 @@
+package org.gcube.common.storagehub.model.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+public @interface Attribute {
+
+ String value();
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/annotations/AttributeRootNode.java b/src/main/java/org/gcube/common/storagehub/model/annotations/AttributeRootNode.java
new file mode 100644
index 0000000..c651164
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/annotations/AttributeRootNode.java
@@ -0,0 +1,14 @@
+package org.gcube.common.storagehub.model.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface AttributeRootNode {
+
+ String value();
+ boolean isContentNode() default false;
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/annotations/ItemElement.java b/src/main/java/org/gcube/common/storagehub/model/annotations/ItemElement.java
new file mode 100644
index 0000000..4982c91
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/annotations/ItemElement.java
@@ -0,0 +1,13 @@
+package org.gcube.common.storagehub.model.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface ItemElement {
+
+ String type();
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/annotations/ListNodes.java b/src/main/java/org/gcube/common/storagehub/model/annotations/ListNodes.java
new file mode 100644
index 0000000..3246f19
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/annotations/ListNodes.java
@@ -0,0 +1,15 @@
+package org.gcube.common.storagehub.model.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+public @interface ListNodes {
+
+ String includeTypeStartWith() default "";
+ String excludeTypeStartWith() default "";
+ Class> listClass();
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/annotations/MapAttribute.java b/src/main/java/org/gcube/common/storagehub/model/annotations/MapAttribute.java
new file mode 100644
index 0000000..a2e711d
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/annotations/MapAttribute.java
@@ -0,0 +1,13 @@
+package org.gcube.common.storagehub.model.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+public @interface MapAttribute {
+
+ String excludeStartWith() default "";
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/annotations/NodeAttribute.java b/src/main/java/org/gcube/common/storagehub/model/annotations/NodeAttribute.java
new file mode 100644
index 0000000..d975e18
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/annotations/NodeAttribute.java
@@ -0,0 +1,15 @@
+package org.gcube.common.storagehub.model.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+public @interface NodeAttribute {
+
+ String value();
+ boolean isReadOnly() default false;
+
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/annotations/RootNode.java b/src/main/java/org/gcube/common/storagehub/model/annotations/RootNode.java
new file mode 100644
index 0000000..0eedbc8
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/annotations/RootNode.java
@@ -0,0 +1,13 @@
+package org.gcube.common.storagehub.model.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface RootNode {
+
+ String[] value();
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/items/AbstractFileItem.java b/src/main/java/org/gcube/common/storagehub/model/items/AbstractFileItem.java
new file mode 100644
index 0000000..98a09fb
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/items/AbstractFileItem.java
@@ -0,0 +1,9 @@
+package org.gcube.common.storagehub.model.items;
+
+import org.gcube.common.storagehub.model.items.nodes.Content;
+
+public abstract class AbstractFileItem extends Item{
+
+ public abstract Content getContent();
+
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/items/FolderItem.java b/src/main/java/org/gcube/common/storagehub/model/items/FolderItem.java
new file mode 100644
index 0000000..8932d48
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/items/FolderItem.java
@@ -0,0 +1,17 @@
+package org.gcube.common.storagehub.model.items;
+
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import org.gcube.common.storagehub.model.annotations.RootNode;
+
+
+@NoArgsConstructor
+@Getter
+@Setter
+@RootNode("nthl:workspaceItem")
+public class FolderItem extends Item {
+
+
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/items/GCubeItem.java b/src/main/java/org/gcube/common/storagehub/model/items/GCubeItem.java
new file mode 100644
index 0000000..7c726ca
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/items/GCubeItem.java
@@ -0,0 +1,36 @@
+package org.gcube.common.storagehub.model.items;
+
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import org.gcube.common.storagehub.model.Metadata;
+import org.gcube.common.storagehub.model.annotations.Attribute;
+import org.gcube.common.storagehub.model.annotations.NodeAttribute;
+import org.gcube.common.storagehub.model.annotations.RootNode;
+
+@NoArgsConstructor
+@Getter
+@Setter
+@RootNode("nthl:gCubeItem")
+public class GCubeItem extends Item{
+
+ @Attribute("hl:scopes")
+ String[] scopes;
+
+ @Attribute("hl:creator")
+ String creator;
+
+ @Attribute("hl:itemType")
+ String itemType;
+
+ @Attribute("hl:properties")
+ String properties;
+
+ @Attribute("hl:isShared")
+ Boolean shared;
+
+ @NodeAttribute("hl:property")
+ Metadata property;
+
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/items/GenericFileItem.java b/src/main/java/org/gcube/common/storagehub/model/items/GenericFileItem.java
new file mode 100644
index 0000000..7252122
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/items/GenericFileItem.java
@@ -0,0 +1,22 @@
+package org.gcube.common.storagehub.model.items;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import org.gcube.common.storagehub.model.annotations.NodeAttribute;
+import org.gcube.common.storagehub.model.annotations.RootNode;
+import org.gcube.common.storagehub.model.items.nodes.Content;
+
+@NoArgsConstructor
+@AllArgsConstructor
+@Getter
+@Setter
+@RootNode("nthl:externalFile")
+public class GenericFileItem extends AbstractFileItem{
+
+ @NodeAttribute(value ="jcr:content")
+ Content content;
+
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/items/ImageFile.java b/src/main/java/org/gcube/common/storagehub/model/items/ImageFile.java
new file mode 100644
index 0000000..a6dda27
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/items/ImageFile.java
@@ -0,0 +1,22 @@
+package org.gcube.common.storagehub.model.items;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import org.gcube.common.storagehub.model.annotations.NodeAttribute;
+import org.gcube.common.storagehub.model.annotations.RootNode;
+import org.gcube.common.storagehub.model.items.nodes.ImageContent;
+
+
+@NoArgsConstructor
+@AllArgsConstructor
+@Getter
+@Setter
+@RootNode("nthl:externalImage")
+public class ImageFile extends AbstractFileItem{
+
+ @NodeAttribute(value="jcr:content")
+ ImageContent content;
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/items/Item.java b/src/main/java/org/gcube/common/storagehub/model/items/Item.java
new file mode 100644
index 0000000..fe094e3
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/items/Item.java
@@ -0,0 +1,73 @@
+package org.gcube.common.storagehub.model.items;
+
+import java.util.Calendar;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import org.gcube.common.storagehub.model.annotations.Attribute;
+import org.gcube.common.storagehub.model.annotations.NodeAttribute;
+import org.gcube.common.storagehub.model.items.nodes.Accounting;
+import org.gcube.common.storagehub.model.types.ItemAction;
+
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+public class Item {
+
+ String id;
+
+ String name;
+
+ String path;
+
+ String parentId;
+
+ String parentPath;
+
+ String primaryType;
+
+ boolean locked;
+
+ @Attribute("jcr:title")
+ String title;
+
+ @Attribute("jcr:description")
+ String description;
+
+ @Attribute("jcr:lastModifiedBy")
+ String lastModifiedBy;
+
+ @Attribute("jcr:lastModified")
+ Calendar lastModificationTime;
+
+ @Attribute("jcr:created")
+ Calendar creationTime;
+
+ @Attribute("hl:portalLogin")
+ String owner;
+
+ @Attribute("hl:lastAction")
+ ItemAction lastAction;
+
+ /*
+ @XmlElement
+ boolean trashed;
+
+ @XmlElement
+ boolean shared;
+
+ */
+
+ @Attribute("hl:hidden")
+ boolean hidden;
+
+ @NodeAttribute(value="hl:accounting", isReadOnly=true)
+ Accounting accounting;
+
+ //List accounting;
+
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/items/PDFFileItem.java b/src/main/java/org/gcube/common/storagehub/model/items/PDFFileItem.java
new file mode 100644
index 0000000..9eee612
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/items/PDFFileItem.java
@@ -0,0 +1,21 @@
+package org.gcube.common.storagehub.model.items;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import org.gcube.common.storagehub.model.annotations.NodeAttribute;
+import org.gcube.common.storagehub.model.annotations.RootNode;
+import org.gcube.common.storagehub.model.items.nodes.PDFContent;
+
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@RootNode({"nthl:externalPdf"})
+public class PDFFileItem extends AbstractFileItem {
+
+ @NodeAttribute(value="jcr:content")
+ PDFContent content;
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/items/SharedFolder.java b/src/main/java/org/gcube/common/storagehub/model/items/SharedFolder.java
new file mode 100644
index 0000000..899e0c6
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/items/SharedFolder.java
@@ -0,0 +1,30 @@
+package org.gcube.common.storagehub.model.items;
+
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import org.gcube.common.storagehub.model.Metadata;
+import org.gcube.common.storagehub.model.annotations.Attribute;
+import org.gcube.common.storagehub.model.annotations.NodeAttribute;
+import org.gcube.common.storagehub.model.annotations.RootNode;
+
+@NoArgsConstructor
+@Getter
+@Setter
+@RootNode("nthl:workspaceSharedItem")
+public class SharedFolder extends FolderItem {
+
+ @Attribute("hl:privilege")
+ String privilege;
+
+ @Attribute("hl:isVreFolder")
+ Boolean vreFolder;
+
+ @Attribute("hl:displayName")
+ String displayName;
+
+ @NodeAttribute("hl:users")
+ Metadata users;
+
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/items/SmartFolder.java b/src/main/java/org/gcube/common/storagehub/model/items/SmartFolder.java
new file mode 100644
index 0000000..42a4e9b
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/items/SmartFolder.java
@@ -0,0 +1,19 @@
+package org.gcube.common.storagehub.model.items;
+
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import org.gcube.common.storagehub.model.annotations.NodeAttribute;
+import org.gcube.common.storagehub.model.annotations.RootNode;
+import org.gcube.common.storagehub.model.items.nodes.SmartFolderContent;
+
+@NoArgsConstructor
+@Getter
+@Setter
+@RootNode("nthl:workspaceSmartItem")
+public class SmartFolder {
+
+ @NodeAttribute("jcr:content")
+ SmartFolderContent content;
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/items/TrashItem.java b/src/main/java/org/gcube/common/storagehub/model/items/TrashItem.java
new file mode 100644
index 0000000..3202649
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/items/TrashItem.java
@@ -0,0 +1,42 @@
+package org.gcube.common.storagehub.model.items;
+
+import java.util.Calendar;
+
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import org.gcube.common.storagehub.model.annotations.Attribute;
+import org.gcube.common.storagehub.model.annotations.RootNode;
+
+@NoArgsConstructor
+@Getter
+@Setter
+@RootNode("nthl:trashItem")
+public class TrashItem extends Item {
+
+ @Attribute("hl:name")
+ String name;
+
+ @Attribute("hl:deletedBy")
+ String deletedBy;
+
+ @Attribute("hl:originalParentId")
+ String originalPArentId;
+
+ @Attribute("hl:deletedFrom")
+ String deletedFrom;
+
+ @Attribute("hl:deletedTime")
+ Calendar deletedTime;
+
+ @Attribute("hl:mimeType")
+ String mimeType;
+
+ @Attribute("hl:length")
+ String lenght;
+
+ @Attribute("hl:isFolder")
+ Boolean folder;
+
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/items/VreFolder.java b/src/main/java/org/gcube/common/storagehub/model/items/VreFolder.java
new file mode 100644
index 0000000..1ba075f
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/items/VreFolder.java
@@ -0,0 +1,23 @@
+package org.gcube.common.storagehub.model.items;
+
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import org.gcube.common.storagehub.model.annotations.Attribute;
+import org.gcube.common.storagehub.model.annotations.RootNode;
+
+@NoArgsConstructor
+@Getter
+@Setter
+@RootNode("nthl:workspaceVreItem")
+public class VreFolder extends SharedFolder {
+
+
+ @Attribute("hl:groupId")
+ String groupId;
+
+ @Attribute("hl:scope")
+ String context;
+
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/items/nodes/AccountEntry.java b/src/main/java/org/gcube/common/storagehub/model/items/nodes/AccountEntry.java
new file mode 100644
index 0000000..6cd1326
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/items/nodes/AccountEntry.java
@@ -0,0 +1,24 @@
+package org.gcube.common.storagehub.model.items.nodes;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import org.gcube.common.storagehub.model.annotations.AttributeRootNode;
+import org.gcube.common.storagehub.model.annotations.MapAttribute;
+
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@AttributeRootNode("nthl:accountingEntry")
+public class AccountEntry {
+
+ @MapAttribute
+ Map account = new HashMap();;
+
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/items/nodes/Accounting.java b/src/main/java/org/gcube/common/storagehub/model/items/nodes/Accounting.java
new file mode 100644
index 0000000..9f2b95c
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/items/nodes/Accounting.java
@@ -0,0 +1,19 @@
+package org.gcube.common.storagehub.model.items.nodes;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import org.gcube.common.storagehub.model.annotations.AttributeRootNode;
+import org.gcube.common.storagehub.model.annotations.ListNodes;
+
+@NoArgsConstructor
+@Data
+@AttributeRootNode("nthl:accountingSet")
+public class Accounting {
+
+ @ListNodes(includeTypeStartWith="nthl:accounting", listClass=AccountEntry.class)
+ List entries = new ArrayList();
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/items/nodes/Content.java b/src/main/java/org/gcube/common/storagehub/model/items/nodes/Content.java
new file mode 100644
index 0000000..3d03c48
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/items/nodes/Content.java
@@ -0,0 +1,31 @@
+package org.gcube.common.storagehub.model.items.nodes;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import org.gcube.common.storagehub.model.annotations.Attribute;
+import org.gcube.common.storagehub.model.annotations.AttributeRootNode;
+
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@AttributeRootNode(value="nthl:file")
+public class Content {
+
+ @Attribute("hl:size")
+ Long size;
+
+ @Attribute("jcr:data")
+ String data;
+
+ @Attribute("hl:remotePath")
+ String remotePath;
+
+ @Attribute("jcr:mimeType")
+ String mimeType;
+
+ @Attribute("hl:storageId")
+ String storageId;
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/items/nodes/ImageContent.java b/src/main/java/org/gcube/common/storagehub/model/items/nodes/ImageContent.java
new file mode 100644
index 0000000..2305447
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/items/nodes/ImageContent.java
@@ -0,0 +1,33 @@
+package org.gcube.common.storagehub.model.items.nodes;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import org.gcube.common.storagehub.model.annotations.Attribute;
+import org.gcube.common.storagehub.model.annotations.AttributeRootNode;
+
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@AttributeRootNode(value="nthl:image", isContentNode=true)
+public class ImageContent extends Content{
+
+ @Attribute("hl:width")
+ Long width;
+
+ @Attribute("hl:height")
+ Long height;
+
+ @Attribute("hl:thumbnailWidth")
+ Long thumbnailWidth;
+
+ @Attribute("hl:thumbnailHeight")
+ Long thumbnailHeight;
+
+ @Attribute("hl:thumbnailData")
+ Byte[] thumbnailData;
+
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/items/nodes/PDFContent.java b/src/main/java/org/gcube/common/storagehub/model/items/nodes/PDFContent.java
new file mode 100644
index 0000000..981e75b
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/items/nodes/PDFContent.java
@@ -0,0 +1,33 @@
+package org.gcube.common.storagehub.model.items.nodes;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import org.gcube.common.storagehub.model.annotations.Attribute;
+import org.gcube.common.storagehub.model.annotations.AttributeRootNode;
+
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@AttributeRootNode(value="nthl:pdf", isContentNode=true)
+public class PDFContent extends Content{
+
+ @Attribute("hl:numberOfPages")
+ Long numberOfPages;
+
+ @Attribute("hl:version")
+ String version;
+
+ @Attribute("hl:author")
+ String author;
+
+ @Attribute("hl:title")
+ String title;
+
+ @Attribute("hl:producer")
+ String producer;
+
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/items/nodes/SmartFolderContent.java b/src/main/java/org/gcube/common/storagehub/model/items/nodes/SmartFolderContent.java
new file mode 100644
index 0000000..840ad7e
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/items/nodes/SmartFolderContent.java
@@ -0,0 +1,25 @@
+package org.gcube.common.storagehub.model.items.nodes;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import org.gcube.common.storagehub.model.annotations.Attribute;
+import org.gcube.common.storagehub.model.annotations.AttributeRootNode;
+
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@AttributeRootNode("nthl:smartFolderContent")
+public class SmartFolderContent {
+
+ @Attribute("hl:query")
+ String query;
+
+ @Attribute("hl:folderId")
+ String folderId;
+
+
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/query/ItemFilter.java b/src/main/java/org/gcube/common/storagehub/model/query/ItemFilter.java
new file mode 100644
index 0000000..d1e8b2f
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/query/ItemFilter.java
@@ -0,0 +1,7 @@
+package org.gcube.common.storagehub.model.query;
+
+import org.gcube.common.storagehub.model.items.Item;
+
+public interface ItemFilter {
+
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/query/OrderBy.java b/src/main/java/org/gcube/common/storagehub/model/query/OrderBy.java
new file mode 100644
index 0000000..5052e42
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/query/OrderBy.java
@@ -0,0 +1,5 @@
+package org.gcube.common.storagehub.model.query;
+
+public interface OrderBy {
+
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/service/ItemList.java b/src/main/java/org/gcube/common/storagehub/model/service/ItemList.java
new file mode 100644
index 0000000..f84b463
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/service/ItemList.java
@@ -0,0 +1,20 @@
+package org.gcube.common.storagehub.model.service;
+
+import java.util.List;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import org.gcube.common.storagehub.model.items.Item;
+
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ItemList {
+
+ @JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="@class")
+ private List extends Item> itemlist;
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/service/ItemWrapper.java b/src/main/java/org/gcube/common/storagehub/model/service/ItemWrapper.java
new file mode 100644
index 0000000..5ea1bbd
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/service/ItemWrapper.java
@@ -0,0 +1,18 @@
+package org.gcube.common.storagehub.model.service;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import org.gcube.common.storagehub.model.items.Item;
+
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ItemWrapper {
+
+ @JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="@class")
+ private T item;
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/types/ContentType.java b/src/main/java/org/gcube/common/storagehub/model/types/ContentType.java
new file mode 100644
index 0000000..be65636
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/types/ContentType.java
@@ -0,0 +1,65 @@
+package org.gcube.common.storagehub.model.types;
+
+public enum ContentType {
+ GENERAL {
+ @Override
+ public String toString() {
+ return "nthl:file";
+ }
+ },
+ IMAGE {
+ @Override
+ public String toString() {
+ return "nthl:image";
+ }
+ },
+ PDF {
+ @Override
+ public String toString() {
+ return "nthl:pdf";
+ }
+ },
+ TS {
+ @Override
+ public String toString() {
+ return "nthl:timeSeriesItemContent";
+ }
+ },
+ QUERY {
+ @Override
+ public String toString() {
+ return "nthl:queryItemContent";
+ }
+ },
+ REPORT {
+ @Override
+ public String toString() {
+ return "nthl:reportItemContent";
+ }
+ },
+ REPORT_TEMPLATE {
+ @Override
+ public String toString() {
+ return "nthl:reportTemplateContent";
+ }
+ },
+ METADATA{
+ @Override
+ public String toString() {
+ return "nthl:metadataItemContent";
+ }
+ },
+ DOCUMENT{
+ @Override
+ public String toString() {
+ return "nthl:documentItemContent";
+ }
+ },
+ SMART{
+ @Override
+ public String toString() {
+ return "nthl:smartFolderContent";
+ }
+ }
+
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/types/FileItemType.java b/src/main/java/org/gcube/common/storagehub/model/types/FileItemType.java
new file mode 100644
index 0000000..6834f0d
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/types/FileItemType.java
@@ -0,0 +1,92 @@
+/**
+ *
+ */
+package org.gcube.common.storagehub.model.types;
+
+/**
+ * @author Federico De Faveri defaveri@isti.cnr.it
+ *
+ */
+public enum FileItemType implements GenericItemType{
+
+ /**
+ * External image.
+ */
+ EXTERNAL_IMAGE,
+
+ /**
+ * External file.
+ */
+ EXTERNAL_FILE,
+
+ /**
+ * External PDF file.
+ */
+ EXTERNAL_PDF_FILE,
+
+ /**
+ * External url.
+ */
+ EXTERNAL_URL,
+
+ /**
+ * Query.
+ */
+ QUERY,
+
+ /**
+ * Report template.
+ */
+ REPORT_TEMPLATE,
+
+ /**
+ * Report.
+ */
+ REPORT,
+
+ /**
+ * A time series.
+ */
+ TIME_SERIES,
+
+ /**
+ * Document.
+ */
+ DOCUMENT,
+
+ /**
+ * Image document.
+ */
+ IMAGE_DOCUMENT,
+
+ /**
+ * PDF document.
+ */
+ PDF_DOCUMENT,
+
+ /**
+ * Url document.
+ */
+ URL_DOCUMENT,
+
+ /**
+ * Metadata.
+ */
+ METADATA,
+
+ /**
+ * Trash item
+ */
+ TRASH_ITEM,
+
+ /**
+ * A gCube item.
+ */
+ GCUBE_ITEM,
+
+ /**
+ * Workflow report.
+ */
+ WORKFLOW_REPORT;
+
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/types/GenericItemType.java b/src/main/java/org/gcube/common/storagehub/model/types/GenericItemType.java
new file mode 100644
index 0000000..2c494a3
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/types/GenericItemType.java
@@ -0,0 +1,5 @@
+package org.gcube.common.storagehub.model.types;
+
+public interface GenericItemType {
+
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/types/ItemAction.java b/src/main/java/org/gcube/common/storagehub/model/types/ItemAction.java
new file mode 100644
index 0000000..22082a6
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/types/ItemAction.java
@@ -0,0 +1,36 @@
+/**
+ *
+ */
+package org.gcube.common.storagehub.model.types;
+
+/**
+ * @author Federico De Faveri defaveri@isti.cnr.it
+ *
+ */
+public enum ItemAction {
+ /**
+ * The item has been created.
+ */
+ CREATED,
+
+ /**
+ * The item has been renamed.
+ */
+ RENAMED,
+
+ /**
+ * The item has been moved.
+ */
+ MOVED,
+
+ /**
+ * The item has been cloned.
+ */
+ CLONED,
+
+ /**
+ * The item has been updates.
+ */
+ UPDATED;
+
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/types/ItemType.java b/src/main/java/org/gcube/common/storagehub/model/types/ItemType.java
new file mode 100644
index 0000000..72c2331
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/types/ItemType.java
@@ -0,0 +1,44 @@
+/**
+ *
+ */
+package org.gcube.common.storagehub.model.types;
+
+
+/**
+ * @author gioia
+ *
+ */
+public enum ItemType implements GenericItemType{
+
+ /**
+ * A folder.
+ */
+ FOLDER,
+
+ /**
+ * A shared folder
+ */
+ SHARED_FOLDER,
+
+ /**
+ * A smart folder
+ */
+ SMART_FOLDER,
+
+ /**
+ * A folder item.
+ */
+ FOLDER_ITEM,
+
+ /**
+ * A trash folder.
+ */
+ TRASH_FOLDER,
+
+ /**
+ * A trash item.
+ */
+ TRASH_ITEM;
+
+
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/types/Namespace.java b/src/main/java/org/gcube/common/storagehub/model/types/Namespace.java
new file mode 100644
index 0000000..269ec98
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/types/Namespace.java
@@ -0,0 +1,10 @@
+package org.gcube.common.storagehub.model.types;
+
+public class Namespace {
+
+ public static final String HL_NAMESPACE = "hl:";
+ public static final String JCR_NAMESPACE = "jcr:";
+ public static final String REP_NAMESPACE = "rep:";
+ public static final String NT_NAMESPACE = "nt:";
+
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/types/NodeProperty.java b/src/main/java/org/gcube/common/storagehub/model/types/NodeProperty.java
new file mode 100644
index 0000000..f519f3c
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/types/NodeProperty.java
@@ -0,0 +1,683 @@
+package org.gcube.common.storagehub.model.types;
+
+public enum NodeProperty {
+
+ //nthl:workspaceItem
+ TITLE {
+ @Override
+ public String toString() {
+ return "jcr:title";
+ }
+ },
+ CREATED {
+ @Override
+ public String toString() {
+ return "jcr:created";
+ }
+ },
+ LAST_MODIFIED {
+ @Override
+ public String toString() {
+ return "jcr:lastModified";
+ }
+ },
+ LAST_ACTION {
+ @Override
+ public String toString() {
+ return "hl:lastAction";
+ }
+ },
+
+ OWNER {
+ @Override
+ public String toString() {
+ return "hl:owner";
+ }
+ },
+ PORTAL_LOGIN {
+ @Override
+ public String toString() {
+ return "hl:portalLogin";
+ }
+ },
+
+ LAST_MODIFIED_BY {
+ @Override
+ public String toString() {
+ return "jcr:lastModifiedBy";
+ }
+ },
+ DESCRIPTION {
+ @Override
+ public String toString() {
+ return "jcr:description";
+ }
+ },
+ USER_ID {
+ @Override
+ public String toString() {
+ return "hl:uuid";
+ }
+ },
+ IS_PUBLIC {
+ @Override
+ public String toString() {
+ return "hl:isPublic";
+ }
+ },
+
+ // //nthl:workspaceSharedItem
+
+ IS_VRE_FOLDER {
+ @Override
+ public String toString() {
+ return "hl:isVreFolder";
+ }
+ },
+ DISPLAY_NAME {
+ @Override
+ public String toString() {
+ return "hl:displayName";
+ }
+ },
+
+ USER {
+ @Override
+ public String toString() {
+ return "hl:user";
+ }
+ },
+ USERS {
+ @Override
+ public String toString() {
+ return "hl:users";
+ }
+ },
+ MEMBERS {
+ @Override
+ public String toString() {
+ return "hl:members";
+ }
+ },
+
+ // file
+
+ CONTENT {
+ @Override
+ public String toString() {
+ return "jcr:content";
+ }
+ },
+ FOLDER_ITEM_TYPE {
+ @Override
+ public String toString() {
+ return "hl:workspaceItemType";
+ }
+ },
+ MIME_TYPE {
+ @Override
+ public String toString() {
+ return "jcr:mimeType";
+ }
+ },
+ DATA {
+ @Override
+ public String toString() {
+ return "jcr:data";
+ }
+ },
+ SIZE {
+ @Override
+ public String toString() {
+ return "hl:size";
+ }
+ },
+ REMOTE_STORAGE_PATH {
+ @Override
+ public String toString() {
+ return "hl:remotePath";
+ }
+ },
+ STORAGE_ID {
+ @Override
+ public String toString() {
+ return "hl:storageId";
+ }
+ },
+ STORAGE_PATH {
+ @Override
+ public String toString() {
+ return "hl:storagePath";
+ }
+ },
+
+ // image
+
+ IMAGE_WIDTH {
+
+ @Override
+ public String toString() {
+ return "hl:width";
+ }
+ },
+ IMAGE_HEIGHT {
+ @Override
+ public String toString() {
+ return "hl:height";
+ }
+ },
+ THUMBNAIL_DATA {
+ @Override
+ public String toString() {
+ return "hl:thumbnailData";
+ }
+ },
+ THUMBNAIL_WIDTH {
+ @Override
+ public String toString() {
+ return "hl:thumbnailWidth";
+ }
+ },
+ THUMBNAIL_HEIGHT {
+ @Override
+ public String toString() {
+ return "hl:thumbnailHeight";
+ }
+ },
+
+
+ //pdf
+
+ AUTHOR {
+ @Override
+ public String toString() {
+ return "hl:author";
+ }
+ },
+ NUMBER_OF_PAGES {
+ @Override
+ public String toString() {
+ return "hl:numberOfPages";
+ }
+ },
+ VERSION {
+ @Override
+ public String toString() {
+ return "hl:version";
+ }
+ },
+ PDF_TITLE {
+ @Override
+ public String toString() {
+ return "hl:title";
+ }
+ },
+ PRODUCER {
+ @Override
+ public String toString() {
+ return "hl:producer";
+ }
+ },
+
+ // gcubeItem
+ SCOPES {
+ @Override
+ public String toString() {
+ return "hl:scopes";
+ }
+ },
+ CREATOR {
+ @Override
+ public String toString() {
+ return "hl:creator";
+ }
+ },
+ ITEM_TYPE {
+ @Override
+ public String toString() {
+ return "hl:itemType";
+ }
+ },
+ PROPERTIES {
+ @Override
+ public String toString() {
+ return "hl:properties";
+ }
+ },
+ PROPERTY {
+ @Override
+ public String toString() {
+ return "hl:property";
+ }
+ },
+ IS_SHARED {
+ @Override
+ public String toString() {
+ return "hl:isShared";
+ }
+ },
+ SHARED_ROOT_ID {
+ @Override
+ public String toString() {
+ return "hl:sharedRootId";
+ }
+ },
+
+
+ // trashItem
+ DELETE_DATE {
+ @Override
+ public String toString() {
+ return "hl:deletedTime";
+ }
+ },
+ DELETE_BY {
+ @Override
+ public String toString() {
+ return "hl:deletedBy";
+ }
+ },
+ ORIGINAL_PARENT_ID {
+ @Override
+ public String toString() {
+ return "hl:originalParentId";
+ }
+ },
+ DELETED_FROM {
+ @Override
+ public String toString() {
+ return "hl:deletedFrom";
+ }
+ },
+ TRASH_ITEM_NAME {
+ @Override
+ public String toString() {
+ return "hl:name";
+ }
+ },
+ TRASH_ITEM_MIME_TYPE {
+ @Override
+ public String toString() {
+ return "hl:mimeType";
+ }
+ },
+ LENGTH {
+ @Override
+ public String toString() {
+ return "hl:length";
+ }
+ },
+ IS_FOLDER {
+ @Override
+ public String toString() {
+ return "hl:isFolder";
+ }
+ },
+
+ // messages
+ SUBJECT {
+ @Override
+ public String toString() {
+ return "hl:subject";
+ }
+ },
+ BODY {
+ @Override
+ public String toString() {
+ return "hl:body";
+ }
+ },
+ ATTACHMENTS {
+ @Override
+ public String toString() {
+ return "hl:attachments";
+ }
+ },
+ ATTACHMENTS_ID {
+ @Override
+ public String toString() {
+ return "hl:attachId";
+ }
+ },
+ ADDRESSES {
+ @Override
+ public String toString() {
+ return "hl:addresses";
+ }
+ },
+ SCOPE {
+ @Override
+ public String toString() {
+ return "hl:scope";
+ }
+ },
+ READ {
+ @Override
+ public String toString() {
+ return "hl:read";
+ }
+ },
+ OPEN {
+ @Override
+ public String toString() {
+ return "hl:open";
+ }
+ },
+ NT_USER {
+ @Override
+ public String toString() {
+ return "nthl:user";
+ }
+ },
+
+ // timeseries
+
+ TIMESERIES_ID {
+ @Override
+ public String toString() {
+ return "hl:id";
+ }
+ },
+ TIMESERIES_TITLE {
+ @Override
+ public String toString() {
+ return "hl:title";
+ }
+ },
+ TIMESERIES_DESCRIPTION {
+ @Override
+ public String toString() {
+ return "hl:description";
+ }
+ },
+ TIMESERIES_CREATOR {
+ @Override
+ public String toString() {
+ return "hl:creator";
+ }
+ },
+ TIMESERIES_CREATED {
+ @Override
+ public String toString() {
+ return "hl:created";
+ }
+ },
+ TIMESERIES_PUBLISHER {
+ @Override
+ public String toString() {
+ return "hl:publisher";
+ }
+ },
+ TIMESERIES_SOURCE_ID {
+ @Override
+ public String toString() {
+ return "hl:sourceId";
+ }
+ },
+ TIMESERIES_SOURCE_NAME {
+ @Override
+ public String toString() {
+ return "hl:sourceName";
+ }
+ },
+ TIMESERIES_RIGHTS {
+ @Override
+ public String toString() {
+ return "hl:rights";
+ }
+ },
+ TIMESERIES_DIMENSION {
+ @Override
+ public String toString() {
+ return "hl:dimension";
+ }
+ },
+ HEADER_LABELS {
+ @Override
+ public String toString() {
+ return "hl:headerLabels";
+ }
+ },
+
+ // query
+
+ QUERY {
+ @Override
+ public String toString() {
+ return "hl:query";
+ }
+ },
+ FOLDER_ID {
+ @Override
+ public String toString() {
+ return "hl:folderId";
+ }
+ },
+ QUERY_TYPE {
+ @Override
+ public String toString() {
+ return "hl:queryType";
+ }
+ },
+
+ //report template
+
+ RT_CREATED {
+ @Override
+ public String toString() {
+ return "hl:created";
+ }
+ },
+ LAST_EDIT {
+ @Override
+ public String toString() {
+ return "hl:lastEdit";
+ }
+ },
+ LAST_EDIT_BY {
+ @Override
+ public String toString() {
+ return "hl:lastEditBy";
+ }
+ },
+ NUMBER_OF_SECTION {
+ @Override
+ public String toString() {
+ return "hl:numberOfSection";
+ }
+ },
+ STATUS {
+ @Override
+ public String toString() {
+ return "hl:status";
+ }
+ },
+ FAILURES {
+ @Override
+ public String toString() {
+ return "hl:failures";
+ }
+ },
+ TEMPLATE_NAME {
+ @Override
+ public String toString() {
+ return "hl:templateName";
+ }
+ },
+
+ //metadata
+
+ SCHEMA{
+ @Override
+ public String toString() {
+ return "hl:schema";
+ }
+ },
+ LANGUAGE{
+ @Override
+ public String toString() {
+ return "hl:language";
+ }
+ },
+ COLLECTION_NAME{
+ @Override
+ public String toString() {
+ return "hl:collectionName";
+ }
+ },
+ OID{
+ @Override
+ public String toString() {
+ return "hl:oid";
+ }
+ },
+
+ NT_CONTENT{
+ @Override
+ public String toString() {
+ return "nthl:metadataItemContent";
+
+ }
+ },
+
+ //document
+
+ METADATA{
+ @Override
+ public String toString() {
+ return "hl:metadata";
+ }
+ },
+ ANNOTATIONS{
+ @Override
+ public String toString() {
+ return "hl:annotations";
+ }
+ },
+
+
+ ALTERNATIVES {
+ @Override
+ public String toString() {
+ return "hl:alternatives";
+ }
+ },
+
+ PARENT_URI{
+ @Override
+ public String toString() {
+ return "hl:parentUri";
+ }
+ },
+ URI{
+ @Override
+ public String toString() {
+ return "hl:uri";
+ }
+ },
+ NAME{
+ @Override
+ public String toString() {
+ return "hl:name";
+ }
+ },
+ HL_MIME_TYPE{
+ @Override
+ public String toString() {
+ return "hl:mimeType";
+ }
+ },
+
+ NT_ALTERNATIVE{
+ @Override
+ public String toString() {
+ return "nthl:documentAlternativeLink";
+ }
+ },
+ NT_PART {
+ @Override
+ public String toString() {
+ return "nthl:documentPartLink";
+ }
+ },
+
+ PARTS{
+ @Override
+ public String toString() {
+ return "hl:parts";
+ }
+ },
+
+ URL{
+ @Override
+ public String toString() {
+ return "hl:url";
+ }
+ },
+
+
+ //accounting
+ ACCOUNTING{
+ @Override
+ public String toString() {
+ return "hl:accounting";
+ }
+ },
+ NT_ACCOUNTING{
+ @Override
+ public String toString() {
+ return "nthl:accountingSet";
+ }
+ },
+
+ //workflow
+ WORKFLOW_ID{
+ @Override
+ public String toString() {
+ return "hl:workflowId";
+ }
+ },
+ WORKFLOW_DATA{
+ @Override
+ public String toString() {
+ return "hl:workflowData";
+ }
+ },
+ WORKFLOW_STATUS{
+ @Override
+ public String toString() {
+ return "hl:workflowStatus";
+ }
+ },
+ REFERENCE{
+ @Override
+ public String toString() {
+ return "hl:reference";
+ }
+ },
+ HIDDEN{
+ @Override
+ public String toString() {
+ return "hl:hidden";
+ }
+ },
+ GROUP_ID{
+ @Override
+ public String toString() {
+ return "hl:groupId";
+ }
+ },
+ IS_SYSTEM_FOLDER{
+ @Override
+ public String toString() {
+ return "hl:IsSystemFolder";
+ }
+ };
+
+ public static NodeProperty fromValue(String value) {
+ for(NodeProperty v : values())
+ if(v.toString().equalsIgnoreCase(value)) return v;
+ throw new IllegalArgumentException();
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/org/gcube/common/storagehub/model/types/PrimaryNodeType.java b/src/main/java/org/gcube/common/storagehub/model/types/PrimaryNodeType.java
new file mode 100644
index 0000000..614f022
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/types/PrimaryNodeType.java
@@ -0,0 +1,55 @@
+package org.gcube.common.storagehub.model.types;
+
+public class PrimaryNodeType {
+
+
+ public static final String NT_ROOT_ITEM_SENT = "nthl:rootItemSentRequest";
+ public static final String NT_ITEM_SENT = "nthl:itemSentRequest";
+// public static final String NT_MESSAGE = "nthl:itemSentRequest";
+ public static final String NT_WORKSPACE_ROOT = "rep:root";
+ public static final String NT_WORKSPACE_FOLDER = "nthl:workspaceItem";
+ public static final String NT_WORKSPACE_SHARED_FOLDER = "nthl:workspaceSharedItem";
+ public static final String NT_WORKSPACE_VRE_FOLDER = "nthl:workspaceVreItem";
+ public static final String NT_WORKSPACE_FOLDER_ITEM = "nthl:workspaceLeafItem";
+ public static final String NT_WORKSPACE_FILE = "nthl:externalFile";
+ public static final String NT_WORKSPACE_IMAGE = "nthl:externalImage";
+ public static final String NT_WORKSPACE_PDF_FILE = "nthl:externalPdf";
+ public static final String NT_WORKSPACE_URL = "nthl:externalUrl";
+ public static final String NT_WORKSPACE_SMART_FOLDER = "nthl:workspaceSmartItem";
+ public static final String NT_ROOT_FOLDER_BULK_CREATOR = "nthl:rootFolderBulkCreator";
+
+ public static final String NT_WORKSPACE_REPORT = "nthl:report";
+ public static final String NT_WORKSPACE_REPORT_TEMPLATE = "nthl:reportTemplate";
+ public static final String NT_WORKSPACE_WORKFLOW_REPORT = "nthl:workflowReport";
+ public static final String NT_WORKSPACE_WORKFLOW_TEMPLATE = "nthl:workflowTemplate";
+ public static final String NT_WORKSPACE_REFERENCE = "nthl:workspaceReference";
+
+ public static final String NT_ANNOTATION_ITEM = "nthl:gCubeAnnotation";
+ public static final String NT_ANNOTATION_LINK_ITEM = "nthl:gCubeAnnotationLink";
+
+ public static final String NT_DOCUMENT_ITEM = "nthl:gCubeDocument";
+ public static final String NT_DOCUMENT_LINK_ITEM = "nthl:gCubeDocumentLink";
+ public static final String NT_IMAGE_DOCUMENT_ITEM = "nthl:gCubeImageDocument";
+ public static final String NT_IMAGE_DOCUMENT_LINK_ITEM = "nthl:gCubeImageDocumentLink";
+ public static final String NT_PDF_DOCUMENT_ITEM = "nthl:gCubePDFDocument";
+ public static final String NT_PDF_DOCUMENT_LINK_ITEM = "nthl:gCubePDFDocumentLink";
+ public static final String NT_URL_DOCUMENT_ITEM = "nthl:gCubeURLDocument";
+ public static final String NT_METADATA_ITEM = "nthl:gCubeMetadata";
+ public static final String NT_METADATA_LINK_ITEM = "nthl:gCubeMetadataLink";
+ public static final String NT_AQUAMAPS_ITEM = "nthl:aquamapsItem";
+ public static final String NT_GCUBE_ITEM = "nthl:gCubeItem";
+ public static final String NT_TIMESERIES_ITEM = "nthl:timeSeriesItem";
+ public static final String NT_QUERY = "nthl:query";
+ public static final String NT_EXTERNAL_RESOURCE_LINK_ITEM = "nthl:externalResourceLink";
+ public static final String NT_TABULAR_DATA_LINK = "nthl:tabularDataLink";
+ public static final String NT_TRASH_ITEM = "nthl:trashItem";
+
+ public static final String NT_ROOT_MESSAGES = "nthl:rootItemSentRequest";
+ public static final String NT_FOLDER = "nt:folder";
+ public static final String NT_HOME = "nthl:home";
+
+ protected static final String ACCOUNTING = "hl:accounting";
+ protected static final String NT_ACCOUNTING = "nthl:accountingSet";
+
+
+}
diff --git a/src/main/java/org/gcube/common/storagehub/model/types/WorkspaceItemType.java b/src/main/java/org/gcube/common/storagehub/model/types/WorkspaceItemType.java
new file mode 100644
index 0000000..721f04b
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/model/types/WorkspaceItemType.java
@@ -0,0 +1,44 @@
+/**
+ *
+ */
+package org.gcube.common.storagehub.model.types;
+
+
+/**
+ * @author gioia
+ *
+ */
+public enum WorkspaceItemType implements GenericItemType{
+
+ /**
+ * A folder.
+ */
+ FOLDER,
+
+ /**
+ * A shared folder
+ */
+ SHARED_FOLDER,
+
+ /**
+ * A smart folder
+ */
+ SMART_FOLDER,
+
+ /**
+ * A folder item.
+ */
+ FOLDER_ITEM,
+
+ /**
+ * A trash folder.
+ */
+ TRASH_FOLDER,
+
+ /**
+ * A trash item.
+ */
+ TRASH_ITEM;
+
+
+}