From d78035708919322083e411605d662cb7329c83f7 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Mon, 27 Jan 2020 17:57:24 +0100 Subject: [PATCH] Fixed bug which does not allow to create PropertyTypeDefiniton of Property during DB initialization --- .../dbinitialization/DatabaseEnvironment.java | 1 - .../dbinitialization/SchemaActionImpl.java | 11 ++++++++++- .../types/SchemaManagementImpl.java | 18 +++++++++++++++++- .../types/SchemaManagementImplTest.java | 3 ++- 4 files changed, 29 insertions(+), 4 deletions(-) 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 bb705ba..79df916 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/dbinitialization/DatabaseEnvironment.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/dbinitialization/DatabaseEnvironment.java @@ -245,7 +245,6 @@ public class DatabaseEnvironment { definitionToBeCreated.add(ConsistsOfTypeDefinition.class); SchemaAction schemaAction = new SchemaActionImpl(); - for(Class clz : definitionToBeCreated) { if(BaseProperty.class.isAssignableFrom(clz)) { diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/dbinitialization/SchemaActionImpl.java b/src/main/java/org/gcube/informationsystem/resourceregistry/dbinitialization/SchemaActionImpl.java index 270722f..13e6cf7 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/dbinitialization/SchemaActionImpl.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/dbinitialization/SchemaActionImpl.java @@ -6,6 +6,8 @@ import org.gcube.informationsystem.base.reference.properties.BaseProperty; import org.gcube.informationsystem.base.reference.relations.BaseRelation; import org.gcube.informationsystem.model.reference.entities.Facet; import org.gcube.informationsystem.model.reference.entities.Resource; +import org.gcube.informationsystem.model.reference.properties.Header; +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.resourceregistry.api.exceptions.schema.SchemaAlreadyPresentException; @@ -74,7 +76,14 @@ public class SchemaActionImpl implements SchemaAction { schemaManagement.setTypeName(TypeBinder.getType(p)); String json = TypeBinder.serializeType(p); logger.trace(json); - schemaManagement.create(json, AccessType.BASE_PROPERTY); + if(Property.class.isAssignableFrom(p)) { + if(p.equals(Property.class) || p.equals(Header.class) ) { + ((SchemaManagementImpl) schemaManagement).setSkipTypeDefinitionCreation(true); + } + schemaManagement.create(json, AccessType.PROPERTY); + }else { + schemaManagement.create(json, AccessType.BASE_PROPERTY); + } } catch(SchemaAlreadyPresentException sape) { logger.warn("{} already exists. It will be ignored", TypeBinder.getType(p)); } catch(Exception ex) { diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/types/SchemaManagementImpl.java b/src/main/java/org/gcube/informationsystem/resourceregistry/types/SchemaManagementImpl.java index d56ff44..c772b16 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/types/SchemaManagementImpl.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/types/SchemaManagementImpl.java @@ -67,6 +67,22 @@ public class SchemaManagementImpl implements SchemaManagement { private static Logger logger = LoggerFactory.getLogger(SchemaManagementImpl.class); protected String typeName; + + protected boolean skipTypeDefinitionCreation; + + public boolean isSkipTypeDefinitionCreation() { + return skipTypeDefinitionCreation; + } + + public void setSkipTypeDefinitionCreation(boolean skipTypeDefinitionCreation) { + this.skipTypeDefinitionCreation = skipTypeDefinitionCreation; + } + + + public SchemaManagementImpl() { + this.skipTypeDefinitionCreation = false; + } + protected OClass getOClass(OSchema oSchema, String type) throws SchemaException { return oSchema.getClass(type); @@ -418,7 +434,7 @@ public class SchemaManagementImpl implements SchemaManagement { } String ret = null; - if(erManagement!=null) { + if(erManagement!=null && !skipTypeDefinitionCreation) { erManagement.setJson(jsonSchema); ret = erManagement.create(); }else { diff --git a/src/test/java/org/gcube/informationsystem/resourceregistry/types/SchemaManagementImplTest.java b/src/test/java/org/gcube/informationsystem/resourceregistry/types/SchemaManagementImplTest.java index 5cea6d9..3a080ea 100644 --- a/src/test/java/org/gcube/informationsystem/resourceregistry/types/SchemaManagementImplTest.java +++ b/src/test/java/org/gcube/informationsystem/resourceregistry/types/SchemaManagementImplTest.java @@ -191,7 +191,8 @@ public class SchemaManagementImplTest { } - @Test(expected=SchemaAlreadyPresentException.class) + //@Test(expected=SchemaAlreadyPresentException.class) + @Test public void createPropertyType() throws Exception { PropertyTypeDefinition propertyTypeDefinition = new PropertyTypeDefinitionImpl<>(ValueSchema.class);