From 1a82b138784ae3e06fd5212e2ed5d28594986291 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Tue, 22 Dec 2020 11:37:36 +0100 Subject: [PATCH] extracted function to get the proper type management class --- .../types/SchemaManagementImpl.java | 112 +++++++++++------- 1 file changed, 71 insertions(+), 41 deletions(-) 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 7be780c..e348977 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/types/SchemaManagementImpl.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/types/SchemaManagementImpl.java @@ -131,27 +131,73 @@ public class SchemaManagementImpl implements SchemaManagement { } */ + private ElementManagement getTypeManagement(AccessType accessType) { + ElementManagement erManagement = null; + + switch(accessType) { + case PROPERTY: + erManagement = new PropertyTypeDefinitionManagement(); + break; + case RESOURCE: + erManagement = new ResourceTypeDefinitionManagement(); + break; + case FACET: + erManagement = new FacetTypeDefinitionManagement(); + break; + case IS_RELATED_TO: + erManagement = new IsRelatedToTypeDefinitionManagement(); + break; + case CONSISTS_OF: + erManagement = new ConsistsOfTypeDefinitionManagement(); + break; + default: + break; + } + + return erManagement; + } + + private ElementManagement getTypeManagement(OClass oClass) { + ElementManagement erManagement = null; + if(oClass.isSubClassOf(Property.NAME)) { + erManagement = new PropertyTypeDefinitionManagement(); + ((PropertyTypeDefinitionManagement) 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(); + ((IsRelatedToTypeDefinitionManagement) erManagement).setName(oClass.getName()); + } else if(oClass.isSubClassOf(ConsistsOf.NAME)) { + erManagement = new ConsistsOfTypeDefinitionManagement(); + ((ConsistsOfTypeDefinitionManagement) erManagement).setName(oClass.getName()); + } + return erManagement; + } + + private Type getType(AccessType accessType) throws SchemaException { + try { + ElementManagement erManagement = getTypeManagement(accessType); + + if(erManagement!=null) { + String ret = erManagement.read(); + return TypeMapper.deserializeTypeDefinition(ret); + }else { + throw new SchemaException("You can only request schema of IS Model types and their specilization"); + } + } catch(Exception e) { + throw new SchemaException(e); + } + } + private Type getType(OClass oClass) throws SchemaException { try { - ElementManagement erManagement = null; + ElementManagement erManagement = getTypeManagement(oClass); - if(oClass.isSubClassOf(Property.NAME)) { - erManagement = new PropertyTypeDefinitionManagement(); - ((PropertyTypeDefinitionManagement) 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(); - ((IsRelatedToTypeDefinitionManagement) erManagement).setName(oClass.getName()); - } else if(oClass.isSubClassOf(ConsistsOf.NAME)) { - erManagement = new ConsistsOfTypeDefinitionManagement(); - ((ConsistsOfTypeDefinitionManagement) erManagement).setName(oClass.getName()); - } if(erManagement!=null) { String ret = erManagement.read(); return TypeMapper.deserializeTypeDefinition(ret); @@ -400,8 +446,6 @@ public class SchemaManagementImpl implements SchemaManagement { throw new SchemaNotFoundException(typeName + " does not Exists"); } - - try { String description = type.getDescription(); @@ -629,31 +673,17 @@ public class SchemaManagementImpl implements SchemaManagement { } // TODO check if the version is greater + ElementManagement erManagement = getTypeManagement(accessType); + Type actualTypeDefinition = getType(accessType); - updateTypeSchema(typeDefinition, accessType); - - ElementManagement erManagement = null; - - switch(accessType) { - case PROPERTY: - erManagement = new PropertyTypeDefinitionManagement(); - break; - case RESOURCE: - erManagement = new ResourceTypeDefinitionManagement(); - break; - case FACET: - erManagement = new FacetTypeDefinitionManagement(); - break; - case IS_RELATED_TO: - erManagement = new IsRelatedToTypeDefinitionManagement(); - break; - case CONSISTS_OF: - erManagement = new ConsistsOfTypeDefinitionManagement(); - break; - default: - break; + if(typeDefinition.getVersion().compareTo(actualTypeDefinition.getVersion())<=0) { + throw new SchemaAlreadyPresentException("The type " + typeDefinition.getName() + + " exists and the existing version (.i.e " + actualTypeDefinition.getVersion().toString() + + ") is greater of equal to the one provided for update (i.e. " + typeDefinition.getVersion() + ")"); } + updateTypeSchema(typeDefinition, accessType); + String ret = null; if(erManagement!=null) { erManagement.setJson(jsonSchema);