@Override
@SuppressWarnings("unchecked")
public RuleViolations evaluate(final EdgeOccurrences rule,
final ConnectorCardinalityContext context) {
final DefaultRuleViolations result = new DefaultRuleViolations();
final Node<? extends View<?>, ? extends Edge> candidate =
(Node<? extends View<?>, ? extends Edge>) context.getCandidate();
final Edge<? extends View<?>, Node> edge = context.getEdge();
final Optional<CardinalityContext.Operation> operation = context.getOperation();
final EdgeCardinalityContext.Direction direction = context.getDirection();
final List<? extends Edge> edges = isIncoming(direction) ?
candidate.getInEdges() : candidate.getOutEdges();
final String edgeId = evalUtils.getElementDefinitionId(edge);
final int count = evalUtils.countEdges(edgeId,
edges);
result.addViolations(
edgeCardinalityEvaluationHandler
.evaluate(rule,
RuleContextBuilder.DomainContexts.edgeCardinality(candidate.getLabels(),
edgeId,
count,
rule.getDirection(),
operation))
);
return GraphEvaluationHandlerUtils.addViolationsSourceUUID(edge.getUUID(),
result);
}