/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at * trunk/opends/resource/legal-notices/OpenDS.LICENSE * or https://OpenDS.dev.java.net/OpenDS.LICENSE. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable, * add the following below this CDDL HEADER, with the fields enclosed * by brackets "[]" replaced with your own identifying information: * Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END * * * Copyright 2008-2011 Sun Microsystems, Inc. */ package org.opends.guitools.controlpanel.datamodel; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; import org.opends.admin.ads.ADSContext; /** * The class that describes the backend configuration. * */ public class BackendDescriptor { private final String backendID; private SortedSet<BaseDNDescriptor> baseDns; private SortedSet<IndexDescriptor> indexes; private SortedSet<VLVIndexDescriptor> vlvIndexes; private int entries; private final boolean isConfigBackend; private final boolean isEnabled; private CustomSearchResult monitoringEntry; private final Type type; private int hashCode; /** * An enumeration describing the type of backend. */ public enum Type { /** * The backend is a local backend. */ LOCAL_DB, /** * The backend is a LDIF backend. */ LDIF, /** * The backend is a memory backend. */ MEMORY, /** * The backend is a backup backend. */ BACKUP, /** * The backend is a monitor backend. */ MONITOR, /** * The backend is a task backend. */ TASK, /** * The backend is another type of backend (for instance user defined). */ OTHER }; /** * Constructor for this class. * @param backendID the backend ID of the Backend. * @param baseDns the base DNs associated with the Backend. * @param indexes the indexes defined in the backend. * @param vlvIndexes the VLV indexes defined in the backend. * @param entries the number of entries in the Backend. * @param isEnabled whether the backend is enabled or not. * @param type the type of the backend. */ public BackendDescriptor(String backendID, Set<BaseDNDescriptor> baseDns, Set<IndexDescriptor> indexes, Set<VLVIndexDescriptor> vlvIndexes, int entries, boolean isEnabled, Type type) { this.backendID = backendID; this.entries = entries; isConfigBackend = isConfigBackend(backendID); this.type = type; this.isEnabled = isEnabled; updateBaseDnsAndIndexes(baseDns, indexes, vlvIndexes); recalculateHashCode(); } /** * Returns the ID of the Backend. * @return the ID of the Backend. */ public String getBackendID() { return backendID; } /** * Returns the Base DN objects associated with the backend. * @return the Base DN objects associated with the backend. */ public SortedSet<BaseDNDescriptor> getBaseDns() { return baseDns; } /** * Returns the vlv index objects associated with the backend. * @return the vlv index objects associated with the backend. */ public SortedSet<VLVIndexDescriptor> getVLVIndexes() { return vlvIndexes; } /** * Returns the index objects associated with the backend. * @return the index objects associated with the backend. */ public SortedSet<IndexDescriptor> getIndexes() { return indexes; } /** * Return the number of entries in the backend. * -1 indicates that the number of entries could not be found. * @return the number of entries in the backend. */ public int getEntries() { return entries; } /** * {@inheritDoc} */ @Override public boolean equals(Object v) { boolean equals = false; if (this != v) { if (v instanceof BackendDescriptor) { BackendDescriptor desc = (BackendDescriptor)v; equals = getBackendID().equals(desc.getBackendID()) && (getEntries() == desc.getEntries()); if (equals) { equals = desc.getBaseDns().equals(getBaseDns()); } if (equals) { equals = desc.getIndexes().equals(getIndexes()); } if (equals) { equals = desc.getVLVIndexes().equals(getVLVIndexes()); } if (equals) { // Compare monitoring entries if (getMonitoringEntry() == null) { equals = desc.getMonitoringEntry() == null; } else { equals = getMonitoringEntry().equals(desc.getMonitoringEntry()); } } } } else { equals = true; } return equals; } /** * Returns the monitoring entry information. * @return the monitoring entry information. */ public CustomSearchResult getMonitoringEntry() { return monitoringEntry; } /** * {@inheritDoc} */ @Override public int hashCode() { return hashCode; } /** * Method called when one of the elements that affect the value of the * hashcode is modified. It is used to minimize the time spent calculating * hashCode. * */ private void recalculateHashCode() { hashCode = 0; for (BaseDNDescriptor rep: getBaseDns()) { hashCode += rep.hashCode(); } hashCode += entries; for (IndexDescriptor index : indexes) { hashCode += index.hashCode(); } for (VLVIndexDescriptor index : vlvIndexes) { hashCode += index.hashCode(); } } /** * Updates the base DNs and indexes contained in this backend so that they * have a reference to this backend. It also initialize the members of this * class with the base DNs and indexes. * @param baseDns the base DNs associated with the Backend. * @param indexes the indexes defined in the backend. * @param vlvIndexes the VLV indexes defined in the backend. * */ private void updateBaseDnsAndIndexes(Set<BaseDNDescriptor> baseDns, Set<IndexDescriptor> indexes, Set<VLVIndexDescriptor> vlvIndexes) { for (BaseDNDescriptor baseDN : baseDns) { baseDN.setBackend(this); } this.baseDns = new TreeSet<BaseDNDescriptor>(baseDns); for (IndexDescriptor index : indexes) { index.setBackend(this); } this.indexes = new TreeSet<IndexDescriptor>(indexes); for (VLVIndexDescriptor index : vlvIndexes) { index.setBackend(this); } this.vlvIndexes = new TreeSet<VLVIndexDescriptor>(vlvIndexes); } /** * An convenience method to know if the provided ID corresponds to a * configuration backend or not. * @param id the backend ID to analyze * @return <CODE>true</CODE> if the the id corresponds to a configuration * backend and <CODE>false</CODE> otherwise. */ private boolean isConfigBackend(String id) { return "tasks".equalsIgnoreCase(id) || "schema".equalsIgnoreCase(id) || "config".equalsIgnoreCase(id) || "monitor".equalsIgnoreCase(id) || "backup".equalsIgnoreCase(id) || ADSContext.getDefaultBackendName().equalsIgnoreCase(id) || "ads-truststore".equalsIgnoreCase(id) || "replicationchanges".equalsIgnoreCase(id); } /** * Tells whether this is a configuration backend or not. * @return <CODE>true</CODE> if this is a configuration backend and * <CODE>false</CODE> otherwise. */ public boolean isConfigBackend() { return isConfigBackend; } /** * Sets the number of entries contained in this backend. * @param entries the number of entries contained in this backend. */ public void setEntries(int entries) { this.entries = entries; // Recalculate hashCode recalculateHashCode(); } /** * Sets the monitoring entry corresponding to this backend. * @param monitoringEntry the monitoring entry corresponding to this backend. */ public void setMonitoringEntry(CustomSearchResult monitoringEntry) { this.monitoringEntry = monitoringEntry; } /** * Returns the type of the backend. * @return the type of the backend. */ public Type getType() { return type; } /** * Tells whether this backend is enabled or not. * @return <CODE>true</CODE> if this is backend is enabled * <CODE>false</CODE> otherwise. */ public boolean isEnabled() { return isEnabled; } }