FlowchartElements.java |
1 /**************************************************************************** 2 * This demo file is part of yFiles for Java 2.14. 3 * Copyright (c) 2000-2017 by yWorks GmbH, Vor dem Kreuzberg 28, 4 * 72070 Tuebingen, Germany. All rights reserved. 5 * 6 * yFiles demo files exhibit yFiles for Java functionalities. Any redistribution 7 * of demo files in source code or binary form, with or without 8 * modification, is not permitted. 9 * 10 * Owners of a valid software license for a yFiles for Java version that this 11 * demo is shipped with are allowed to use the demo source code as basis 12 * for their own yFiles for Java powered applications. Use of such programs is 13 * governed by the rights and conditions as set out in the yFiles for Java 14 * license agreement. 15 * 16 * THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESS OR IMPLIED 17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN 19 * NO EVENT SHALL yWorks BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 21 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 22 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 23 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 24 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 * 27 ***************************************************************************/ 28 package demo.view.flowchart.layout; 29 30 import y.base.DataProvider; 31 import y.base.Edge; 32 import y.base.Graph; 33 import y.base.GraphInterface; 34 import y.base.Node; 35 36 /** 37 * Provides type constants and corresponding <code>isXYZType()</code> methods for Flowchart symbols. These constants and 38 * methods are used by {@link FlowchartLayouter} and its associated classes to identify specific nodes and handle them 39 * appropriately. 40 * 41 * @noinspection ImplicitNumericConversion 42 */ 43 public class FlowchartElements { 44 /** 45 * Type constant for an invalid type. 46 */ 47 public static final byte TYPE_INVALID = 0; 48 /** 49 * Type constant for an event type. 50 */ 51 public static final byte NODE_TYPE_EVENT = 1; 52 /** 53 * Type constant for a start event type. 54 */ 55 public static final byte NODE_TYPE_START_EVENT = 7; 56 /** 57 * Type constant for a end event type. 58 */ 59 public static final byte NODE_TYPE_END_EVENT = 9; 60 /** 61 * Type constant for a decision type. 62 */ 63 public static final byte NODE_TYPE_DECISION = 2; 64 /** 65 * Type constant for a process type. 66 */ 67 public static final byte NODE_TYPE_PROCESS = 3; 68 /** 69 * Type constant for a group type. 70 */ 71 public static final byte NODE_TYPE_GROUP = 8; 72 /** 73 * Type constant for a annotation type. 74 */ 75 public static final byte NODE_TYPE_ANNOTATION = 10; 76 /** 77 * Type constant for a pool type. 78 */ 79 public static final byte NODE_TYPE_POOL = 12; 80 /** 81 * Type constant for a data type. 82 */ 83 public static final byte NODE_TYPE_DATA = 11; 84 85 /** 86 * Type constant for a connection type (sequence flow). 87 */ 88 public static final byte EDGE_TYPE_SEQUENCE_FLOW = 4; 89 90 /** 91 * Type constant for a connection type (message flow). 92 */ 93 public static final byte EDGE_TYPE_MESSAGE_FLOW = 5; 94 95 /** 96 * Type constant for a connection type (association). 97 */ 98 public static final byte EDGE_TYPE_ASSOCIATION = 6; 99 100 /** 101 * Returns true for activity nodes. For Flowcharts, this are Process, Data, and Group. For BPMN, this are Task and 102 * Sub-Process. 103 */ 104 static boolean isActivity(final Graph graph, final Node node) { 105 final byte type = getType(graph, node); 106 return (type == NODE_TYPE_PROCESS) || (type == NODE_TYPE_DATA) || (type == NODE_TYPE_GROUP); 107 } 108 109 /** 110 * Returns true for group nodes. For BPMN, this is Sub-Process. 111 */ 112 static boolean isGroup(final Graph graph, final Node node) { 113 return getType(graph, node) == NODE_TYPE_GROUP; 114 } 115 116 /** 117 * Returns true for annotation nodes. 118 */ 119 static boolean isAnnotation(final Graph graph, final Node node) { 120 return getType(graph, node) == NODE_TYPE_ANNOTATION; 121 } 122 123 /** 124 * Returns true for event nodes. For Flowchart, this are start and terminator, delay, display, manual operation and 125 * preparation. For BPMN, this are start, end and other events. 126 */ 127 static boolean isEvent(final Graph graph, final Node node) { 128 final byte type = getType(graph, node); 129 return (type == NODE_TYPE_START_EVENT) || (type == NODE_TYPE_EVENT) || (type == NODE_TYPE_END_EVENT); 130 } 131 132 /** 133 * Returns true for start event nodes. 134 */ 135 static boolean isStartEvent(final Graph graph, final Node node) { 136 return getType(graph, node) == NODE_TYPE_START_EVENT; 137 } 138 139 /** 140 * Returns true for end event nodes. 141 */ 142 static boolean isEndEvent(final Graph graph, final Node node) { 143 return getType(graph, node) == NODE_TYPE_END_EVENT; 144 } 145 146 /** 147 * Returns true for decision nodes. For BPMN, this are all Gateways. 148 */ 149 static boolean isDecision(final Graph graph, final Node node) { 150 return getType(graph, node) == NODE_TYPE_DECISION; 151 } 152 153 static boolean isUndefined(final Graph graph, final Edge edge) { 154 return getType(graph, edge) == TYPE_INVALID; 155 } 156 157 static boolean isRegularEdge(final Graph graph, final Edge edge) { 158 return getType(graph, edge) == EDGE_TYPE_SEQUENCE_FLOW; 159 } 160 161 static boolean isMessageFlow(final Graph graph, final Edge edge) { 162 return getType(graph, edge) == EDGE_TYPE_MESSAGE_FLOW; 163 } 164 165 static byte getType(final GraphInterface graph, final Edge dataHolder) { 166 final DataProvider dataProvider = graph.getDataProvider(FlowchartLayouter.EDGE_TYPE_DPKEY); 167 return dataProvider == null ? TYPE_INVALID : (byte) dataProvider.getInt(dataHolder); 168 } 169 170 static byte getType(final GraphInterface graph, final Node dataHolder) { 171 final DataProvider dataProvider = graph.getDataProvider(FlowchartLayouter.NODE_TYPE_DPKEY); 172 return dataProvider == null ? TYPE_INVALID : (byte) dataProvider.getInt(dataHolder); 173 } 174 175 private FlowchartElements() { 176 } 177 } 178