information-system-model/src/main/java/org/gcube/informationsystem/types/impl/entities/EntityTypeImpl.java

146 lines
4.4 KiB
Java
Raw Normal View History

2019-10-24 11:26:49 +02:00
package org.gcube.informationsystem.types.impl.entities;
2019-10-24 19:50:43 +02:00
import java.io.StringWriter;
2021-10-21 12:47:50 +02:00
import java.util.HashSet;
import java.util.Set;
2019-10-24 19:50:43 +02:00
import org.gcube.com.fasterxml.jackson.annotation.JsonIgnore;
2020-07-07 17:04:25 +02:00
import org.gcube.com.fasterxml.jackson.annotation.JsonTypeName;
import org.gcube.informationsystem.base.reference.AccessType;
import org.gcube.informationsystem.base.reference.entities.EntityElement;
import org.gcube.informationsystem.contexts.reference.entities.Context;
2019-10-24 11:26:49 +02:00
import org.gcube.informationsystem.model.reference.entities.Facet;
import org.gcube.informationsystem.model.reference.entities.Resource;
2023-04-18 17:51:23 +02:00
import org.gcube.informationsystem.model.reference.properties.Metadata;
2021-10-25 10:58:30 +02:00
import org.gcube.informationsystem.queries.templates.reference.entities.QueryTemplate;
2023-02-03 14:39:25 +01:00
import org.gcube.informationsystem.serialization.ElementMapper;
2020-02-03 10:51:29 +01:00
import org.gcube.informationsystem.types.impl.TypeImpl;
import org.gcube.informationsystem.types.reference.entities.EntityType;
import org.gcube.informationsystem.types.reference.entities.FacetType;
import org.gcube.informationsystem.types.reference.entities.ResourceType;
2019-10-24 11:26:49 +02:00
2020-01-23 17:14:44 +01:00
/**
* @author Luca Frosini (ISTI - CNR)
*/
@JsonTypeName(value=EntityType.NAME)
2020-02-03 10:51:29 +01:00
public class EntityTypeImpl extends TypeImpl implements EntityType {
2019-10-24 11:26:49 +02:00
/**
2019-10-24 15:03:14 +02:00
* Generated Serial Version UID
2019-10-24 11:26:49 +02:00
*/
private static final long serialVersionUID = 2614315845213942880L;
2021-10-21 12:47:50 +02:00
private static Set<String> entityTypeAccesTypes;
static {
entityTypeAccesTypes = new HashSet<>();
entityTypeAccesTypes.add(EntityType.NAME);
entityTypeAccesTypes.add(ResourceType.NAME);
entityTypeAccesTypes.add(FacetType.NAME);
}
2019-10-30 09:57:14 +01:00
// private static final String VERTEX_CLASS_NAME = "V";
2019-10-24 11:26:49 +02:00
public static EntityType getEntityTypeDefinitionInstance(Class<? extends EntityElement> clz) {
if(Resource.class.isAssignableFrom(clz)) {
@SuppressWarnings("unchecked")
Class<? extends Resource> c = (Class<? extends Resource>) clz;
return new ResourceTypeImpl((Class<? extends Resource>) c);
2020-01-20 10:24:55 +01:00
} else if(Facet.class.isAssignableFrom(clz)){
@SuppressWarnings("unchecked")
Class<? extends Facet> c = (Class<? extends Facet>) clz;
return new FacetTypeImpl(c);
2020-01-23 17:14:44 +01:00
}
return new EntityTypeImpl(clz);
}
protected EntityTypeImpl() {
super();
}
public EntityTypeImpl(Class<? extends EntityElement> clz) {
2019-10-24 11:26:49 +02:00
super(clz);
if(EntityType.class.isAssignableFrom(clz)){
2019-11-08 12:29:05 +01:00
@SuppressWarnings("unchecked")
Class<? extends EntityType> c = (Class<? extends EntityType>) clz;
this.superClasses = retrieveSuperClasses(c, EntityType.class, EntityElement.NAME);
} else if(Context.class.isAssignableFrom(clz)){
2019-11-08 12:29:05 +01:00
@SuppressWarnings("unchecked")
2019-10-30 09:57:14 +01:00
Class<? extends Context> c = (Class<? extends Context>) clz;
this.superClasses = retrieveSuperClasses(c, Context.class, EntityElement.NAME);
2021-10-21 12:47:50 +02:00
} else if(QueryTemplate.class.isAssignableFrom(clz)){
@SuppressWarnings("unchecked")
Class<? extends QueryTemplate> c = (Class<? extends QueryTemplate>) clz;
this.superClasses = retrieveSuperClasses(c, QueryTemplate.class, EntityElement.NAME);
} else if(EntityElement.class.isAssignableFrom(clz)){
this.superClasses = retrieveSuperClasses(clz, EntityElement.class, null);
} else {
2019-10-30 09:57:14 +01:00
throw new RuntimeException("Type Hierachy Error for class " + clz.getSimpleName());
2019-10-24 11:26:49 +02:00
}
2020-02-03 10:51:29 +01:00
this.properties = retrieveListOfProperties(clz);
2019-10-24 11:26:49 +02:00
}
2019-10-24 19:50:43 +02:00
/*
* Java does not support multiple inheritance.
* TypeDefinitionImpl is the superclass so that this class does not inherits the methods and field of BaseRelationImpl
* We need to copy them.
*/
2023-04-18 17:51:23 +02:00
protected Metadata metadata;
2019-10-24 19:50:43 +02:00
@Override
2023-04-18 17:51:23 +02:00
public Metadata getMetadata() {
return metadata;
2019-10-24 19:50:43 +02:00
}
@Override
2023-04-18 17:51:23 +02:00
public void setMetadata(Metadata metadata){
this.metadata = metadata;
2019-10-24 19:50:43 +02:00
}
@Override
public String toString(){
StringWriter stringWriter = new StringWriter();
try {
2020-02-03 10:51:29 +01:00
ElementMapper.marshal(this, stringWriter);
2019-10-24 19:50:43 +02:00
return stringWriter.toString();
}catch(Exception e){
try {
2023-04-18 17:51:23 +02:00
ElementMapper.marshal(this.metadata, stringWriter);
2019-10-24 19:50:43 +02:00
return stringWriter.toString();
} catch(Exception e1){
return super.toString();
}
}
}
@Override
@JsonIgnore
public AccessType getAccessType() {
if(name.compareTo(Context.NAME)==0) {
return AccessType.CONTEXT;
}
if(name.compareTo(EntityElement.NAME)==0) {
return AccessType.ENTITY_ELEMENT;
}
2021-10-21 12:47:50 +02:00
if(name.compareTo(QueryTemplate.NAME)==0) {
return AccessType.QUERY_TEMPLATE;
}
if(entityTypeAccesTypes.contains(name)) {
return AccessType.ENTITY_TYPE;
}
return AccessType.ENTITY;
}
2019-10-24 19:50:43 +02:00
2019-10-24 11:26:49 +02:00
}