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;
}
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;
}
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()));
}
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()));
}
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,}", "\\*");
}
Aggregations