/** *######################################################################### * * 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: Shaoqun Wu, Greenstone Digital Library, University of Waikato * *

* * Copyright (C) 2006 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.gems; import org.apache.xerces.dom.*;// for new Documents import org.w3c.dom.Document; import org.w3c.dom.DocumentType; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.Attr; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.NodeList; import java.util.HashMap; import java.util.ArrayList; import org.greenstone.gatherer.util.XMLTools; /** * @author Shaoqun Wu, Greenstone Digital Library, University of Waikato */ public class MetadataSetInfo extends AttributeContainer { private String file_path=""; private static ArrayList listeners = new ArrayList(); private static MetadataSetModel metadata_model; private String current_language = GEMSConstants.DEFAULT_LANGUAGE; private boolean isNew = false; public MetadataSetInfo(){ super(GEMSConstants.SET_REQUIRED_ATTRIBUTES, GEMSConstants.SET_LANG_DEPEND_ATTR_NAMES); } public boolean isNamespaceAlreadyUsed(String namespace){ if(metadata_model != null) { return metadata_model.getMetadataSetManager().isNamespaceAlreadyUsed(namespace); } return false; } public void setNew(boolean isNew){ this.isNew = isNew; } public boolean isNew(){ return isNew; } public Document getMetadataSetDocument(){ return metadata_model.getMetadataSetDocument(); } public MetadataSetModel getMetadataSetModel(){ return metadata_model; } public void setMetadataSetModel(MetadataSetModel model){ metadata_model = model; } public String getMetadataSetName(){ return getMetadataSetName(getCurrentLanguage()); } public String getMetadataSetName(String lang){ Attribute attr = getAttributeByNameAndLanguage(GEMSConstants.NAME_ATTRIBUTE,lang); if (attr != null) { return attr.getValue(); } else { return GEMSConstants.UNKNOWN_NAME; } } public void setMetadataSetName(String name){ setMetadataSetName(name, getCurrentLanguage()); } public void setMetadataSetName(String name,String lang){ Attribute attr = getAttributeByNameAndLanguage(GEMSConstants.NAME_ATTRIBUTE,lang); if (attr != null){ attr.setValue(name); } else { attr = new Attribute(GEMSConstants.NAME_ATTRIBUTE, name, lang, true); language_dependent_attributes.add(attr); } } public String getMetadataSetDescription(){ return getMetadataSetDescription(getCurrentLanguage()); } public String getMetadataSetDescription(String lang){ Attribute attr = getAttributeByNameAndLanguage(GEMSConstants.DESCRIPTION_ATTRIBUTE,lang); if (attr != null) { return attr.getValue(); } else { return ""; } } public void setMetadataSetDescription(String desc) { setMetadataSetDescription(desc, getCurrentLanguage()); } public void setMetadataSetDescription(String desc, String lang) { Attribute attr = getAttributeByNameAndLanguage(GEMSConstants.DESCRIPTION_ATTRIBUTE,lang); if (attr != null){ attr.setValue(desc); } else { attr = new Attribute(GEMSConstants.DESCRIPTION_ATTRIBUTE, desc, lang, true); language_dependent_attributes.add(attr); } } public String getCurrentLanguage(){ return current_language; } public void setCurrentLanguage(String lang){ current_language = lang; } public String getNamespace(){ Attribute attr = getAttributeByName(GEMSConstants.NAMESPACE_ATTRIBUTE); if (attr != null){ return attr.getValue(); } else{ return ""; } } public void setNamespace(String namespace){ Attribute attr = getAttributeByName(GEMSConstants.NAMESPACE_ATTRIBUTE); if (attr != null){ attr.setValue(namespace); } else { attr = new Attribute(GEMSConstants.NAMESPACE_ATTRIBUTE, namespace, true); attributes.add(attr); } } public String getFilePath(){ return file_path; } public void infoChanged(){ metadata_model.valueChanged(); } public void setFilePath(String path){ file_path = path; } public void addMetadataSetListener(MetadataSetListener msl){ if (!listeners.contains(msl)) listeners.add(msl); } public void removeMetadataSetListener(MetadataSetListener msl){ listeners.remove(msl); } public void removeAllMetadataSetListeners(){ listeners.clear(); } public void deleteMetadataSet(){ metadata_model.getMetadataSetManager().deleteMetadataSet(this); if (metadata_model.getMetadataSetInfo() != null && metadata_model.getMetadataSetInfo().getFilePath().equals(this.getFilePath())){ metadata_model.metadataSetDeleted(); MetadataSetEvent mse = new MetadataSetEvent(null); for(int i=0;i=0;--i){ Node set_language = setLanguages.item(i); doc_element.removeChild(set_language); } ArrayList names = XMLTools.getChildElementsByTagName(doc_element,GEMSConstants.NAME_ELEMENT); for(int i=0;i< names.size();i++){ Element name_element = (Element)names.get(i); doc_element.removeChild(name_element); } ArrayList deses = XMLTools.getChildElementsByTagName(doc_element,GEMSConstants.DESCRIPTION_ELEMENT); for(int i=0;i< deses.size();i++){ Element des_element = (Element)deses.get(i); doc_element.removeChild(des_element); } Node first_child = doc_element.getFirstChild(); Node previous_element = null; //add setLanguage elements ArrayList langs = getAllLanguages(); for (int i=0;i