Skip to content

Package: StringNode

StringNode

nameinstructionbranchcomplexitylinemethod
StringNode(String)
M: 0 C: 6
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
equals(Object)
M: 0 C: 14
100%
M: 0 C: 4
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
hashCode()
M: 0 C: 4
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
interpret(CommunicationManager)
M: 0 C: 37
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 7
100%
M: 0 C: 1
100%
lookUpForVariables(CommunicationManager, String)
M: 0 C: 24
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 6
100%
M: 0 C: 1
100%
replaceDollarBracket(CommunicationManager, String)
M: 0 C: 90
100%
M: 0 C: 4
100%
M: 0 C: 3
100%
M: 0 C: 22
100%
M: 0 C: 1
100%
replaceDollarNoBracket(CommunicationManager, String)
M: 0 C: 88
100%
M: 0 C: 4
100%
M: 0 C: 3
100%
M: 0 C: 22
100%
M: 0 C: 1
100%
replaceMascSymbols(String, String, String)
M: 0 C: 27
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 7
100%
M: 0 C: 1
100%
replaceProzBracket(CommunicationManager, String)
M: 2 C: 78
98%
M: 1 C: 3
75%
M: 1 C: 2
67%
M: 1 C: 19
95%
M: 0 C: 1
100%
replaceProzNoBracket(CommunicationManager, String)
M: 0 C: 78
100%
M: 0 C: 4
100%
M: 0 C: 3
100%
M: 0 C: 20
100%
M: 0 C: 1
100%
toString()
M: 0 C: 12
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%

Coverage

1: package pruefskript.parser.nodes;
2:
3: import java.util.Locale;
4: import java.util.regex.Matcher;
5: import java.util.regex.Pattern;
6:
7: import basic.PruefskriptConstants;
8: import pruefskript.CommunicationManager;
9: import pruefskript.parser.exceptions.VariableDoesNotExistException;
10: import pruefskript.parser.values.AbstractReturnValue;
11: import pruefskript.parser.values.StringValue;
12:
13: /**
14: * StringNode.
15: *
16: * @author Group B5
17: *
18: */
19: public class StringNode extends AbstractNode {
20:         /**
21:          * final String Attibut value.
22:          */
23:         private final String value;
24:
25:         /**
26:          * StringNode.
27:          *
28:          * @param value
29:          * String
30:          */
31:         public StringNode(final String value) {
32:                 super();
33:                 this.value = value;
34:         }
35:
36:         @Override
37:         public String toString() {
38:                 return PruefskriptConstants.STRINGNODETITLE + PruefskriptConstants.BRACKET_OPEN
39:                                 + this.value + PruefskriptConstants.BRACKET_CLOSE;
40:         }
41:
42:         @Override
43:         public boolean equals(final Object obj) {
44:•                return obj instanceof StringNode && ((StringNode) obj).value.equals(this.value);
45:
46:         }
47:
48:         @Override
49:         public int hashCode() {
50:                 return +this.value.hashCode();
51:         }
52:
53:         @Override
54:         public AbstractReturnValue interpret(final CommunicationManager mgr)
55:                         throws VariableDoesNotExistException {
56:                 String str = this.value;
57:
58:                 str = replaceMascSymbols(str, PruefskriptConstants.DOLLARMARKEDSIGN, "[$]{2}");
59:                 str = replaceMascSymbols(str, PruefskriptConstants.PROZMARKEDSIGN, "[%]{2}");
60:
61:                 str = lookUpForVariables(mgr, str);
62:
63:                 str = replaceMascSymbols(str, "\\%", "marked\\{\\%\\}marked");
64:                 str = replaceMascSymbols(str, "\\$", PruefskriptConstants.DOLLARMARKEDSIGN);
65:
66:                 return new StringValue(str);
67:         }
68:
69:         /**
70:          * @param str
71:          * Die zu veraendernde zeichenkette.
72:          * @param inputReplace
73:          * Der Wert durch den ersetzt wird.
74:          * @param inputExp
75:          * Der regulaere Ausdruck dessen matches geaendert werden.
76:          * @return die veraenderte zeichenkette.
77:          */
78:         private String replaceMascSymbols(final String str, final String inputReplace,
79:                         final String inputExp) {
80:                 final String regexDollarDollar = inputExp;
81:                 final Pattern patternDollarDollar = Pattern.compile(regexDollarDollar);
82:                 final Matcher matcherDollarDollar = patternDollarDollar.matcher(str);
83:                 final StringBuffer sbDollarDollar = new StringBuffer();
84:
85:•                while (matcherDollarDollar.find()) {
86:                         matcherDollarDollar.appendReplacement(sbDollarDollar, inputReplace);
87:                 }
88:                 return matcherDollarDollar.appendTail(sbDollarDollar).toString();
89:         }
90:
91:         /**
92:          *
93:          * @param mgr
94:          * The {@link CommunicationManager} to use.
95:          * @param tempResult
96:          * .
97:          *
98:          * @return the value with replaced variables.
99:          * @throws VariableDoesNotExistException
100:          * Falls die gesuchte Variable nicht besteht. Am besten vorher mit contains pruefen.
101:          */
102:         private String lookUpForVariables(final CommunicationManager mgr, final String tempResult)
103:                         throws VariableDoesNotExistException {
104:
105:                 String str = tempResult;
106:
107:                 str = replaceProzBracket(mgr, str);
108:                 str = replaceDollarBracket(mgr, str);
109:                 str = replaceProzNoBracket(mgr, str);
110:                 str = replaceDollarNoBracket(mgr, str);
111:
112:                 return str;
113:         }
114:
115:         /**
116:          * @param mgr
117:          * The {@link CommunicationManager} to use.
118:          * @param str
119:          * der string zum durchsuchen.
120:          * @throws VariableDoesNotExistException
121:          * if the variable doesnt exist.
122:          * @return String: the value with replaces variables.
123:          */
124:         private String replaceDollarNoBracket(final CommunicationManager mgr, final String str)
125:                         throws VariableDoesNotExistException {
126:                 final String regexDollarNoBracket = "[\\$]([a-zA-Z0-9,_])+";
127:                 final Pattern patternDollarNoBracket = Pattern.compile(regexDollarNoBracket);
128:                 final Matcher matcherDollarNoBracket = patternDollarNoBracket.matcher(str);
129:                 final StringBuffer sb4 = new StringBuffer();
130:
131:•                while (matcherDollarNoBracket.find()) {
132:                         final String element = matcherDollarNoBracket.group();
133:                         final String cutElement = element.substring(1, element.length());
134:                         Integer index = 0;
135:                         String var = "";
136:                         String variable = "";
137:•                        if (mgr.getVariableAssignmentValue(cutElement).existsIterationVars()) {
138:                                 index = mgr.getVariableAssignmentValue(cutElement).getIterationVars()
139:                                                 .get(cutElement.toUpperCase(Locale.ENGLISH)).getIndexInit();
140:                                 var = mgr.getVariableAssignmentValue(cutElement).getIterationVars()
141:                                                 .get(cutElement.toUpperCase(Locale.ENGLISH)).getReferenceName();
142:                                 variable = mgr
143:                                                 .getVariableAssignmentValue(var.replace('%', index.toString().charAt(0)))
144:                                                 .getStringRepresentation();
145:                         } else {
146:                                 variable = mgr.getVariableAssignmentValue(cutElement).toStringValue().getValue();
147:                         }
148:
149:                         matcherDollarNoBracket.appendReplacement(sb4, variable);
150:                 }
151:                 return matcherDollarNoBracket.appendTail(sb4).toString();
152:         }
153:
154:         /**
155:          * @param mgr
156:          * The {@link CommunicationManager} to use.
157:          * @param str
158:          * der string zum durchsuchen.
159:          * @throws VariableDoesNotExistException
160:          * if the variable doesnt exist.
161:          * @return String: the value with replaces variables.
162:          */
163:         private String replaceProzNoBracket(final CommunicationManager mgr, final String str)
164:                         throws VariableDoesNotExistException {
165:                 final String regexProzNoBracket = "[\\%]([a-zA-Z0-9])+";
166:                 final Pattern patternProzNoBracket = Pattern.compile(regexProzNoBracket);
167:                 final Matcher matcherProzNoBracket = patternProzNoBracket.matcher(str);
168:                 final StringBuffer sb3 = new StringBuffer();
169:
170:•                while (matcherProzNoBracket.find()) {
171:                         final String element = matcherProzNoBracket.group();
172:                         final String cutElement = element.substring(1, element.length());
173:                         String resultVar = "";
174:•                        if (mgr.getVariableAssignmentValue(cutElement).existsIterationVars()) {
175:                                 final String variable =
176:                                                 mgr.getVariableAssignmentValue(cutElement).getIterationVars()
177:                                                                 .get(cutElement.toUpperCase(Locale.ENGLISH)).getReferenceName();
178:                                 resultVar = variable.replace(basic.PruefskriptConstants.UNDERLINEMOD,
179:                                                 basic.PruefskriptConstants.UNDERLINE + mgr
180:                                                                 .getVariableAssignmentValue(cutElement).getIterationVars()
181:                                                                 .get(cutElement.toUpperCase(Locale.ENGLISH)).getIndexInit());
182:                         } else {
183:                                 resultVar = cutElement;
184:                         }
185:
186:                         matcherProzNoBracket.appendReplacement(sb3, resultVar);
187:                 }
188:                 return matcherProzNoBracket.appendTail(sb3).toString();
189:         }
190:
191:         /**
192:          * @param mgr
193:          * The {@link CommunicationManager} to use.
194:          * @param str
195:          * der string zum durchsuchen.
196:          * @throws VariableDoesNotExistException
197:          * if the variable doesnt exist.
198:          * @return String: the value with replaces variables.
199:          */
200:         private String replaceDollarBracket(final CommunicationManager mgr, final String str)
201:                         throws VariableDoesNotExistException {
202:                 final String regexDollarBracket = "[\\$]\\{([a-zA-Z0-9,_])+\\}";
203:                 final Pattern patternDollarBracket = Pattern.compile(regexDollarBracket);
204:                 final Matcher matcherDollarBracket = patternDollarBracket.matcher(str);
205:                 final StringBuffer sb2 = new StringBuffer();
206:
207:•                while (matcherDollarBracket.find()) {
208:                         final String element = matcherDollarBracket.group();
209:                         final String cutElement = element.substring(2, element.length() - 1);
210:                         Integer index = 0;
211:                         String var = "";
212:                         String variable = "";
213:•                        if (mgr.getVariableAssignmentValue(cutElement).existsIterationVars()) {
214:                                 index = mgr.getVariableAssignmentValue(cutElement).getIterationVars()
215:                                                 .get(cutElement.toUpperCase(Locale.ENGLISH)).getIndexInit();
216:                                 var = mgr.getVariableAssignmentValue(cutElement).getIterationVars()
217:                                                 .get(cutElement.toUpperCase(Locale.ENGLISH)).getReferenceName();
218:                                 variable = mgr
219:                                                 .getVariableAssignmentValue(var.replace('%', index.toString().charAt(0)))
220:                                                 .getStringRepresentation();
221:                         } else {
222:                                 variable = mgr.getVariableAssignmentValue(cutElement).toStringValue().getValue();
223:                         }
224:
225:                         matcherDollarBracket.appendReplacement(sb2, variable);
226:                 }
227:                 return matcherDollarBracket.appendTail(sb2).toString();
228:         }
229:
230:         /**
231:          * @param mgr
232:          * The {@link CommunicationManager} to use.
233:          * @param str
234:          * der string zum durchsuchen.
235:          * @throws VariableDoesNotExistException
236:          * if the variable doesnt exist.
237:          * @return String: the value with replaces variables.
238:          */
239:         private String replaceProzBracket(final CommunicationManager mgr, final String str)
240:                         throws VariableDoesNotExistException {
241:                 final String regexProzBracket = "[\\%]\\{([a-zA-Z0-9])+\\}";
242:                 final Pattern patternProzBracket = Pattern.compile(regexProzBracket);
243:                 final Matcher matcherProzBracket = patternProzBracket.matcher(str);
244:                 final StringBuffer sb1 = new StringBuffer();
245:
246:•                while (matcherProzBracket.find()) {
247:                         final String element = matcherProzBracket.group();
248:                         final String cutElement = element.substring(2, element.length() - 1);
249:                         String resultVar = "";
250:•                        if (mgr.getVariableAssignmentValue(cutElement).existsIterationVars()) {
251:                                 final String variable =
252:                                                 mgr.getVariableAssignmentValue(cutElement).getIterationVars()
253:                                                                 .get(cutElement.toUpperCase(Locale.ENGLISH)).getReferenceName();
254:                                 resultVar = variable.replace("_%",
255:                                                 "_" + mgr.getVariableAssignmentValue(cutElement).getIterationVars()
256:                                                                 .get(cutElement.toUpperCase(Locale.ENGLISH)).getIndexInit());
257:                         } else {
258:                                 resultVar = cutElement;
259:                         }
260:
261:                         matcherProzBracket.appendReplacement(sb1, resultVar);
262:                 }
263:                 return matcherProzBracket.appendTail(sb1).toString();
264:         }
265: }