/* * 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 2006-2009 Sun Microsystems, Inc. */ package org.opends.server.backends.jeb; import org.opends.server.types.DN; import java.util.ArrayList; /** * Configuration for the indexType rebuild process. */ public class RebuildConfig { /** * The base DN to rebuild. */ private DN baseDN; /** * The names of indexes to rebuild. */ private ArrayList rebuildList; private boolean rebuildAll = false; private String tmpDirectory; /** * Create a new rebuild configuraiton. */ public RebuildConfig() { rebuildList = new ArrayList(); } /** * Get the base DN to rebuild. * @return The base DN to rebuild. */ public DN getBaseDN() { return baseDN; } /** * Set the base DN to rebuild. * @param baseDN The base DN to rebuild. */ public void setBaseDN(DN baseDN) { this.baseDN = baseDN; } /** * Get the list of indexes to rebuild in this configuration. * * @return The list of indexes to rebuild. */ public ArrayList getRebuildList() { return rebuildList; } /** * Add an index to be rebuilt into the configuration. Duplicate index names * will be ignored. Adding an index that causes a mix of complete and partial * rebuild for the same attribute index in the configuration will remove * the partial and just keep the complete attribute index name. * (ie. uid and uid.presence). * * @param index The index to add. */ public void addRebuildIndex(String index) { String[] newIndexParts = index.split("\\."); for(String s : new ArrayList(rebuildList)) { String[] existingIndexParts = s.split("\\."); if(existingIndexParts[0].equalsIgnoreCase(newIndexParts[0])) { if(newIndexParts.length == 1 && existingIndexParts.length == 1) { return; } else if(newIndexParts.length > 1 && existingIndexParts.length == 1) { return; } else if(newIndexParts.length == 1 && existingIndexParts.length > 1) { rebuildList.remove(s); } else if(newIndexParts[1].equalsIgnoreCase(existingIndexParts[1])) { return; } } } this.rebuildList.add(index); } /** * Check the given config for conflicts with this config. A conflict is * detected if both configs specify the same indexType/database to be rebuilt. * * @param config The rebuild config to check against. * @return the name of the indexType causing the conflict or null if no * conflict is detected. */ public String checkConflicts(RebuildConfig config) { //If they specify different base DNs, no conflicts can occur. if(this.baseDN.equals(config.baseDN)) { for(String thisIndex : this.rebuildList) { for(String thatIndex : config.rebuildList) { String[] existingIndexParts = thisIndex.split("\\."); String[] newIndexParts = thatIndex.split("\\."); if(existingIndexParts[0].equalsIgnoreCase(newIndexParts[0])) { if(newIndexParts.length == 1 && existingIndexParts.length == 1) { return thatIndex; } else if(newIndexParts.length > 1 && existingIndexParts.length == 1) { return thatIndex; } else if(newIndexParts.length == 1 && existingIndexParts.length > 1) { return thatIndex; } else if(newIndexParts[1].equalsIgnoreCase(existingIndexParts[1])) { return thatIndex; } } } } } return null; } /** * Test if this rebuild config includes any system indexes to rebuild. * * @return True if rebuilding of system indexes are included. False otherwise. */ public boolean includesSystemIndex() { for(String index : rebuildList) { if(index.equalsIgnoreCase("id2entry")) { return true; } if(index.equalsIgnoreCase("dn2id")) { return true; } if(index.equalsIgnoreCase("dn2uri")) { return true; } } return false; } /** * Set the temporary directory to the specified path. * * @param path The path to set the temporary directory to. */ public void setTmpDirectory(String path) { tmpDirectory = path; } /** * Return the temporary directory path. * * @return The temporary directory string. */ public String getTmpDirectory() { return tmpDirectory; } /** * Set the rebuild all boolean to the specified value. * * @param v The value to set the rebuild all boolean to. */ public void setRebuildAll(boolean v) { rebuildAll = v; } /** * Return the rebuild all boolean value. * * @return Return the rebuild all boolean value. */ public boolean isRebuildAll() { return rebuildAll; } }