001/*
002 * The contents of this file are subject to the terms of the Common Development and
003 * Distribution License (the License). You may not use this file except in compliance with the
004 * License.
005 *
006 * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
007 * specific language governing permission and limitations under the License.
008 *
009 * When distributing Covered Software, include this CDDL Header Notice in each file and include
010 * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
011 * Header, with the fields enclosed by brackets [] replaced by your own identifying
012 * information: "Portions Copyright [year] [name of copyright owner]".
013 *
014 * Copyright 2008 Sun Microsystems, Inc.
015 * Portions Copyright 2015 ForgeRock AS.
016 */
017package org.opends.admin.ads;
018
019import java.util.HashSet;
020import java.util.Set;
021
022/**
023 * Class used to filter what we look for in the topology cache.
024 * This is done in particular to avoid problems of performance when we
025 * know what we are looking for.  It is particularly useful to avoid
026 * searching for monitoring information.
027 */
028public class TopologyCacheFilter
029{
030  private Set<String> baseDNs = new HashSet<>();
031  private boolean searchMonitoringInformation = true;
032  private boolean searchBaseDNInformation = true;
033
034  /**
035   * Returns whether we must search for base DN information or not.
036   * @return <CODE>true</CODE> if we must search base DN information and
037   * <CODE>false</CODE> otherwise.
038   */
039  public boolean searchBaseDNInformation()
040  {
041    return searchBaseDNInformation;
042  }
043
044  /**
045   * Sets whether we must search for base DN information or not.
046   * @param searchBaseDNInformation whether we must search for base DN
047   * information or not.
048   */
049  public void setSearchBaseDNInformation(
050      boolean searchBaseDNInformation)
051  {
052    this.searchBaseDNInformation = searchBaseDNInformation;
053  }
054
055
056  /**
057   * Returns whether we must search for monitoring information or not.
058   * @return <CODE>true</CODE> if we must search monitoring information and
059   * <CODE>false</CODE> otherwise.
060   */
061  public boolean searchMonitoringInformation()
062  {
063    return searchMonitoringInformation;
064  }
065
066  /**
067   * Sets whether we must search for monitoring information or not.
068   * @param searchMonitoringInformation whether we must search for monitoring
069   * information or not.
070   */
071  public void setSearchMonitoringInformation(
072      boolean searchMonitoringInformation)
073  {
074    this.searchMonitoringInformation = searchMonitoringInformation;
075  }
076
077  /**
078   * Adds one of the base DNs we must search for.  If at least one baseDN
079   * is added using this method, only the added baseDNs are searched.  If no
080   * base DN is added, all the base DNs will be retrieved.
081   * @param dn the DN of the base DN to look for.
082   */
083  public void addBaseDNToSearch(String dn)
084  {
085    baseDNs.add(dn);
086  }
087
088  /**
089   * Removes a base DN fom the list of baseDNs to search.
090   * @param dn the DN of the base DN to be removed.
091   */
092  public void removeBaseDNToSearch(String dn)
093  {
094    baseDNs.remove(dn);
095  }
096
097  /**
098   * Returns the list of base DNs that will be searched for.  If the list is
099   * empty we will search for all the base DNs.
100   * @return the list of base DNs we will search for.
101   */
102  public Set<String> getBaseDNsToSearch()
103  {
104    return new HashSet<>(baseDNs);
105  }
106
107  /**
108   * Tells whether this filter specifies to search for all the base DNs or not.
109   * @return <CODE>true</CODE> if the filter specifies to search for all the
110   * base DNs and <CODE>false</CODE> otherwise.
111   */
112  public boolean searchAllBaseDNs()
113  {
114    return baseDNs.isEmpty();
115  }
116}