2019-03-22 15:18:23 +01:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
*/
|
2019-10-23 16:55:48 +02:00
|
|
|
package org.gcube.informationsystem.base.reference;
|
2019-03-22 15:18:23 +01:00
|
|
|
|
|
|
|
import java.util.Arrays;
|
2021-02-18 18:22:11 +01:00
|
|
|
import java.util.HashSet;
|
|
|
|
import java.util.Set;
|
2019-03-22 15:18:23 +01:00
|
|
|
|
2020-01-30 10:26:43 +01:00
|
|
|
import org.gcube.informationsystem.base.impl.entities.EntityElementImpl;
|
|
|
|
import org.gcube.informationsystem.base.impl.properties.PropertyElementImpl;
|
|
|
|
import org.gcube.informationsystem.base.impl.relations.RelationElementImpl;
|
|
|
|
import org.gcube.informationsystem.base.reference.entities.EntityElement;
|
|
|
|
import org.gcube.informationsystem.base.reference.properties.PropertyElement;
|
|
|
|
import org.gcube.informationsystem.base.reference.relations.RelationElement;
|
2021-10-25 11:38:06 +02:00
|
|
|
import org.gcube.informationsystem.contexts.impl.entities.ContextImpl;
|
|
|
|
import org.gcube.informationsystem.contexts.impl.relations.IsParentOfImpl;
|
|
|
|
import org.gcube.informationsystem.contexts.reference.entities.Context;
|
|
|
|
import org.gcube.informationsystem.contexts.reference.relations.IsParentOf;
|
2019-03-22 15:18:23 +01:00
|
|
|
import org.gcube.informationsystem.model.impl.entities.DummyFacet;
|
|
|
|
import org.gcube.informationsystem.model.impl.entities.DummyResource;
|
|
|
|
import org.gcube.informationsystem.model.impl.entities.EntityImpl;
|
|
|
|
import org.gcube.informationsystem.model.impl.entities.FacetImpl;
|
|
|
|
import org.gcube.informationsystem.model.impl.entities.ResourceImpl;
|
|
|
|
import org.gcube.informationsystem.model.impl.properties.PropertyImpl;
|
|
|
|
import org.gcube.informationsystem.model.impl.relations.ConsistsOfImpl;
|
|
|
|
import org.gcube.informationsystem.model.impl.relations.DummyIsRelatedTo;
|
|
|
|
import org.gcube.informationsystem.model.impl.relations.IsRelatedToImpl;
|
|
|
|
import org.gcube.informationsystem.model.impl.relations.RelationImpl;
|
|
|
|
import org.gcube.informationsystem.model.reference.entities.Entity;
|
|
|
|
import org.gcube.informationsystem.model.reference.entities.Facet;
|
|
|
|
import org.gcube.informationsystem.model.reference.entities.Resource;
|
2019-10-24 11:26:49 +02:00
|
|
|
import org.gcube.informationsystem.model.reference.properties.Property;
|
2019-03-22 15:18:23 +01:00
|
|
|
import org.gcube.informationsystem.model.reference.relations.ConsistsOf;
|
|
|
|
import org.gcube.informationsystem.model.reference.relations.IsRelatedTo;
|
|
|
|
import org.gcube.informationsystem.model.reference.relations.Relation;
|
2021-10-25 10:58:30 +02:00
|
|
|
import org.gcube.informationsystem.queries.templates.impl.entities.QueryTemplateImpl;
|
|
|
|
import org.gcube.informationsystem.queries.templates.impl.properties.TemplateVariableImpl;
|
|
|
|
import org.gcube.informationsystem.queries.templates.reference.entities.QueryTemplate;
|
|
|
|
import org.gcube.informationsystem.queries.templates.reference.properties.TemplateVariable;
|
2020-01-30 10:26:43 +01:00
|
|
|
import org.gcube.informationsystem.types.impl.entities.EntityTypeImpl;
|
2019-10-24 19:50:43 +02:00
|
|
|
import org.gcube.informationsystem.types.impl.properties.PropertyDefinitionImpl;
|
2020-01-30 10:26:43 +01:00
|
|
|
import org.gcube.informationsystem.types.impl.properties.PropertyTypeImpl;
|
|
|
|
import org.gcube.informationsystem.types.impl.relations.RelationTypeImpl;
|
|
|
|
import org.gcube.informationsystem.types.reference.entities.EntityType;
|
2019-10-24 19:50:43 +02:00
|
|
|
import org.gcube.informationsystem.types.reference.properties.PropertyDefinition;
|
2020-01-30 10:26:43 +01:00
|
|
|
import org.gcube.informationsystem.types.reference.properties.PropertyType;
|
|
|
|
import org.gcube.informationsystem.types.reference.relations.RelationType;
|
2019-03-22 15:18:23 +01:00
|
|
|
import org.slf4j.Logger;
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Enumerates the basic type names.
|
2021-01-20 17:26:13 +01:00
|
|
|
*
|
|
|
|
* @author Luca Frosini (ISTI - CNR)
|
2019-03-22 15:18:23 +01:00
|
|
|
*/
|
|
|
|
public enum AccessType {
|
2019-10-28 17:36:09 +01:00
|
|
|
|
2020-01-30 10:26:43 +01:00
|
|
|
PROPERTY_ELEMENT(PropertyElement.class, PropertyElement.NAME, PropertyElementImpl.class, null),
|
2019-10-28 17:36:09 +01:00
|
|
|
PROPERTY_DEFINITION(PropertyDefinition.class, PropertyDefinition.NAME, PropertyDefinitionImpl.class, null),
|
2020-01-30 10:26:43 +01:00
|
|
|
PROPERTY_TYPE(PropertyType.class, PropertyType.NAME, PropertyTypeImpl.class, null),
|
2021-10-21 11:56:01 +02:00
|
|
|
TEMPLATE_VARIABLE(TemplateVariable.class, TemplateVariable.NAME, TemplateVariableImpl.class, null),
|
2021-02-12 11:46:45 +01:00
|
|
|
PROPERTY(Property.class, Property.NAME, PropertyImpl.class, null),
|
2019-10-28 17:36:09 +01:00
|
|
|
|
2020-01-30 10:26:43 +01:00
|
|
|
ENTITY_ELEMENT(EntityElement.class, EntityElement.NAME, EntityElementImpl.class, null),
|
2021-02-12 11:46:45 +01:00
|
|
|
ENTITY_TYPE(EntityType.class, EntityType.NAME, EntityTypeImpl.class, null),
|
2021-10-21 11:56:01 +02:00
|
|
|
QUERY_TEMPLATE(QueryTemplate.class, QueryTemplate.NAME, QueryTemplateImpl.class, null),
|
2023-02-06 16:35:30 +01:00
|
|
|
CONTEXT(Context.class, Context.NAME, ContextImpl.class, null),
|
2019-03-22 15:18:23 +01:00
|
|
|
ENTITY(Entity.class, Entity.NAME, EntityImpl.class, null),
|
|
|
|
RESOURCE(Resource.class, Resource.NAME, ResourceImpl.class, DummyResource.class),
|
|
|
|
FACET(Facet.class, Facet.NAME, FacetImpl.class, DummyFacet.class),
|
|
|
|
|
2020-01-30 10:26:43 +01:00
|
|
|
RELATION_ELEMENT(RelationElement.class, RelationElement.NAME, RelationElementImpl.class, null),
|
2021-02-12 11:46:45 +01:00
|
|
|
RELATION_TYPE(RelationType.class, RelationType.NAME, RelationTypeImpl.class, null),
|
|
|
|
IS_PARENT_OF(IsParentOf.class, IsParentOf.NAME, IsParentOfImpl.class, null),
|
2023-02-06 16:35:30 +01:00
|
|
|
RELATION(Relation.class, Relation.NAME, RelationImpl.class, null),
|
2019-03-22 15:18:23 +01:00
|
|
|
IS_RELATED_TO(IsRelatedTo.class, IsRelatedTo.NAME, IsRelatedToImpl.class, DummyIsRelatedTo.class),
|
2020-07-02 18:05:15 +02:00
|
|
|
CONSISTS_OF(ConsistsOf.class, ConsistsOf.NAME, ConsistsOfImpl.class, null);
|
2019-03-22 15:18:23 +01:00
|
|
|
|
2021-02-12 11:46:45 +01:00
|
|
|
|
2019-03-22 15:18:23 +01:00
|
|
|
private static Logger logger = LoggerFactory.getLogger(AccessType.class);
|
|
|
|
|
2023-02-03 19:13:04 +01:00
|
|
|
private static AccessType[] modelTypes;
|
2021-02-18 18:22:11 +01:00
|
|
|
private static Set<String> names;
|
|
|
|
|
|
|
|
static {
|
|
|
|
names = new HashSet<>();
|
|
|
|
AccessType[] accessTypes = AccessType.values();
|
|
|
|
for (AccessType accessType : accessTypes) {
|
|
|
|
String name = accessType.getName();
|
|
|
|
names.add(name);
|
|
|
|
}
|
2023-02-03 19:13:04 +01:00
|
|
|
|
|
|
|
modelTypes = new AccessType[] {
|
|
|
|
AccessType.PROPERTY,
|
|
|
|
AccessType.RESOURCE, AccessType.FACET,
|
|
|
|
AccessType.IS_RELATED_TO, AccessType.CONSISTS_OF
|
|
|
|
};
|
2021-02-18 18:22:11 +01:00
|
|
|
}
|
|
|
|
|
2020-01-30 10:26:43 +01:00
|
|
|
private final Class<? extends Element> clz;
|
|
|
|
private final Class<? extends Element> implementationClass;
|
|
|
|
private final Class<? extends Element> dummyImplementationClass;
|
2019-03-22 15:18:23 +01:00
|
|
|
|
|
|
|
private final String name;
|
|
|
|
private final String lowerCaseFirstCharacter;
|
|
|
|
|
2020-01-30 10:26:43 +01:00
|
|
|
<ISM extends Element, ISMC extends ISM, ISMD extends ISMC>
|
2019-03-22 15:18:23 +01:00
|
|
|
AccessType(Class<ISM> clz, String name, Class<ISMC> implementationClass, Class<ISMD> dummyImplementationClass){
|
|
|
|
this.clz = clz;
|
|
|
|
this.implementationClass = implementationClass;
|
|
|
|
this.dummyImplementationClass = dummyImplementationClass;
|
|
|
|
this.name = name;
|
|
|
|
this.lowerCaseFirstCharacter = name.substring(0, 1).toLowerCase() + name.substring(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
@SuppressWarnings("unchecked")
|
2020-01-30 10:26:43 +01:00
|
|
|
public <ISM extends Element> Class<ISM> getTypeClass(){
|
2019-03-22 15:18:23 +01:00
|
|
|
return (Class<ISM>) clz;
|
|
|
|
}
|
|
|
|
|
|
|
|
@SuppressWarnings("unchecked")
|
2020-01-30 10:26:43 +01:00
|
|
|
public <ISM extends Element, ISMC extends ISM> Class<ISMC> getImplementationClass() {
|
2019-03-22 15:18:23 +01:00
|
|
|
return (Class<ISMC>) implementationClass;
|
|
|
|
}
|
|
|
|
|
|
|
|
@SuppressWarnings("unchecked")
|
2020-01-30 10:26:43 +01:00
|
|
|
public <ISM extends Element, ISMC extends ISM, ISMD extends ISMC> Class<ISMD> getDummyImplementationClass() {
|
2019-03-22 15:18:23 +01:00
|
|
|
return (Class<ISMD>) dummyImplementationClass;
|
|
|
|
}
|
|
|
|
|
|
|
|
public String getName(){
|
|
|
|
return name;
|
|
|
|
}
|
|
|
|
|
|
|
|
public String lowerCaseFirstCharacter() {
|
|
|
|
return lowerCaseFirstCharacter;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public String toString(){
|
|
|
|
return name;
|
|
|
|
}
|
|
|
|
|
2021-02-18 18:22:11 +01:00
|
|
|
public static Set<String> names(){
|
|
|
|
return names;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Provide the access type from the name provided type name as argument
|
2021-02-28 21:13:36 +01:00
|
|
|
* @param typeName type name
|
2021-02-18 18:22:11 +01:00
|
|
|
* @return the AccessType from the name provided type name as argument, null otherwise
|
|
|
|
*/
|
|
|
|
public static AccessType getAccessType(String typeName) {
|
|
|
|
AccessType[] accessTypes = AccessType.values();
|
|
|
|
for (AccessType accessType : accessTypes) {
|
|
|
|
String name = accessType.getName();
|
|
|
|
if(name.compareTo(typeName)==0) {
|
|
|
|
return accessType;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2019-03-22 15:18:23 +01:00
|
|
|
public static AccessType getAccessType(Class<?> clz) {
|
|
|
|
AccessType ret =null;
|
|
|
|
|
|
|
|
AccessType[] accessTypes = AccessType.values();
|
|
|
|
for (AccessType accessType : accessTypes) {
|
2020-01-30 10:26:43 +01:00
|
|
|
Class<? extends Element> typeClass = accessType.getTypeClass();
|
2019-03-22 15:18:23 +01:00
|
|
|
if (typeClass.isAssignableFrom(clz)) {
|
|
|
|
if(ret==null || ret.getTypeClass().isAssignableFrom(typeClass)){
|
|
|
|
ret = accessType;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if(ret !=null){
|
|
|
|
return ret;
|
|
|
|
}else{
|
|
|
|
String error = String
|
|
|
|
.format("The provided class %s does not belong to any of defined AccessTypes %s",
|
|
|
|
clz.getSimpleName(), Arrays.toString(accessTypes));
|
|
|
|
logger.trace(error);
|
|
|
|
throw new RuntimeException(error);
|
|
|
|
}
|
|
|
|
}
|
2023-02-03 19:13:04 +01:00
|
|
|
|
|
|
|
public static AccessType[] getModelTypes() {
|
|
|
|
return modelTypes;
|
|
|
|
}
|
|
|
|
|
2019-03-22 15:18:23 +01:00
|
|
|
}
|