Skip to content

Package: DefinitionFileParser

DefinitionFileParser

nameinstructionbranchcomplexitylinemethod
DefinitionFileParser(RouterSoftware, Buffer)
M: 0 C: 40
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 10
100%
M: 0 C: 1
100%
createOpt(AbstractVariableDefinition)
M: 0 C: 7
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
createVDA(String, AbstractVariableType, boolean, boolean, DefaultValue, VariableOptReference, AbstractVariableDefinition, Position)
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%
createVDS(String, AbstractVariableType, boolean, boolean, DefaultValue, VariableOptReference, Position)
M: 0 C: 11
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
getDefinitionFile()
M: 0 C: 3
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
getOptList()
M: 0 C: 3
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
getState()
M: 0 C: 3
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
getVariableDefinitionList()
M: 0 C: 3
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
parse()
M: 0 C: 134
100%
M: 0 C: 10
100%
M: 0 C: 6
100%
M: 0 C: 24
100%
M: 0 C: 1
100%
setState(AbstractDefinitionState)
M: 0 C: 4
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%

Coverage

1: /**
2: *
3: */
4: package parser;
5:
6: import java.util.ArrayList;
7: import java.util.HashMap;
8: import java.util.Map;
9:
10: import basic.Buffer;
11: import model.Comment;
12: import model.Position;
13: import model.RouterSoftware;
14: import model.definition.AbstractVariableDefinition;
15: import model.definition.DefaultValue;
16: import model.definition.DefinitionFile;
17: import model.definition.Opt;
18: import model.definition.VariableDefinitionArray;
19: import model.definition.VariableDefinitionSingle;
20: import model.definition.VariableOptReference;
21: import model.type.AbstractVariableType;
22: import parser.states.definitionstates.AbstractDefinitionState;
23: import parser.states.definitionstates.DefinitionInitialState;
24: import parser.tempparserobjects.TempVariableDefinition;
25: import symbols.AbstractSymbol;
26: import symbols.EndSymbol;
27:
28: /**
29: * @author hfw410wi - Mark Wittig
30: *
31: */
32: public final class DefinitionFileParser extends AbstractFileParser {
33:
34:         /**
35:          * The associated RouterSoftware.
36:          */
37:         private final RouterSoftware rs;
38:
39:         /**
40:          * State of the Parser.
41:          */
42:         private transient AbstractDefinitionState state;
43:
44:         /**
45:          * Temporary Object, which is used to fill the final object when every information is collected.
46:          */
47:         private final transient TempVariableDefinition tVD;
48:
49:         /**
50:          * List of VariableDefinitions.
51:          */
52:         private final transient Map<String, AbstractVariableDefinition> vDL;
53:
54:         /**
55:          * the Opts List.
56:          */
57:         private final transient Map<String, Opt> optList;
58:
59:         /**
60:          * The final DedinitionFile.
61:          */
62:         private final transient DefinitionFile definitionFile;
63:
64:         /**
65:          * the OPT regex.
66:          */
67:         private static final String OPT_STRING = "OPT_.*";
68:
69:         /**
70:          * The DefinitionFileParser will automatically generate a DefinitionFile after instantiation
71:          * which can be obtained via getDefinitionFile().
72:          *
73:          * @param rs
74:          * The {@link RouterSoftware} to use.
75:          * @param buffer
76:          * Buffer<Symbol>
77:          * @throws ParserException
78:          * ParserExcpetion
79:          * @throws InterruptedException
80:          * InterruptedException
81:          */
82:         public DefinitionFileParser(final RouterSoftware rs, final Buffer<AbstractSymbol> buffer)
83:                         throws InterruptedException, ParserException {
84:                 super(buffer);
85:                 this.rs = rs;
86:                 this.state = new DefinitionInitialState();
87:                 this.tVD = new TempVariableDefinition();
88:                 this.vDL = new HashMap<String, AbstractVariableDefinition>();
89:                 this.optList = new HashMap<String, Opt>();
90:                 setFinished(false);
91:                 setComments(new ArrayList<Comment>());
92:                 this.definitionFile = parse();
93:         }
94:
95:         /**
96:          * parses the whole definition file and writes the result into the definitionFile attribute.
97:          *
98:          * @throws InterruptedException
99:          * InterruptedException
100:          * @throws ParserException
101:          * ParserException
102:          * @return DefinitionFile
103:          */
104:         private DefinitionFile parse() throws InterruptedException, ParserException {
105:
106:•                while (!this.isFinished()) {
107:•                        if (this.tVD.isReady()) {
108:
109:•                                if (this.tVD.isArrayElement()) {
110:                                         final VariableDefinitionArray vDA = createVDA(this.tVD.getName(),
111:                                                         this.tVD.getVariableType(), this.tVD.isOptional(),
112:                                                         this.tVD.isReallyOptional(), this.tVD.getDefaultValue(),
113:                                                         this.tVD.getVariableOptReference(), this.tVD.getVariableN(),
114:                                                         this.tVD.getPosition());
115:                                         this.getVariableDefinitionList().put(vDA.getName(), vDA);
116:                                         // disabled because opt-creation is now done in DefinitionOptState
117:                                         // if (vDA.getName().matches(DefinitionFileParser.OPT_STRING)) {
118:                                         // this.optList.put(vDA.getName(), createOpt(vDA));
119:                                         // }
120:                                 } else {
121:                                         final VariableDefinitionSingle vDS = createVDS(this.tVD.getName(),
122:                                                         this.tVD.getVariableType(), this.tVD.isOptional(),
123:                                                         this.tVD.isReallyOptional(), this.tVD.getDefaultValue(),
124:                                                         this.tVD.getVariableOptReference(), this.tVD.getPosition());
125:                                         this.getVariableDefinitionList().put(vDS.getName(), vDS);
126:•                                        if (vDS.getName().matches(DefinitionFileParser.OPT_STRING)) {
127:                                                 this.optList.put(vDS.getName(), createOpt(vDS));
128:                                         }
129:                                 }
130:                                 this.tVD.setReady(false);
131:                         }
132:•                        if (this.getBuffer().peek() instanceof EndSymbol) {
133:                                 this.setFinished(true);
134:                         } else {
135:                                 final AbstractDefinitionState currentState = this.getState();
136:                                 currentState.parse(this.rs, this.tVD, this.getBuffer(), this);
137:
138:                         }
139:                 }
140:                 return new DefinitionFile(getVariableDefinitionList(), getComments());
141:
142:         }
143:
144:         /**
145:          * yet another totally senseless function for PMD to be quiet. Suppresses "Avoid instantiating
146:          * new objects inside loops" warning.
147:          *
148:          * @param name
149:          * name
150:          * @param type
151:          * type
152:          * @param isOptional
153:          * isOptional
154:          * @param isReallyOptional
155:          * isReallyOptional
156:          * @param defaultValue
157:          * defaultValue
158:          * @param reference
159:          * reference
160:          * @param variableN
161:          * variableN
162:          * @param position
163:          * position
164:          * @return VariableDefinitionArray
165:          */
166:         private VariableDefinitionArray createVDA(final String name,
167:                         final model.type.AbstractVariableType type, final boolean isOptional,
168:                         final boolean isReallyOptional, final DefaultValue defaultValue,
169:                         final VariableOptReference reference, final AbstractVariableDefinition variableN,
170:                         final Position position) {
171:                 return new VariableDefinitionArray(name, type, isOptional, isReallyOptional, defaultValue,
172:                                 reference, variableN, position);
173:         }
174:
175:         /**
176:          * yet another totally senseless function for PMD to be quiet. Suppresses "Avoid instantiating
177:          * new objects inside loops" warning.
178:          *
179:          * @param name
180:          * name
181:          * @param type
182:          * type
183:          * @param isOptional
184:          * isOptional
185:          * @param isReallyOptional
186:          * isReallyOptional
187:          * @param defaultValue
188:          * defaultValue
189:          * @param reference
190:          * reference
191:          * @param position
192:          * position
193:          * @return VariableDefinitionSingle
194:          */
195:         private VariableDefinitionSingle createVDS(final String name, final AbstractVariableType type,
196:                         final boolean isOptional, final boolean isReallyOptional,
197:                         final DefaultValue defaultValue, final VariableOptReference reference,
198:                         final Position position) {
199:                 return new VariableDefinitionSingle(name, type, isOptional, isReallyOptional,
200:                                 defaultValue, reference, position);
201:         }
202:
203:         /**
204:          * yet another totally senseless function for PMD to be quiet. Suppresses "Avoid instantiating
205:          * new objects inside loops" warning.
206:          *
207:          * @param aVD
208:          * AbstractVariableDefinition
209:          * @return Opt
210:          */
211:         private Opt createOpt(final AbstractVariableDefinition aVD) {
212:                 return new Opt(aVD.getName(), aVD);
213:         }
214:
215:         /**
216:          * @return the state
217:          */
218:         private AbstractDefinitionState getState() {
219:                 return this.state;
220:         }
221:
222:         /**
223:          * @param state
224:          * the state to set
225:          */
226:         public void setState(final AbstractDefinitionState state) {
227:                 this.state = state;
228:         }
229:
230:         /**
231:          * @return the variableDefinitionList
232:          */
233:         public Map<String, AbstractVariableDefinition> getVariableDefinitionList() {
234:                 return this.vDL;
235:         }
236:
237:         /**
238:          * Returns the desired DefinitionFile which is automatically created right after instantiation.
239:          *
240:          * @return the definitionFile
241:          */
242:         public DefinitionFile getDefinitionFile() {
243:                 return this.definitionFile;
244:         }
245:
246:         /**
247:          * @return the optList
248:          */
249:         public Map<String, Opt> getOptList() {
250:                 return this.optList;
251:         }
252:
253: }