/** *######################################################################### * * 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: Xiao F. Yu, 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 org.greenstone.gatherer.DebugStream; import org.greenstone.gatherer.util.Codec; import org.greenstone.gatherer.util.StaticStrings; import org.greenstone.gatherer.util.XMLTools; import org.w3c.dom.*; import org.greenstone.gatherer.metadata.MetadataElement; import org.greenstone.gatherer.metadata.MetadataTools; /** This class is the greenstone 3 version of the Format.java in gs2 for handling 'gsf' format statements. */ public class Format4gs3 implements DOMProxyListEntry { /** The element this format is based on. */ private Element element = null; /** We keep a copy of the feature name */ private String feature_name = null; /** The format statement for this feature (also contains classifier options if its a classifier), used by the format list on the top in GLI. */ private String feature_format = null; /** The format statement for this feature (does not contain options in the front), displayed in the format editor at the bottom in GLI. * If this format is not a classifier, feature_format==pure_format*/ private String pure_format = null; /** Wether this feature is about a classifier. The other way to check this is to see if feature_name starts with "CL" */ private static boolean is_classifier = false; /** If this format is about a classifier, this contains all its options */ private String classifier_options = ""; /** Constructor only to be used during DOMProxyListModel initialization. */ public Format4gs3 () { } /** Constructor for a format-string format command. * @param element The element this format object contains. */ public Format4gs3 (Element element) { this.element = element; is_classifier = element.getParentNode().getNodeName().equals(StaticStrings.CLASSIFY_ELEMENT); if(is_classifier) { //The getClassifierPosition() method also sets the classifier_options variable. feature_name = Classifier.CLASSIFIER_PREFIX + getClassifierPosition(element); Classifier classifier = getClassifier(feature_name); //set the classifier_options string classifier_options = classifier.toString(); pure_format = toOneLineFormat(XMLTools.getNodeText(element)); feature_format = classifier_options + " " + pure_format; } else { feature_name = element.getAttribute(StaticStrings.NAME_ATTRIBUTE); feature_format = toOneLineFormat(XMLTools.getNodeText(element)); pure_format = feature_format; } } // public Format4gs3 (String feature_name, String feature_format) { this.feature_name = feature_name; this.feature_format = feature_format; this.pure_format = feature_format; is_classifier = feature_name.startsWith (Classifier.CLASSIFIER_PREFIX); element = CollectionConfiguration.createElement (StaticStrings.FORMAT_STR); if(is_classifier) { //Now get the options of the classifier Classifier classifier = getClassifier(feature_name); //set the classifier_options string classifier_options = classifier.toString(); feature_format = classifier_options + " " + feature_format; } else { element.setAttribute (StaticStrings.NAME_ATTRIBUTE, feature_name); } XMLTools.setNodeText(element, toOneLineFormat(pure_format)); } public int getClassifierPosition(Element element) { //we could also here use 'element.getParentNode().getParentNode()' to get this root node Element root = CollectionDesignManager.collect_config.getDocumentElement (); NodeList classify_list = root.getElementsByTagName(StaticStrings.CLASSIFY_ELEMENT); int num_classify_elements = classify_list.getLength(); for(int i=0; iString containing the format command. */ public String toString () { return feature_name + " " + toOneLineFormat(feature_format); } public void update () { if (is_classifier) { feature_name = Classifier.CLASSIFIER_PREFIX + getClassifierPosition(element); Classifier classifier = getClassifier(feature_name); //update the classifier_options string classifier_options = classifier.toString(); pure_format = toOneLineFormat(XMLTools.getNodeText(element)); feature_format = classifier_options + " " + pure_format; } } public String getFormatedFormat() { return toFormatedFormat(feature_format); } public String getPureFormat() { return toFormatedFormat(pure_format); } public Classifier getClassifier() { if(!isClassifier()) { return null; } int index = Integer.parseInt(feature_name.substring(Classifier.CLASSIFIER_PREFIX.length())); //index-1 because java indexes from 0, but greenstone is from 1. index = index - 1; return CollectionDesignManager.classifier_manager.getClassifier(index); } public void setFeatureName (String name) { feature_name = name; } /** Set the value of value. Hmmm. * @param value The new value from value as a String. */ public void setFeatureFormat (String value) { if(is_classifier) { feature_format = classifier_options + " " + value; } else { feature_format = value; } } public void setPureFormat (String value) { pure_format = value; setFeatureFormat (value); XMLTools.setNodeText(element, pure_format); } public static String toOneLineFormat(String str) { return str.replaceAll("\n", "").replaceAll(" ", "").replaceAll(" <", "<"); } public static String toFormatedFormat(String str) { return str.replaceAll(" ", "").replaceAll("<", "\n<").replaceFirst("\n", ""); } public int compareTo (Object object) { if(object == null) { // It seems that occasionally compareTo is called and somehow null ends up in comparison. return -1; } return this.getFeatureName ().compareToIgnoreCase (((Format4gs3)object).getFeatureName()); } public DOMProxyListEntry create (Element element) { return new Format4gs3 (element); } public boolean equals (Object object) { return (compareTo (object) == 0); } public Element getElement () { return element; } public boolean isClassifier() { return feature_name.startsWith(Classifier.CLASSIFIER_PREFIX); } public String getFeatureName () { return feature_name; } //The format appended as a row of string used to display in the format list panel public String getFeatureFormat () { return feature_format; } public void setElement (Element element) { this.element = element; } public boolean isAssigned() { return true; } public void setAssigned(boolean assigned) { } }