Defined Resource to Resource suggested Relations

This commit is contained in:
Luca Frosini 2020-01-16 12:44:10 +01:00
parent b723c19ffa
commit 4b23406267
14 changed files with 120 additions and 3 deletions

View File

@ -6,11 +6,14 @@ package org.gcube.resourcemanagement.model.reference.entities.resources;
import org.gcube.informationsystem.types.annotations.Abstract;
import org.gcube.informationsystem.types.annotations.ResourceSchema;
import org.gcube.informationsystem.types.annotations.ResourceSchemaEntry;
import org.gcube.informationsystem.types.annotations.ResourceSchemaRelatedEntry;
import org.gcube.resourcemanagement.model.impl.entities.resources.ActorImpl;
import org.gcube.resourcemanagement.model.reference.entities.facets.ContactFacet;
import org.gcube.resourcemanagement.model.reference.entities.facets.ContactReferenceFacet;
import org.gcube.resourcemanagement.model.reference.relations.consistsof.HasContact;
import org.gcube.resourcemanagement.model.reference.relations.consistsof.IsIdentifiedBy;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.Involves;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.IsOwnedBy;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@ -25,6 +28,10 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@ResourceSchemaEntry(relation=IsIdentifiedBy.class, facet=ContactFacet.class, min=1, description=" An Actor has at least a Contact Facet which permit to identify the Actor per se. "),
@ResourceSchemaEntry(relation=HasContact.class, facet=ContactFacet.class, description=" An Actor can have other Contact Facets which provide secondary contact information. "),
@ResourceSchemaEntry(facet=ContactReferenceFacet.class)
},
resources= {
@ResourceSchemaRelatedEntry(source=Dataset.class, relation=Involves.class, target=Actor.class),
@ResourceSchemaRelatedEntry(source=Site.class, relation=IsOwnedBy.class, target=Actor.class)
}
)
public interface Actor extends GCubeResource {

View File

@ -5,10 +5,12 @@ package org.gcube.resourcemanagement.model.reference.entities.resources;
import org.gcube.informationsystem.types.annotations.ResourceSchema;
import org.gcube.informationsystem.types.annotations.ResourceSchemaEntry;
import org.gcube.informationsystem.types.annotations.ResourceSchemaRelatedEntry;
import org.gcube.resourcemanagement.model.impl.entities.resources.ConcreteDatasetImpl;
import org.gcube.resourcemanagement.model.reference.entities.facets.AccessPointFacet;
import org.gcube.resourcemanagement.model.reference.entities.facets.ContactFacet;
import org.gcube.resourcemanagement.model.reference.relations.consistsof.HasMaintainer;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.IsPartOf;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@ -22,6 +24,9 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
facets={
@ResourceSchemaEntry(relation=HasMaintainer.class, facet=ContactFacet.class, min=1, description="The contact information of the entity responsible for the maintenance of the concrete dataset"),
@ResourceSchemaEntry(facet=AccessPointFacet.class, min=1, description="The access point to use for having access to the concrete dataset. The embargoState can be modeled through the access policy defined in the consistsOf relation.")
},
resources = {
@ResourceSchemaRelatedEntry(source=ConcreteDataset.class, relation=IsPartOf.class, target=Dataset.class, description="The reference to the 'incarnations'/'manifestations' contributing to a dataset."),
}
)
public interface ConcreteDataset extends Dataset {

View File

@ -3,7 +3,10 @@
*/
package org.gcube.resourcemanagement.model.reference.entities.resources;
import org.gcube.informationsystem.types.annotations.ResourceSchema;
import org.gcube.informationsystem.types.annotations.ResourceSchemaRelatedEntry;
import org.gcube.resourcemanagement.model.impl.entities.resources.ConfigurationImpl;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.IsDerivationOf;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@ -13,6 +16,11 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
* https://wiki.gcube-system.org/gcube/Facet_Based_Resource_Model#Configuration
*/
@JsonDeserialize(as=ConfigurationImpl.class)
@ResourceSchema(
resources = {
@ResourceSchemaRelatedEntry(source=Configuration.class, relation=IsDerivationOf.class, target=ConfigurationTemplate.class)
}
)
public interface Configuration extends ConfigurationTemplate {
public static final String NAME = "Configuration"; // Configuration.class.getSimpleName();

View File

@ -5,10 +5,14 @@ package org.gcube.resourcemanagement.model.reference.entities.resources;
import org.gcube.informationsystem.types.annotations.ResourceSchema;
import org.gcube.informationsystem.types.annotations.ResourceSchemaEntry;
import org.gcube.informationsystem.types.annotations.ResourceSchemaRelatedEntry;
import org.gcube.resourcemanagement.model.impl.entities.resources.ConfigurationTemplateImpl;
import org.gcube.resourcemanagement.model.reference.entities.facets.IdentifierFacet;
import org.gcube.resourcemanagement.model.reference.entities.facets.SimplePropertyFacet;
import org.gcube.resourcemanagement.model.reference.relations.consistsof.IsIdentifiedBy;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.IsConfiguredBy;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.IsCustomizedBy;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.IsDerivationOf;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@ -21,6 +25,11 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
facets={
@ResourceSchemaEntry(relation=IsIdentifiedBy.class, facet=IdentifierFacet.class, min=1),
@ResourceSchemaEntry(facet=SimplePropertyFacet.class, min=1)
},
resources = {
@ResourceSchemaRelatedEntry(source=Configuration.class, relation=IsDerivationOf.class, target=ConfigurationTemplate.class),
@ResourceSchemaRelatedEntry(source=Service.class, relation=IsCustomizedBy.class, target=ConfigurationTemplate.class),
@ResourceSchemaRelatedEntry(source=Software.class, relation=IsConfiguredBy.class, target=ConfigurationTemplate.class),
}
)
public interface ConfigurationTemplate extends GCubeResource {

View File

@ -5,6 +5,7 @@ package org.gcube.resourcemanagement.model.reference.entities.resources;
import org.gcube.informationsystem.types.annotations.ResourceSchema;
import org.gcube.informationsystem.types.annotations.ResourceSchemaEntry;
import org.gcube.informationsystem.types.annotations.ResourceSchemaRelatedEntry;
import org.gcube.resourcemanagement.model.impl.entities.resources.DatasetImpl;
import org.gcube.resourcemanagement.model.reference.entities.facets.AccessPointFacet;
import org.gcube.resourcemanagement.model.reference.entities.facets.ContactFacet;
@ -25,6 +26,11 @@ import org.gcube.resourcemanagement.model.reference.relations.consistsof.HasOwne
import org.gcube.resourcemanagement.model.reference.relations.consistsof.HasSpatialCoverage;
import org.gcube.resourcemanagement.model.reference.relations.consistsof.HasTemporalCoverage;
import org.gcube.resourcemanagement.model.reference.relations.consistsof.IsIdentifiedBy;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.Involves;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.IsCompliantWith;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.IsCorrelatedTo;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.IsPartOf;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.Manages;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@ -51,6 +57,13 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@ResourceSchemaEntry(relation = HasSpatialCoverage.class, facet = CoverageFacet.class, description = "Any geo-spatial coverage information characterising the content of the dataset, e.g. the area covered by the dataset."),
@ResourceSchemaEntry(facet = DescriptiveMetadataFacet.class, description = "Any descriptive information associated with the dataset, e.g. for discovery purposes."),
@ResourceSchemaEntry(facet = SubjectFacet.class, description = "Any subject/tag associated with the dataset for descriptive and discovery purposes.")
},
resources = {
@ResourceSchemaRelatedEntry(source=Dataset.class, relation=Involves.class, target=Actor.class),
@ResourceSchemaRelatedEntry(source=Dataset.class, relation=IsCorrelatedTo.class, target=Dataset.class),
@ResourceSchemaRelatedEntry(source=Dataset.class, relation=IsCompliantWith.class, target=Schema.class, description="Any schema characterising the content of the dataset, e.g. the schema describing the 'columns' of a CSV-based dataset."),
@ResourceSchemaRelatedEntry(source=ConcreteDataset.class, relation=IsPartOf.class, target=Dataset.class, description="The reference to the 'incarnations'/'manifestations' contributing to a dataset."),
@ResourceSchemaRelatedEntry(source=Service.class, relation=Manages.class, target=Dataset.class, description="The link between the service that 'manages' the dataset and the dataset, e.g. the service that hosts the dataset and give access to it."),
}
)
public interface Dataset extends GCubeResource {

View File

@ -5,6 +5,7 @@ package org.gcube.resourcemanagement.model.reference.entities.resources;
import org.gcube.informationsystem.types.annotations.ResourceSchema;
import org.gcube.informationsystem.types.annotations.ResourceSchemaEntry;
import org.gcube.informationsystem.types.annotations.ResourceSchemaRelatedEntry;
import org.gcube.resourcemanagement.model.impl.entities.resources.EServiceImpl;
import org.gcube.resourcemanagement.model.reference.entities.facets.AccessPointFacet;
import org.gcube.resourcemanagement.model.reference.entities.facets.EventFacet;
@ -12,6 +13,8 @@ import org.gcube.resourcemanagement.model.reference.entities.facets.LicenseFacet
import org.gcube.resourcemanagement.model.reference.entities.facets.ServiceStateFacet;
import org.gcube.resourcemanagement.model.reference.entities.facets.SoftwareFacet;
import org.gcube.resourcemanagement.model.reference.relations.consistsof.IsIdentifiedBy;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.Discovers;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.Uses;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@ -28,6 +31,10 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@ResourceSchemaEntry(facet = EventFacet.class, min = 1, description = "Events characterising the current status and lifecycle of the service, e.g. ActivationTime, DeploymentTime."),
@ResourceSchemaEntry(facet = ServiceStateFacet.class, min = 1, max = 1, description = "The current status of the EService, e.g. STARTED, ready, down, failed."),
@ResourceSchemaEntry(facet = LicenseFacet.class, description = "The specific terms of use governing the exploitation of the EService.")
},
resources= {
@ResourceSchemaRelatedEntry(source=EService.class, relation=Discovers.class, target=EService.class, description="A reference to any other EService, the EService instance is discovering through query on IS."),
@ResourceSchemaRelatedEntry(source=EService.class, relation=Uses.class, target=EService.class, description="A reference to any other EService, the EService instance is invoking.")
}
)
public interface EService extends Service {

View File

@ -3,7 +3,10 @@
*/
package org.gcube.resourcemanagement.model.reference.entities.resources;
import org.gcube.informationsystem.types.annotations.ResourceSchema;
import org.gcube.informationsystem.types.annotations.ResourceSchemaRelatedEntry;
import org.gcube.resourcemanagement.model.impl.entities.resources.LegalBodyImpl;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.BelongsTo;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@ -13,6 +16,11 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
* https://wiki.gcube-system.org/gcube/Facet_Based_Resource_Model#Legal_Body
*/
@JsonDeserialize(as=LegalBodyImpl.class)
@ResourceSchema(
resources= {
@ResourceSchemaRelatedEntry(source=Person.class, relation=BelongsTo.class, target=LegalBody.class)
}
)
public interface LegalBody extends Actor {
public static final String NAME = "LegalBody"; // LegalBody.class.getSimpleName();

View File

@ -3,20 +3,27 @@
*/
package org.gcube.resourcemanagement.model.reference.entities.resources;
import org.gcube.informationsystem.types.annotations.ResourceSchema;
import org.gcube.informationsystem.types.annotations.ResourceSchemaRelatedEntry;
import org.gcube.resourcemanagement.model.impl.entities.resources.PersonImpl;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.BelongsTo;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
/**
* @author Luca Frosini (ISTI - CNR)
* https://wiki.gcube-system.org/gcube/Facet_Based_Resource_Model#Person
*/
@JsonDeserialize(as=PersonImpl.class)
@JsonDeserialize(as = PersonImpl.class)
@ResourceSchema(
resources = {
@ResourceSchemaRelatedEntry(source = Person.class, relation = BelongsTo.class, target = LegalBody.class)
}
)
public interface Person extends Actor {
public static final String NAME = "Person"; // Person.class.getSimpleName();
public static final String DESCRIPTION = "Any human playing the role of Actor.";
public static final String VERSION = "1.0.0";
}

View File

@ -3,7 +3,10 @@
*/
package org.gcube.resourcemanagement.model.reference.entities.resources;
import org.gcube.informationsystem.types.annotations.ResourceSchema;
import org.gcube.informationsystem.types.annotations.ResourceSchemaRelatedEntry;
import org.gcube.resourcemanagement.model.impl.entities.resources.PluginImpl;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.IsPluginOf;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@ -13,6 +16,11 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
* https://wiki.gcube-system.org/gcube/Facet_Based_Resource_Model#Plugin
*/
@JsonDeserialize(as=PluginImpl.class)
@ResourceSchema(
resources= {
@ResourceSchemaRelatedEntry(source=Plugin.class, relation=IsPluginOf.class, target=Software.class, description="A reference to the Software this Plugin is conceived to extend the capabilities.")
}
)
public interface Plugin extends Software {
public static final String NAME = "Plugin"; // Plugin.class.getSimpleName();

View File

@ -5,6 +5,7 @@ package org.gcube.resourcemanagement.model.reference.entities.resources;
import org.gcube.informationsystem.types.annotations.ResourceSchema;
import org.gcube.informationsystem.types.annotations.ResourceSchemaEntry;
import org.gcube.informationsystem.types.annotations.ResourceSchemaRelatedEntry;
import org.gcube.resourcemanagement.model.impl.entities.resources.SchemaImpl;
import org.gcube.resourcemanagement.model.reference.entities.facets.ContactFacet;
import org.gcube.resourcemanagement.model.reference.entities.facets.DescriptiveMetadataFacet;
@ -14,6 +15,7 @@ import org.gcube.resourcemanagement.model.reference.entities.facets.SubjectFacet
import org.gcube.resourcemanagement.model.reference.entities.facets.XSDSchemaFacet;
import org.gcube.resourcemanagement.model.reference.relations.consistsof.HasContact;
import org.gcube.resourcemanagement.model.reference.relations.consistsof.IsIdentifiedBy;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.IsCompliantWith;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@ -30,6 +32,9 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@ResourceSchemaEntry(relation=HasContact.class, facet=ContactFacet.class, min=1),
@ResourceSchemaEntry(facet=DescriptiveMetadataFacet.class),
@ResourceSchemaEntry(facet=SubjectFacet.class)
},
resources = {
@ResourceSchemaRelatedEntry(source=Dataset.class, relation=IsCompliantWith.class, target=Schema.class, description="Any schema characterising the content of the dataset, e.g. the schema describing the 'columns' of a CSV-based dataset.")
}
)
public interface Schema extends GCubeResource {

View File

@ -6,10 +6,17 @@ package org.gcube.resourcemanagement.model.reference.entities.resources;
import org.gcube.informationsystem.types.annotations.Abstract;
import org.gcube.informationsystem.types.annotations.ResourceSchema;
import org.gcube.informationsystem.types.annotations.ResourceSchemaEntry;
import org.gcube.informationsystem.types.annotations.ResourceSchemaRelatedEntry;
import org.gcube.resourcemanagement.model.impl.entities.resources.ServiceImpl;
import org.gcube.resourcemanagement.model.reference.entities.facets.CapabilityFacet;
import org.gcube.resourcemanagement.model.reference.entities.facets.DescriptiveMetadataFacet;
import org.gcube.resourcemanagement.model.reference.entities.facets.SubjectFacet;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.Activates;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.CallsFor;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.Enables;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.IsCustomizedBy;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.Manages;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.Requires;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@ -24,6 +31,14 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@ResourceSchemaEntry(facet=DescriptiveMetadataFacet.class, description="Any descriptive information associated with the service, e.g. for discovery purposes."),
@ResourceSchemaEntry(facet=SubjectFacet.class, description="Any subject/tag associated with the service for descriptive, cataloguing and discovery purposes."),
@ResourceSchemaEntry(facet=CapabilityFacet.class, description="Any facility supported/offered by the Service.")
},
resources= {
@ResourceSchemaRelatedEntry(source=Service.class, relation=CallsFor.class, target=Service.class, description="A reference to the Services needed by the target instance to work."),
@ResourceSchemaRelatedEntry(source=Service.class, relation=Activates.class, target=Service.class, description="The source Service enables the target Service to be running. Examples are an Hosting Node which enables an EService; A VirtualMachine enabling an EService or an HostingNode; An EService enabling a RunningPlugin; A VirtualMachine enabling an HostingNode etc"),
@ResourceSchemaRelatedEntry(source=Service.class, relation=IsCustomizedBy.class, target=ConfigurationTemplate.class, description="A reference to any configuration characterising the Service behaviour."),
@ResourceSchemaRelatedEntry(source=Service.class, relation=Manages.class, target=Dataset.class, description="A reference to any Dataset resource managed by the Service instance."),
@ResourceSchemaRelatedEntry(source=Service.class, relation=Enables.class, target=Software.class, description="A reference to any Software the Service is enabling (i.e. the Software is running throught the EService)."),
@ResourceSchemaRelatedEntry(source=Service.class, relation=Requires.class, target=Service.class, description="A reference to any Service needed by a Software to properly operate, e.g. this can be used to capture a sort of run-time requirements between a software component and the Service it needs.")
}
)
public interface Service extends GCubeResource {

View File

@ -5,6 +5,7 @@ package org.gcube.resourcemanagement.model.reference.entities.resources;
import org.gcube.informationsystem.types.annotations.ResourceSchema;
import org.gcube.informationsystem.types.annotations.ResourceSchemaEntry;
import org.gcube.informationsystem.types.annotations.ResourceSchemaRelatedEntry;
import org.gcube.resourcemanagement.model.impl.entities.resources.SiteImpl;
import org.gcube.resourcemanagement.model.reference.entities.facets.ContactFacet;
import org.gcube.resourcemanagement.model.reference.entities.facets.IdentifierFacet;
@ -14,6 +15,8 @@ import org.gcube.resourcemanagement.model.reference.relations.consistsof.HasCont
import org.gcube.resourcemanagement.model.reference.relations.consistsof.HasMaintainer;
import org.gcube.resourcemanagement.model.reference.relations.consistsof.HasManager;
import org.gcube.resourcemanagement.model.reference.relations.consistsof.IsIdentifiedBy;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.Hosts;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.IsOwnedBy;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@ -30,6 +33,10 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@ResourceSchemaEntry(relation=HasManager.class, facet=ContactFacet.class, min=1, description="Contact information of the Site Manager."),
@ResourceSchemaEntry(facet=LocationFacet.class, min=1),
@ResourceSchemaEntry(facet=NetworkingFacet.class, min=1),
},
resources= {
@ResourceSchemaRelatedEntry(source=Site.class, relation=IsOwnedBy.class, target=Actor.class),
@ResourceSchemaRelatedEntry(source=Site.class, relation=Hosts.class, target=Service.class)
}
)
public interface Site extends GCubeResource {

View File

@ -5,10 +5,16 @@ package org.gcube.resourcemanagement.model.reference.entities.resources;
import org.gcube.informationsystem.types.annotations.ResourceSchema;
import org.gcube.informationsystem.types.annotations.ResourceSchemaEntry;
import org.gcube.informationsystem.types.annotations.ResourceSchemaRelatedEntry;
import org.gcube.resourcemanagement.model.impl.entities.resources.SoftwareImpl;
import org.gcube.resourcemanagement.model.reference.entities.facets.CapabilityFacet;
import org.gcube.resourcemanagement.model.reference.entities.facets.SoftwareFacet;
import org.gcube.resourcemanagement.model.reference.relations.consistsof.IsIdentifiedBy;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.Demands;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.DependsOn;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.IsConfiguredBy;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.IsPluginOf;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.Requires;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@ -22,6 +28,13 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@ResourceSchemaEntry(relation=IsIdentifiedBy.class, facet=SoftwareFacet.class, min=1, description="Software coordinates which identify the Software per se."),
@ResourceSchemaEntry(facet=SoftwareFacet.class, min=1, description="Apart the one connected by the IsIdentifiedBy relation (gCube coordinates) the others identify the software in other way e.g. (Maven coordinates)."),
@ResourceSchemaEntry(facet=CapabilityFacet.class)
},
resources= {
@ResourceSchemaRelatedEntry(source=Software.class, relation=DependsOn.class, target=Software.class, description="To capture any dependency between two software artifacts."),
@ResourceSchemaRelatedEntry(source=Software.class, relation=IsConfiguredBy.class, target=ConfigurationTemplate.class),
@ResourceSchemaRelatedEntry(source=Software.class, relation=Requires.class, target=Service.class, description="To capture any dependency between a software artifact and a Service, e.g. A software requiring a specific database instance."),
@ResourceSchemaRelatedEntry(source=VirtualService.class, relation=Demands.class, target=Software.class),
@ResourceSchemaRelatedEntry(source=Plugin.class, relation=IsPluginOf.class, target=Software.class, description="To capture the relation between a Software and its Plugins.")
}
)
public interface Software extends GCubeResource {

View File

@ -5,9 +5,11 @@ package org.gcube.resourcemanagement.model.reference.entities.resources;
import org.gcube.informationsystem.types.annotations.ResourceSchema;
import org.gcube.informationsystem.types.annotations.ResourceSchemaEntry;
import org.gcube.informationsystem.types.annotations.ResourceSchemaRelatedEntry;
import org.gcube.resourcemanagement.model.impl.entities.resources.VirtualServiceImpl;
import org.gcube.resourcemanagement.model.reference.entities.facets.SoftwareFacet;
import org.gcube.resourcemanagement.model.reference.relations.consistsof.IsIdentifiedBy;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.Demands;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@ -19,6 +21,9 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@ResourceSchema(
facets={
@ResourceSchemaEntry(relation=IsIdentifiedBy.class, facet=SoftwareFacet.class, min=1),
},
resources= {
@ResourceSchemaRelatedEntry(source=VirtualService.class, relation=Demands.class, target=Software.class)
}
)
public interface VirtualService extends Service {