001/*
002 * CDDL HEADER START
003 *
004 * The contents of this file are subject to the terms of the
005 * Common Development and Distribution License, Version 1.0 only
006 * (the "License").  You may not use this file except in compliance
007 * with the License.
008 *
009 * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
010 * or http://forgerock.org/license/CDDLv1.0.html.
011 * See the License for the specific language governing permissions
012 * and limitations under the License.
013 *
014 * When distributing Covered Code, include this CDDL HEADER in each
015 * file and include the License file at legal-notices/CDDLv1_0.txt.
016 * If applicable, add the following below this CDDL HEADER, with the
017 * fields enclosed by brackets "[]" replaced with your own identifying
018 * information:
019 *      Portions Copyright [yyyy] [name of copyright owner]
020 *
021 * CDDL HEADER END
022 *
023 *
024 *      Copyright 2008 Sun Microsystems, Inc.
025 *      Portions Copyright 2014-2015 ForgeRock AS
026 */
027package org.opends.server.admin.condition;
028
029
030
031import java.util.Arrays;
032import java.util.List;
033
034import org.opends.server.admin.AbstractManagedObjectDefinition;
035import org.opends.server.admin.client.AuthorizationException;
036import org.opends.server.admin.client.CommunicationException;
037import org.opends.server.admin.client.ManagedObject;
038import org.opends.server.admin.client.ManagementContext;
039import org.opends.server.admin.server.ServerManagedObject;
040import org.forgerock.opendj.config.server.ConfigException;
041import org.forgerock.util.Reject;
042
043
044
045/**
046 * A condition which evaluates to <code>true</code> if and only if
047 * all of its sub-conditions are <code>true</code>.
048 */
049public final class ANDCondition implements Condition {
050
051  /** The list of sub-conditions. */
052  private final List<Condition> conditions;
053
054
055
056  /**
057   * Creates a new logical AND condition with the provided
058   * sub-conditions.
059   *
060   * @param conditions
061   *          The sub-conditions which will be combined using a
062   *          logical AND.
063   */
064  public ANDCondition(Condition... conditions) {
065    Reject.ifNull(conditions);
066    this.conditions = Arrays.asList(conditions);
067  }
068
069
070
071  /** {@inheritDoc} */
072  public boolean evaluate(ManagementContext context,
073      ManagedObject<?> managedObject) throws AuthorizationException,
074      CommunicationException {
075    for (Condition condition : conditions) {
076      if (!condition.evaluate(context, managedObject)) {
077        return false;
078      }
079    }
080    return true;
081  }
082
083
084
085  /** {@inheritDoc} */
086  public boolean evaluate(ServerManagedObject<?> managedObject)
087      throws ConfigException {
088    for (Condition condition : conditions) {
089      if (!condition.evaluate(managedObject)) {
090        return false;
091      }
092    }
093    return true;
094  }
095
096
097
098  /** {@inheritDoc} */
099  public void initialize(AbstractManagedObjectDefinition<?, ?> d)
100      throws Exception {
101    for (Condition condition : conditions) {
102      condition.initialize(d);
103    }
104  }
105
106}