use of com.virjar.sipsoup.parse.TokenQueue in project vscrawler by virjar.
the class ChainRuleParser method parse.
public static ModelSelector parse(String rule) {
final TokenQueue tokenQueue = new TokenQueue(rule);
tokenQueue.consumeWhitespace();
final List<ModelSelector> modelSelectors = Lists.newLinkedList();
while (!tokenQueue.isEmpty()) {
if (tokenQueue.peek() != '$') {
modelSelectors.add(new ModelSelector() {
@Override
public AbstractSelectable select(AbstractSelectable abstractSelectable) {
return abstractSelectable.xpath(tokenQueue.remainder());
}
});
break;
}
tokenQueue.advance();
tokenQueue.consumeWhitespace();
String ruleName = tokenQueue.consumeIdentify();
String ruleValue = tokenQueue.chompBalanced('{', '}');
ModelSelector modelSelector = create(ruleName, ruleValue);
Preconditions.checkNotNull(modelSelector);
modelSelectors.add(modelSelector);
tokenQueue.consumeWhitespace();
}
return new ModelSelector() {
@Override
public AbstractSelectable select(AbstractSelectable abstractSelectable) {
AbstractSelectable ret = abstractSelectable;
for (ModelSelector modelSelector : modelSelectors) {
ret = modelSelector.select(ret);
}
return ret;
}
};
}
Aggregations