1 package org.nuiton.eugene.models.extension.tagvalue;
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.Joiner;
26 import org.nuiton.eugene.models.object.ObjectModelClass;
27 import org.nuiton.eugene.models.object.ObjectModelPackage;
28
29 import java.util.LinkedHashSet;
30 import java.util.Set;
31
32
33
34
35
36
37
38
39
40 public class MissingStereoTypeException extends RuntimeException {
41
42 private static final long serialVersionUID = 1L;
43
44 protected final String stereoTypeName;
45
46 protected final String prefixMessage;
47
48 protected final Set<String> stack;
49
50 public MissingStereoTypeException(String stereoTypeName, String prefixMessage, ObjectModelPackage aPackage, ObjectModelClass aClass) {
51 this.stereoTypeName = stereoTypeName;
52 this.prefixMessage = prefixMessage;
53 this.stack = getUsageStack(stereoTypeName, aPackage, aClass);
54 }
55
56 @Override
57 public String toString() {
58
59 return "\n\n" + prefixMessage
60 + "\n=========================================================================================="
61 + "\n" + Joiner.on("\n").join(stack)
62 + "\n==========================================================================================";
63
64 }
65
66
67
68
69
70
71
72
73
74
75
76 public LinkedHashSet<String> getUsageStack(String stereoTypeName, ObjectModelPackage aPackage, ObjectModelClass aClass) {
77 String suffix = ".stereotype=" + stereoTypeName;
78 LinkedHashSet<String> stack = new LinkedHashSet<>();
79
80 stack.add("model" + suffix);
81
82 addPackageStereoTypes(aPackage, suffix, stack);
83 stack.add(aClass.getQualifiedName() + ".class" + suffix);
84
85 return stack;
86 }
87
88 protected void addPackageStereoTypes(ObjectModelPackage aPackage, String suffix, Set<String> stack) {
89
90 if (aPackage.getParentPackage() != null) {
91 addPackageStereoTypes(aPackage.getParentPackage(), suffix, stack);
92 }
93 stack.add("package." + aPackage.getName() + suffix);
94
95 }
96
97 }