Search in sources :

Example 91 with Result

use of org.antlr.v4.misc.EscapeSequenceParsing.Result in project oxTrust by GluuFederation.

the class ScimFilterParserService method visitTree.

private String visitTree(String filter, Class clazz) throws Exception {
    log.info(" visitTree() ");
    ParseTree parseTree = getParser(filter).scimFilter();
    // Visit tree
    MainScimFilterVisitor visitor = VisitorFactory.getVisitorInstance(clazz);
    String result = visitor.visit(parseTree);
    return result;
}
Also used : ParseTree(org.antlr.v4.runtime.tree.ParseTree)

Example 92 with Result

use of org.antlr.v4.misc.EscapeSequenceParsing.Result in project oxTrust by GluuFederation.

the class FidoDeviceFilterVisitor method visitATTR_PR.

/**
     * {@InheritDoc}
     * <p>
     * <p>The default implementation returns the result of calling
     * {@link #visitChildren} on {@code ctx}.</p>
     *
     * @param ctx
     */
@Override
public String visitATTR_PR(ScimFilterParser.ATTR_PRContext ctx) {
    logger.info(" FidoDeviceFilterVisitor.visitATTR_PR() ");
    String attrName = ctx.ATTRNAME().getText();
    ParseTree parent = ctx.getParent();
    while (parent != null) {
        if (parent.getClass().getSimpleName().equalsIgnoreCase(ScimFilterParser.LBRAC_EXPR_RBRACContext.class.getSimpleName())) {
            logger.info("********** PARENT = " + parent.getClass().getSimpleName());
            attrName = ((ScimFilterParser.LBRAC_EXPR_RBRACContext) parent).ATTRNAME() + "." + ctx.ATTRNAME().getText();
            break;
        } else {
            parent = parent.getParent();
        }
    }
    attrName = FilterUtil.stripScim2Schema(attrName);
    String[] tokens = attrName.split("\\.");
    String ldapAttributeName = getFidoDeviceLdapAttributeName(attrName);
    logger.info(" ##### ATTRNAME = " + ctx.ATTRNAME().getText() + ", ldapAttributeName = " + ldapAttributeName);
    String expr = evaluateIsPresentCriteria(ldapAttributeName, tokens);
    logger.info(" ##### expr = " + expr);
    return expr;
}
Also used : ScimFilterParser(org.gluu.oxtrust.service.antlr.scimFilter.antlr4.ScimFilterParser) ParseTree(org.antlr.v4.runtime.tree.ParseTree)

Example 93 with Result

use of org.antlr.v4.misc.EscapeSequenceParsing.Result in project oxTrust by GluuFederation.

the class FidoDeviceFilterVisitor method visitATTR_OPER_CRITERIA.

/**
     * {@InheritDoc}
     * <p>
     * <p>The default implementation returns the result of calling
     * {@link #visitChildren} on {@code ctx}.</p>
     *
     * @param ctx
     */
@Override
public String visitATTR_OPER_CRITERIA(ScimFilterParser.ATTR_OPER_CRITERIAContext ctx) {
    logger.info(" FidoDeviceFilterVisitor.visitATTR_OPER_CRITERIA() ");
    ParseTree parent = ctx.getParent();
    while (parent != null) {
        if (parent.getClass().getSimpleName().equalsIgnoreCase(ScimFilterParser.LBRAC_EXPR_RBRACContext.class.getSimpleName())) {
            logger.info("********** PARENT = " + parent.getClass().getSimpleName());
            String attrName = ((ScimFilterParser.LBRAC_EXPR_RBRACContext) parent).ATTRNAME() + "." + ctx.ATTRNAME().getText();
            return attrOperCriteriaResolver(attrName, visit(ctx.operator()), visit(ctx.criteria()));
        } else {
            parent = parent.getParent();
        }
    }
    return attrOperCriteriaResolver(ctx.ATTRNAME().getText(), visit(ctx.operator()), visit(ctx.criteria()));
}
Also used : ParseTree(org.antlr.v4.runtime.tree.ParseTree)

Example 94 with Result

use of org.antlr.v4.misc.EscapeSequenceParsing.Result in project oxTrust by GluuFederation.

the class ScimGroupFilterVisitor method visitATTR_OPER_CRITERIA.

/**
     * {@InheritDoc}
     * <p>
     * <p>The default implementation returns the result of calling
     * {@link #visitChildren} on {@code ctx}.</p>
     *
     * @param ctx
     */
@Override
public String visitATTR_OPER_CRITERIA(ScimFilterParser.ATTR_OPER_CRITERIAContext ctx) {
    logger.info(" ScimGroupFilterVisitor.visitATTR_OPER_CRITERIA() ");
    ParseTree parent = ctx.getParent();
    while (parent != null) {
        if (parent.getClass().getSimpleName().equalsIgnoreCase(ScimFilterParser.LBRAC_EXPR_RBRACContext.class.getSimpleName())) {
            logger.info("********** PARENT = " + parent.getClass().getSimpleName());
            String attrName = ((ScimFilterParser.LBRAC_EXPR_RBRACContext) parent).ATTRNAME() + "." + ctx.ATTRNAME().getText();
            return attrOperCriteriaResolver(attrName, visit(ctx.operator()), visit(ctx.criteria()));
        } else {
            parent = parent.getParent();
        }
    }
    return attrOperCriteriaResolver(ctx.ATTRNAME().getText(), visit(ctx.operator()), visit(ctx.criteria()));
}
Also used : ParseTree(org.antlr.v4.runtime.tree.ParseTree)

Example 95 with Result

use of org.antlr.v4.misc.EscapeSequenceParsing.Result in project oxTrust by GluuFederation.

the class ScimGroupFilterVisitor method visitEXPR_AND_EXPR.

/**
     * {@InheritDoc}
     * <p>
     * <p>The default implementation returns the result of calling
     * {@link #visitChildren} on {@code ctx}.</p>
     *
     * @param ctx
     */
@Override
public String visitEXPR_AND_EXPR(ScimFilterParser.EXPR_AND_EXPRContext ctx) {
    logger.info(" IN ScimGroupFilterVisitor.visitEXPR_AND_EXPR()... ");
    boolean isMultivalued = false;
    ParseTree parent = ctx.getParent();
    while (parent != null) {
        if (parent.getClass().getSimpleName().equalsIgnoreCase(ScimFilterParser.LBRAC_EXPR_RBRACContext.class.getSimpleName())) {
            logger.info("********** PARENT = " + parent.getClass().getSimpleName());
            isMultivalued = true;
            break;
        } else {
            parent = parent.getParent();
        }
    }
    if (!isMultivalued) {
        String leftText = FilterUtil.stripScim1Schema(ctx.expression(0).getChild(0).getText());
        String rightText = FilterUtil.stripScim1Schema(ctx.expression(1).getChild(0).getText());
        String[] leftTextTokens = leftText.split("\\.");
        String[] rightTextTokens = rightText.split("\\.");
        if (leftTextTokens[0].equalsIgnoreCase(rightTextTokens[0]) && !leftTextTokens[0].equalsIgnoreCase("name")) {
            isMultivalued = true;
        }
    }
    String leftExp = visit(ctx.expression(0));
    String rightExp = visit(ctx.expression(1));
    StringBuilder result = new StringBuilder("");
    if (isMultivalued && !leftExp.startsWith("!(") && !rightExp.startsWith("!(")) {
        if (!leftExp.startsWith("&(") || !leftExp.startsWith("|(")) {
            String[] leftExpTokens = leftExp.split("\\=");
            String[] rightExpTokens = rightExp.split("\\=");
            if (leftExpTokens[0].equalsIgnoreCase(rightExpTokens[0])) {
                result.append("&(|(");
                result.append(leftExpTokens[0]);
                result.append("=");
                result.append(leftExpTokens[1]);
                result.append("*");
                result.append(rightExpTokens[1]);
                result.append(")");
                result.append("(");
                result.append(leftExpTokens[0]);
                result.append("=");
                result.append(rightExpTokens[1]);
                result.append("*");
                result.append(leftExpTokens[1]);
                result.append("))");
            } else {
                result.append(transformToLdapAndFilter(leftExp, rightExp));
            }
        } else {
            result.append(transformToLdapAndFilter(leftExp, rightExp));
        }
    } else {
        result.append(transformToLdapAndFilter(leftExp, rightExp));
    }
    logger.info("##### parsed filter = " + result.toString().replaceAll("\\*{2,}", "\\*"));
    logger.info(" LEAVING ScimGroupFilterVisitor.visitEXPR_AND_EXPR()... ");
    return result.toString().replaceAll("\\*{2,}", "\\*");
}
Also used : ParseTree(org.antlr.v4.runtime.tree.ParseTree)

Aggregations

Test (org.junit.Test)131 LexerGrammar (org.antlr.v4.tool.LexerGrammar)78 ANTLRInputStream (org.antlr.v4.runtime.ANTLRInputStream)52 CommonTokenStream (org.antlr.v4.runtime.CommonTokenStream)49 LexerInterpreter (org.antlr.v4.runtime.LexerInterpreter)44 ATN (org.antlr.v4.runtime.atn.ATN)44 TokenStreamRewriter (org.antlr.v4.runtime.TokenStreamRewriter)38 IntervalSet (org.antlr.v4.runtime.misc.IntervalSet)38 BaseJavaTest (org.antlr.v4.test.runtime.java.BaseJavaTest)38 ParseTree (org.antlr.v4.runtime.tree.ParseTree)29 ATNState (org.antlr.v4.runtime.atn.ATNState)11 Grammar (org.antlr.v4.tool.Grammar)10 STGroupString (org.stringtemplate.v4.STGroupString)10 ByteBuffer (java.nio.ByteBuffer)8 IntBuffer (java.nio.IntBuffer)8 UTF8CodePointDecoder (org.antlr.v4.runtime.UTF8CodePointDecoder)8 BaseRuntimeTest.antlrOnString (org.antlr.v4.test.runtime.BaseRuntimeTest.antlrOnString)8 DOTGenerator (org.antlr.v4.tool.DOTGenerator)8 ParserATNFactory (org.antlr.v4.automata.ParserATNFactory)7 Rule (org.antlr.v4.tool.Rule)7