From ecc047889eb93735f873ffc670493e9d6ff2fde3 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Thu, 23 Jan 2020 17:15:02 +0100 Subject: [PATCH] Fixed types creations --- .../dbinitialization/DatabaseEnvironment.java | 26 +----- .../instances/type/SchemaManagementImpl.java | 86 +++++++++---------- .../EntityTypeDefinitionManagement.java | 16 ++-- .../FacetTypeDefinitionManagement.java | 19 ++++ .../ResourceTypeDefinitionManagement.java | 19 ++++ .../ConsistsOfTypeDefinitionManagement.java | 30 +++++++ .../IsRelatedToTypeDefinitionManagement.java | 30 +++++++ .../RelationTypeDefinitionManagement.java | 31 +++---- .../type/SchemaManagementImplTest.java | 10 ++- 9 files changed, 168 insertions(+), 99 deletions(-) create mode 100644 src/main/java/org/gcube/informationsystem/resourceregistry/instances/type/entities/FacetTypeDefinitionManagement.java create mode 100644 src/main/java/org/gcube/informationsystem/resourceregistry/instances/type/entities/ResourceTypeDefinitionManagement.java create mode 100644 src/main/java/org/gcube/informationsystem/resourceregistry/instances/type/relations/ConsistsOfTypeDefinitionManagement.java create mode 100644 src/main/java/org/gcube/informationsystem/resourceregistry/instances/type/relations/IsRelatedToTypeDefinitionManagement.java diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/dbinitialization/DatabaseEnvironment.java b/src/main/java/org/gcube/informationsystem/resourceregistry/dbinitialization/DatabaseEnvironment.java index 94bb3c6..08b95f1 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/dbinitialization/DatabaseEnvironment.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/dbinitialization/DatabaseEnvironment.java @@ -36,6 +36,8 @@ import org.gcube.informationsystem.types.reference.entities.ResourceTypeDefiniti import org.gcube.informationsystem.types.reference.properties.PropertyDefinition; import org.gcube.informationsystem.types.reference.properties.PropertyTypeDefinition; import org.gcube.informationsystem.types.reference.properties.ResourceEntryDefinition; +import org.gcube.informationsystem.types.reference.relations.ConsistsOfTypeDefinition; +import org.gcube.informationsystem.types.reference.relations.IsRelatedToTypeDefinition; import org.gcube.informationsystem.types.reference.relations.RelationTypeDefinition; import org.gcube.informationsystem.utils.discovery.ISMDiscovery; import org.gcube.informationsystem.utils.discovery.RegistrationProvider; @@ -239,6 +241,8 @@ public class DatabaseEnvironment { definitionToBeCreated.add(ResourceTypeDefinition.class); definitionToBeCreated.add(BaseRelation.class); definitionToBeCreated.add(RelationTypeDefinition.class); + definitionToBeCreated.add(IsRelatedToTypeDefinition.class); + definitionToBeCreated.add(ConsistsOfTypeDefinition.class); SchemaAction schemaAction = new SchemaActionImpl(); @@ -253,27 +257,6 @@ public class DatabaseEnvironment { } } - /* - for(Class clz : definitionToBeCreated) { - ERManagement erManagement = null; - - if(BaseProperty.class.isAssignableFrom(clz)) { - erManagement = new PropertyTypeDefinitionManagement(); - } else if(BaseEntity.class.isAssignableFrom(clz)) { - erManagement = new EntityTypeDefinitionManagement(); - if(ResourceTypeDefinition.class.isAssignableFrom(clz)) { - erManagement.setElementType(ResourceTypeDefinition.NAME); - } - } else if(BaseRelation.class.isAssignableFrom(clz)) { - erManagement = new RelationTypeDefinitionManagement(); - } - - erManagement.setJson(TypeBinder.serializeType(clz)); - erManagement.create(); - } - */ - - List> schemaToBeCreated = new ArrayList<>(); schemaToBeCreated.add(Property.class); schemaToBeCreated.add(Header.class); @@ -301,7 +284,6 @@ public class DatabaseEnvironment { packages.addAll(registrationProvider.getPackagesToRegister()); } - ISMDiscovery.manageISM(schemaAction, packages); } diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/type/SchemaManagementImpl.java b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/type/SchemaManagementImpl.java index 037accc..fac5896 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/type/SchemaManagementImpl.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/type/SchemaManagementImpl.java @@ -6,14 +6,12 @@ package org.gcube.informationsystem.resourceregistry.instances.type; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Set; import javax.activation.UnsupportedDataTypeException; import org.gcube.informationsystem.base.reference.AccessType; -import org.gcube.informationsystem.base.reference.ISManageable; import org.gcube.informationsystem.base.reference.entities.BaseEntity; import org.gcube.informationsystem.base.reference.properties.BaseProperty; import org.gcube.informationsystem.base.reference.relations.BaseRelation; @@ -21,6 +19,8 @@ import org.gcube.informationsystem.model.reference.entities.Entity; import org.gcube.informationsystem.model.reference.entities.Facet; import org.gcube.informationsystem.model.reference.entities.Resource; import org.gcube.informationsystem.model.reference.properties.Property; +import org.gcube.informationsystem.model.reference.relations.ConsistsOf; +import org.gcube.informationsystem.model.reference.relations.IsRelatedTo; import org.gcube.informationsystem.model.reference.relations.Relation; import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaAlreadyPresentException; import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaCreationException; @@ -28,14 +28,15 @@ import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.Schema import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaNotFoundException; import org.gcube.informationsystem.resourceregistry.instances.base.ERManagement; import org.gcube.informationsystem.resourceregistry.instances.context.ContextUtility; -import org.gcube.informationsystem.resourceregistry.instances.type.entities.EntityTypeDefinitionManagement; +import org.gcube.informationsystem.resourceregistry.instances.type.entities.FacetTypeDefinitionManagement; +import org.gcube.informationsystem.resourceregistry.instances.type.entities.ResourceTypeDefinitionManagement; import org.gcube.informationsystem.resourceregistry.instances.type.properties.PropertyTypeDefinitionManagement; -import org.gcube.informationsystem.resourceregistry.instances.type.relations.RelationTypeDefinitionManagement; +import org.gcube.informationsystem.resourceregistry.instances.type.relations.ConsistsOfTypeDefinitionManagement; +import org.gcube.informationsystem.resourceregistry.instances.type.relations.IsRelatedToTypeDefinitionManagement; import org.gcube.informationsystem.resourceregistry.security.AdminSecurityContext; import org.gcube.informationsystem.resourceregistry.security.SecurityContext.PermissionMode; import org.gcube.informationsystem.types.Type; import org.gcube.informationsystem.types.TypeBinder; -import org.gcube.informationsystem.types.reference.PropertyCapableTypeDefinition; import org.gcube.informationsystem.types.reference.TypeDefinition; import org.gcube.informationsystem.types.reference.entities.EntityTypeDefinition; import org.gcube.informationsystem.types.reference.entities.FacetTypeDefinition; @@ -43,24 +44,20 @@ import org.gcube.informationsystem.types.reference.entities.ResourceTypeDefiniti import org.gcube.informationsystem.types.reference.properties.PropertyDefinition; import org.gcube.informationsystem.types.reference.properties.PropertyTypeDefinition; import org.gcube.informationsystem.types.reference.properties.ResourceEntryDefinition; +import org.gcube.informationsystem.types.reference.relations.ConsistsOfTypeDefinition; +import org.gcube.informationsystem.types.reference.relations.IsRelatedToTypeDefinition; import org.gcube.informationsystem.types.reference.relations.RelationTypeDefinition; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; import com.orientechnologies.orient.core.db.document.ODatabaseDocument; import com.orientechnologies.orient.core.exception.OSchemaException; import com.orientechnologies.orient.core.metadata.OMetadata; import com.orientechnologies.orient.core.metadata.schema.OClass; -import com.orientechnologies.orient.core.metadata.schema.OClassImpl; import com.orientechnologies.orient.core.metadata.schema.OProperty; import com.orientechnologies.orient.core.metadata.schema.OSchema; import com.orientechnologies.orient.core.metadata.schema.OType; import com.orientechnologies.orient.core.record.OElement; -import com.orientechnologies.orient.core.record.impl.ODocument; /** * @author Luca Frosini (ISTI - CNR) @@ -79,7 +76,7 @@ public class SchemaManagementImpl implements SchemaManagement { this.typeName = typeName; } - @SuppressWarnings("unused") + /* private static TypeDefinition getOClassTypeDefinition(OClass oClass) throws SchemaException { try { ODocument oDocument = ((OClassImpl) oClass).toStream(); @@ -87,11 +84,13 @@ public class SchemaManagementImpl implements SchemaManagement { ObjectMapper mapper = new ObjectMapper(); ObjectNode node = (ObjectNode) mapper.readTree(json); - if(oClass.isSubClassOf(BaseProperty.NAME)) { + if(oClass.isSubClassOf(Property.NAME)) { node.put(ISManageable.CLASS_PROPERTY, PropertyTypeDefinition.NAME); - } else if(oClass.isSubClassOf(BaseEntity.NAME)) { - node.put(ISManageable.CLASS_PROPERTY, EntityTypeDefinition.NAME); - } else if(oClass.isSubClassOf(BaseRelation.NAME)) { + } else if(oClass.isSubClassOf(Resource.NAME)) { + node.put(ISManageable.CLASS_PROPERTY, ResourceTypeDefinition.NAME); + } else if(oClass.isSubClassOf(Facet.NAME)) { + node.put(ISManageable.CLASS_PROPERTY, FacetTypeDefinition.NAME); + } else if(oClass.isSubClassOf(Relation.NAME)) { node.put(ISManageable.CLASS_PROPERTY, RelationTypeDefinition.NAME); } @@ -112,22 +111,27 @@ public class SchemaManagementImpl implements SchemaManagement { throw new SchemaException(e); } } + */ private TypeDefinition getTypeDefinition(OClass oClass) throws SchemaException { try { ERManagement erManagement = null; - if(oClass.isSubClassOf(BaseProperty.NAME)) { + if(oClass.isSubClassOf(Property.NAME)) { erManagement = new PropertyTypeDefinitionManagement(); ((PropertyTypeDefinitionManagement) erManagement).setName(oClass.getName()); - } else if(oClass.isSubClassOf(BaseEntity.NAME)) { - erManagement = new EntityTypeDefinitionManagement(); - ((EntityTypeDefinitionManagement) erManagement).setName(oClass.getName()); - } else if(oClass.isSubClassOf(BaseRelation.NAME)) { - erManagement = new RelationTypeDefinitionManagement(); - ((RelationTypeDefinitionManagement) erManagement).setName(oClass.getName()); + } else if(oClass.isSubClassOf(Resource.NAME)) { + erManagement = new ResourceTypeDefinitionManagement(); + ((ResourceTypeDefinitionManagement) erManagement).setName(oClass.getName()); + } else if(oClass.isSubClassOf(Facet.NAME)) { + erManagement = new FacetTypeDefinitionManagement(); + ((FacetTypeDefinitionManagement) erManagement).setName(oClass.getName()); + } else if(oClass.isSubClassOf(IsRelatedTo.NAME)) { + erManagement = new IsRelatedToTypeDefinitionManagement(); + } else if(oClass.isSubClassOf(ConsistsOf.NAME)) { + erManagement = new ConsistsOfTypeDefinitionManagement(); + } - String ret = erManagement.read(); return TypeBinder.deserializeTypeDefinition(ret); } catch(Exception e) { @@ -181,7 +185,6 @@ public class SchemaManagementImpl implements SchemaManagement { private static Set baseTypes; public static Set typeDefinitionTypes; - // public static Set skipTypeDefinitionCreation; static { baseTypes = new HashSet(); @@ -194,15 +197,10 @@ public class SchemaManagementImpl implements SchemaManagement { typeDefinitionTypes.add(ResourceEntryDefinition.NAME); typeDefinitionTypes.add(EntityTypeDefinition.NAME); typeDefinitionTypes.add(ResourceTypeDefinition.NAME); + typeDefinitionTypes.add(FacetTypeDefinition.NAME); typeDefinitionTypes.add(RelationTypeDefinition.NAME); - - /* - skipTypeDefinitionCreation = new HashSet(); - skipTypeDefinitionCreation.addAll(baseTypes); - skipTypeDefinitionCreation.add(PropertyDefinition.NAME); - skipTypeDefinitionCreation.add(Property.NAME); - skipTypeDefinitionCreation.add(Header.NAME); - */ + typeDefinitionTypes.add(IsRelatedToTypeDefinition.NAME); + typeDefinitionTypes.add(ConsistsOfTypeDefinition.NAME); } protected void registerTypeSchema(TypeDefinition typeDefinition, AccessType baseType) @@ -266,11 +264,10 @@ public class SchemaManagementImpl implements SchemaManagement { oClass.setSuperClasses(oSuperclasses); } - if(typeDefinition instanceof PropertyCapableTypeDefinition) { + if(!(typeDefinition instanceof ResourceTypeDefinition)) { // A Resource cannot contains any properties. - // - Set propertyDefinitions = ((PropertyCapableTypeDefinition) typeDefinition).getProperties(); + Set propertyDefinitions = typeDefinition.getProperties(); for(PropertyDefinition propertyDefinition : propertyDefinitions) { @@ -400,15 +397,14 @@ public class SchemaManagementImpl implements SchemaManagement { ERManagement erManagement = null; - if(Entity.class.isAssignableFrom(accessType.getTypeClass())) { - erManagement = new EntityTypeDefinitionManagement(); - if(Resource.class.isAssignableFrom(accessType.getTypeClass())) { - ((EntityTypeDefinitionManagement) erManagement).setElementTypeRaw(ResourceTypeDefinition.NAME); - }else if(Facet.class.isAssignableFrom(accessType.getTypeClass())) { - ((EntityTypeDefinitionManagement) erManagement).setElementTypeRaw(FacetTypeDefinition.NAME); - } - } else if(Relation.class.isAssignableFrom(accessType.getTypeClass())) { - erManagement = new RelationTypeDefinitionManagement(); + if(Resource.class.isAssignableFrom(accessType.getTypeClass())) { + erManagement = new ResourceTypeDefinitionManagement(); + }else if(Facet.class.isAssignableFrom(accessType.getTypeClass())) { + erManagement = new FacetTypeDefinitionManagement(); + } else if(IsRelatedTo.class.isAssignableFrom(accessType.getTypeClass())) { + erManagement = new IsRelatedToTypeDefinitionManagement(); + } else if(ConsistsOf.class.isAssignableFrom(accessType.getTypeClass())) { + erManagement = new ConsistsOfTypeDefinitionManagement(); } else if(Property.class.isAssignableFrom(accessType.getTypeClass())) { erManagement = new PropertyTypeDefinitionManagement(); } diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/type/entities/EntityTypeDefinitionManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/type/entities/EntityTypeDefinitionManagement.java index 5119cac..74dfb2b 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/type/entities/EntityTypeDefinitionManagement.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/type/entities/EntityTypeDefinitionManagement.java @@ -17,6 +17,7 @@ import org.gcube.informationsystem.resourceregistry.instances.base.entities.Base import org.gcube.informationsystem.resourceregistry.instances.context.ContextUtility; import org.gcube.informationsystem.resourceregistry.security.SecurityContext; import org.gcube.informationsystem.resourceregistry.utils.Utility; +import org.gcube.informationsystem.types.TypeBinder; import org.gcube.informationsystem.types.reference.entities.EntityTypeDefinition; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -27,28 +28,23 @@ import com.orientechnologies.orient.core.record.OVertex; import com.orientechnologies.orient.core.sql.executor.OResult; import com.orientechnologies.orient.core.sql.executor.OResultSet; -public class EntityTypeDefinitionManagement extends BaseEntityManagement { +public abstract class EntityTypeDefinitionManagement extends BaseEntityManagement { private static Logger logger = LoggerFactory.getLogger(EntityTypeDefinitionManagement.class); protected String name; - public EntityTypeDefinitionManagement() { + protected EntityTypeDefinitionManagement(Class clz) { super(AccessType.ENTITY_TYPE_DEFINITION); - this.elementType = EntityTypeDefinition.NAME; - + this.elementType = TypeBinder.getType(clz); } - public EntityTypeDefinitionManagement(SecurityContext securityContext, ODatabaseDocument oDatabaseDocument) throws ResourceRegistryException { - this(); + protected EntityTypeDefinitionManagement(SecurityContext securityContext, ODatabaseDocument oDatabaseDocument, Class clz) throws ResourceRegistryException { + this(clz); this.oDatabaseDocument = oDatabaseDocument; setWorkingContext(securityContext); } - public void setElementTypeRaw(String elementType) throws ResourceRegistryException { - this.elementType = elementType; - } - @Override protected SecurityContext getWorkingContext() throws ResourceRegistryException { if(workingContext == null) { diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/type/entities/FacetTypeDefinitionManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/type/entities/FacetTypeDefinitionManagement.java new file mode 100644 index 0000000..3c1c8c8 --- /dev/null +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/type/entities/FacetTypeDefinitionManagement.java @@ -0,0 +1,19 @@ +package org.gcube.informationsystem.resourceregistry.instances.type.entities; + +import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException; +import org.gcube.informationsystem.resourceregistry.security.SecurityContext; +import org.gcube.informationsystem.types.reference.entities.FacetTypeDefinition; + +import com.orientechnologies.orient.core.db.document.ODatabaseDocument; + +public class FacetTypeDefinitionManagement extends EntityTypeDefinitionManagement { + + public FacetTypeDefinitionManagement() { + super(FacetTypeDefinition.class); + } + + public FacetTypeDefinitionManagement(SecurityContext securityContext, ODatabaseDocument oDatabaseDocument) throws ResourceRegistryException { + super(securityContext, oDatabaseDocument, FacetTypeDefinition.class); + } + +} diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/type/entities/ResourceTypeDefinitionManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/type/entities/ResourceTypeDefinitionManagement.java new file mode 100644 index 0000000..9872da8 --- /dev/null +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/type/entities/ResourceTypeDefinitionManagement.java @@ -0,0 +1,19 @@ +package org.gcube.informationsystem.resourceregistry.instances.type.entities; + +import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException; +import org.gcube.informationsystem.resourceregistry.security.SecurityContext; +import org.gcube.informationsystem.types.reference.entities.ResourceTypeDefinition; + +import com.orientechnologies.orient.core.db.document.ODatabaseDocument; + +public class ResourceTypeDefinitionManagement extends EntityTypeDefinitionManagement { + + public ResourceTypeDefinitionManagement() { + super(ResourceTypeDefinition.class); + } + + public ResourceTypeDefinitionManagement(SecurityContext securityContext, ODatabaseDocument oDatabaseDocument) throws ResourceRegistryException { + super(securityContext, oDatabaseDocument, ResourceTypeDefinition.class); + } + +} diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/type/relations/ConsistsOfTypeDefinitionManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/type/relations/ConsistsOfTypeDefinitionManagement.java new file mode 100644 index 0000000..cbca3dd --- /dev/null +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/type/relations/ConsistsOfTypeDefinitionManagement.java @@ -0,0 +1,30 @@ +package org.gcube.informationsystem.resourceregistry.instances.type.relations; + +import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException; +import org.gcube.informationsystem.resourceregistry.instances.type.entities.FacetTypeDefinitionManagement; +import org.gcube.informationsystem.resourceregistry.security.SecurityContext; +import org.gcube.informationsystem.types.reference.entities.FacetTypeDefinition; +import org.gcube.informationsystem.types.reference.relations.ConsistsOfTypeDefinition; + +import com.orientechnologies.orient.core.db.document.ODatabaseDocument; + +public class ConsistsOfTypeDefinitionManagement + extends RelationTypeDefinitionManagement { + + public ConsistsOfTypeDefinitionManagement() { + super(FacetTypeDefinition.class); + this.elementType = ConsistsOfTypeDefinition.NAME; + } + + public ConsistsOfTypeDefinitionManagement(SecurityContext securityContext, ODatabaseDocument oDatabaseDocument) + throws ResourceRegistryException { + super(securityContext, oDatabaseDocument, FacetTypeDefinition.class); + this.elementType = ConsistsOfTypeDefinition.NAME; + } + + @Override + protected FacetTypeDefinitionManagement newTargetEntityManagement() throws ResourceRegistryException { + return new FacetTypeDefinitionManagement(getWorkingContext(), oDatabaseDocument); + } + +} \ No newline at end of file diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/type/relations/IsRelatedToTypeDefinitionManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/type/relations/IsRelatedToTypeDefinitionManagement.java new file mode 100644 index 0000000..7a2247f --- /dev/null +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/type/relations/IsRelatedToTypeDefinitionManagement.java @@ -0,0 +1,30 @@ +package org.gcube.informationsystem.resourceregistry.instances.type.relations; + +import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException; +import org.gcube.informationsystem.resourceregistry.instances.type.entities.ResourceTypeDefinitionManagement; +import org.gcube.informationsystem.resourceregistry.security.SecurityContext; +import org.gcube.informationsystem.types.reference.entities.ResourceTypeDefinition; +import org.gcube.informationsystem.types.reference.relations.IsRelatedToTypeDefinition; + +import com.orientechnologies.orient.core.db.document.ODatabaseDocument; + +public class IsRelatedToTypeDefinitionManagement + extends RelationTypeDefinitionManagement { + + public IsRelatedToTypeDefinitionManagement() { + super(ResourceTypeDefinition.class); + this.elementType = IsRelatedToTypeDefinition.NAME; + } + + public IsRelatedToTypeDefinitionManagement(SecurityContext securityContext, ODatabaseDocument oDatabaseDocument) + throws ResourceRegistryException { + super(securityContext, oDatabaseDocument, ResourceTypeDefinition.class); + this.elementType = IsRelatedToTypeDefinition.NAME; + } + + @Override + protected ResourceTypeDefinitionManagement newTargetEntityManagement() throws ResourceRegistryException { + return new ResourceTypeDefinitionManagement(getWorkingContext(), oDatabaseDocument); + } + +} diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/type/relations/RelationTypeDefinitionManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/type/relations/RelationTypeDefinitionManagement.java index cb22852..57ee42f 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/type/relations/RelationTypeDefinitionManagement.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/type/relations/RelationTypeDefinitionManagement.java @@ -17,9 +17,11 @@ import org.gcube.informationsystem.resourceregistry.instances.base.ERManagement; import org.gcube.informationsystem.resourceregistry.instances.base.relations.BaseRelationManagement; import org.gcube.informationsystem.resourceregistry.instances.context.ContextUtility; import org.gcube.informationsystem.resourceregistry.instances.type.entities.EntityTypeDefinitionManagement; +import org.gcube.informationsystem.resourceregistry.instances.type.entities.ResourceTypeDefinitionManagement; import org.gcube.informationsystem.resourceregistry.security.SecurityContext; import org.gcube.informationsystem.resourceregistry.utils.Utility; import org.gcube.informationsystem.types.reference.entities.EntityTypeDefinition; +import org.gcube.informationsystem.types.reference.entities.ResourceTypeDefinition; import org.gcube.informationsystem.types.reference.relations.RelationTypeDefinition; import com.orientechnologies.orient.core.db.document.ODatabaseDocument; @@ -28,18 +30,18 @@ import com.orientechnologies.orient.core.record.OVertex; import com.orientechnologies.orient.core.sql.executor.OResult; import com.orientechnologies.orient.core.sql.executor.OResultSet; -public class RelationTypeDefinitionManagement - extends BaseRelationManagement { +public abstract class RelationTypeDefinitionManagement, TT extends EntityTypeDefinition> + extends BaseRelationManagement { protected String name; - public RelationTypeDefinitionManagement() { - super(AccessType.RELATION_TYPE_DEFINITION, EntityTypeDefinition.class, EntityTypeDefinition.class); + public RelationTypeDefinitionManagement(Class clz) { + super(AccessType.RELATION_TYPE_DEFINITION, ResourceTypeDefinition.class, clz); this.elementType = RelationTypeDefinition.NAME; } - public RelationTypeDefinitionManagement(SecurityContext securityContext, ODatabaseDocument oDatabaseDocument) throws ResourceRegistryException { - this(); + public RelationTypeDefinitionManagement(SecurityContext securityContext, ODatabaseDocument oDatabaseDocument, Class clz) throws ResourceRegistryException { + this(clz); this.oDatabaseDocument = oDatabaseDocument; setWorkingContext(securityContext); } @@ -74,28 +76,24 @@ public class RelationTypeDefinitionManagement protected OEdge reallyCreate() throws ResourceRegistryException { logger.debug("Going to create {} for {}", RelationTypeDefinition.NAME, getName()); if(sourceEntityManagement == null) { - if(!jsonNode.has(Relation.SOURCE_PROPERTY)) { throw new ResourceRegistryException("Error while creating relation. No source definition found"); } sourceEntityManagement = newSourceEntityManagement(); - sourceEntityManagement.setElementType(EntityTypeDefinition.NAME); + // sourceEntityManagement.setElementType(EntityTypeDefinition.NAME); sourceEntityManagement.setJsonNode(jsonNode.get(Relation.SOURCE_PROPERTY)); } if(targetEntityManagement == null) { - targetEntityManagement = newTargetEntityManagement(); - if(!jsonNode.has(Relation.TARGET_PROPERTY)) { throw new ResourceRegistryException( "Error while creating " + elementType + ". No target definition found"); } targetEntityManagement = newTargetEntityManagement(); - targetEntityManagement.setElementType(EntityTypeDefinition.NAME); + // targetEntityManagement.setElementType(EntityTypeDefinition.NAME); targetEntityManagement.setJsonNode(jsonNode.get(Relation.TARGET_PROPERTY)); - } logger.trace("Creating {} beetween {} -> {}", elementType, getSourceEntityManagement().serialize(), @@ -220,13 +218,8 @@ public class RelationTypeDefinitionManagement } @Override - protected EntityTypeDefinitionManagement newSourceEntityManagement() throws ResourceRegistryException { - return new EntityTypeDefinitionManagement(getWorkingContext(), oDatabaseDocument); - } - - @Override - protected EntityTypeDefinitionManagement newTargetEntityManagement() throws ResourceRegistryException { - return new EntityTypeDefinitionManagement(getWorkingContext(), oDatabaseDocument); + protected ResourceTypeDefinitionManagement newSourceEntityManagement() throws ResourceRegistryException { + return new ResourceTypeDefinitionManagement(getWorkingContext(), oDatabaseDocument); } } diff --git a/src/test/java/org/gcube/informationsystem/resourceregistry/type/SchemaManagementImplTest.java b/src/test/java/org/gcube/informationsystem/resourceregistry/type/SchemaManagementImplTest.java index 3ee240f..247965e 100644 --- a/src/test/java/org/gcube/informationsystem/resourceregistry/type/SchemaManagementImplTest.java +++ b/src/test/java/org/gcube/informationsystem/resourceregistry/type/SchemaManagementImplTest.java @@ -211,13 +211,17 @@ public class SchemaManagementImplTest { } - @Test(expected=SchemaAlreadyPresentException.class) + @Test public void createRelationTypeDefinitionType() throws Exception { - RelationTypeDefinition relationTypeDefinition = new RelationTypeDefinitionImpl((Class>) RelationTypeDefinition.class); + @SuppressWarnings("unchecked") + RelationTypeDefinition relationTypeDefinition = new RelationTypeDefinitionImpl((Class>) RelationTypeDefinition.class); SchemaManagement schemaManagement = new SchemaManagementImpl(); ((SchemaManagementImpl) schemaManagement).setTypeName(RelationTypeDefinition.NAME); - String ret = schemaManagement.create(ISMapper.marshal(relationTypeDefinition), AccessType.BASE_RELATION); + + String ret = ISMapper.marshal(relationTypeDefinition); + + //String ret = schemaManagement.create(ISMapper.marshal(relationTypeDefinition), AccessType.BASE_RELATION); logger.debug(ret);