diff --git a/pom.xml b/pom.xml
index 4f16782..1e256ed 100644
--- a/pom.xml
+++ b/pom.xml
@@ -17,6 +17,7 @@
UTF-8
${project.basedir}/distro
InformationSystem
+ 2.2.3
@@ -26,6 +27,21 @@
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson.version}
+
+
+ com.fasterxml.jackson.core
+ jackson-annotations
+ ${jackson.version}
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+ ${jackson.version}
+
org.slf4j
diff --git a/src/main/java/org/gcube/informationsystem/impl/entity/EntityImpl.java b/src/main/java/org/gcube/informationsystem/impl/entity/EntityImpl.java
new file mode 100644
index 0000000..fe85208
--- /dev/null
+++ b/src/main/java/org/gcube/informationsystem/impl/entity/EntityImpl.java
@@ -0,0 +1,32 @@
+/**
+ *
+ */
+package org.gcube.informationsystem.impl.entity;
+
+import org.gcube.informationsystem.model.entity.Entity;
+import org.gcube.informationsystem.model.entity.Header;
+
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
+/**
+ * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/
+ *
+ */
+public abstract class EntityImpl implements Entity {
+
+ @JsonDeserialize(as = HeaderImpl.class)
+ protected Header header;
+
+ @SuppressWarnings("unused")
+ private EntityImpl(){}
+
+ protected EntityImpl(String name, String description, String version){
+ this.header = new HeaderImpl(name, description, version);
+ }
+
+ @Override
+ public Header getHeader() {
+ return this.header;
+ }
+
+}
diff --git a/src/main/java/org/gcube/informationsystem/impl/entity/FacetImpl.java b/src/main/java/org/gcube/informationsystem/impl/entity/FacetImpl.java
new file mode 100644
index 0000000..ca7f2fe
--- /dev/null
+++ b/src/main/java/org/gcube/informationsystem/impl/entity/FacetImpl.java
@@ -0,0 +1,24 @@
+/**
+ *
+ */
+package org.gcube.informationsystem.impl.entity;
+
+import org.gcube.informationsystem.model.entity.Facet;
+
+/**
+ * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/
+ *
+ */
+public abstract class FacetImpl extends EntityImpl implements Facet {
+
+ /**
+ * @param name
+ * @param description
+ * @param version
+ */
+ protected FacetImpl(String name, String description, String version) {
+ super(name, description, version);
+ }
+
+
+}
diff --git a/src/main/java/org/gcube/informationsystem/impl/entity/HeaderImpl.java b/src/main/java/org/gcube/informationsystem/impl/entity/HeaderImpl.java
new file mode 100644
index 0000000..8140a09
--- /dev/null
+++ b/src/main/java/org/gcube/informationsystem/impl/entity/HeaderImpl.java
@@ -0,0 +1,79 @@
+/**
+ *
+ */
+package org.gcube.informationsystem.impl.entity;
+
+import java.util.Calendar;
+
+import org.gcube.informationsystem.model.entity.Header;
+
+/**
+ * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/
+ *
+ */
+public class HeaderImpl implements Header {
+
+ protected String id;
+ protected String creator;
+ protected Calendar creationTime;
+ protected Calendar lastUpdateTime;
+ protected String name;
+ protected String description;
+ protected String version;
+
+ @SuppressWarnings("unused")
+ private HeaderImpl(){
+
+ }
+
+ protected HeaderImpl(String name, String description, String version){
+ this.name = name;
+ this.description = description;
+ this.version = version;
+ }
+
+ @Override
+ public String getID() {
+ return this.id;
+ }
+
+ protected void setID(String id){
+ this.id = id;
+ }
+
+ @Override
+ public String getCreator() {
+ return this.creator;
+ }
+
+ protected void setCreator(String creator){
+ this.creator = creator;
+ }
+
+ @Override
+ public Calendar getCreationTime() {
+ return creationTime;
+ }
+
+ @Override
+ public Calendar getLastUpdateTime() {
+ return lastUpdateTime;
+ }
+
+ @Override
+ public String getName() {
+ return this.name;
+ }
+
+ @Override
+ public String getDescription() {
+ return this.description;
+ }
+
+
+ @Override
+ public String getVersion() {
+ return this.version;
+ }
+
+}
diff --git a/src/main/java/org/gcube/informationsystem/impl/entity/ResourceImpl.java b/src/main/java/org/gcube/informationsystem/impl/entity/ResourceImpl.java
new file mode 100644
index 0000000..d4b6f9e
--- /dev/null
+++ b/src/main/java/org/gcube/informationsystem/impl/entity/ResourceImpl.java
@@ -0,0 +1,87 @@
+/**
+ *
+ */
+package org.gcube.informationsystem.impl.entity;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.gcube.informationsystem.model.entity.Facet;
+import org.gcube.informationsystem.model.entity.Resource;
+import org.gcube.informationsystem.model.relation.RelationProperty;
+
+/**
+ * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/
+ *
+ */
+public abstract class ResourceImpl extends EntityImpl implements Resource {
+
+ protected Map addedFacets;
+ protected Map attachedFacets;
+ protected List detachedFacets;
+
+
+ protected Map attachedResourceProfiles;
+ protected List detachedResourceProfiles;
+
+ /**
+ * @param name
+ * @param description
+ * @param version
+ */
+ protected ResourceImpl(String name, String description, String version) {
+ super(name, description, version);
+ addedFacets = new HashMap();
+ attachedFacets = new HashMap();
+ detachedFacets = new ArrayList<>();
+
+
+
+ }
+
+ @Override
+ public void addFacet(Facet facet) {
+ addedFacets.put(facet, null);
+
+ }
+
+ @Override
+ public void addFacet(Facet facet, RelationProperty relationProperty) {
+ addedFacets.put(facet, relationProperty);
+ }
+
+ @Override
+ public void attachFacet(Facet facet) {
+ attachedFacets.put(facet, null);
+ }
+
+ @Override
+ public void attachFacet(Facet facet, RelationProperty relationProperty) {
+ attachedFacets.put(facet, relationProperty);
+ }
+
+ @Override
+ public void detachFacet(Facet facet) {
+ detachedFacets.add(facet);
+ attachedFacets.remove(facet);
+ }
+
+ @Override
+ public void attachResource(Resource resource) {
+
+ }
+
+ @Override
+ public void attachResource(Resource resource,
+ RelationProperty relationProperty) {
+
+ }
+
+ @Override
+ public void detachResource(Resource resource) {
+
+ }
+
+}
diff --git a/src/main/java/org/gcube/informationsystem/impl/relation/ConsistOfImpl.java b/src/main/java/org/gcube/informationsystem/impl/relation/ConsistOfImpl.java
new file mode 100644
index 0000000..a4d3030
--- /dev/null
+++ b/src/main/java/org/gcube/informationsystem/impl/relation/ConsistOfImpl.java
@@ -0,0 +1,28 @@
+/**
+ *
+ */
+package org.gcube.informationsystem.impl.relation;
+
+import org.gcube.informationsystem.model.entity.Facet;
+import org.gcube.informationsystem.model.entity.Resource;
+import org.gcube.informationsystem.model.relation.ConsistOf;
+import org.gcube.informationsystem.model.relation.RelationProperty;
+
+/**
+ * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/
+ *
+ */
+public class ConsistOfImpl extends
+ RelationImpl implements ConsistOf {
+
+ /**
+ * @param source
+ * @param target
+ * @param relationProperty
+ */
+ public ConsistOfImpl(Out source, In target,
+ RelationProperty relationProperty) {
+ super(source, target, relationProperty);
+ }
+
+}
diff --git a/src/main/java/org/gcube/informationsystem/impl/relation/RelatedToImpl.java b/src/main/java/org/gcube/informationsystem/impl/relation/RelatedToImpl.java
new file mode 100644
index 0000000..9386e97
--- /dev/null
+++ b/src/main/java/org/gcube/informationsystem/impl/relation/RelatedToImpl.java
@@ -0,0 +1,27 @@
+/**
+ *
+ */
+package org.gcube.informationsystem.impl.relation;
+
+import org.gcube.informationsystem.model.entity.Resource;
+import org.gcube.informationsystem.model.relation.RelatedTo;
+import org.gcube.informationsystem.model.relation.RelationProperty;
+
+/**
+ * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/
+ *
+ */
+public class RelatedToImpl extends
+ RelationImpl implements RelatedTo {
+
+ /**
+ * @param source
+ * @param target
+ * @param relationProperty
+ */
+ public RelatedToImpl(Out source, In target,
+ RelationProperty relationProperty) {
+ super(source, target, relationProperty);
+ }
+
+}
diff --git a/src/main/java/org/gcube/informationsystem/impl/relation/RelationImpl.java b/src/main/java/org/gcube/informationsystem/impl/relation/RelationImpl.java
new file mode 100644
index 0000000..fbe60bf
--- /dev/null
+++ b/src/main/java/org/gcube/informationsystem/impl/relation/RelationImpl.java
@@ -0,0 +1,44 @@
+/**
+ *
+ */
+package org.gcube.informationsystem.impl.relation;
+
+import org.gcube.informationsystem.model.entity.Entity;
+import org.gcube.informationsystem.model.relation.Relation;
+import org.gcube.informationsystem.model.relation.RelationProperty;
+
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
+/**
+ * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/
+ *
+ */
+public abstract class RelationImpl implements Relation {
+
+ protected Out source;
+ protected In target;
+ @JsonDeserialize(as = RelationPropertyImpl.class)
+ protected RelationProperty relationProperty;
+
+ protected RelationImpl(Out source, In target, RelationProperty relationProperty){
+ this.source = source;
+ this.target = target;
+ this.relationProperty = relationProperty;
+ }
+
+ @Override
+ public Out getSource() {
+ return null;
+ }
+
+ @Override
+ public In getTarget() {
+ return null;
+ }
+
+ @Override
+ public RelationProperty getRelationProperty() {
+ return this.relationProperty;
+ }
+
+}
diff --git a/src/main/java/org/gcube/informationsystem/impl/relation/RelationPropertyImpl.java b/src/main/java/org/gcube/informationsystem/impl/relation/RelationPropertyImpl.java
new file mode 100644
index 0000000..f51a102
--- /dev/null
+++ b/src/main/java/org/gcube/informationsystem/impl/relation/RelationPropertyImpl.java
@@ -0,0 +1,53 @@
+/**
+ *
+ */
+package org.gcube.informationsystem.impl.relation;
+
+import org.gcube.informationsystem.impl.AccessPolicyImpl;
+import org.gcube.informationsystem.model.AccessPolicy;
+import org.gcube.informationsystem.model.relation.RelationProperty;
+
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
+/**
+ * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/
+ *
+ */
+public class RelationPropertyImpl implements RelationProperty {
+
+ protected String purpose;
+ protected ReferentiaIntegrity referentiaIntegrity;
+ @JsonDeserialize(as = AccessPolicyImpl.class)
+ protected AccessPolicy accessPolicy;
+
+ @Override
+ public String getPurpose() {
+ return this.purpose;
+ }
+
+ @Override
+ public void setPurpose(String purpose) {
+ this.purpose = purpose;
+ }
+
+ @Override
+ public ReferentiaIntegrity getReferentialIntegrity() {
+ return this.referentiaIntegrity;
+ }
+
+ @Override
+ public void setReferentialIntegrity(ReferentiaIntegrity referentialIntegrity) {
+ this.referentiaIntegrity = referentialIntegrity;
+ }
+
+ @Override
+ public AccessPolicy getPolicy() {
+ return this.accessPolicy;
+ }
+
+ @Override
+ public void setPolicy(AccessPolicy accessPolicy) {
+ this.accessPolicy = accessPolicy;
+ }
+
+}
diff --git a/src/main/java/org/gcube/informationsystem/model/entity/Entity.java b/src/main/java/org/gcube/informationsystem/model/entity/Entity.java
index 5fe7405..0dc9f0f 100644
--- a/src/main/java/org/gcube/informationsystem/model/entity/Entity.java
+++ b/src/main/java/org/gcube/informationsystem/model/entity/Entity.java
@@ -3,7 +3,6 @@
*/
package org.gcube.informationsystem.model.entity;
-import org.gcube.informationsystem.model.Header;
diff --git a/src/main/java/org/gcube/informationsystem/model/Header.java b/src/main/java/org/gcube/informationsystem/model/entity/Header.java
similarity index 89%
rename from src/main/java/org/gcube/informationsystem/model/Header.java
rename to src/main/java/org/gcube/informationsystem/model/entity/Header.java
index 8f95aad..2bb6bd1 100644
--- a/src/main/java/org/gcube/informationsystem/model/Header.java
+++ b/src/main/java/org/gcube/informationsystem/model/entity/Header.java
@@ -1,7 +1,7 @@
/**
*
*/
-package org.gcube.informationsystem.model;
+package org.gcube.informationsystem.model.entity;
import java.util.Calendar;