1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package io.github.tonywasher.joceanus.themis.lethe.analysis;
18
19 import io.github.tonywasher.joceanus.oceanus.base.OceanusException;
20 import io.github.tonywasher.joceanus.themis.exc.ThemisDataException;
21
22 import java.util.Deque;
23 import java.util.Map;
24 import java.util.Map.Entry;
25
26
27
28
29 public class ThemisAnalysisParameters {
30
31
32
33 private final Map<String, ThemisAnalysisReference> theParameters;
34
35
36
37
38 private final ThemisAnalysisReference theThrown;
39
40
41
42
43
44
45
46
47 ThemisAnalysisParameters(final ThemisAnalysisParser pParser,
48 final Deque<ThemisAnalysisElement> pHeaders) throws OceanusException {
49
50 final ThemisAnalysisLine myHeader = new ThemisAnalysisLine(pHeaders);
51
52
53 final int myEnd = myHeader.findEndOfNestedSequence(0, 0, ThemisAnalysisChar.PARENTHESIS_CLOSE, ThemisAnalysisChar.PARENTHESIS_OPEN);
54 if (myEnd < 0) {
55 throw new ThemisDataException("End character not found");
56 }
57 final ThemisAnalysisLine myParms = myHeader.stripUpToPosition(myEnd);
58 myParms.stripStartChar(ThemisAnalysisChar.PARENTHESIS_OPEN);
59 myParms.stripEndChar(ThemisAnalysisChar.PARENTHESIS_CLOSE);
60
61
62 theParameters = pParser.parseParameters(myParms);
63
64
65 final String myToken = myHeader.peekNextToken();
66 if (myToken.equals(ThemisAnalysisKeyWord.THROWS.getKeyWord())) {
67 myHeader.stripNextToken();
68 theThrown = ThemisAnalysisParser.parseDataType(pParser.getDataMap(), myHeader);
69 } else {
70 theThrown = null;
71 }
72 }
73
74 @Override
75 public String toString() {
76
77 final StringBuilder myBuilder = new StringBuilder();
78 myBuilder.append(ThemisAnalysisChar.PARENTHESIS_OPEN);
79
80
81 boolean bFirst = true;
82 for (Entry<String, ThemisAnalysisReference> myEntry : theParameters.entrySet()) {
83
84 if (!bFirst) {
85 myBuilder.append(ThemisAnalysisChar.COMMA);
86 myBuilder.append(ThemisAnalysisChar.BLANK);
87 } else {
88 bFirst = false;
89 }
90
91
92 myBuilder.append(myEntry.getValue());
93 myBuilder.append(ThemisAnalysisChar.BLANK);
94 myBuilder.append(myEntry.getKey());
95 }
96
97
98 myBuilder.append(ThemisAnalysisChar.PARENTHESIS_CLOSE);
99
100
101 if (theThrown != null) {
102
103 myBuilder.append(ThemisAnalysisChar.BLANK);
104 myBuilder.append(ThemisAnalysisKeyWord.THROWS.getKeyWord());
105 myBuilder.append(ThemisAnalysisChar.BLANK);
106 myBuilder.append(theThrown.toString());
107 }
108
109
110 return myBuilder.toString();
111 }
112 }