information-system-model/src/main/java/org/gcube/informationsystem/types/impl/relations/IsRelatedToTypeImpl.java

66 lines
2.3 KiB
Java
Raw Normal View History

2020-01-23 17:14:44 +01:00
package org.gcube.informationsystem.types.impl.relations;
import java.lang.reflect.Type;
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;
2020-01-23 17:14:44 +01:00
import org.gcube.informationsystem.model.reference.entities.Resource;
import org.gcube.informationsystem.model.reference.relations.IsRelatedTo;
import org.gcube.informationsystem.model.reference.relations.Relation;
import org.gcube.informationsystem.types.impl.entities.ResourceTypeImpl;
import org.gcube.informationsystem.types.reference.entities.ResourceType;
import org.gcube.informationsystem.types.reference.relations.IsRelatedToType;
2020-01-23 17:14:44 +01:00
/**
* @author Luca Frosini (ISTI - CNR)
*/
@JsonTypeName(value=IsRelatedToType.NAME)
public final class IsRelatedToTypeImpl extends RelationTypeImpl<ResourceType, ResourceType> implements IsRelatedToType {
2020-01-23 17:14:44 +01:00
/**
* Generated Serial Version UID
*/
private static final long serialVersionUID = 8448665395204514722L;
protected IsRelatedToTypeImpl() {
2020-01-23 17:14:44 +01:00
super();
}
public IsRelatedToTypeImpl(Class<? extends IsRelatedTo<? extends Resource, ? extends Resource>> clz) {
2020-01-23 17:14:44 +01:00
super(clz);
2023-05-12 17:47:58 +02:00
this.extendedTypes = retrieveSuperClasses(clz, IsRelatedTo.class, Relation.NAME);
2020-01-23 17:14:44 +01:00
this.properties = retrieveListOfProperties(clz);
discoverSourceAndTarget(clz);
}
@SuppressWarnings("unchecked")
private void discoverSourceAndTarget(Class<? extends IsRelatedTo<? extends Resource, ? extends Resource>> clz) {
Type[] typeParameters = clz.getTypeParameters();
Class<? extends Resource> sourceClass;
Class<? extends Resource> targetClass;
if(typeParameters.length==0) {
typeParameters = getParametersFromSuperClasses(clz);
sourceClass = (Class<? extends Resource>) typeParameters[0];
targetClass = (Class<? extends Resource>) typeParameters[1];
}else {
sourceClass = (Class<? extends Resource>) getGenericClass(typeParameters[0]);
targetClass = (Class<? extends Resource>) getGenericClass(typeParameters[1]);
}
this.source = new ResourceTypeImpl((Class<? extends Resource>) sourceClass);
this.target = new ResourceTypeImpl((Class<? extends Resource>) targetClass);
2020-01-23 17:14:44 +01:00
}
@Override
@JsonIgnore
public AccessType getAccessType() {
return AccessType.IS_RELATED_TO;
}
2020-01-23 17:14:44 +01:00
}