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;
|
|
|
|
|
2019-10-23 16:55:48 +02:00
|
|
|
import org.gcube.informationsystem.base.reference.properties.Property;
|
2019-10-23 15:40:52 +02:00
|
|
|
import org.gcube.informationsystem.context.impl.entities.ContextImpl;
|
|
|
|
import org.gcube.informationsystem.context.impl.relations.IsParentOfImpl;
|
|
|
|
import org.gcube.informationsystem.context.reference.entities.Context;
|
|
|
|
import org.gcube.informationsystem.context.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.DummyProperty;
|
|
|
|
import org.gcube.informationsystem.model.impl.properties.PropertyImpl;
|
|
|
|
import org.gcube.informationsystem.model.impl.relations.ConsistsOfImpl;
|
|
|
|
import org.gcube.informationsystem.model.impl.relations.DummyConsistsOf;
|
|
|
|
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;
|
|
|
|
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.slf4j.Logger;
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @author Luca Frosini (ISTI - CNR)
|
|
|
|
*
|
|
|
|
* Enumerates the basic type names.
|
|
|
|
*/
|
|
|
|
public enum AccessType {
|
|
|
|
|
|
|
|
PROPERTY(Property.class, Property.NAME, PropertyImpl.class, DummyProperty.class),
|
|
|
|
|
|
|
|
CONTEXT(Context.class, Context.NAME, ContextImpl.class, null),
|
|
|
|
IS_PARENT_OF(IsParentOf.class, IsParentOf.NAME, IsParentOfImpl.class, null),
|
|
|
|
|
|
|
|
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),
|
|
|
|
|
|
|
|
RELATION(Relation.class, Relation.NAME, RelationImpl.class, null),
|
|
|
|
IS_RELATED_TO(IsRelatedTo.class, IsRelatedTo.NAME, IsRelatedToImpl.class, DummyIsRelatedTo.class),
|
|
|
|
CONSISTS_OF(ConsistsOf.class, ConsistsOf.NAME, ConsistsOfImpl.class, DummyConsistsOf.class);
|
|
|
|
|
|
|
|
private static Logger logger = LoggerFactory.getLogger(AccessType.class);
|
|
|
|
|
|
|
|
private final Class<? extends ISManageable> clz;
|
|
|
|
private final Class<? extends ISManageable> implementationClass;
|
|
|
|
private final Class<? extends ISManageable> dummyImplementationClass;
|
|
|
|
|
|
|
|
private final String name;
|
|
|
|
private final String lowerCaseFirstCharacter;
|
|
|
|
|
|
|
|
<ISM extends ISManageable, ISMC extends ISM, ISMD extends ISMC>
|
|
|
|
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")
|
|
|
|
public <ISM extends ISManageable> Class<ISM> getTypeClass(){
|
|
|
|
return (Class<ISM>) clz;
|
|
|
|
}
|
|
|
|
|
|
|
|
@SuppressWarnings("unchecked")
|
|
|
|
public <ISM extends ISManageable, ISMC extends ISM> Class<ISMC> getImplementationClass() {
|
|
|
|
return (Class<ISMC>) implementationClass;
|
|
|
|
}
|
|
|
|
|
|
|
|
@SuppressWarnings("unchecked")
|
|
|
|
public <ISM extends ISManageable, ISMC extends ISM, ISMD extends ISMC> Class<ISMD> getDummyImplementationClass() {
|
|
|
|
return (Class<ISMD>) dummyImplementationClass;
|
|
|
|
}
|
|
|
|
|
|
|
|
public String getName(){
|
|
|
|
return name;
|
|
|
|
}
|
|
|
|
|
|
|
|
public String lowerCaseFirstCharacter() {
|
|
|
|
return lowerCaseFirstCharacter;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public String toString(){
|
|
|
|
return name;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static AccessType getAccessType(Class<?> clz) {
|
|
|
|
AccessType ret =null;
|
|
|
|
|
|
|
|
AccessType[] accessTypes = AccessType.values();
|
|
|
|
for (AccessType accessType : accessTypes) {
|
|
|
|
Class<? extends ISManageable> typeClass = accessType.getTypeClass();
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|