2019-03-22 15:18:23 +01:00
/ * *
*
* /
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 ;
2019-03-22 15:18:23 +01:00
import org.gcube.informationsystem.model.reference.relations.ConsistsOf ;
import org.gcube.informationsystem.model.reference.relations.IsRelatedTo ;
import org.gcube.informationsystem.types.annotations.Abstract ;
2020-01-15 11:55:39 +01:00
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 ;
2020-12-15 11:28:34 +01:00
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 ;
2019-03-22 15:18:23 +01:00
/ * *
2021-03-02 16:16:04 +01:00
* https : //wiki.gcube-system.org/gcube/Facet_Based_Resource_Model#Resource
2021-01-20 17:26:13 +01:00
*
* @author Luca Frosini ( ISTI - CNR )
2019-03-22 15:18:23 +01:00
* /
@Abstract
2019-10-24 19:50:43 +02:00
@JsonIgnoreProperties ( ignoreUnknown = true )
2019-03-22 15:18:23 +01:00
// @JsonDeserialize(as=ResourceImpl.class) Do not uncomment to manage subclasses
2020-01-15 11:55:39 +01:00
@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. " ) ,
2020-01-16 14:00:34 +01:00
} ,
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. " )
2020-01-15 11:55:39 +01:00
}
)
2023-01-20 11:22:52 +01:00
@TypeMetadata ( name = Resource . NAME , description = " This is the base type for any Resource " , version = Version . MINIMAL_VERSION_STRING )
2021-10-21 10:11:45 +02:00
@Change ( version = Version . MINIMAL_VERSION_STRING , description = Version . MINIMAL_VERSION_DESCRIPTION )
2019-03-22 15:18:23 +01:00
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
/ *
2019-03-22 15:18:23 +01:00
public void attachResource ( UUID uuid ) ;
public < R extends Resource > void attachResource ( R resource ) ;
2019-10-24 19:50:43 +02:00
* /
2019-03-22 15:18:23 +01:00
public < I extends IsRelatedTo < ? extends Resource , ? extends Resource > > void attachResource ( I relation ) ;
}