| UmlClassModel.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.uml;
29
30 import java.util.ArrayList;
31 import java.util.Iterator;
32 import java.util.List;
33
34 /**
35 * The class model holds the class details like its name, attributes and operations. This part will be stored when the
36 * diagram is saved. The class {@link UmlClassModelIOHandler} handles the (de)serialization.
37 *
38 * In addition it stores the visual state of the class: which section is currently open and which list item is currently
39 * selected. This part will not be (de)serialized. The {@link y.view.GenericNodeRealizer uml class realizer} stores the
40 * model in its {@link y.view.GenericNodeRealizer#getUserData() user data field}.
41 */
42 public class UmlClassModel implements Cloneable {
43
44 /** Constant that is used to specify that the currently selected item belongs to the attribute list. */
45 public static final int LIST_ATTRIBUTES = 0;
46
47 /** Constant that is used to specify that the currently selected item belongs to the operation list. */
48 public static final int LIST_OPERATIONS = 1;
49
50 /** Constant that is used to notify that no list item is currently selected. */
51 public static final int LIST_INDEX_NONE = -1;
52
53 private String className;
54 private List attributes;
55 private List operations;
56
57 private boolean sectionsVisible;
58 private boolean attributesVisible;
59 private boolean operationsVisible;
60 private int selectedList;
61 private int selectedListIndex;
62
63 public UmlClassModel() {
64 this("Name", new ArrayList(), new ArrayList());
65 }
66
67 public UmlClassModel(final String name, final List attributes, final List operations) {
68 this.attributes = attributes;
69 this.className = name;
70 this.operations = operations;
71
72 sectionsVisible = true;
73 attributesVisible = true;
74 operationsVisible = true;
75 selectedList = LIST_ATTRIBUTES;
76 selectedListIndex = LIST_INDEX_NONE;
77 }
78
79 public String getClassName() {
80 return className;
81 }
82
83 public void setClassName(final String className) {
84 this.className = className;
85 }
86
87 public List getAttributes() {
88 return attributes;
89 }
90
91 public void setAttributes(final List attributes) {
92 this.attributes = attributes;
93 }
94
95 public List getOperations() {
96 return operations;
97 }
98
99 public void setOperations(final List operations) {
100 this.operations = operations;
101 }
102
103 /**
104 * Checks whether or not the sections for attributes and operations are visible or if only the name of the class is
105 * visible.
106 */
107 public boolean areSectionsVisible() {
108 return sectionsVisible;
109 }
110
111 /**
112 * Specifies whether or not the sections for attributes and operations are visible or if only the name of the class is
113 * visible.
114 */
115 public void setSectionsVisible(final boolean sectionsVisible) {
116 this.sectionsVisible = sectionsVisible;
117 }
118
119 /**
120 * Checks whether or not the list of attributes is visible.
121 */
122 public boolean areAttributesVisible() {
123 return attributesVisible;
124 }
125
126 /**
127 * Specifies whether or not the list of attributes is visible.
128 */
129 public void setAttributesVisible(final boolean attributesVisible) {
130 this.attributesVisible = attributesVisible;
131 }
132
133 /**
134 * Checks whether or not the list of attributes is visible.
135 */
136 public boolean areOperationsVisible() {
137 return operationsVisible;
138 }
139
140 /**
141 * Specifies whether or not the list of operations is visible.
142 */
143 public void setOperationsVisible(final boolean operationsVisible) {
144 this.operationsVisible = operationsVisible;
145 }
146
147 /**
148 * Returns the list of the currently selected item. There are the following lists:
149 * <ul>
150 * <li>{@link #LIST_ATTRIBUTES}</li>
151 * <li>{@link #LIST_OPERATIONS}</li>
152 * </ul>
153 */
154 public int getSelectedList() {
155 return selectedList;
156 }
157
158 /**
159 * Specifies the list of the currently selected item. There are the following lists:
160 * <ul>
161 * <li>{@link #LIST_ATTRIBUTES}</li>
162 * <li>{@link #LIST_OPERATIONS}</li>
163 * </ul>
164 */
165 public void setSelectedList(final int list) {
166 switch (list) {
167 case LIST_ATTRIBUTES:
168 case LIST_OPERATIONS:
169 selectedList = list;
170 return;
171 default:
172 throw new IllegalArgumentException("Unknown list" + list);
173 }
174 }
175
176 /**
177 * Returns the list index of the currently selected list.
178 */
179 public int getSelectedListIndex() {
180 return selectedListIndex;
181 }
182
183 /**
184 * Specifies the list index of the currently selected list.
185 */
186 public void setSelectedListIndex(final int listIndex) {
187 selectedListIndex = listIndex;
188 }
189
190 public Object clone() throws CloneNotSupportedException {
191 final UmlClassModel clone = (UmlClassModel) super.clone();
192 clone.attributes = new ArrayList(attributes.size());
193 for (Iterator it = attributes.iterator(); it.hasNext(); ) {
194 final String attribute = (String) it.next();
195 clone.attributes.add(attribute);
196 }
197 clone.operations = new ArrayList(operations.size());
198 for (Iterator it = operations.iterator(); it.hasNext(); ) {
199 final String operation = (String) it.next();
200 clone.operations.add(operation);
201 }
202 return clone;
203 }
204 }
205