Search in sources :

Example 1 with FunctionParser

use of com.virjar.vscrawler.core.selector.string.FunctionParser in project vscrawler by virjar.

the class ChainRuleParser method create.

public static ModelSelector create(String ruleName, final String ruleValue) {
    if (StringUtils.equalsIgnoreCase(ruleName, "css")) {
        return new ModelSelector() {

            @Override
            public AbstractSelectable select(AbstractSelectable abstractSelectable) {
                return abstractSelectable.css(ruleValue);
            }
        };
    }
    if (StringUtils.equalsIgnoreCase(ruleName, "xpath")) {
        return new ModelSelector() {

            @Override
            public AbstractSelectable select(AbstractSelectable abstractSelectable) {
                return abstractSelectable.xpath(ruleValue);
            }
        };
    }
    if (StringUtils.equalsIgnoreCase(ruleName, "jsonpath")) {
        return new ModelSelector() {

            @Override
            public AbstractSelectable select(AbstractSelectable abstractSelectable) {
                return abstractSelectable.jsonPath(ruleValue);
            }
        };
    }
    if (StringUtils.equalsIgnoreCase(ruleName, "stringrule")) {
        final StingEvaluator stingEvaluator = new StingEvaluator(new FunctionParser(ruleValue).parse());
        return new ModelSelector() {

            @Override
            public AbstractSelectable select(AbstractSelectable abstractSelectable) {
                return abstractSelectable.stringRule(stingEvaluator);
            }
        };
    }
    if (StringUtils.equalsIgnoreCase(ruleName, "regex")) {
        String regex = ruleValue;
        int group = 0;
        Matcher matcher = Pattern.compile("(.+)\\s*,\\s*(\\d+)").matcher(ruleValue);
        if (matcher.matches()) {
            regex = matcher.group(1);
            group = NumberUtils.toInt(matcher.group(2));
        }
        final String finalRegex = regex;
        final int finalGroup = group;
        return new ModelSelector() {

            @Override
            public AbstractSelectable select(AbstractSelectable abstractSelectable) {
                return abstractSelectable.regex(finalRegex, finalGroup);
            }
        };
    }
    return null;
}
Also used : FunctionParser(com.virjar.vscrawler.core.selector.string.FunctionParser) Matcher(java.util.regex.Matcher) StingEvaluator(com.virjar.vscrawler.core.selector.string.StingEvaluator) AbstractSelectable(com.virjar.vscrawler.core.selector.combine.AbstractSelectable)

Aggregations

AbstractSelectable (com.virjar.vscrawler.core.selector.combine.AbstractSelectable)1 FunctionParser (com.virjar.vscrawler.core.selector.string.FunctionParser)1 StingEvaluator (com.virjar.vscrawler.core.selector.string.StingEvaluator)1 Matcher (java.util.regex.Matcher)1