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;
|
|
|
|
|
2020-07-07 17:04:25 +02:00
|
|
|
import org.gcube.com.fasterxml.jackson.annotation.JsonTypeName;
|
2021-02-11 17:24:22 +01:00
|
|
|
import org.gcube.informationsystem.base.reference.AccessType;
|
2020-01-30 10:26:43 +01:00
|
|
|
import org.gcube.informationsystem.base.reference.entities.EntityElement;
|
2019-10-25 17:46:13 +02:00
|
|
|
import org.gcube.informationsystem.context.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;
|
2020-01-20 10:24:55 +01:00
|
|
|
import org.gcube.informationsystem.model.reference.properties.Header;
|
2020-02-03 10:51:29 +01:00
|
|
|
import org.gcube.informationsystem.types.impl.TypeImpl;
|
2020-01-30 10:26:43 +01:00
|
|
|
import org.gcube.informationsystem.types.reference.entities.EntityType;
|
2020-02-03 10:51:29 +01:00
|
|
|
import org.gcube.informationsystem.utils.ElementMapper;
|
2019-10-24 11:26:49 +02:00
|
|
|
|
2020-01-23 17:14:44 +01:00
|
|
|
/**
|
|
|
|
* @author Luca Frosini (ISTI - CNR)
|
|
|
|
*/
|
2020-01-30 10:26:43 +01:00
|
|
|
@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;
|
|
|
|
|
2019-10-30 09:57:14 +01:00
|
|
|
// private static final String VERTEX_CLASS_NAME = "V";
|
2019-10-24 11:26:49 +02:00
|
|
|
|
2020-01-30 10:26:43 +01:00
|
|
|
public static EntityType getEntityTypeDefinitionInstance(Class<? extends EntityElement> clz) {
|
2020-01-16 16:48:08 +01:00
|
|
|
if(Resource.class.isAssignableFrom(clz)) {
|
|
|
|
@SuppressWarnings("unchecked")
|
|
|
|
Class<? extends Resource> c = (Class<? extends Resource>) clz;
|
2020-01-30 10:26:43 +01:00
|
|
|
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;
|
2020-01-30 10:26:43 +01:00
|
|
|
return new FacetTypeImpl(c);
|
2020-01-23 17:14:44 +01:00
|
|
|
}
|
2020-01-30 10:26:43 +01:00
|
|
|
return new EntityTypeImpl(clz);
|
2020-01-16 16:48:08 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2020-01-30 10:26:43 +01:00
|
|
|
protected EntityTypeImpl() {
|
2019-10-28 17:36:09 +01:00
|
|
|
super();
|
|
|
|
}
|
|
|
|
|
2020-01-30 10:26:43 +01:00
|
|
|
public EntityTypeImpl(Class<? extends EntityElement> clz) {
|
2019-10-24 11:26:49 +02:00
|
|
|
super(clz);
|
|
|
|
|
2020-01-30 10:26:43 +01:00
|
|
|
if(EntityType.class.isAssignableFrom(clz)){
|
2019-11-08 12:29:05 +01:00
|
|
|
@SuppressWarnings("unchecked")
|
2020-01-30 10:26:43 +01:00
|
|
|
Class<? extends EntityType> c = (Class<? extends EntityType>) clz;
|
|
|
|
this.superClasses = retrieveSuperClasses(c, EntityType.class, EntityElement.NAME);
|
2019-10-25 17:46:13 +02:00
|
|
|
} 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;
|
2020-01-30 10:26:43 +01:00
|
|
|
this.superClasses = retrieveSuperClasses(c, Context.class, EntityElement.NAME);
|
|
|
|
} else if(EntityElement.class.isAssignableFrom(clz)){
|
|
|
|
this.superClasses = retrieveSuperClasses(clz, EntityElement.class, null);
|
2019-10-25 17:46:13 +02:00
|
|
|
} 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.
|
|
|
|
*/
|
|
|
|
|
|
|
|
protected Header header;
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Header getHeader() {
|
|
|
|
return header;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void setHeader(Header header){
|
|
|
|
this.header = header;
|
|
|
|
}
|
|
|
|
|
|
|
|
@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 {
|
2020-02-03 10:51:29 +01:00
|
|
|
ElementMapper.marshal(this.header, stringWriter);
|
2019-10-24 19:50:43 +02:00
|
|
|
return stringWriter.toString();
|
|
|
|
} catch(Exception e1){
|
|
|
|
return super.toString();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2021-02-11 17:24:22 +01:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public AccessType getAccessType() {
|
|
|
|
|
|
|
|
if(name.compareTo(Context.NAME)==0) {
|
|
|
|
return AccessType.CONTEXT;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(name.compareTo(EntityType.NAME)==0) {
|
|
|
|
return AccessType.ENTITY_TYPE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(name.compareTo(EntityElement.NAME)==0) {
|
|
|
|
return AccessType.ENTITY_ELEMENT;
|
|
|
|
}
|
|
|
|
|
|
|
|
return AccessType.ENTITY;
|
|
|
|
}
|
2019-10-24 19:50:43 +02:00
|
|
|
|
2019-10-24 11:26:49 +02:00
|
|
|
}
|