/** *######################################################################### * * A component of the Gatherer application, part of the Greenstone digital * library suite from the New Zealand Digital Library Project at the * University of Waikato, New Zealand. * * Author: John Thompson, Greenstone Digital Library, University of Waikato * * Copyright (C) 1999 New Zealand Digital Library Project * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *######################################################################## */ package org.greenstone.gatherer.cdm; import java.util.*; import org.greenstone.gatherer.Gatherer; import org.greenstone.gatherer.cdm.CollectionConfiguration; import org.greenstone.gatherer.cdm.CollectionDesignManager; import org.greenstone.gatherer.cdm.CollectionMeta; import org.greenstone.gatherer.cdm.DOMProxyListEntry; import org.greenstone.gatherer.util.StaticStrings; import org.greenstone.gatherer.util.Utility; import org.greenstone.gatherer.util.XMLTools; import org.w3c.dom.*; /** This class encapsulates a single indexing pair. * @author John Thompson, Greenstone Digital Library, University of Waikato * @version 2.4 */ public class SubcollectionIndex implements Comparable, DOMProxyListEntry { private ArrayList sources = null; /** The element this index is based upon. */ private Element element = null; /** The unique, if cryptic, identifier of an index. */ private String id = null; /** Default constructor, which should only be used during DOMProxyListModel creation. */ public SubcollectionIndex() { } /** Constructor. */ public SubcollectionIndex(Element element) { this.element = element; } public SubcollectionIndex(Object[] raw_sources) { this.sources = new ArrayList(); // Create a new element Document document = CollectionDesignManager.collect_config.document; element = document.createElement(CollectionConfiguration.INDEX_ELEMENT); // For each source add a content element int size = raw_sources.length; for(int i = 0; i < size; i++) { Subcollection subcollection = (Subcollection) raw_sources[i]; String subcollection_name = subcollection.getName(); sources.add(subcollection_name); Element content_element = document.createElement(CollectionConfiguration.CONTENT_ELEMENT); content_element.setAttribute(CollectionConfiguration.NAME_ATTRIBUTE, subcollection_name); element.appendChild(content_element); content_element = null; } document = null; } /** Method to compare two indexes. * @param object The other index as an Object. * @return An int which indicates how the indexes compare. * @see java.lang.String */ public int compareTo(Object object) { return id.compareTo(((SubcollectionIndex)object).getID()); } public DOMProxyListEntry create(Element element) { return new SubcollectionIndex(element); } /** Method to test for the equality of two indexes. * @param object The other index as an Object. * @return A boolean which is true if the two indexes are equal, false otherwise. */ public boolean equals(Object object) { return (compareTo(object) == 0); } public Element getElement() { return element; } public String getID() { if(id == null) { StringBuffer id_buffer = new StringBuffer(); // Write data information. Retrieve each of the content sources and add them in a comma separated list. ArrayList sources = getSources(); int sources_size = sources.size(); for(int i = 0; i < sources_size; i++) { id_buffer.append((String)sources.get(i)); id_buffer.append(StaticStrings.COMMA_CHARACTER); } sources = null; id = id_buffer.substring(0, id_buffer.length() - 1); } return id; } /** Retrieve the sources of this index. * @return the sources as an ArrayList */ public ArrayList getSources() { if(sources == null) { sources = new ArrayList(); NodeList content_elements = element.getElementsByTagName(CollectionConfiguration.CONTENT_ELEMENT); int content_elements_length = content_elements.getLength(); for(int i = 0; i < content_elements_length; i++) { Element content_element = (Element) content_elements.item(i); sources.add(content_element.getAttribute(CollectionConfiguration.NAME_ATTRIBUTE)); } content_elements = null; Collections.sort(sources); } return sources; } public boolean isAssigned() { return (element != null && !element.getAttribute(CollectionConfiguration.ASSIGNED_ATTRIBUTE).equals(CollectionConfiguration.FALSE_STR)); } public void setAssigned(boolean assigned) { if(element != null) { element.setAttribute(CollectionConfiguration.ASSIGNED_ATTRIBUTE, (assigned ? CollectionConfiguration.TRUE_STR : CollectionConfiguration.FALSE_STR)); } } public void setElement(Element element) { this.element = element; this.id = null; this.sources = null; } /** Method to set the sources for this index which can only be used for the default index. * @param sources an ArrayList of source names */ public void setSources(ArrayList sources) { if(element != null) { // Erase old sources XMLTools.clear(element); // For each entry in the sources array add a new content element. int size = sources.size(); for(int i = 0; i < size; i++) { Element content_element = element.getOwnerDocument().createElement(CollectionConfiguration.CONTENT_ELEMENT); content_element.setAttribute(CollectionConfiguration.NAME_ATTRIBUTE, (String) sources.get(i)); element.appendChild(content_element); content_element = null; } this.id = null; // Regenerate ID. this.sources = sources; } else { Gatherer.println("Error! Called setSource() of index other than the default."); } } /** Method to turn this object into a string representation ready to be placed in the collection configuration file. * @return A String containing the information of this class. */ public String toString() { String id = getID(); StringBuffer text = new StringBuffer(id); CollectionMeta metadatum = CollectionDesignManager.collectionmeta_manager.getMetadatum(StaticStrings.STOP_CHARACTER + id, false); if(metadatum != null) { text.append(" \""); text.append(metadatum.getValue(CollectionMeta.TEXT)); text.append("\""); } return text.toString(); } }