Search in sources :

Example 1 with TokenQueue

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;
        }
    };
}
Also used : TokenQueue(com.virjar.sipsoup.parse.TokenQueue) AbstractSelectable(com.virjar.vscrawler.core.selector.combine.AbstractSelectable)

Aggregations

TokenQueue (com.virjar.sipsoup.parse.TokenQueue)1 AbstractSelectable (com.virjar.vscrawler.core.selector.combine.AbstractSelectable)1