information-system-model/src/main/java/org/gcube/informationsystem/model/reference/entities/Resource.java

89 lines
3.2 KiB
Java
Raw Normal View History

/**
*
*/
package org.gcube.informationsystem.model.reference.entities;
import java.util.List;
import java.util.UUID;
2020-07-07 17:04:25 +02:00
import org.gcube.com.fasterxml.jackson.annotation.JsonIgnore;
import org.gcube.com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import org.gcube.informationsystem.model.reference.relations.ConsistsOf;
import org.gcube.informationsystem.model.reference.relations.IsRelatedTo;
import org.gcube.informationsystem.types.annotations.Abstract;
import org.gcube.informationsystem.types.annotations.ResourceSchema;
import org.gcube.informationsystem.types.annotations.ResourceSchemaEntry;
2021-02-18 15:14:24 +01:00
import org.gcube.informationsystem.types.annotations.RelatedResourcesEntry;
import org.gcube.informationsystem.types.reference.Change;
import org.gcube.informationsystem.types.reference.TypeMetadata;
import org.gcube.informationsystem.utils.TypeVersion;
/**
* https://wiki.gcube-system.org/gcube/Facet_Based_Resource_Model#Resources
2021-01-20 17:26:13 +01:00
*
* @author Luca Frosini (ISTI - CNR)
*/
@Abstract
2019-10-24 19:50:43 +02:00
@JsonIgnoreProperties(ignoreUnknown=true)
// @JsonDeserialize(as=ResourceImpl.class) Do not uncomment to manage subclasses
@ResourceSchema(
facets={
@ResourceSchemaEntry(relation=ConsistsOf.class, facet=Facet.class, min=1, description="Any Resource consists of one or more Facets which describes the different aspects of the resource."),
},
resources= {
2021-02-18 15:14:24 +01:00
@RelatedResourcesEntry(source=Resource.class, relation=IsRelatedTo.class, target=Resource.class, description="Any Resource can be related to any other resource.")
}
)
@TypeMetadata(name = Resource.NAME, description = "This is the base class for Resources", version = TypeVersion.MINIMAL_VERSION_STRING)
@Change(version = TypeVersion.MINIMAL_VERSION_STRING, description = TypeVersion.MINIMAL_VERSION_DESCRIPTION)
public interface Resource extends Entity {
public static final String NAME = "Resource"; //Resource.class.getSimpleName();
public static final String CONSISTS_OF_PROPERTY = "consistsOf";
public static final String IS_RELATED_TO_PROPERTY = "isRelatedTo";
// @JsonManagedReference
public List<ConsistsOf<? extends Resource, ? extends Facet>> getConsistsOf();
@JsonIgnore
public <C extends ConsistsOf<? extends Resource, ? extends Facet>> List<C> getConsistsOf(Class<C> clz);
@JsonIgnore
public <F extends Facet, C extends ConsistsOf<? extends Resource, F>> List<C> getConsistsOf(Class<C> clz, Class<F> target);
// @JsonManagedReference
public List<IsRelatedTo<? extends Resource, ? extends Resource>> getIsRelatedTo();
@JsonIgnore
public <I extends IsRelatedTo<? extends Resource, ? extends Resource>> List<I> getIsRelatedTo(Class<I> clz);
@JsonIgnore
public List<? extends Facet> getFacets();
@JsonIgnore
public <F extends Facet> List<F> getFacets(Class<F> clz);
@JsonIgnore
public <F extends Facet, C extends ConsistsOf<? extends Resource, F>> List<F> getFacets(Class<C> clz, Class<F> target);
public void addFacet(UUID uuid);
public <F extends Facet> void addFacet(F facet);
public <C extends ConsistsOf<? extends Resource, ? extends Facet>> void addFacet(C relation);
2019-10-24 19:50:43 +02:00
/*
public void attachResource(UUID uuid);
public <R extends Resource> void attachResource(R resource);
2019-10-24 19:50:43 +02:00
*/
public <I extends IsRelatedTo<? extends Resource, ? extends Resource>> void attachResource(I relation);
}