Class ERManagementUtility
- Author:
- Luca Frosini (ISTI - CNR)
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic enumThe descendant Contexts a hierarchy synchronization aligns to the submitted Resource.static final recordThe outcome of a hierarchy synchronization. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionaddToContextNoPropagationConstraint(Map<UUID, org.gcube.com.fasterxml.jackson.databind.JsonNode> expectedInstances, UUID contextUUID, boolean dryRun) Adds a map of expected instances to the specified context without evaluating propagation constraints.static ElementManagement<?,?> getERManagement(String type) Resolves and returns the correspondingElementManagementinstance for the specified class type name.static ElementManagement<?,?> getERManagement(String type, UUID uuid) Returns the management of the instance addressed by the given Type and UUID.static ElementManagement<?,?> getERManagement(Environment workingContext, com.orientechnologies.orient.core.db.document.ODatabaseDocument orientGraph, com.orientechnologies.orient.core.record.OElement element) Resolves and returns the correspondingElementManagementinstance for the specified database element.static ElementManagement<?,?> getERManagementFromUUID(Environment workingContext, com.orientechnologies.orient.core.db.document.ODatabaseDocument orientGraph, UUID uuid) Resolves and returns the correspondingElementManagementinstance for the specified element UUID.static EnvironmentgetWorkingEnvironment(UUID contextUUID, boolean hierarchical, boolean activeOnlyHierarchical) Returns the environment an Entity or a Relation is looked up in: the given Context, or the token Context when none is given, refused when the Context is not effectively ACTIVE and the caller lacks the administrative state override.static booleanisDeletedInTransaction(com.orientechnologies.orient.core.record.OElement element, com.orientechnologies.orient.core.db.document.ODatabaseDocument oDatabaseDocument) Tells whether an element has been deleted by the open transaction of the given session.static booleanisInContext(com.orientechnologies.orient.core.record.OElement element, InstanceEnvironment instanceEnvironment, com.orientechnologies.orient.core.db.document.ODatabaseDocument oDatabaseDocument) Tells whether an element is present in a Context as the open transaction of the given session sees it: an element the transaction has already removed from the Context, or deleted, is absent, although the committed state still lists it.static booleanisInNoContext(com.orientechnologies.orient.core.record.OElement element, com.orientechnologies.orient.core.db.document.ODatabaseDocument oDatabaseDocument) Tells whether an element belongs to no Context at all as the open transaction of the given session sees it, the condition under which an instance is deleted.removeFromContextNoPropagationConstraint(Map<UUID, org.gcube.com.fasterxml.jackson.databind.JsonNode> expectedInstances, UUID contextUUID, boolean dryRun) Removes a map of expected instances from the specified context without evaluating propagation constraints.static booleanreplacementOmitsSharedConsistsOf(String type, UUID uuid, String json) Tells whether the full replacement of a Resource takes out of the token Context aConsistsOfrelation, or its Facet, that is present in another Context too: the replacement that the connection of the token Context cannot perform (seeERManagementUtility.HierarchyScope.TOKEN_CONTEXT).syncHierarchy(String type, UUID uuid, String json, ERManagementUtility.HierarchyScope scope, boolean administrative) Creates or updates a Resource in the current Context and aligns the selected descendant Contexts to the submitted representation, atomically: every aligned Context ends up with the Resource and exactly the ConsistsOf/Facet instances the payload describes.static voidtouchResource(com.orientechnologies.orient.core.record.OVertex resource, com.orientechnologies.orient.core.db.document.ODatabaseDocument oDatabaseDocument) Records on a Resource the modification of one of its ConsistsOf or Facet instances: itslastUpdateByandlastUpdateTimeare those of the latest modification made to the Resource itself or to any of them, in any Context.
-
Constructor Details
-
ERManagementUtility
public ERManagementUtility()
-
-
Method Details
-
getWorkingEnvironment
public static Environment getWorkingEnvironment(UUID contextUUID, boolean hierarchical, boolean activeOnlyHierarchical) throws org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException Returns the environment an Entity or a Relation is looked up in: the given Context, or the token Context when none is given, refused when the Context is not effectively ACTIVE and the caller lacks the administrative state override.- Parameters:
contextUUID- the UUID of the Context, ornullfor the token Contexthierarchical- whether the lookup also covers the descendant ContextsactiveOnlyHierarchical- whether a hierarchical lookup skips the non-ACTIVE descendants- Returns:
- the environment of the Context
- Throws:
jakarta.ws.rs.ForbiddenException- if the Context is not ACTIVE and the caller cannot operate thereorg.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException- if the Context cannot be read
-
isDeletedInTransaction
public static boolean isDeletedInTransaction(com.orientechnologies.orient.core.record.OElement element, com.orientechnologies.orient.core.db.document.ODatabaseDocument oDatabaseDocument) Tells whether an element has been deleted by the open transaction of the given session.- Parameters:
element- the element to checkoDatabaseDocument- the session whose transaction is evaluated- Returns:
trueif the transaction deletes the element
-
isInContext
public static boolean isInContext(com.orientechnologies.orient.core.record.OElement element, InstanceEnvironment instanceEnvironment, com.orientechnologies.orient.core.db.document.ODatabaseDocument oDatabaseDocument) Tells whether an element is present in a Context as the open transaction of the given session sees it: an element the transaction has already removed from the Context, or deleted, is absent, although the committed state still lists it.- Parameters:
element- the element to checkinstanceEnvironment- the ContextoDatabaseDocument- the session whose transaction is evaluated- Returns:
trueif the element is present in the Context
-
isInNoContext
public static boolean isInNoContext(com.orientechnologies.orient.core.record.OElement element, com.orientechnologies.orient.core.db.document.ODatabaseDocument oDatabaseDocument) Tells whether an element belongs to no Context at all as the open transaction of the given session sees it, the condition under which an instance is deleted.- Parameters:
element- the element to checkoDatabaseDocument- the session whose transaction is evaluated- Returns:
trueif the element belongs to no Context
-
touchResource
public static void touchResource(com.orientechnologies.orient.core.record.OVertex resource, com.orientechnologies.orient.core.db.document.ODatabaseDocument oDatabaseDocument) throws org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException Records on a Resource the modification of one of its ConsistsOf or Facet instances: itslastUpdateByandlastUpdateTimeare those of the latest modification made to the Resource itself or to any of them, in any Context. It is the only place where the modification of another instance is recorded on a Resource; an IsRelatedTo never reaches it. A Resource the open transaction has deleted, or is creating and has not given its metadata yet, is left as it is.- Parameters:
resource- the Resource the modified ConsistsOf or Facet belongs tooDatabaseDocument- the session whose open transaction makes the modification- Throws:
org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException- if the metadata cannot be updated
-
getERManagement
public static ElementManagement<?,?> getERManagement(String type) throws org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException Resolves and returns the correspondingElementManagementinstance for the specified class type name.- Parameters:
type- the class type name- Returns:
- the mapped
ElementManagementinstance - Throws:
org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException- if the class type is not queryable or cannot be mapped
-
getERManagement
public static ElementManagement<?,?> getERManagement(String type, UUID uuid) throws org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException Returns the management of the instance addressed by the given Type and UUID. A Type that exists but is not aResource,Facet,IsRelatedToorConsistsOfType has no instances: the key does not exist, exactly as with an unknown Type name or a Type that is not the concrete Type of the instance.- Parameters:
type- the concrete Type name of the instanceuuid- the UUID of the instance- Returns:
- the management, with its Type and UUID set
- Throws:
org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException- if the Type is not an instance Typeorg.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException- if the Type does not exist
-
syncHierarchy
public static ERManagementUtility.HierarchySyncResult syncHierarchy(String type, UUID uuid, String json, ERManagementUtility.HierarchyScope scope, boolean administrative) throws org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException Creates or updates a Resource in the current Context and aligns the selected descendant Contexts to the submitted representation, atomically: every aligned Context ends up with the Resource and exactly the ConsistsOf/Facet instances the payload describes. It is a synchronization of the payload, not an Add to Context: propagation constraints are not consulted, and no IsRelatedTo instance nor related Resource moves.A non-administrative caller skips the non-
ACTIVEdescendant Contexts, as its hierarchical reads do; administrative callers align them too.It writes through the administrative connection, which bypasses the record-level security of the database, so it keeps the write inside the token Context by itself: the Resource is resolved through the connection of the token Context, an existing ConsistsOf or Facet named in the payload must be present there (
checkSubmittedConsistsOfInContext(org.gcube.com.fasterxml.jackson.databind.JsonNode, org.gcube.informationsystem.resourceregistry.environments.instances.InstanceEnvironment, com.orientechnologies.orient.core.db.document.ODatabaseDocument)), and each Context is validated on the ConsistsOf the Resource has in it. WithERManagementUtility.HierarchyScope.TOKEN_CONTEXTit is the plain full replacement of a Resource, with the outcome of the same write on the connection of the token Context.- Parameters:
type- the concrete Resource type nameuuid- the Resource UUID, ornullto let a creation generate itjson- the submitted Resource representationscope- the descendant Contexts to alignadministrative- whether the caller may write in non-ACTIVEContexts- Returns:
- the outcome of the synchronization
- Throws:
org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException- if synchronization fails
-
getERManagementFromUUID
public static ElementManagement<?,?> getERManagementFromUUID(Environment workingContext, com.orientechnologies.orient.core.db.document.ODatabaseDocument orientGraph, UUID uuid) throws org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException Resolves and returns the correspondingElementManagementinstance for the specified element UUID.- Parameters:
workingContext- the working environmentorientGraph- the database document connectionuuid- the UUID of the element to resolve- Returns:
- the resolved
ElementManagementinstance - Throws:
org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException- if the element does not exist or has an unmanageable type
-
getERManagement
public static ElementManagement<?,?> getERManagement(Environment workingContext, com.orientechnologies.orient.core.db.document.ODatabaseDocument orientGraph, com.orientechnologies.orient.core.record.OElement element) throws org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException Resolves and returns the correspondingElementManagementinstance for the specified database element.- Parameters:
workingContext- the working environmentorientGraph- the database document connectionelement- the OrientDB element to resolve- Returns:
- the resolved
ElementManagementinstance - Throws:
org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException- if the element type is not manageable
-
addToContextNoPropagationConstraint
public static Map<UUID,org.gcube.com.fasterxml.jackson.databind.JsonNode> addToContextNoPropagationConstraint(Map<UUID, org.gcube.com.fasterxml.jackson.databind.JsonNode> expectedInstances, UUID contextUUID, boolean dryRun) throws org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException, org.gcube.informationsystem.resourceregistry.api.exceptions.contexts.ContextException, org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryExceptionAdds a map of expected instances to the specified context without evaluating propagation constraints.- Parameters:
expectedInstances- map of expected instances, from UUID to JSON nodecontextUUID- the UUID of the target contextdryRun-trueto simulate the operation without committing- Returns:
- the map of successfully added instances
- Throws:
org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException- if the context does not existorg.gcube.informationsystem.resourceregistry.api.exceptions.contexts.ContextException- if context rules are violatedorg.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException- on database or system failure
-
removeFromContextNoPropagationConstraint
public static Map<UUID,org.gcube.com.fasterxml.jackson.databind.JsonNode> removeFromContextNoPropagationConstraint(Map<UUID, org.gcube.com.fasterxml.jackson.databind.JsonNode> expectedInstances, UUID contextUUID, boolean dryRun) throws org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException, org.gcube.informationsystem.resourceregistry.api.exceptions.contexts.ContextException, org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryExceptionRemoves a map of expected instances from the specified context without evaluating propagation constraints.- Parameters:
expectedInstances- map of expected instances, from UUID to JSON nodecontextUUID- the UUID of the target contextdryRun-trueto simulate the operation without committing- Returns:
- the map of successfully removed instances
- Throws:
org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException- if the context does not existorg.gcube.informationsystem.resourceregistry.api.exceptions.contexts.ContextException- if removal rules are violatedorg.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException- on database or system failure
-