@Override public boolean accepts(final CanDock rule, final NodeDockingContext context) { final Set<String> parentLabels = evalUtils.getLabels(context.getParent()); // As for acceptance checking, the delegated handler only needs the parent node id, no need // to calculate roles for the candidate node, so using an empty set. return dockingHandler.accepts(rule, RuleContextBuilder.DomainContexts.docking(parentLabels, Collections.emptySet())); }
protected ParentAssignment getParentAssignment(final Node<View<?>, Edge> parent, final Object definition) { Objects.requireNonNull(definition); final Set<String> labels = clientDefinitionManager.adapters().forDefinition().getLabels(definition); final RuleSet ruleSet = canvasHandler.getRuleSet(); // Check containment rules. if (null != parent) { final Set<String> parentLabels = parent.getLabels(); final RuleViolations dockingViolations = ruleManager.evaluate(ruleSet, RuleContextBuilder.DomainContexts.docking(parentLabels, labels)); if (isValid(dockingViolations)) { return ParentAssignment.DOCKING; } final RuleViolations containmentViolations = ruleManager.evaluate(ruleSet, RuleContextBuilder.DomainContexts.containment(parentLabels, labels)); if (isValid(containmentViolations)) { return ParentAssignment.CONTAINMENT; } } return ParentAssignment.NONE; }
@Override public RuleViolations evaluate(final CanDock rule, final NodeDockingContext context) { final Node<? extends Definition<?>, ? extends Edge> target = context.getCandidate(); final Set<String> parentLabels = evalUtils.getLabels(context.getParent()); final Set<String> candidateLabels = evalUtils.getLabels(target); final DefaultRuleViolations result = new DefaultRuleViolations(); result.addViolations( dockingHandler .evaluate(rule, RuleContextBuilder.DomainContexts.docking(parentLabels, candidateLabels)) ); return GraphEvaluationHandlerUtils.addViolationsSourceUUID(target.getUUID(), result); } }