/* * 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 Sun Microsystems, Inc. */ package org.opends.guitools.controlpanel.datamodel; import java.util.Collections; import java.util.SortedSet; import org.opends.admin.ads.ADSContext; /** * The class that describes the backend configuration. * */ public class BackendDescriptor { private String backendID; private SortedSet baseDns; private SortedSet indexes; private SortedSet vlvIndexes; private int entries; private boolean isConfigBackend; private boolean isEnabled; private 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, SortedSet baseDns, SortedSet indexes, SortedSet vlvIndexes, int entries, boolean isEnabled, Type type) { this.backendID = backendID; this.baseDns = Collections.unmodifiableSortedSet(baseDns); this.indexes = Collections.unmodifiableSortedSet(indexes); this.vlvIndexes = Collections.unmodifiableSortedSet(vlvIndexes); this.entries = entries; isConfigBackend = isConfigBackend(backendID); this.type = type; this.isEnabled = isEnabled; updateBaseDnsAndIndexes(); 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 getBaseDns() { return baseDns; } /** * Returns the vlv index objects associated with the backend. * @return the vlv index objects associated with the backend. */ public SortedSet getVLVIndexes() { return vlvIndexes; } /** * Returns the index objects associated with the backend. * @return the index objects associated with the backend. */ public SortedSet 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} */ 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()); } } } else { equals = true; } return equals; } /** * {@inheritDoc} */ 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. * */ private void updateBaseDnsAndIndexes() { for (BaseDNDescriptor baseDN : baseDns) { baseDN.setBackend(this); } for (AbstractIndexDescriptor index : indexes) { index.setBackend(this); } for (AbstractIndexDescriptor index : vlvIndexes) { index.setBackend(this); } } /** * An convenience method to know if the provided ID corresponds to a * configuration backend or not. * @param id the backend ID to analyze * @return true if the the id corresponds to a configuration * backend and false 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 true if this is a configuration backend and * false 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(); } /** * 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 true if this is backend is enabled * false otherwise. */ public boolean isEnabled() { return isEnabled; } }