information-system-model/src/main/java/org/gcube/informationsystem/model/reference/relations/Relation.java

87 lines
3.6 KiB
Java
Raw Normal View History

/**
*
*/
package org.gcube.informationsystem.model.reference.relations;
import java.util.Map;
2020-07-07 17:04:25 +02:00
import org.gcube.com.fasterxml.jackson.annotation.JsonAnyGetter;
import org.gcube.com.fasterxml.jackson.annotation.JsonAnySetter;
import org.gcube.com.fasterxml.jackson.annotation.JsonGetter;
import org.gcube.com.fasterxml.jackson.annotation.JsonIgnore;
import org.gcube.com.fasterxml.jackson.annotation.JsonIgnoreProperties;
2023-04-27 16:30:10 +02:00
import org.gcube.com.fasterxml.jackson.annotation.JsonInclude;
import org.gcube.com.fasterxml.jackson.annotation.JsonInclude.Include;
import org.gcube.com.fasterxml.jackson.annotation.JsonPropertyOrder;
2020-07-07 17:04:25 +02:00
import org.gcube.com.fasterxml.jackson.databind.annotation.JsonSerialize;
2023-04-27 16:30:10 +02:00
import org.gcube.informationsystem.base.reference.Element;
import org.gcube.informationsystem.base.reference.IdentifiableElement;
import org.gcube.informationsystem.base.reference.SchemaMixedElement;
import org.gcube.informationsystem.base.reference.relations.RelationElement;
2021-02-05 11:32:37 +01:00
import org.gcube.informationsystem.model.reference.ERElement;
2023-05-12 17:47:58 +02:00
import org.gcube.informationsystem.model.reference.ModelElement;
import org.gcube.informationsystem.model.reference.entities.Entity;
import org.gcube.informationsystem.model.reference.entities.Resource;
import org.gcube.informationsystem.model.reference.properties.PropagationConstraint;
2023-02-03 14:39:25 +01:00
import org.gcube.informationsystem.serialization.AdditionalPropertiesSerializer;
import org.gcube.informationsystem.types.annotations.Abstract;
import org.gcube.informationsystem.types.annotations.ISProperty;
import org.gcube.informationsystem.types.reference.Change;
import org.gcube.informationsystem.types.reference.TypeMetadata;
2021-10-21 10:11:45 +02:00
import org.gcube.informationsystem.utils.Version;
/**
* @author Luca Frosini (ISTI - CNR)
*
2021-01-20 17:26:13 +01:00
* https://wiki.gcube-system.org/gcube/Facet_Based_Resource_Model#Relation
*/
@Abstract
2023-05-12 17:47:58 +02:00
@JsonPropertyOrder({ Element.TYPE_PROPERTY, ModelElement.SUPERTYPES_PROPERTY, ModelElement.EXPECTED_TYPE_PROPERTY, IdentifiableElement.ID_PROPERTY, IdentifiableElement.METADATA_PROPERTY, ERElement.CONTEXTS_PROPERTY, Relation.PROPAGATION_CONSTRAINT_PROPERTY })
// @JsonDeserialize(as=RelationImpl.class) Do not uncomment to manage subclasses
@TypeMetadata(name = Relation.NAME, description = "This is the base type for any Relation", version = Version.MINIMAL_VERSION_STRING)
2021-10-21 10:11:45 +02:00
@Change(version = Version.MINIMAL_VERSION_STRING, description = Version.MINIMAL_VERSION_DESCRIPTION)
2021-02-05 11:32:37 +01:00
public interface Relation<S extends Resource, T extends Entity> extends RelationElement<S,T>, SchemaMixedElement, ERElement {
public static final String NAME = "Relation"; //Relation.class.getSimpleName();
2023-04-20 10:27:01 +02:00
public static final String PROPAGATION_CONSTRAINT_PROPERTY = "propagationConstraint";
2023-04-27 16:30:10 +02:00
@JsonInclude(Include.NON_NULL)
@JsonIgnoreProperties({Resource.CONSISTS_OF_PROPERTY, Resource.IS_RELATED_TO_PROPERTY})
@JsonGetter(value = SOURCE_PROPERTY)
@Override
2019-11-04 18:06:46 +01:00
public S getSource();
@JsonIgnore
@Override
2019-11-04 18:06:46 +01:00
public void setSource(S source);
@JsonGetter(value = TARGET_PROPERTY)
@Override
2019-11-04 18:06:46 +01:00
public T getTarget();
@JsonIgnore
@Override
2019-11-04 18:06:46 +01:00
public void setTarget(T target);
2023-04-19 16:38:40 +02:00
@JsonGetter(value = PROPAGATION_CONSTRAINT_PROPERTY)
@ISProperty(name = PROPAGATION_CONSTRAINT_PROPERTY)
public PropagationConstraint getPropagationConstraint();
@JsonAnyGetter
@JsonSerialize(using = AdditionalPropertiesSerializer.class)
@Override
public Map<String,Object> getAdditionalProperties();
@Override
public void setAdditionalProperties(Map<String,Object> additionalProperties);
@Override
public Object getAdditionalProperty(String key);
@JsonAnySetter
@Override
public void setAdditionalProperty(String key, Object value);
}