gcube-model/src/main/java/org/gcube/resourcemanagement/model/reference/relations/isrelatedto/Requires.java

68 lines
3.8 KiB
Java

/**
*
*/
package org.gcube.resourcemanagement.model.reference.relations.isrelatedto;
import org.gcube.com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import org.gcube.informationsystem.model.reference.relations.IsRelatedTo;
import org.gcube.informationsystem.types.reference.Change;
import org.gcube.informationsystem.types.reference.TypeMetadata;
import org.gcube.informationsystem.utils.TypeVersion;
import org.gcube.resourcemanagement.model.impl.relations.isrelatedto.RequiresImpl;
import org.gcube.resourcemanagement.model.reference.entities.resources.Service;
import org.gcube.resourcemanagement.model.reference.entities.resources.Software;
/**
* Requires is used to indicate that the source {@link Software} when activated requires
* to interact with a specific {@link Service} instance, i.e., the target of the relation.
* This relation usually reflects an administrative constraint than a technological limitation.
* When there are no constraint on the instance the relation is instead {@link DependsOn}
* which is between two {@link Software}.
*
* Not necessarily all the {@link Software} running in the infrastructure are represented as
* resources. Only the {@link Software} required for infrastructure administration or the
* ones to be managed with specific policies are represented.
* Indeed, Requires relation is normally used as policy constraint.
*
* Let imagine an open source software which uses a MySQL database as backend.
* In many cases, what characterises the software instance is the data present in the backend.
* The infrastructure manager could stipulate an agreement with a provider having a particular
* set of data which is not for public domain.
* The software once deployed, giving the business agreement, is entitled to use the instance
* of the provider and not a generic MySQL database instance.
*
* The infrastructure manager imposes the use of such a particular instance because of the data it contains.
*
* https://wiki.gcube-system.org/gcube/GCube_Model#Requires
*
* @author Luca Frosini (ISTI - CNR)
*/
@JsonDeserialize(as=RequiresImpl.class)
@TypeMetadata(
name = Requires.NAME,
description = "Requires is used to indicate that the source {@link Software} when activated requires "
+ "to interact with a specific {@link Service} instance, i.e., the target of the relation. "
+ "This relation usually reflects an administrative constraint than a technological limitation. "
+ "When there are no constraint on the instance the relation is instead {@link DependsOn} "
+ "which is between two {@link Software}."
+ "Not necessarily all the {@link Software} running in the infrastructure are represented as resources. "
+ "Only the {@link Software} required for infrastructure administration or the ones to be managed "
+ "with specific policies are represented. "
+ "Indeed, Requires relation is normally used as policy constraint. "
+ "Let imagine an open source software which uses a MySQL database as backend. "
+ "In many cases, what characterises the software instance is the data present in the backend. "
+ "The infrastructure manager could stipulate an agreement with a provider having a particular "
+ "set of data which is not for public domain. "
+ "The software once deployed, giving the business agreement, is entitled to use the instance "
+ "of the provider and not a generic MySQL database instance. "
+ "The infrastructure manager imposes the use of such a particular instance because of the data it contains.",
version = TypeVersion.MINIMAL_VERSION_STRING
)
@Change(version = TypeVersion.MINIMAL_VERSION_STRING, description = TypeVersion.MINIMAL_VERSION_DESCRIPTION)
public interface Requires<Out extends Software, In extends Service>
extends IsRelatedTo<Out, In> {
public static final String NAME = "Requires"; // Requires.class.getSimpleName();
}