/** * */ package org.gcube.informationsystem.base.reference; import java.util.Arrays; import org.gcube.informationsystem.base.reference.properties.Property; 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; 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 clz; private final Class implementationClass; private final Class dummyImplementationClass; private final String name; private final String lowerCaseFirstCharacter; AccessType(Class clz, String name, Class implementationClass, Class 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 Class getTypeClass(){ return (Class) clz; } @SuppressWarnings("unchecked") public Class getImplementationClass() { return (Class) implementationClass; } @SuppressWarnings("unchecked") public Class getDummyImplementationClass() { return (Class) 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 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); } } }