Fixing model redesign
This commit is contained in:
parent
fe15bea3de
commit
6f15a1d7dc
|
@ -5,8 +5,12 @@ package org.gcube.informationsystem.base.reference;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import org.gcube.informationsystem.base.impl.entities.BaseEntityImpl;
|
||||||
import org.gcube.informationsystem.base.impl.properties.BasePropertyImpl;
|
import org.gcube.informationsystem.base.impl.properties.BasePropertyImpl;
|
||||||
|
import org.gcube.informationsystem.base.impl.relations.BaseRelationImpl;
|
||||||
|
import org.gcube.informationsystem.base.reference.entities.BaseEntity;
|
||||||
import org.gcube.informationsystem.base.reference.properties.BaseProperty;
|
import org.gcube.informationsystem.base.reference.properties.BaseProperty;
|
||||||
|
import org.gcube.informationsystem.base.reference.relations.BaseRelation;
|
||||||
import org.gcube.informationsystem.context.impl.entities.ContextImpl;
|
import org.gcube.informationsystem.context.impl.entities.ContextImpl;
|
||||||
import org.gcube.informationsystem.context.impl.relations.IsParentOfImpl;
|
import org.gcube.informationsystem.context.impl.relations.IsParentOfImpl;
|
||||||
import org.gcube.informationsystem.context.reference.entities.Context;
|
import org.gcube.informationsystem.context.reference.entities.Context;
|
||||||
|
@ -29,12 +33,10 @@ import org.gcube.informationsystem.model.reference.properties.Property;
|
||||||
import org.gcube.informationsystem.model.reference.relations.ConsistsOf;
|
import org.gcube.informationsystem.model.reference.relations.ConsistsOf;
|
||||||
import org.gcube.informationsystem.model.reference.relations.IsRelatedTo;
|
import org.gcube.informationsystem.model.reference.relations.IsRelatedTo;
|
||||||
import org.gcube.informationsystem.model.reference.relations.Relation;
|
import org.gcube.informationsystem.model.reference.relations.Relation;
|
||||||
import org.gcube.informationsystem.types.impl.TypeDefinitionImpl;
|
|
||||||
import org.gcube.informationsystem.types.impl.entities.EntityTypeDefinitionImpl;
|
import org.gcube.informationsystem.types.impl.entities.EntityTypeDefinitionImpl;
|
||||||
import org.gcube.informationsystem.types.impl.properties.PropertyDefinitionImpl;
|
import org.gcube.informationsystem.types.impl.properties.PropertyDefinitionImpl;
|
||||||
import org.gcube.informationsystem.types.impl.properties.PropertyTypeDefinitionImpl;
|
import org.gcube.informationsystem.types.impl.properties.PropertyTypeDefinitionImpl;
|
||||||
import org.gcube.informationsystem.types.impl.relations.RelationTypeDefinitionImpl;
|
import org.gcube.informationsystem.types.impl.relations.RelationTypeDefinitionImpl;
|
||||||
import org.gcube.informationsystem.types.reference.TypeDefinition;
|
|
||||||
import org.gcube.informationsystem.types.reference.entities.EntityTypeDefinition;
|
import org.gcube.informationsystem.types.reference.entities.EntityTypeDefinition;
|
||||||
import org.gcube.informationsystem.types.reference.properties.PropertyDefinition;
|
import org.gcube.informationsystem.types.reference.properties.PropertyDefinition;
|
||||||
import org.gcube.informationsystem.types.reference.properties.PropertyTypeDefinition;
|
import org.gcube.informationsystem.types.reference.properties.PropertyTypeDefinition;
|
||||||
|
@ -57,15 +59,17 @@ public enum AccessType {
|
||||||
|
|
||||||
PROPERTY_DEFINITION(PropertyDefinition.class, PropertyDefinition.NAME, PropertyDefinitionImpl.class, null),
|
PROPERTY_DEFINITION(PropertyDefinition.class, PropertyDefinition.NAME, PropertyDefinitionImpl.class, null),
|
||||||
|
|
||||||
TYPE_DEFINITION(TypeDefinition.class, TypeDefinition.NAME, TypeDefinitionImpl.class, null),
|
// TYPE_DEFINITION(TypeDefinition.class, TypeDefinition.NAME, TypeDefinitionImpl.class, null),
|
||||||
PROPERTY_TYPE_DEFINITION(PropertyTypeDefinition.class, PropertyTypeDefinition.NAME, PropertyTypeDefinitionImpl.class, null),
|
PROPERTY_TYPE_DEFINITION(PropertyTypeDefinition.class, PropertyTypeDefinition.NAME, PropertyTypeDefinitionImpl.class, null),
|
||||||
ENTITY_TYPE_DEFINITION(EntityTypeDefinition.class, EntityTypeDefinition.NAME, EntityTypeDefinitionImpl.class, null),
|
ENTITY_TYPE_DEFINITION(EntityTypeDefinition.class, EntityTypeDefinition.NAME, EntityTypeDefinitionImpl.class, null),
|
||||||
RELATION_TYPE_DEFINITION(RelationTypeDefinition.class, RelationTypeDefinition.NAME, RelationTypeDefinitionImpl.class, null),
|
RELATION_TYPE_DEFINITION(RelationTypeDefinition.class, RelationTypeDefinition.NAME, RelationTypeDefinitionImpl.class, null),
|
||||||
|
|
||||||
|
BASE_ENTITY(BaseEntity.class, BaseEntity.NAME, BaseEntityImpl.class, null),
|
||||||
ENTITY(Entity.class, Entity.NAME, EntityImpl.class, null),
|
ENTITY(Entity.class, Entity.NAME, EntityImpl.class, null),
|
||||||
RESOURCE(Resource.class, Resource.NAME, ResourceImpl.class, DummyResource.class),
|
RESOURCE(Resource.class, Resource.NAME, ResourceImpl.class, DummyResource.class),
|
||||||
FACET(Facet.class, Facet.NAME, FacetImpl.class, DummyFacet.class),
|
FACET(Facet.class, Facet.NAME, FacetImpl.class, DummyFacet.class),
|
||||||
|
|
||||||
|
BASE_RELATION(BaseRelation.class, BaseRelation.NAME, BaseRelationImpl.class, null),
|
||||||
RELATION(Relation.class, Relation.NAME, RelationImpl.class, null),
|
RELATION(Relation.class, Relation.NAME, RelationImpl.class, null),
|
||||||
IS_RELATED_TO(IsRelatedTo.class, IsRelatedTo.NAME, IsRelatedToImpl.class, DummyIsRelatedTo.class),
|
IS_RELATED_TO(IsRelatedTo.class, IsRelatedTo.NAME, IsRelatedToImpl.class, DummyIsRelatedTo.class),
|
||||||
CONSISTS_OF(ConsistsOf.class, ConsistsOf.NAME, ConsistsOfImpl.class, null);
|
CONSISTS_OF(ConsistsOf.class, ConsistsOf.NAME, ConsistsOfImpl.class, null);
|
||||||
|
|
|
@ -3,11 +3,9 @@
|
||||||
*/
|
*/
|
||||||
package org.gcube.informationsystem.context.reference.relations;
|
package org.gcube.informationsystem.context.reference.relations;
|
||||||
|
|
||||||
import org.gcube.informationsystem.base.reference.properties.Header;
|
|
||||||
import org.gcube.informationsystem.base.reference.relations.BaseRelation;
|
import org.gcube.informationsystem.base.reference.relations.BaseRelation;
|
||||||
import org.gcube.informationsystem.context.impl.relations.IsParentOfImpl;
|
import org.gcube.informationsystem.context.impl.relations.IsParentOfImpl;
|
||||||
import org.gcube.informationsystem.context.reference.entities.Context;
|
import org.gcube.informationsystem.context.reference.entities.Context;
|
||||||
import org.gcube.informationsystem.types.annotations.ISProperty;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonGetter;
|
import com.fasterxml.jackson.annotation.JsonGetter;
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
|
@ -23,11 +21,6 @@ public interface IsParentOf<Out extends Context, In extends Context> extends Bas
|
||||||
|
|
||||||
public static final String NAME = "IsParentOf"; //IsParentOf.class.getSimpleName();
|
public static final String NAME = "IsParentOf"; //IsParentOf.class.getSimpleName();
|
||||||
|
|
||||||
/* Overriding getHeader method to create Header property in type */
|
|
||||||
@ISProperty(name = HEADER_PROPERTY, mandatory = true, nullable = false)
|
|
||||||
@Override
|
|
||||||
public Header getHeader();
|
|
||||||
|
|
||||||
@JsonIgnoreProperties({Context.PARENT_PROPERTY, Context.CHILDREN_PROPERTY})
|
@JsonIgnoreProperties({Context.PARENT_PROPERTY, Context.CHILDREN_PROPERTY})
|
||||||
@JsonGetter(value = SOURCE_PROPERTY)
|
@JsonGetter(value = SOURCE_PROPERTY)
|
||||||
public Out getSource();
|
public Out getSource();
|
||||||
|
|
|
@ -9,7 +9,6 @@ import org.gcube.informationsystem.model.reference.entities.Entity;
|
||||||
import org.gcube.informationsystem.model.reference.entities.Facet;
|
import org.gcube.informationsystem.model.reference.entities.Facet;
|
||||||
import org.gcube.informationsystem.model.reference.entities.Resource;
|
import org.gcube.informationsystem.model.reference.entities.Resource;
|
||||||
import org.gcube.informationsystem.types.impl.TypeDefinitionImpl;
|
import org.gcube.informationsystem.types.impl.TypeDefinitionImpl;
|
||||||
import org.gcube.informationsystem.types.reference.TypeDefinition;
|
|
||||||
import org.gcube.informationsystem.types.reference.entities.EntityTypeDefinition;
|
import org.gcube.informationsystem.types.reference.entities.EntityTypeDefinition;
|
||||||
import org.gcube.informationsystem.utils.ISMapper;
|
import org.gcube.informationsystem.utils.ISMapper;
|
||||||
|
|
||||||
|
@ -23,30 +22,32 @@ public final class EntityTypeDefinitionImpl<E extends BaseEntity> extends TypeDe
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = 2614315845213942880L;
|
private static final long serialVersionUID = 2614315845213942880L;
|
||||||
|
|
||||||
private static final String VERTEX_CLASS_NAME = "V";
|
// private static final String VERTEX_CLASS_NAME = "V";
|
||||||
|
|
||||||
protected EntityTypeDefinitionImpl() {
|
protected EntityTypeDefinitionImpl() {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings({"rawtypes", "unchecked"})
|
||||||
public EntityTypeDefinitionImpl(Class<E> clz) {
|
public EntityTypeDefinitionImpl(Class<E> clz) {
|
||||||
super(clz);
|
super(clz);
|
||||||
|
|
||||||
if(Resource.class.isAssignableFrom(clz)){
|
if(Resource.class.isAssignableFrom(clz)){
|
||||||
@SuppressWarnings({"unchecked"})
|
|
||||||
Class<? extends Resource> c = (Class<? extends Resource>) clz;
|
Class<? extends Resource> c = (Class<? extends Resource>) clz;
|
||||||
this.superClasses = retrieveSuperClasses(c, Resource.class, Entity.NAME);
|
this.superClasses = retrieveSuperClasses(c, Resource.class, Entity.NAME);
|
||||||
} else if(Facet.class.isAssignableFrom(clz)){
|
} else if(Facet.class.isAssignableFrom(clz)){
|
||||||
@SuppressWarnings({"unchecked"})
|
|
||||||
Class<? extends Facet> c = (Class<? extends Facet>) clz;
|
Class<? extends Facet> c = (Class<? extends Facet>) clz;
|
||||||
this.superClasses = retrieveSuperClasses(c, Facet.class, Entity.NAME);
|
this.superClasses = retrieveSuperClasses(c, Facet.class, Entity.NAME);
|
||||||
} else if(EntityTypeDefinition.class.isAssignableFrom(clz)){
|
} else if(EntityTypeDefinition.class.isAssignableFrom(clz)){
|
||||||
this.superClasses = retrieveSuperClasses(clz, BaseEntity.class, VERTEX_CLASS_NAME);
|
Class<? extends EntityTypeDefinition> c = (Class<? extends EntityTypeDefinition>) clz;
|
||||||
this.superClasses.add(TypeDefinition.class.getSimpleName());
|
this.superClasses = retrieveSuperClasses(c, EntityTypeDefinition.class, BaseEntity.NAME);
|
||||||
} else if(Context.class.isAssignableFrom(clz)){
|
} else if(Context.class.isAssignableFrom(clz)){
|
||||||
this.superClasses = retrieveSuperClasses(clz, BaseEntity.class, VERTEX_CLASS_NAME);
|
Class<? extends Context> c = (Class<? extends Context>) clz;
|
||||||
|
this.superClasses = retrieveSuperClasses(c, Context.class, BaseEntity.NAME);
|
||||||
|
} else if(BaseEntity.class.isAssignableFrom(clz)){
|
||||||
|
this.superClasses = retrieveSuperClasses(clz, BaseEntity.class, null);
|
||||||
} else {
|
} else {
|
||||||
throw new RuntimeException("Type Hierachy Error");
|
throw new RuntimeException("Type Hierachy Error for class " + clz.getSimpleName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -147,47 +147,57 @@ public final class PropertyDefinitionImpl implements PropertyDefinition {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getDescription() {
|
public String getDescription() {
|
||||||
return description;
|
return description;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean isMandatory() {
|
public boolean isMandatory() {
|
||||||
return mandatory;
|
return mandatory;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean isReadonly() {
|
public boolean isReadonly() {
|
||||||
return readonly;
|
return readonly;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean isNotnull() {
|
public boolean isNotnull() {
|
||||||
return notnull;
|
return notnull;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Integer getMax() {
|
public Integer getMax() {
|
||||||
return max;
|
return max;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Integer getMin() {
|
public Integer getMin() {
|
||||||
return min;
|
return min;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getRegexp() {
|
public String getRegexp() {
|
||||||
return regexp;
|
return regexp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Integer getLinkedType() {
|
public Integer getLinkedType() {
|
||||||
return linkedType;
|
return linkedType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getLinkedClass() {
|
public String getLinkedClass() {
|
||||||
return linkedClass;
|
return linkedClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Integer getType() {
|
public Integer getType() {
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,6 @@ package org.gcube.informationsystem.types.impl.properties;
|
||||||
|
|
||||||
import org.gcube.informationsystem.base.reference.properties.BaseProperty;
|
import org.gcube.informationsystem.base.reference.properties.BaseProperty;
|
||||||
import org.gcube.informationsystem.types.impl.TypeDefinitionImpl;
|
import org.gcube.informationsystem.types.impl.TypeDefinitionImpl;
|
||||||
import org.gcube.informationsystem.types.reference.TypeDefinition;
|
|
||||||
import org.gcube.informationsystem.types.reference.properties.PropertyTypeDefinition;
|
import org.gcube.informationsystem.types.reference.properties.PropertyTypeDefinition;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonTypeName;
|
import com.fasterxml.jackson.annotation.JsonTypeName;
|
||||||
|
@ -22,9 +21,6 @@ public final class PropertyTypeDefinitionImpl<P extends BaseProperty> extends Ty
|
||||||
public PropertyTypeDefinitionImpl(Class<P> clz) {
|
public PropertyTypeDefinitionImpl(Class<P> clz) {
|
||||||
super(clz);
|
super(clz);
|
||||||
this.superClasses = retrieveSuperClasses(clz, BaseProperty.class, clz == BaseProperty.class ? null : BaseProperty.NAME);
|
this.superClasses = retrieveSuperClasses(clz, BaseProperty.class, clz == BaseProperty.class ? null : BaseProperty.NAME);
|
||||||
if(PropertyTypeDefinition.class.isAssignableFrom(clz)) {
|
|
||||||
this.superClasses.add(TypeDefinition.class.getSimpleName());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -11,7 +11,6 @@ import org.gcube.informationsystem.model.reference.relations.IsRelatedTo;
|
||||||
import org.gcube.informationsystem.model.reference.relations.Relation;
|
import org.gcube.informationsystem.model.reference.relations.Relation;
|
||||||
import org.gcube.informationsystem.types.TypeBinder;
|
import org.gcube.informationsystem.types.TypeBinder;
|
||||||
import org.gcube.informationsystem.types.impl.TypeDefinitionImpl;
|
import org.gcube.informationsystem.types.impl.TypeDefinitionImpl;
|
||||||
import org.gcube.informationsystem.types.reference.TypeDefinition;
|
|
||||||
import org.gcube.informationsystem.types.reference.entities.EntityTypeDefinition;
|
import org.gcube.informationsystem.types.reference.entities.EntityTypeDefinition;
|
||||||
import org.gcube.informationsystem.types.reference.relations.RelationTypeDefinition;
|
import org.gcube.informationsystem.types.reference.relations.RelationTypeDefinition;
|
||||||
import org.gcube.informationsystem.utils.ISMapper;
|
import org.gcube.informationsystem.utils.ISMapper;
|
||||||
|
@ -28,7 +27,7 @@ public final class RelationTypeDefinitionImpl<Out extends BaseEntity, In extends
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = 2221831081869571296L;
|
private static final long serialVersionUID = 2221831081869571296L;
|
||||||
|
|
||||||
private static final String EDGE_CLASS_NAME = "E";
|
// private static final String EDGE_CLASS_NAME = "E";
|
||||||
|
|
||||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||||
protected String sourceType;
|
protected String sourceType;
|
||||||
|
@ -51,10 +50,15 @@ public final class RelationTypeDefinitionImpl<Out extends BaseEntity, In extends
|
||||||
Class<? extends ConsistsOf> c = (Class<? extends ConsistsOf>) clz;
|
Class<? extends ConsistsOf> c = (Class<? extends ConsistsOf>) clz;
|
||||||
this.superClasses = retrieveSuperClasses(c, ConsistsOf.class, Relation.NAME);
|
this.superClasses = retrieveSuperClasses(c, ConsistsOf.class, Relation.NAME);
|
||||||
} else if(RelationTypeDefinition.class.isAssignableFrom(clz)){
|
} else if(RelationTypeDefinition.class.isAssignableFrom(clz)){
|
||||||
this.superClasses = retrieveSuperClasses(clz, BaseRelation.class, EDGE_CLASS_NAME);
|
@SuppressWarnings({"unchecked", "rawtypes"})
|
||||||
this.superClasses.add(TypeDefinition.class.getSimpleName());
|
Class<? extends RelationTypeDefinition> c = (Class<? extends RelationTypeDefinition>) clz;
|
||||||
|
this.superClasses = retrieveSuperClasses(c, RelationTypeDefinition.class, BaseRelation.NAME);
|
||||||
} else if(IsParentOf.class.isAssignableFrom(clz)){
|
} else if(IsParentOf.class.isAssignableFrom(clz)){
|
||||||
this.superClasses = retrieveSuperClasses(clz, BaseRelation.class, EDGE_CLASS_NAME);
|
@SuppressWarnings({"unchecked", "rawtypes"})
|
||||||
|
Class<? extends IsParentOf> c = (Class<? extends IsParentOf>) clz;
|
||||||
|
this.superClasses = retrieveSuperClasses(c, IsParentOf.class, BaseRelation.NAME);
|
||||||
|
} else if(BaseRelation.class.isAssignableFrom(clz)){
|
||||||
|
this.superClasses = retrieveSuperClasses(clz, BaseRelation.class, null);
|
||||||
} else {
|
} else {
|
||||||
throw new RuntimeException("Type Hierachy Error");
|
throw new RuntimeException("Type Hierachy Error");
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@ public interface TypeDefinition<ISM extends ISManageable> extends ISManageable {
|
||||||
public static final String NAME_PROPERTY = "name";
|
public static final String NAME_PROPERTY = "name";
|
||||||
public static final String DESCRIPTION_PROPERTY = "description";
|
public static final String DESCRIPTION_PROPERTY = "description";
|
||||||
public static final String ABSTRACT_PROPERTY = "abstract";
|
public static final String ABSTRACT_PROPERTY = "abstract";
|
||||||
public static final String SUPERCLASSES_PROPERTY = "superClasses";
|
public static final String TYPE_SUPERCLASSES_PROPERTY = "superClasses";
|
||||||
public static final String PROPERTIES_PROPERTY = "properties";
|
public static final String PROPERTIES_PROPERTY = "properties";
|
||||||
|
|
||||||
@ISProperty(name = NAME_PROPERTY, readonly = true, mandatory = true, nullable = false)
|
@ISProperty(name = NAME_PROPERTY, readonly = true, mandatory = true, nullable = false)
|
||||||
|
@ -31,7 +31,7 @@ public interface TypeDefinition<ISM extends ISManageable> extends ISManageable {
|
||||||
@ISProperty(name = ABSTRACT_PROPERTY, readonly = true, mandatory = true, nullable = false)
|
@ISProperty(name = ABSTRACT_PROPERTY, readonly = true, mandatory = true, nullable = false)
|
||||||
public boolean isAbstract();
|
public boolean isAbstract();
|
||||||
|
|
||||||
@ISProperty(name = SUPERCLASSES_PROPERTY, readonly = true, mandatory = true, nullable = false)
|
@ISProperty(name = TYPE_SUPERCLASSES_PROPERTY, readonly = true, mandatory = true, nullable = false)
|
||||||
public Set<String> getSuperClasses();
|
public Set<String> getSuperClasses();
|
||||||
|
|
||||||
@ISProperty(name = PROPERTIES_PROPERTY, readonly = false, mandatory = true, nullable = false)
|
@ISProperty(name = PROPERTIES_PROPERTY, readonly = false, mandatory = true, nullable = false)
|
||||||
|
|
|
@ -1,8 +1,12 @@
|
||||||
package org.gcube.informationsystem.types.reference.entities;
|
package org.gcube.informationsystem.types.reference.entities;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.gcube.informationsystem.base.reference.entities.BaseEntity;
|
import org.gcube.informationsystem.base.reference.entities.BaseEntity;
|
||||||
|
import org.gcube.informationsystem.types.annotations.ISProperty;
|
||||||
import org.gcube.informationsystem.types.impl.entities.EntityTypeDefinitionImpl;
|
import org.gcube.informationsystem.types.impl.entities.EntityTypeDefinitionImpl;
|
||||||
import org.gcube.informationsystem.types.reference.TypeDefinition;
|
import org.gcube.informationsystem.types.reference.TypeDefinition;
|
||||||
|
import org.gcube.informationsystem.types.reference.properties.PropertyDefinition;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||||
|
@ -13,4 +17,29 @@ public interface EntityTypeDefinition<E extends BaseEntity> extends TypeDefiniti
|
||||||
|
|
||||||
public static final String NAME = "EntityTypeDefinition"; //EntityTypeDefinition.class.getSimpleName();
|
public static final String NAME = "EntityTypeDefinition"; //EntityTypeDefinition.class.getSimpleName();
|
||||||
|
|
||||||
|
/* TypeDefinition is just a Java useful class. The type is not created in the IS. Hence the fields must be redefined */
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@ISProperty(name = TypeDefinition.NAME_PROPERTY, readonly = true, mandatory = true, nullable = false)
|
||||||
|
public String getName();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@ISProperty(name = TypeDefinition.DESCRIPTION_PROPERTY, readonly = false, mandatory = true, nullable = false)
|
||||||
|
public String getDescription();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@ISProperty(name = TypeDefinition.ABSTRACT_PROPERTY, readonly = true, mandatory = true, nullable = false)
|
||||||
|
public boolean isAbstract();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@ISProperty(name = TypeDefinition.TYPE_SUPERCLASSES_PROPERTY, readonly = true, mandatory = true, nullable = false)
|
||||||
|
public Set<String> getSuperClasses();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@ISProperty(name = TypeDefinition.PROPERTIES_PROPERTY, readonly = false, mandatory = true, nullable = false)
|
||||||
|
public Set<PropertyDefinition> getProperties();
|
||||||
|
|
||||||
|
/* TypeDefinition is just a Java useful class. The type is not created in the IS. Hence the fields must be redefined */
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package org.gcube.informationsystem.types.reference.properties;
|
package org.gcube.informationsystem.types.reference.properties;
|
||||||
|
|
||||||
import org.gcube.informationsystem.base.reference.properties.BaseProperty;
|
import org.gcube.informationsystem.base.reference.properties.BaseProperty;
|
||||||
|
import org.gcube.informationsystem.types.annotations.ISProperty;
|
||||||
import org.gcube.informationsystem.types.impl.properties.PropertyDefinitionImpl;
|
import org.gcube.informationsystem.types.impl.properties.PropertyDefinitionImpl;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
@ -16,29 +17,49 @@ public interface PropertyDefinition extends BaseProperty {
|
||||||
|
|
||||||
public static final String NAME = "PropertyDefinition"; // PropertyDefinition.class.getSimpleName();
|
public static final String NAME = "PropertyDefinition"; // PropertyDefinition.class.getSimpleName();
|
||||||
|
|
||||||
|
public static final String NAME_PROPERTY = "name";
|
||||||
|
public static final String DESCRIPTION_PROPERTY = "description";
|
||||||
|
public static final String MANDATORY_PROPERTY = "mandatory";
|
||||||
|
public static final String READ_ONLY_PROPERTY = "readonly";
|
||||||
|
public static final String NOT_NULL_PROPERTY = "notnull";
|
||||||
|
public static final String MAX_PROPERTY = "max";
|
||||||
|
public static final String MIN_PROPERTY = "min";
|
||||||
|
public static final String REGEX_PROPERTY = "regexp";
|
||||||
|
public static final String LINKED_TYPE_PROPERTY = "linkedType";
|
||||||
|
public static final String LINKED_CLASS_PROPERTY = "linkedClass";
|
||||||
|
public static final String TYPE_PROPERTY = "type";
|
||||||
|
|
||||||
|
@ISProperty(name = NAME_PROPERTY, readonly = true, mandatory = true, nullable = false)
|
||||||
|
|
||||||
public String getName();
|
public String getName();
|
||||||
|
|
||||||
|
@ISProperty(name = DESCRIPTION_PROPERTY, readonly = false, mandatory = true, nullable = false)
|
||||||
public String getDescription();
|
public String getDescription();
|
||||||
|
|
||||||
|
@ISProperty(name = MANDATORY_PROPERTY, readonly = false, mandatory = true, nullable = false)
|
||||||
public boolean isMandatory();
|
public boolean isMandatory();
|
||||||
|
|
||||||
|
@ISProperty(name = READ_ONLY_PROPERTY, readonly = false, mandatory = true, nullable = false)
|
||||||
public boolean isReadonly();
|
public boolean isReadonly();
|
||||||
|
|
||||||
|
@ISProperty(name = NOT_NULL_PROPERTY, readonly = false, mandatory = true, nullable = false)
|
||||||
public boolean isNotnull();
|
public boolean isNotnull();
|
||||||
|
|
||||||
|
@ISProperty(name = MAX_PROPERTY, readonly = false, mandatory = true, nullable = false)
|
||||||
public Integer getMax();
|
public Integer getMax();
|
||||||
|
|
||||||
|
@ISProperty(name = MIN_PROPERTY, readonly = false, mandatory = true, nullable = false)
|
||||||
public Integer getMin();
|
public Integer getMin();
|
||||||
|
|
||||||
|
@ISProperty(name = REGEX_PROPERTY, readonly = false, mandatory = true, nullable = false)
|
||||||
public String getRegexp();
|
public String getRegexp();
|
||||||
|
|
||||||
|
@ISProperty(name = LINKED_TYPE_PROPERTY, readonly = false, mandatory = true, nullable = false)
|
||||||
public Integer getLinkedType();
|
public Integer getLinkedType();
|
||||||
|
|
||||||
|
@ISProperty(name = LINKED_CLASS_PROPERTY, readonly = false, mandatory = true, nullable = false)
|
||||||
public String getLinkedClass();
|
public String getLinkedClass();
|
||||||
|
|
||||||
|
@ISProperty(name = TYPE_PROPERTY, readonly = false, mandatory = true, nullable = false)
|
||||||
public Integer getType();
|
public Integer getType();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
package org.gcube.informationsystem.types.reference.properties;
|
package org.gcube.informationsystem.types.reference.properties;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.gcube.informationsystem.base.reference.properties.BaseProperty;
|
import org.gcube.informationsystem.base.reference.properties.BaseProperty;
|
||||||
|
import org.gcube.informationsystem.types.annotations.ISProperty;
|
||||||
import org.gcube.informationsystem.types.impl.properties.PropertyTypeDefinitionImpl;
|
import org.gcube.informationsystem.types.impl.properties.PropertyTypeDefinitionImpl;
|
||||||
import org.gcube.informationsystem.types.reference.TypeDefinition;
|
import org.gcube.informationsystem.types.reference.TypeDefinition;
|
||||||
|
|
||||||
|
@ -13,4 +16,28 @@ public interface PropertyTypeDefinition<P extends BaseProperty> extends TypeDefi
|
||||||
|
|
||||||
public static final String NAME = "PropertyTypeDefinition"; // PropertyTypeDefinition.class.getSimpleName();
|
public static final String NAME = "PropertyTypeDefinition"; // PropertyTypeDefinition.class.getSimpleName();
|
||||||
|
|
||||||
|
/* TypeDefinition is just a Java useful class. The type is not created in the IS. Hence the fields must be redefined */
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@ISProperty(name = TypeDefinition.NAME_PROPERTY, readonly = true, mandatory = true, nullable = false)
|
||||||
|
public String getName();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@ISProperty(name = TypeDefinition.DESCRIPTION_PROPERTY, readonly = false, mandatory = true, nullable = false)
|
||||||
|
public String getDescription();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@ISProperty(name = TypeDefinition.ABSTRACT_PROPERTY, readonly = true, mandatory = true, nullable = false)
|
||||||
|
public boolean isAbstract();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@ISProperty(name = TypeDefinition.TYPE_SUPERCLASSES_PROPERTY, readonly = true, mandatory = true, nullable = false)
|
||||||
|
public Set<String> getSuperClasses();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@ISProperty(name = TypeDefinition.PROPERTIES_PROPERTY, readonly = false, mandatory = true, nullable = false)
|
||||||
|
public Set<PropertyDefinition> getProperties();
|
||||||
|
|
||||||
|
/* TypeDefinition is just a Java useful class. The type is not created in the IS. Hence the fields must be redefined */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,14 @@
|
||||||
package org.gcube.informationsystem.types.reference.relations;
|
package org.gcube.informationsystem.types.reference.relations;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.gcube.informationsystem.base.reference.entities.BaseEntity;
|
import org.gcube.informationsystem.base.reference.entities.BaseEntity;
|
||||||
import org.gcube.informationsystem.base.reference.relations.BaseRelation;
|
import org.gcube.informationsystem.base.reference.relations.BaseRelation;
|
||||||
|
import org.gcube.informationsystem.types.annotations.ISProperty;
|
||||||
import org.gcube.informationsystem.types.impl.relations.RelationTypeDefinitionImpl;
|
import org.gcube.informationsystem.types.impl.relations.RelationTypeDefinitionImpl;
|
||||||
import org.gcube.informationsystem.types.reference.TypeDefinition;
|
import org.gcube.informationsystem.types.reference.TypeDefinition;
|
||||||
import org.gcube.informationsystem.types.reference.entities.EntityTypeDefinition;
|
import org.gcube.informationsystem.types.reference.entities.EntityTypeDefinition;
|
||||||
|
import org.gcube.informationsystem.types.reference.properties.PropertyDefinition;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||||
|
@ -16,6 +20,30 @@ public interface RelationTypeDefinition<Out extends BaseEntity, In extends BaseE
|
||||||
|
|
||||||
public static final String NAME = "RelationTypeDefinition"; // PropertyTypeDefiniton.class.getSimpleName();
|
public static final String NAME = "RelationTypeDefinition"; // PropertyTypeDefiniton.class.getSimpleName();
|
||||||
|
|
||||||
|
/* TypeDefinition is just a Java useful class. The type is not created in the IS. Hence the fields must be redefined */
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@ISProperty(name = TypeDefinition.NAME_PROPERTY, readonly = true, mandatory = true, nullable = false)
|
||||||
|
public String getName();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@ISProperty(name = TypeDefinition.DESCRIPTION_PROPERTY, readonly = false, mandatory = true, nullable = false)
|
||||||
|
public String getDescription();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@ISProperty(name = TypeDefinition.ABSTRACT_PROPERTY, readonly = true, mandatory = true, nullable = false)
|
||||||
|
public boolean isAbstract();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@ISProperty(name = TypeDefinition.TYPE_SUPERCLASSES_PROPERTY, readonly = true, mandatory = true, nullable = false)
|
||||||
|
public Set<String> getSuperClasses();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@ISProperty(name = TypeDefinition.PROPERTIES_PROPERTY, readonly = false, mandatory = true, nullable = false)
|
||||||
|
public Set<PropertyDefinition> getProperties();
|
||||||
|
|
||||||
|
/* TypeDefinition is just a Java useful class. The type is not created in the IS. Hence the fields must be redefined */
|
||||||
|
|
||||||
public String getSourceType();
|
public String getSourceType();
|
||||||
|
|
||||||
public String getTargetType();
|
public String getTargetType();
|
||||||
|
|
|
@ -11,6 +11,7 @@ import java.util.ServiceLoader;
|
||||||
|
|
||||||
import org.gcube.informationsystem.base.reference.AccessType;
|
import org.gcube.informationsystem.base.reference.AccessType;
|
||||||
import org.gcube.informationsystem.base.reference.ISManageable;
|
import org.gcube.informationsystem.base.reference.ISManageable;
|
||||||
|
import org.gcube.informationsystem.types.reference.TypeDefinition;
|
||||||
import org.gcube.informationsystem.utils.discovery.ISMDiscovery;
|
import org.gcube.informationsystem.utils.discovery.ISMDiscovery;
|
||||||
import org.gcube.informationsystem.utils.discovery.RegistrationProvider;
|
import org.gcube.informationsystem.utils.discovery.RegistrationProvider;
|
||||||
import org.gcube.informationsystem.utils.discovery.SchemaAction;
|
import org.gcube.informationsystem.utils.discovery.SchemaAction;
|
||||||
|
@ -44,36 +45,31 @@ public abstract class ISMapper {
|
||||||
}
|
}
|
||||||
|
|
||||||
static {
|
static {
|
||||||
|
|
||||||
mapper = new ObjectMapper();
|
mapper = new ObjectMapper();
|
||||||
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
||||||
|
|
||||||
|
List<Package> packages = new ArrayList<Package>();
|
||||||
|
|
||||||
|
@SuppressWarnings("rawtypes")
|
||||||
|
Class<TypeDefinition> tdClz = TypeDefinition.class;
|
||||||
|
ISMapper.registerSubtypes(tdClz);
|
||||||
|
packages.add(tdClz.getPackage());
|
||||||
|
|
||||||
AccessType[] accessTypes = AccessType.values();
|
AccessType[] accessTypes = AccessType.values();
|
||||||
for(AccessType accessType : accessTypes) {
|
for(AccessType accessType : accessTypes) {
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
Class clz = accessType.getTypeClass();
|
Class clz = accessType.getTypeClass();
|
||||||
Class<?> dummyClz = accessType.getDummyImplementationClass();
|
Class<ISManageable> dummyClz = accessType.getDummyImplementationClass();
|
||||||
if(dummyClz != null) {
|
if(dummyClz != null) {
|
||||||
SimpleModule isModule = new SimpleModule(accessType.getName());
|
SimpleModule isModule = new SimpleModule(accessType.getName());
|
||||||
isModule.addDeserializer(clz, new ERDeserializer<>(clz, mapper));
|
isModule.addDeserializer(clz, new ERDeserializer<>(clz, mapper));
|
||||||
mapper.registerModule(isModule);
|
mapper.registerModule(isModule);
|
||||||
mapper.registerSubtypes(dummyClz);
|
ISMapper.registerSubtypes(dummyClz);
|
||||||
}
|
}
|
||||||
|
packages.add(clz.getPackage());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
registerPackages(packages);
|
||||||
SchemaAction schemaAction = new ObjectMappingERAction(mapper);
|
|
||||||
try {
|
|
||||||
List<Package> packages = new ArrayList<Package>();
|
|
||||||
for(AccessType accessType : accessTypes) {
|
|
||||||
Class<ISManageable> clz = accessType.getTypeClass();
|
|
||||||
packages.add(clz.getPackage());
|
|
||||||
}
|
|
||||||
ISMDiscovery.manageISM(schemaAction, packages.toArray(new Package[]{}));
|
|
||||||
|
|
||||||
} catch(Exception e) {
|
|
||||||
logger.error("Error registering types", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
ServiceLoader<? extends RegistrationProvider> regsitrationProviders = ServiceLoader.load(RegistrationProvider.class);
|
ServiceLoader<? extends RegistrationProvider> regsitrationProviders = ServiceLoader.load(RegistrationProvider.class);
|
||||||
for (RegistrationProvider registrationProvider : regsitrationProviders) {
|
for (RegistrationProvider registrationProvider : regsitrationProviders) {
|
||||||
|
@ -83,7 +79,7 @@ public abstract class ISMapper {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void registerPackages(List<Package> packages) {
|
public static void registerPackages(List<Package> packages) {
|
||||||
SchemaAction schemaAction = new ObjectMappingERAction(mapper);
|
SchemaAction schemaAction = new ISMappingAction();
|
||||||
try {
|
try {
|
||||||
ISMDiscovery.manageISM(schemaAction, packages);
|
ISMDiscovery.manageISM(schemaAction, packages);
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
|
@ -93,7 +89,7 @@ public abstract class ISMapper {
|
||||||
|
|
||||||
|
|
||||||
public static void registerPackages(Package... packages) {
|
public static void registerPackages(Package... packages) {
|
||||||
SchemaAction schemaAction = new ObjectMappingERAction(mapper);
|
SchemaAction schemaAction = new ISMappingAction();
|
||||||
try {
|
try {
|
||||||
ISMDiscovery.manageISM(schemaAction, packages);
|
ISMDiscovery.manageISM(schemaAction, packages);
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
|
|
|
@ -8,35 +8,34 @@ import org.gcube.informationsystem.base.reference.properties.BaseProperty;
|
||||||
import org.gcube.informationsystem.base.reference.relations.BaseRelation;
|
import org.gcube.informationsystem.base.reference.relations.BaseRelation;
|
||||||
import org.gcube.informationsystem.utils.discovery.SchemaAction;
|
import org.gcube.informationsystem.utils.discovery.SchemaAction;
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Luca Frosini (ISTI - CNR)
|
* @author Luca Frosini (ISTI - CNR)
|
||||||
*/
|
*/
|
||||||
class ObjectMappingERAction implements SchemaAction {
|
class ISMappingAction implements SchemaAction {
|
||||||
|
|
||||||
protected ObjectMapper objectMapper;
|
public ISMappingAction(){
|
||||||
|
|
||||||
public ObjectMappingERAction(ObjectMapper objectMapper){
|
|
||||||
this.objectMapper = objectMapper;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
@Override
|
@Override
|
||||||
public <P extends BaseProperty> void managePropertyClass(Class<P> e)
|
public <P extends BaseProperty> void managePropertyClass(Class<P> e)
|
||||||
throws Exception {
|
throws Exception {
|
||||||
objectMapper.registerSubtypes(e);
|
ISMapper.registerSubtypes(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
@Override
|
@Override
|
||||||
public <E extends BaseEntity> void manageEntityClass(Class<E> e)
|
public <E extends BaseEntity> void manageEntityClass(Class<E> e)
|
||||||
throws Exception {
|
throws Exception {
|
||||||
objectMapper.registerSubtypes(e);
|
ISMapper.registerSubtypes(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
@Override
|
@Override
|
||||||
public <R extends BaseRelation<? extends BaseEntity, ? extends BaseEntity>> void manageRelationClass(
|
public <R extends BaseRelation<? extends BaseEntity, ? extends BaseEntity>> void manageRelationClass(
|
||||||
Class<R> r) throws Exception {
|
Class<R> r) throws Exception {
|
||||||
objectMapper.registerSubtypes(r);
|
ISMapper.registerSubtypes(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -4,10 +4,14 @@
|
||||||
package org.gcube.informationsystem.utils.discovery;
|
package org.gcube.informationsystem.utils.discovery;
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
import java.lang.reflect.ParameterizedType;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.gcube.informationsystem.base.reference.ISManageable;
|
import org.gcube.informationsystem.base.reference.ISManageable;
|
||||||
import org.gcube.informationsystem.base.reference.entities.BaseEntity;
|
import org.gcube.informationsystem.base.reference.entities.BaseEntity;
|
||||||
|
@ -26,9 +30,9 @@ public class ISMDiscovery<ISM extends ISManageable> {
|
||||||
|
|
||||||
protected final Class<ISM> root;
|
protected final Class<ISM> root;
|
||||||
protected final List<Package> packages;
|
protected final List<Package> packages;
|
||||||
protected final List<Class<ISM>> discovered;
|
protected final List<Class<? extends ISM>> discovered;
|
||||||
|
|
||||||
public List<Class<ISM>> getDiscovered() {
|
public List<Class<? extends ISM>> getDiscovered() {
|
||||||
return discovered;
|
return discovered;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,12 +48,12 @@ public class ISMDiscovery<ISM extends ISManageable> {
|
||||||
packages.add(p);
|
packages.add(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void add(Class<ISM> clz) {
|
protected void add(Class<? extends ISM> clz) {
|
||||||
discovered.add(clz);
|
discovered.add(clz);
|
||||||
logger.trace("+ Added {}.", clz);
|
logger.trace("+ Added {}.", clz);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void analizeISM(Class<ISM> clz) {
|
protected void analizeISM(Class<? extends ISM> clz) {
|
||||||
logger.trace("Analizyng {}", clz);
|
logger.trace("Analizyng {}", clz);
|
||||||
|
|
||||||
if(!clz.isInterface()) {
|
if(!clz.isInterface()) {
|
||||||
|
@ -80,7 +84,21 @@ public class ISMDiscovery<ISM extends ISManageable> {
|
||||||
for(Method m : clz.getDeclaredMethods()) {
|
for(Method m : clz.getDeclaredMethods()) {
|
||||||
m.setAccessible(true);
|
m.setAccessible(true);
|
||||||
if(m.isAnnotationPresent(ISProperty.class)) {
|
if(m.isAnnotationPresent(ISProperty.class)) {
|
||||||
if(root.isAssignableFrom(m.getReturnType())) {
|
if(Map.class.isAssignableFrom(m.getReturnType()) || Set.class.isAssignableFrom(m.getReturnType())
|
||||||
|
|| List.class.isAssignableFrom(m.getReturnType())) {
|
||||||
|
|
||||||
|
Type[] typeArguments = ((ParameterizedType) m.getGenericReturnType()).getActualTypeArguments();
|
||||||
|
for(Type t : typeArguments) {
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
Class<? extends BaseProperty> tClass = (Class<? extends BaseProperty>) t;
|
||||||
|
if(root.isAssignableFrom(tClass)) {
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
Class<ISM> type = (Class<ISM>) tClass;
|
||||||
|
analizeISM(type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if(root.isAssignableFrom(m.getReturnType())) {
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
Class<ISM> type = (Class<ISM>) m.getReturnType();
|
Class<ISM> type = (Class<ISM>) m.getReturnType();
|
||||||
analizeISM(type);
|
analizeISM(type);
|
||||||
|
@ -119,7 +137,7 @@ public class ISMDiscovery<ISM extends ISManageable> {
|
||||||
Arrays.stream(packages).forEach(p -> propertyDiscovery.addPackage(p));
|
Arrays.stream(packages).forEach(p -> propertyDiscovery.addPackage(p));
|
||||||
}
|
}
|
||||||
propertyDiscovery.discover();
|
propertyDiscovery.discover();
|
||||||
for(Class<BaseProperty> property : propertyDiscovery.getDiscovered()) {
|
for(Class<? extends BaseProperty> property : propertyDiscovery.getDiscovered()) {
|
||||||
logger.trace("Going to manage : {}", property);
|
logger.trace("Going to manage : {}", property);
|
||||||
schemaAction.managePropertyClass(property);
|
schemaAction.managePropertyClass(property);
|
||||||
}
|
}
|
||||||
|
@ -130,7 +148,7 @@ public class ISMDiscovery<ISM extends ISManageable> {
|
||||||
}
|
}
|
||||||
entityDiscovery.discover();
|
entityDiscovery.discover();
|
||||||
|
|
||||||
for(Class<BaseEntity> entity : entityDiscovery.getDiscovered()) {
|
for(Class<? extends BaseEntity> entity : entityDiscovery.getDiscovered()) {
|
||||||
logger.trace("Going to manage : {}", entity);
|
logger.trace("Going to manage : {}", entity);
|
||||||
schemaAction.manageEntityClass(entity);
|
schemaAction.manageEntityClass(entity);
|
||||||
}
|
}
|
||||||
|
@ -142,7 +160,7 @@ public class ISMDiscovery<ISM extends ISManageable> {
|
||||||
relationDiscovery.discover();
|
relationDiscovery.discover();
|
||||||
|
|
||||||
for(@SuppressWarnings("rawtypes")
|
for(@SuppressWarnings("rawtypes")
|
||||||
Class<BaseRelation> relation : relationDiscovery.getDiscovered()) {
|
Class<? extends BaseRelation> relation : relationDiscovery.getDiscovered()) {
|
||||||
logger.trace("Going to manage : {}", relation);
|
logger.trace("Going to manage : {}", relation);
|
||||||
schemaAction.manageRelationClass(relation);
|
schemaAction.manageRelationClass(relation);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
package org.gcube.informationsystem.utils.discovery;
|
||||||
|
|
||||||
|
import org.gcube.informationsystem.base.reference.properties.BaseProperty;
|
||||||
|
import org.gcube.informationsystem.types.reference.properties.PropertyTypeDefinition;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class ISMDiscoveryTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testISMDIscovery() {
|
||||||
|
ISMDiscovery<BaseProperty> propertyDiscovery = new ISMDiscovery<>(BaseProperty.class);
|
||||||
|
propertyDiscovery.analizeISM(PropertyTypeDefinition.class);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue