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
applying 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
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
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
NullGraphTraversalProcessor has no effects at
all. Several graph requests define their own
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
parseRules method of GraphPolicyRule which provides a
GraphPolicy based on parsing a sequence of
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,
marks certain nodes as
IS_NOT_LASTonce they are
in skipping the head, prevents traversal beyond certain node types
in processing the remaining graph, preserves permissions overrides established in the first phase
prevents traversal beyond certain node types
OMERO.server provides the GraphPolicyRulePredicate interface which is
used for the
; suffix notation in rule matches. For example,
group=system and PermissionsPredicate can match
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.