mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Jean-Noel Rouvignac
03.03.2013 56e752193bfb90d11cfe73c35a24e576b9b18c87
opends/src/server/org/opends/server/authorization/dseecompat/BindRule.java
@@ -23,16 +23,18 @@
 *
 *
 *      Copyright 2008 Sun Microsystems, Inc.
 *      Portions Copyright 2013 ForgeRock AS
 */
package org.opends.server.authorization.dseecompat;
import org.opends.messages.Message;
import static org.opends.messages.AccessControlMessages.*;
import static org.opends.server.authorization.dseecompat.Aci.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.opends.messages.Message;
/**
 * This class represents a single bind rule of an ACI permission-bind rule
@@ -40,78 +42,58 @@
 */
public class BindRule {
    /*
     * This hash table holds the keyword bind rule mapping.
     */
    private HashMap<String, KeywordBindRule> keywordRuleMap =
    /** This hash table holds the keyword bind rule mapping. */
    private final HashMap<String, KeywordBindRule> keywordRuleMap =
                                    new HashMap<String, KeywordBindRule>();
    /*
     * True is a boolean "not" was seen.
     */
    /** True is a boolean "not" was seen. */
    private boolean negate=false;
    /*
     * Complex bind rules have left and right values.
     */
    /** Complex bind rules have left and right values. */
    private BindRule left = null;
    private BindRule right = null;
    /*
    /**
     * Enumeration of the boolean type of the complex bind rule ("and" or "or").
     */
    private EnumBooleanTypes booleanType = null;
    /*
     * The keyword of a simple bind rule.
     */
    /** The keyword of a simple bind rule. */
    private EnumBindRuleKeyword keyword = null;
    /*
     * Regular expression group position of a bind rule keyword.
     */
    /** Regular expression group position of a bind rule keyword. */
    private static final int keywordPos = 1;
    /*
     * Regular expression group position of a bind rule operation.
     */
    /** Regular expression group position of a bind rule operation. */
    private static final int opPos = 2;
    /*
     * Regular expression group position of a bind rule expression.
     */
    /** Regular expression group position of a bind rule expression. */
    private static final int expressionPos = 3;
    /*
    /**
     * Regular expression group position of the remainder part of an operand.
     */
    private static final int remainingOperandPos = 1;
    /*
     * Regular expression group position of the remainder of the bind rule.
     */
    /** Regular expression group position of the remainder of the bind rule. */
    private static final int remainingBindrulePos = 2;
    /*
     * Regular expression for valid bind rule operator group.
     */
    /** Regular expression for valid bind rule operator group. */
    private static final String opRegGroup = "([!=<>]+)";
    /*
    /**
     * Regular expression for the expression part of a partially parsed
     * bind rule.
     */
    private static final String expressionRegex =
                                  "\"([^\"]+)\"" + ZERO_OR_MORE_WHITESPACE;
    /*
     * Regular expression for a single bind rule.
     */
    /** Regular expression for a single bind rule. */
    private static final String bindruleRegex =
        WORD_GROUP_START_PATTERN + ZERO_OR_MORE_WHITESPACE +
        opRegGroup + ZERO_OR_MORE_WHITESPACE + expressionRegex;
    /*
    /**
     * Regular expression of the remainder part of a partially parsed bind rule.
     */
    private static final String remainingBindruleRegex =
@@ -588,4 +570,28 @@
            ret=evalComplex(left.evaluate(evalCtx),right.evaluate(evalCtx));
        return EnumEvalResult.negateIfNeeded(ret, negate);
    }
    /** {@inheritDoc} */
    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder();
        toString(sb);
        return sb.toString();
    }
    /**
     * Appends a string representation of this object to the provided buffer.
     *
     * @param buffer
     *          The buffer into which a string representation of this object
     *          should be appended.
     */
    public final void toString(StringBuilder buffer) {
        if (this.keywordRuleMap != null) {
            for (KeywordBindRule rule : this.keywordRuleMap.values()) {
                rule.toString(buffer);
                buffer.append(";");
            }
        }
    }
}