Java classes for model graph operations
This description of the roles played by server-side Java classes assumes familiarity with the Model graph operations machinery of OMERO.server.
Traversing and acting
OMERO.server’s GraphTraversal is at the core of all graph operations,
querying the database to establish the model graph, with the help of
GraphPathBeanapplying the graph operation’s policy rules and changing the graph node states
acting on the model objects according to the final state of the graph.
GraphTraversal’s Processor interface is
implemented by specific graph requests to act on the selected model
objects. GraphTraversal implements its PlanExecutor interface with
code that calls those Processor methods: it provides that
PlanExecutor implementation back to requests so that they can
control exactly if or when to act via their Processor
implementation.
ModelObjectSequencer ensures that objects
are acted upon in the proper order. For example, in deleting
OriginalFile instances, a directory’s contents are deleted before
their containing directory is deleted.
In OMERO.blitz, BaseGraphTraversalProcessor offers a useful
base class for implementing Processor and
NullGraphTraversalProcessor has no effects at
all. Several graph requests define their own InternalProcessor
class.
Policy rules for node transitions
GraphTraversal manages the traversal of the model graph but it is
instances of OMERO.server’s GraphPolicy that decide how the graph’s
nodes are to change state during traversal. The class is instantiated by
the static parseRules method of GraphPolicyRule which provides a
GraphPolicy based on parsing a sequence of GraphPolicyRule
instances. Each of those rules describes in textual form how it matches
graph fragments and what to do in the event of a match.
OMERO.blitz’s BaseGraphPolicyAdjuster provides convenient
hooks for adjusting how an existing GraphPolicy transitions nodes.
Classes that do such adjustment include,
- ChildOptionsPolicy
marks certain nodes as
IS_LASTorIS_NOT_LASTonce they areRELEVANT- SkipHeadPolicy
in skipping the head, prevents traversal beyond certain node types
in processing the remaining graph, preserves permissions overrides established in the first phase
- SkipTailPolicy
prevents traversal beyond certain node types
OMERO.server provides the GraphPolicyRulePredicate interface which is
used for the ; suffix notation in rule matches. For example,
GroupPredicate can
match group=system and PermissionsPredicate can match
perms=r?ra??.
OMERO.blitz graph requests
The Graph requests of OMERO.blitz benefit from helper classes. GraphRequestFactory instantiates the graph request implementations and provides them means to create a context-aware GraphHelper. This helper includes the code that is common to many of the graph requests. Helper methods not requiring any context are instead collected in the stateless GraphUtil.