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

92 lines
3.0 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;
2019-10-24 11:26:49 +02:00
import org.gcube.informationsystem.base.reference.entities.BaseEntity;
2019-10-24 19:50:43 +02:00
import org.gcube.informationsystem.base.reference.properties.Header;
import org.gcube.informationsystem.context.reference.entities.Context;
2019-10-24 11:26:49 +02:00
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:57:21 +02:00
import org.gcube.informationsystem.types.impl.TypeDefinitionImpl;
2019-10-24 15:03:14 +02:00
import org.gcube.informationsystem.types.reference.entities.EntityTypeDefinition;
2019-10-24 19:50:43 +02:00
import org.gcube.informationsystem.utils.ISMapper;
2019-10-24 11:26:49 +02:00
2019-10-24 15:03:14 +02:00
import com.fasterxml.jackson.annotation.JsonTypeName;
@JsonTypeName(value=EntityTypeDefinition.NAME)
2019-11-04 18:06:46 +01:00
public final class EntityTypeDefinitionImpl<E extends BaseEntity> extends TypeDefinitionImpl implements EntityTypeDefinition<E> {
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
protected EntityTypeDefinitionImpl() {
super();
}
2019-10-30 09:57:14 +01:00
@SuppressWarnings({"rawtypes", "unchecked"})
2019-10-24 11:26:49 +02:00
public EntityTypeDefinitionImpl(Class<E> clz) {
super(clz);
if(Resource.class.isAssignableFrom(clz)){
Class<? extends Resource> c = (Class<? extends Resource>) clz;
this.superClasses = retrieveSuperClasses(c, Resource.class, Entity.NAME);
} else if(Facet.class.isAssignableFrom(clz)){
Class<? extends Facet> c = (Class<? extends Facet>) clz;
this.superClasses = retrieveSuperClasses(c, Facet.class, Entity.NAME);
} else if(EntityTypeDefinition.class.isAssignableFrom(clz)){
2019-10-30 09:57:14 +01:00
Class<? extends EntityTypeDefinition> c = (Class<? extends EntityTypeDefinition>) clz;
this.superClasses = retrieveSuperClasses(c, EntityTypeDefinition.class, BaseEntity.NAME);
} else if(Context.class.isAssignableFrom(clz)){
2019-10-30 09:57:14 +01:00
Class<? extends Context> c = (Class<? extends Context>) clz;
this.superClasses = retrieveSuperClasses(c, Context.class, BaseEntity.NAME);
} else if(BaseEntity.class.isAssignableFrom(clz)){
this.superClasses = retrieveSuperClasses(clz, BaseEntity.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
}
}
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 {
ISMapper.marshal(this, stringWriter);
return stringWriter.toString();
}catch(Exception e){
try {
ISMapper.marshal(this.header, stringWriter);
return stringWriter.toString();
} catch(Exception e1){
return super.toString();
}
}
}
2019-10-24 11:26:49 +02:00
}