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 MissingTagValueException extends RuntimeException {
41
42 private static final long serialVersionUID = 1L;
43
44 protected final String tagValueName;
45
46 protected final String tagValueValue;
47
48 protected final String prefixMessage;
49
50 protected final Set<String> stack;
51
52 public MissingTagValueException(String tagValueName, String tagValueValue, String prefixMessage, ObjectModelPackage aPackage, ObjectModelClass aClass) {
53 this.tagValueName = tagValueName;
54 this.tagValueValue = tagValueValue;
55 this.prefixMessage = prefixMessage;
56 this.stack = getUsageStack(tagValueName, tagValueValue, aPackage, aClass);
57 }
58
59 @Override
60 public String toString() {
61
62 return "\n\n" + prefixMessage
63 + "\n=========================================================================================="
64 + "\n" + Joiner.on("\n").join(stack)
65 + "\n==========================================================================================";
66
67 }
68
69
70
71
72
73
74
75
76
77
78
79
80 protected LinkedHashSet<String> getUsageStack(String tagValueName, String tagValueValue, ObjectModelPackage aPackage, ObjectModelClass aClass) {
81 String suffix = ".tagvalue." + tagValueName + "=" + tagValueValue;
82 LinkedHashSet<String> stack = new LinkedHashSet<>();
83
84 stack.add("model" + suffix);
85
86 addPackageTagValue(aPackage, suffix, stack);
87 stack.add(aClass.getQualifiedName() + ".class" + suffix);
88
89 return stack;
90 }
91
92 protected void addPackageTagValue(ObjectModelPackage aPackage, String suffix, Set<String> stack) {
93
94 if (aPackage.getParentPackage() != null) {
95 addPackageTagValue(aPackage.getParentPackage(), suffix, stack);
96 }
97 stack.add("package." + aPackage.getName() + suffix);
98
99 }
100
101 }