1
////////////////////////////////////////////////////////////////////////////////
3
// This file is part of Toolkit for Conceptual Modeling (TCM).
4
// (c) copyright 1997, Vrije Universiteit Amsterdam.
5
// Author: Frank Dehne (frank@cs.vu.nl).
7
// TCM is free software; you can redistribute it and/or modify
8
// it under the terms of the GNU General Public License as published
10
// the Free Software Foundation; either version 2 of the License, or
11
// (at your option) any later version.
13
// TCM is distributed in the hope that it will be useful,
14
// but WITHOUT ANY WARRANTY; without even the implied warranty of
15
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
// GNU General Public License for more details.
18
// You should have received a copy of the GNU General Public License
19
// along with TCM; if not, write to the Free Software
20
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
22
////////////////////////////////////////////////////////////////////////////////
26
TypeName Code::typeNames[] = {
27
// general node shape types
30
{DOUBLE_BOX, "DoubleBox"},
31
{TRIPLE_BOX, "TripleBox"},
32
{UR_LABELED_BOX, "URLabeledBox"},
33
{ARROW_BOX, "ArrowBox"},
34
{TEXT_BOX, "TextBox"},
35
{ARROW_TEXT_BOX, "ArrowTextBox"},
38
{BLACK_DOT, "BlackDot"},
39
{WHITE_DOT, "WhiteDot"},
40
{ELLIPSIS, "Ellipsis"},
41
{BULLS_EYE, "BullsEye"},
42
{MINI_ARROW_ELLIPSE, "MiniArrowEllipse"},
43
{LEFT_LINE_CIRCLE, "LeftLineCircle"},
44
{ROUNDED_BOX, "RoundedBox"},
45
{ELLIPSED_BOX, "EllipsedBox"},
47
{HORIZONTAL_BAR, "HorizontalBar"},
48
{VERTICAL_BAR, "VerticalBar"},
49
{TRIANGLE, "Triangle"},
51
{MINI_BOX, "MiniBox"},
52
{MINI_ELLIPSE, "MiniEllipse"},
53
{MINI_DIAMOND, "MiniDiamond"},
54
{MINI_TRIANGLE, "MiniTriangle"},
55
{NOTE_BOX, "NoteBox"},
56
{SOLID_HORIZONTAL_BAR, "SolidHorizontalBar"},
57
{SOLID_VERTICAL_BAR, "SolidVerticalBar"},
58
{STICKMAN, "StickMan"},
59
{BUILDING_BLOCK, "BuildingBlock"},
62
{SUB_FOLDER, "SubFolder"},
67
{FLASH_ARROW, "FlashArrow"},
71
{T4_TLIST_LINE, "T4TListLine"},
72
{TRANSITION_ARROW, "TransitionArrow"},
73
{C2R2_LINE, "C2R2Line"},
74
{C2R2_MLIST_LINE, "C2R2MListLine"},
76
// used in older file formats.
78
{T1_ARROW, "T1Arrow"},
79
{DOUBLE_ARROW, "DoubleArrow"},
80
{DOUBLE_HEADED_ARROW, "DoubleHeadedArrow"},
84
{GENERIC_NODE, "GenericNode"},
86
{EMPTY_NODE, "EmptyNode"},
87
{ENTITY_TYPE, "EntityType"},
88
{VALUE_TYPE, "ValueType"},
89
{TAXONOMY_JUNCTION, "TaxonomyJunction"},
90
{RELATIONSHIP_NODE, "RelationshipNode"},
91
{SUBJECT_AREA, "SubjectArea"},
92
{CLASS_NODE, "ClassNode"},
93
{MODE_JUNCTION, "ModeJunction"},
94
{DATA_PROCESS, "DataProcess"},
95
{DATA_STORE, "DataStore"},
96
{EVENT_STORE, "EventStore"},
97
{EXTERNAL_ENTITY, "ExternalEntity"},
98
{SPLIT_MERGE_NODE, "SplitMergeNode"},
99
{CONTROL_PROCESS, "ControlProcess"},
100
{PS_PROCESS, "PSProcess"},
101
{DATA_STREAM, "DataStream"},
102
{STATE_VECTOR, "StateVector"},
103
{CONTROLLED_DATA_STREAM, "ControlledDataStream"},
104
{SN_PROCESS, "SNProcess"},
106
{INITIAL_STATE, "InitialState"},
107
{DECISION_POINT, "DecisionPoint"},
108
{PROCESS_GRAPH_NODE, "ProcessGraphNode"},
109
{PROCESS_GRAPH_ROOT, "ProcessGraphRoot"},
110
{TEXT_ROOT, "TextRoot"},
111
{TEXT_NODE, "TextNode"},
112
{FINAL_STATE, "FinalState"},
115
{GENERIC_EDGE, "GenericEdge"},
116
{COMMENT_LINK, "CommentLink"},
117
{EMPTY_EDGE, "EmptyEdge"},
118
{TEXT_EDGE, "TextEdge"},
119
{BINARY_RELATIONSHIP, "BinaryRelationship"},
120
{FUNCTION, "Function"},
121
{ISA_RELATIONSHIP, "IsaRelationship"},
122
{COMPONENT_FUNCTION, "ComponentFunction"},
123
{DATA_FLOW, "DataFlow"},
124
{BIDIRECTIONAL_DATA_FLOW, "BidirectionalDataFlow"},
125
{CONTINUOUS_DATA_FLOW, "ContinuousDataFlow"},
126
{EVENT_FLOW, "EventFlow"},
127
{CONTINUOUS_EVENT_FLOW, "ContinuousEventFlow"},
128
{CONNECTION_START, "ConnectionStart"},
129
{CONNECTION_END, "ConnectionEnd"},
130
{TRANSITION, "Transition"},
137
{SSD_CLASS_NODE, "SSDClassNode"},
138
{SSD_OBJECT_NODE, "SSDObjectNode"},
139
{SSD_ASSOCIATION_NODE, "SSDAssociationNode"},
140
{SSD_GENERALIZATION_NODE, "SSDGeneralizationNode"},
141
{SSD_AGGREGATION_NODE, "SSDAggregationNode"},
142
{UCD_ACTOR_NODE, "UCDActorNode"},
143
{UCD_USE_CASE_NODE, "UCDUseCaseNode"},
144
{UCD_SYSTEM_NODE, "UCDSystemNode"},
145
{ATD_SYNCHRONIZATION_NODE, "ATDSynchronizationNode"},
146
{ATD_ACTION_STATE_NODE, "ATDActionStateNode"},
147
{ATD_WAIT_STATE_NODE, "ATDWaitStateNode"},
148
{ATD_DECISION_STATE_NODE, "ATDDecisionStateNode"},
149
{ATD_INITIAL_STATE_NODE, "ATDInitialStateNode"},
150
{ATD_FINAL_STATE_NODE, "ATDFinalStateNode"},
151
{CPD_COMPONENT_NODE, "CPDComponentNode"},
152
{CPD_INTERFACE_NODE, "CPDInterfaceNode"},
153
{DPD_RESOURCE_NODE, "DPDResourceNode"},
154
{CBD_ACTOR_NODE, "CBDActorNode"},
155
{CBD_CLASS_NODE, "CBDClassNode"},
156
{CBD_OBJECT_NODE, "CBDObjectNode"},
157
{SCD_AND_STATE, "SCDAndState"},
158
{SCD_DECISION_STATE, "SCDDecisionState"},
159
{SCD_DEFAULT_STATE, "SDCDefaultState"},
160
{SCD_FINAL_STATE, "SCDFinalState"},
161
{SCD_OR_STATE, "SCDOrState"},
162
{SCD_SYNCHRONIZATION_STATE, "SCDSynchronizationState"},
165
{SSD_BINARY_ASSOCIATION_EDGE, "SSDBinaryAssociationEdge"},
166
{SSD_GENERALIZATION_EDGE, "SSDGeneralizationEdge"},
167
{SSD_OBJECT_LINK_EDGE, "SSDObjectLinkEdge"},
168
{SSD_PARTICIPANT_LINK_EDGE, "SSDParticipantLinkEdge"},
169
{SSD_ASSOCIATION_LINK_EDGE, "SSDAssociationLinkEdge"},
170
{SSD_AGGREGATION_EDGE, "SSDAggregationEdge"},
171
{SSD_COMPOSITION_EDGE, "SSDCompositionEdge"},
172
{UCD_BINARY_ASSOCIATION_EDGE, "UCDBinaryAssociationEdge"},
173
{UCD_GENERALIZATION_EDGE, "UCDGeneralizationEdge"},
174
{ATD_TRANSITION_EDGE, "ATDTransitionEdge"},
175
{CPD_REALIZATION_EDGE, "CPDRealizationEdge"},
176
{CPD_DEPENDENCY_EDGE, "CPDDependencyEdge"},
177
{DPD_COMMUNICATION_EDGE, "DPDCommunicationEdge"},
178
{CBD_CLASS_LINK_EDGE, "CBDClassLinkEdge"},
179
{CBD_OBJECT_LINK_EDGE, "CBDObjectLinkEdge"},
180
{SCD_TRANSITION_EDGE, "SCDTransitionEdge"},
181
{SCD_AND_EDGE, "SCDAndEdge"},
183
// UML specific shape types
184
{SSD_SINGLE_OBJECT_BOX, "SSDSingleObjectBox"},
185
{SSD_DOUBLE_OBJECT_BOX, "SSDDoubleObjectBox"},
186
{SSD_SINGLE_CLASS_BOX, "SSDSingleClassBox"},
187
{SSD_DOUBLE_CLASS_BOX, "SSDDoubleClassBox"},
188
{SSD_TRIPLE_CLASS_BOX, "SSDTripleClassBox"},
189
{SSD_RCLINE, "SSDRCLine"},
190
{SSD_R2LINE, "SSDR2Line"},
191
{UCD_SINGLE_CLASS_BOX, "UCDSingleClassBox"},
192
{UCD_BOUNDARY_BOX, "UCDBoundaryBox"},
193
{CBD_SINGLE_CLASS_BOX, "CBDSingleClassBox"},
194
{CBD_SINGLE_OBJECT_BOX, "CBDSingleObjectBox"},
195
{SCD_AND_STATE_BOX, "SCDAndStateBox"},
196
{SCD_AND_LINE, "SCDAndLine"},
197
{OBJECT_STICKMAN, "ObjectStickMan"},
198
{ACTOR_CLASS_BOX, "ActorClassBox"},
199
{ACTOR_OBJECT_BOX, "ActorObjectBox"},
200
{GD_BOUNDARY_SHAPE, "GDBoundaryShape"},
201
{GD_CONTROLLER_SHAPE, "GDControllerShape"},
202
{GD_ENTITY_SHAPE, "GDEntityShape"},
205
{CSO_CLASS_BOX, "CSO_ClassBox"},
206
{CSO_OBJECT_BOX, "CSO_ObjectBox"},
207
{CSO_CLASS, "CSO_Class"},
208
{CSO_OBJECT, "CSO_Object"},
209
{CSO_RELATIONSHIP, "CSO_Relationship"},
210
{CSO_PARTICIPANT, "CSO_Participant"},
211
{CSO_JUNCTION, "CSO_Junction"},
212
{CSO_INSTANTIATION, "CSO_Instantiation"},
213
{CSO_POSSESSION, "CSO_Possession"},
214
{CSO_SUBCLASSES, "CSO_Subclasses"},
215
{CSO_AGGREGATION, "CSO_Aggregation"},
216
{CSO_GENERALIZATION, "CSO_Generalization"},
217
{CSO_CONSTRAINT_EDGE, "CSO_ConstraintEdge"},
220
{CE_MUST_EVENT_NODE, "CE_MustEventNode"},
221
{CE_NEC_EVENT_NODE, "CE_NecEventNode"},
222
{CE_PERMIT_EVENT_NODE, "CE_PermitEventNode"},
223
{CE_START_NODE, "CE_StartNode"},
224
{CE_FINAL_NODE, "CE_FinalNode"},
225
{CE_EVENT_EDGE, "CE_EventEdge"},
226
{CE_NONEVENT_EDGE, "CE_NonEventEdge"},
229
// Conversions for older file formats
230
// in the past we had "Dashed" shape types (how inconvenient)
232
{CIRCLE, "DashedCircle"},
233
{CIRCLE, "DashedTCircle"},
234
{DIAMOND, "DashedDiamond"},
235
{ELLIPSE, "DashedEllipse"},
236
{MINI_ELLIPSE, "DashedDot"},
237
{HEXAGON, "DashedHexagon"},
238
{HORIZONTAL_BAR, "DashedHorizontalBar"},
239
{ROUNDED_BOX, "DashedRoundedBox"},
240
{TRIANGLE, "DashedTriangle"},
241
{LINE, "DashedLine"},
242
{ARROW, "DashedArrow"},
243
{T1_ARROW, "DashedC1Line"},
244
{T1_ARROW, "DashedC1Arrow"},
245
{DOUBLE_ARROW, "DashedDoubleArrow"},
246
{DOUBLE_HEADED_ARROW, "DashedDoubleHeadedArrow"},
248
// old node shape type names
249
{BULLS_EYE, "BlackDotEllipse"},
251
{CIRCLE, "TopLabeledCircle"},
252
{MINI_ELLIPSE, "Dot"},
253
{MINI_TRIANGLE, "BlackMiniTriangle"},
254
{HORIZONTAL_BAR, "Bar"},
255
{LEFT_LINE_CIRCLE, "LLCircle"},
256
{UR_LABELED_BOX, "URBox"},
258
// old line type names
259
{ARROW, "PredefinedArrow"},
260
{LINE, "PredefinedLine"},
261
{T1_ARROW, "C1Arrow"},
262
{T1_ARROW, "C1Line"},
263
{T1_ARROW, "EndC1Arrow"},
264
{T1_LINE, "StartC1Line"},
266
{TRANSITION_ARROW, "HLineArrow"},
268
// old node type names
269
{CLASS_NODE, "ObjectClass"},
270
{DATA_PROCESS, "DataTransformation"},
271
{PS_PROCESS, "Process"},
272
{RELATIONSHIP_NODE, "Relationship"},
274
// old edge type names
275
{BIDIRECTIONAL_DATA_FLOW, "BiDataFlow"},
276
{BINARY_RELATIONSHIP, "BinaryAssociation"},
277
{BINARY_RELATIONSHIP, "ManyManyRelationship"},
278
{COMMENT_LINK, "NoteBoxPath"},
279
{COMMENT_LINK, "NoteBoxLink"},
281
// old UML type names
282
{SSD_OBJECT_NODE, "ObjectNode"},
283
{SSD_AGGREGATION_NODE, "AggregationJunction"},
284
{UCD_SYSTEM_NODE, "UCSystem"},
285
{UCD_ACTOR_NODE, "Actor"},
286
{UCD_USE_CASE_NODE, "UseCase"},
287
{ATD_ACTION_STATE_NODE, "ActionState"},
288
{ATD_WAIT_STATE_NODE, "InactiveState"},
289
{ATD_DECISION_STATE_NODE, "DecisionState"},
290
{ATD_SYNCHRONIZATION_NODE, "Synchronization"},
291
{SSD_ASSOCIATION_LINK_EDGE, "AssociationPath"},
292
{SSD_OBJECT_LINK_EDGE, "ObjectLink"},
293
{SSD_ASSOCIATION_LINK_EDGE, "AssociationLink"},
294
{SSD_PARTICIPANT_LINK_EDGE, "ParticipantLink"},
295
{SSD_AGGREGATION_EDGE, "Aggregation"},
296
{SSD_COMPOSITION_EDGE, "Composition"},
297
{SSD_SINGLE_OBJECT_BOX, "ObjectBox"},
298
{SSD_DOUBLE_OBJECT_BOX, "ObjectDoubleBox"},
299
{UCD_SINGLE_CLASS_BOX, "UCSingleClassBox"},
300
{UCD_BOUNDARY_BOX, "UCBoundaryBox"},
305
const char *Code::GetName(int code) {
306
TypeName *n = &typeNames[0];
307
while (n->code != 0) {
315
int Code::GetCode(const char *name) {
316
TypeName *n = &typeNames[0];
317
while (n->code != 0) {
318
if (equal(name, n->name))
325
int Code::GetIndex(int code, const int codelist[]) {
327
while (codelist[i] != 0) {
328
if (codelist[i] == code)