/* * Copyright 2015 JBoss, by Red Hat, Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.uberfire.ext.wires.bpmn.client; import java.util.Collections; import java.util.HashSet; import java.util.Set; import org.uberfire.ext.wires.bpmn.api.model.BpmnEdge; import org.uberfire.ext.wires.bpmn.api.model.BpmnGraph; import org.uberfire.ext.wires.bpmn.api.model.BpmnGraphNode; import org.uberfire.ext.wires.bpmn.api.model.Role; import org.uberfire.ext.wires.bpmn.api.model.impl.nodes.ProcessNode; import org.uberfire.ext.wires.bpmn.api.model.impl.roles.DefaultRoleImpl; import org.uberfire.ext.wires.bpmn.api.model.impl.rules.CardinalityRuleImpl; import org.uberfire.ext.wires.bpmn.api.model.impl.rules.ConnectionRuleImpl; import org.uberfire.ext.wires.bpmn.api.model.impl.rules.ContainmentRuleImpl; import org.uberfire.ext.wires.bpmn.api.model.rules.CardinalityRule; import org.uberfire.ext.wires.bpmn.api.model.rules.ConnectionRule; import org.uberfire.ext.wires.bpmn.api.model.rules.Rule; import static org.junit.Assert.*; /** * Base for Rule related tests */ public abstract class AbstractBaseRuleTest { protected Set<Rule> getContainmentRules() { final Set<Rule> rules = new HashSet<Rule>(); rules.add(new ContainmentRuleImpl("Process Node Containment Rule", new ProcessNode().getContent().getId(), new HashSet<Role>() {{ add(new DefaultRoleImpl("all")); }})); return rules; } protected Set<Rule> getCardinalityRules() { final Set<Rule> rules = new HashSet<Rule>(); rules.add(new CardinalityRuleImpl("Start Node Cardinality Rule", new DefaultRoleImpl("sequence_start"), 0, 1, Collections.EMPTY_SET, new HashSet<CardinalityRule.ConnectorRule>() {{ add(new CardinalityRule.ConnectorRule() { @Override public long getMinOccurrences() { return 0; } @Override public long getMaxOccurrences() { return 1; } @Override public Role getRole() { return new DefaultRoleImpl("general_edge"); } @Override public String getName() { return "Start Node Outgoing Connector Rule 1"; } }); }})); rules.add(new CardinalityRuleImpl("End Node Cardinality Rule", new DefaultRoleImpl("sequence_end"), 0, 1, new HashSet<CardinalityRule.ConnectorRule>() {{ add(new CardinalityRule.ConnectorRule() { @Override public long getMinOccurrences() { return 0; } @Override public long getMaxOccurrences() { return 1; } @Override public Role getRole() { return new DefaultRoleImpl("general_edge"); } @Override public String getName() { return "End Node Incoming Connector Rule 1"; } }); }}, Collections.EMPTY_SET)); return rules; } protected Set<Rule> getConnectionRules() { final Set<Rule> rules = new HashSet<Rule>(); rules.add(new ConnectionRuleImpl("StartNode to TestDummyNode Connector Rule", new DefaultRoleImpl("general_edge"), new HashSet<ConnectionRule.PermittedConnection>() {{ add(new ConnectionRule.PermittedConnection() { @Override public Role getStartRole() { return new DefaultRoleImpl("sequence_start"); } @Override public Role getEndRole() { return new DefaultRoleImpl("dummy"); } }); add(new ConnectionRule.PermittedConnection() { @Override public Role getStartRole() { return new DefaultRoleImpl("dummy"); } @Override public Role getEndRole() { return new DefaultRoleImpl("sequence_end"); } }); add(new ConnectionRule.PermittedConnection() { @Override public Role getStartRole() { return new DefaultRoleImpl("dummy"); } @Override public Role getEndRole() { return new DefaultRoleImpl("dummy"); } }); }})); return rules; } protected void assertProcessContainsNodes(final BpmnGraph graph, final BpmnGraphNode... nodes) { final Set<BpmnGraphNode> nodesToExist = new HashSet<BpmnGraphNode>(); for (BpmnGraphNode node : nodes) { nodesToExist.add(node); } for (BpmnGraphNode gn : graph) { for (BpmnGraphNode node : nodes) { if (gn.equals(node)) { nodesToExist.remove(node); } } } if (!nodesToExist.isEmpty()) { final StringBuffer sb = new StringBuffer("Not all GraphNodes were present in Graph.\n"); for (BpmnGraphNode node : nodesToExist) { sb.append("--> Not present: GraphNode [" + node.toString() + "].\n"); } fail(sb.toString()); } } protected void assertProcessNotContainsNodes(final BpmnGraph graph, final BpmnGraphNode... nodes) { final Set<BpmnGraphNode> nodesToNotExist = new HashSet<BpmnGraphNode>(); for (BpmnGraphNode gn : graph) { for (BpmnGraphNode node : nodes) { if (gn.equals(node)) { nodesToNotExist.add(node); } } } if (!nodesToNotExist.isEmpty()) { final StringBuffer sb = new StringBuffer("One or more GraphNodes were present in Graph.\n"); for (BpmnGraphNode node : nodesToNotExist) { sb.append("--> Present: GraphNode [" + node.toString() + "].\n"); } fail(sb.toString()); } } protected void assertNodeContainsOutgoingEdges(final BpmnGraphNode node, final BpmnEdge... edges) { final Set<BpmnEdge> edgesToExist = new HashSet<BpmnEdge>(); for (BpmnEdge edge : edges) { edgesToExist.add(edge); } for (BpmnEdge edge : node.getOutEdges()) { for (BpmnEdge be : edges) { if (be.equals(edge)) { edgesToExist.remove(edge); } } } if (!edgesToExist.isEmpty()) { final StringBuffer sb = new StringBuffer("Not all Edges were present in GraphNode Outgoing connections.\n"); for (BpmnEdge edge : edgesToExist) { sb.append("--> Not present: Edge [" + edge.toString() + "].\n"); } fail(sb.toString()); } } protected void assertNodeContainsIncomingEdges(final BpmnGraphNode node, final BpmnEdge... edges) { final Set<BpmnEdge> edgesToExist = new HashSet<BpmnEdge>(); for (BpmnEdge edge : edges) { edgesToExist.add(edge); } for (BpmnEdge edge : node.getInEdges()) { for (BpmnEdge be : edges) { if (be.equals(edge)) { edgesToExist.remove(edge); } } } if (!edgesToExist.isEmpty()) { final StringBuffer sb = new StringBuffer("Not all Edges were present in GraphNode Incoming connections.\n"); for (BpmnEdge edge : edgesToExist) { sb.append("--> Not present: Edge [" + edge.toString() + "].\n"); } fail(sb.toString()); } } }