1 package org.nuiton.eugene.models.object.xml;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 import com.google.common.base.Predicate;
26 import com.google.common.base.Predicates;
27 import com.google.common.collect.Iterables;
28 import org.apache.commons.lang3.StringUtils;
29 import org.apache.commons.logging.Log;
30 import org.apache.commons.logging.LogFactory;
31 import org.nuiton.eugene.models.object.ObjectModelClass;
32 import org.nuiton.eugene.models.object.ObjectModelClassifier;
33 import org.nuiton.eugene.models.object.ObjectModelEnumeration;
34 import org.nuiton.eugene.models.object.ObjectModelInterface;
35 import org.nuiton.eugene.models.object.ObjectModelPackage;
36
37 import java.util.ArrayList;
38 import java.util.HashMap;
39 import java.util.HashSet;
40 import java.util.List;
41 import java.util.Map;
42 import java.util.Set;
43
44
45
46
47
48
49
50 public class ObjectModelPackageImpl implements ObjectModelPackage {
51
52
53 private static final Log log = LogFactory.getLog(ObjectModelPackageImpl.class);
54
55 protected ObjectModelImpl objectModelImpl;
56
57 protected boolean extern;
58
59 protected String name;
60
61 protected int numberOfSubPackages;
62
63 protected ObjectModelPackage parentPackage;
64
65 protected String documentation;
66
67 protected Set<String> stereotypes = new HashSet<>();
68
69 protected Map<String, String> tagValues = new HashMap<>();
70
71 protected List<String> comments = new ArrayList<>();
72
73 @Override
74 public String getName() {
75 return name;
76 }
77
78 @Override
79 public int getNumberOfSubPackages() {
80 return numberOfSubPackages;
81 }
82
83 @Override
84 public ObjectModelPackage getParentPackage() {
85 return parentPackage;
86 }
87
88 @Override
89 public String getDescription() {
90 return getDocumentation().substring(0, getDocumentation().indexOf("--"));
91 }
92
93 @Override
94 public String getSourceDocumentation() {
95 return getDocumentation().substring(getDocumentation().indexOf("--") + 2);
96 }
97
98 @Override
99 public Set<String> getStereotypes() {
100 return stereotypes;
101 }
102
103 @Override
104 public boolean hasStereotype(String stereotypeName) {
105 return stereotypes.contains(stereotypeName);
106 }
107
108 @Override
109 public void addStereotype(String stereotype) {
110 stereotypes.add(stereotype);
111 }
112
113 @Override
114 public void removeStereotype(String stereotype) {
115 stereotypes.remove(stereotype);
116 }
117
118 @Override
119 public Map<String, String> getTagValues() {
120 return tagValues;
121 }
122
123 @Override
124 public String getTagValue(String tagValue) {
125 return tagValue == null ? null : tagValues.get(tagValue);
126 }
127
128 @Override
129 public boolean hasTagValue(String tagValue) {
130 return tagValues.containsKey(tagValue);
131 }
132
133 @Override
134 public void addTagValue(String tagValue, String value) {
135 String oldValue = getTagValue(tagValue);
136 if (StringUtils.isNotEmpty(oldValue)) {
137 if (oldValue.equals(value)) {
138
139 return;
140 }
141 log.warn("Replace tagValue '" + tagValue + "' (old:" + oldValue + ", new: " + value + ")");
142 }
143 tagValues.put(tagValue, value);
144 }
145
146 @Override
147 public void removeTagValue(String tagvalue) {
148 tagValues.remove(tagvalue);
149 }
150
151 @Override
152 public List<String> getComments() {
153 return comments;
154 }
155
156 @Override
157 public String getDocumentation() {
158 return documentation;
159 }
160
161 @Override
162 public Iterable<ObjectModelPackage> getPackages() {
163 return Iterables.filter(objectModelImpl.getPackages(), IS_PACKAGE_NAME_STARTS_WITH_PREDICATE);
164 }
165
166 @Override
167 public boolean hasPackage(String packageName) {
168 ObjectModelPackage aPackage = objectModelImpl.getPackage(packageName);
169 return aPackage != null && IS_PACKAGE_NAME_STARTS_WITH_PREDICATE.apply(aPackage);
170 }
171
172 @Override
173 public Iterable<ObjectModelClassifier> getClassifiers() {
174 return Iterables.filter(objectModelImpl.getClassifiers(), IS_PACKAGE_NAME_EQUALS_PREDICATE);
175 }
176
177 @Override
178 public ObjectModelClassifier getClassifier(String simpleName) {
179 Predicate<ObjectModelClassifier> predicate = newClassifierNameEquals(simpleName);
180 Iterable<ObjectModelClassifier> filter = Iterables.filter(objectModelImpl.getClassifiers(), predicate);
181 return Iterables.getFirst(filter, null);
182 }
183
184 @Override
185 public Iterable<ObjectModelClass> getClasses() {
186 return Iterables.filter(objectModelImpl.getClasses(), IS_PACKAGE_NAME_EQUALS_PREDICATE);
187 }
188
189 @Override
190 public ObjectModelClass getClass(String simpleName) {
191 Predicate<ObjectModelClassifier> predicate = newClassifierNameEquals(simpleName);
192 Iterable<ObjectModelClass> filter = Iterables.filter(objectModelImpl.getClasses(), predicate);
193 return Iterables.getFirst(filter, null);
194 }
195
196 @Override
197 public boolean hasClass(String simpleName) {
198 return false;
199 }
200
201 @Override
202 public Iterable<ObjectModelInterface> getInterfaces() {
203 return Iterables.filter(objectModelImpl.getInterfaces(), IS_PACKAGE_NAME_EQUALS_PREDICATE);
204 }
205
206 @Override
207 public ObjectModelInterface getInterface(String simpleName) {
208 Predicate<ObjectModelClassifier> predicate = newClassifierNameEquals(simpleName);
209 Iterable<ObjectModelInterface> filter = Iterables.filter(objectModelImpl.getInterfaces(), predicate);
210 return Iterables.getFirst(filter, null);
211 }
212
213 @Override
214 public Iterable<ObjectModelEnumeration> getEnumerations() {
215 return Iterables.filter(objectModelImpl.getEnumerations(), IS_PACKAGE_NAME_EQUALS_PREDICATE);
216 }
217
218 @Override
219 public ObjectModelEnumeration getEnumeration(String simpleName) {
220 Predicate<ObjectModelClassifier> predicate = newClassifierNameEquals(simpleName);
221 Iterable<ObjectModelEnumeration> filter = Iterables.filter(objectModelImpl.getEnumerations(), predicate);
222 return Iterables.getFirst(filter, null);
223 }
224
225 public boolean isExtern() {
226 return extern;
227 }
228
229 public void setExtern(boolean extern) {
230 this.extern = extern;
231 }
232
233 public void setDocumentation(String documentation) {
234 this.documentation = documentation;
235 }
236
237 public void addComment(String comment) {
238 comments.add(comment);
239 }
240
241 public ObjectModelImplRef addStereotype(ObjectModelImplRef stereotype) {
242 if (stereotype == null) {
243 return new ObjectModelImplRef();
244 }
245 stereotypes.add(stereotype.getName());
246 return stereotype;
247 }
248
249 public ObjectModelImplTagValue addTagValue(ObjectModelImplTagValue tagValue) {
250 if (tagValue == null) {
251 return new ObjectModelImplTagValue();
252 }
253 addTagValue(tagValue.getName(), tagValue.getValue());
254 return tagValue;
255 }
256
257 public void setObjectModelImpl(ObjectModelImpl objectModelImpl) {
258 this.objectModelImpl = objectModelImpl;
259 }
260
261 public void setName(String name) {
262 this.name = name;
263 }
264
265 public void setParentPackage(ObjectModelPackage parentPackage) {
266 this.parentPackage = parentPackage;
267 }
268
269 public void postInit() {
270 numberOfSubPackages = name.split("\\.").length;
271 }
272
273 protected final Predicate<ObjectModelClassifier> IS_PACKAGE_NAME_EQUALS_PREDICATE = new PackageNameEqualsPredicate(name);
274
275 protected final Predicate<ObjectModelPackage> IS_PACKAGE_NAME_STARTS_WITH_PREDICATE = new PackageNameStartsWithPredicate(name + ".");
276
277 protected Predicate<ObjectModelClassifier> newClassifierNameEquals(String simpleName) {
278 Predicate<ObjectModelClassifier> predicate = Predicates.and(IS_PACKAGE_NAME_EQUALS_PREDICATE, new SimpleNameEqualsPredicate(simpleName));
279 return predicate;
280 }
281
282 protected static class SimpleNameEqualsPredicate implements Predicate<ObjectModelClassifier> {
283
284 protected final String name;
285
286 public SimpleNameEqualsPredicate(String name) {
287 this.name = name;
288 }
289
290 @Override
291 public boolean apply(ObjectModelClassifier input) {
292 return input.getName().equals(name);
293 }
294 }
295
296 protected static class PackageNameEqualsPredicate implements Predicate<ObjectModelClassifier> {
297
298 protected final String name;
299
300 public PackageNameEqualsPredicate(String name) {
301 this.name = name;
302 }
303
304 @Override
305 public boolean apply(ObjectModelClassifier input) {
306 return input.getPackageName().equals(name);
307 }
308 }
309
310 protected static class PackageNameStartsWithPredicate implements Predicate<ObjectModelPackage> {
311
312 protected final String name;
313
314 public PackageNameStartsWithPredicate(String name) {
315 this.name = name;
316 }
317
318 @Override
319 public boolean apply(ObjectModelPackage input) {
320 return input.getName().startsWith(name);
321 }
322 }
323 }