/*
* JaamSim Discrete Event Simulation
* Copyright (C) 2014 Ausenco Engineering Canada Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.jaamsim.input;
import java.util.ArrayList;
public class KeywordIndex {
private final ArrayList<String> input;
public final String keyword;
private final int start;
private final int end;
public final ParseContext context;
public KeywordIndex(String word, ArrayList<String> arg, ParseContext ctxt) {
this(word, arg, 0, arg.size(), ctxt);
}
public KeywordIndex(String word, ArrayList<String> inp, int s, int e, ParseContext ctxt) {
input = inp;
keyword = word;
start = s;
end = e;
context = ctxt;
}
public int numArgs() {
return end - start;
}
public String argString() {
StringBuilder sb = new StringBuilder();
for (int i = start; i < end; i++) {
String dat = this.input.get(i);
if (i > start)
sb.append(Input.SEPARATOR);
if (Parser.needsQuoting(dat) && !dat.equals("{") && !dat.equals("}"))
sb.append("'").append(dat).append("'");
else
sb.append(dat);
}
return sb.toString();
}
public String[] getArgArray() {
String[] ret = new String[end - start];
for (int i = start; i < end; i++) {
ret[i - start] = this.input.get(i);
}
return ret;
}
public String getArg(int index) {
if (index < 0 || index >= numArgs())
throw new IndexOutOfBoundsException("Index out of range:" + index);
return input.get(start + index);
}
public ArrayList<KeywordIndex> getSubArgs() {
ArrayList<KeywordIndex> subArgs = new ArrayList<>();
for (int i= 0; i < this.numArgs(); i++) {
//skip over opening brace if present
if (this.getArg(i).equals("{"))
i++;
//iterate until closing brace, or end of entry
int subArgStart = i;
int subArgEnd = i;
for (int j = i; j < this.numArgs(); j++, i++){
if (this.getArg(j).equals("}")) {
break;
}
subArgEnd++;
}
KeywordIndex subArg = new KeywordIndex(keyword, this.input, subArgStart + start, subArgEnd + start, context);
subArgs.add(subArg);
}
return subArgs;
}
}