source: gli/trunk/src/org/greenstone/gatherer/metadata/MetadataSet.java@ 14567

Last change on this file since 14567 was 12147, checked in by kjdon, 18 years ago

added an equals method which compares the strings rather than the objects

  • Property svn:keywords set to Author Date Id Revision
File size: 7.9 KB
Line 
1/**
2 *############################################################################
3 * A component of the Greenstone Librarian Interface, part of the Greenstone
4 * digital library suite from the New Zealand Digital Library Project at the
5 * University of Waikato, New Zealand.
6 *
7 * Author: Michael Dewsnip, NZDL Project, University of Waikato, NZ
8 *
9 * Copyright (C) 2004 New Zealand Digital Library Project
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 *############################################################################
25 */
26
27package org.greenstone.gatherer.metadata;
28
29
30import java.io.File;
31import java.util.*;
32import javax.swing.filechooser.*;
33import org.greenstone.gatherer.Configuration;
34import org.greenstone.gatherer.Dictionary;
35import org.greenstone.gatherer.util.XMLTools;
36import org.w3c.dom.*;
37
38
39/** This class represents one metadata set */
40public class MetadataSet
41{
42 private File metadata_set_file = null;
43 private ArrayList metadata_set_elements = new ArrayList();
44 private String metadata_set_namespace = null;
45
46
47 public MetadataSet(File metadata_set_file)
48 {
49 this.metadata_set_file = metadata_set_file;
50
51 // Parse the specified metadata set file
52 Document document = XMLTools.parseXMLFile(metadata_set_file);
53 if (document == null) {
54 System.err.println("Error: Could not parse metadata set file " + metadata_set_file.getAbsolutePath());
55 return;
56 }
57
58 // Read the metadata set's namespace
59 metadata_set_namespace = document.getDocumentElement().getAttribute("namespace");
60
61 // Read the Element elements in the metadata set
62 NodeList element_elements_nodelist = document.getElementsByTagName("Element");
63 for (int i = 0; i < element_elements_nodelist.getLength(); i++) {
64 Element metadata_element_element = (Element) element_elements_nodelist.item(i);
65 String metadata_element_name = metadata_element_element.getAttribute("name");
66
67 // Deal with hierarchical metadata elements
68 Element parent_metadata_element_element = (Element) metadata_element_element.getParentNode();
69 while (parent_metadata_element_element.getTagName().equals("Element")) {
70 String parent_metadata_element_name = parent_metadata_element_element.getAttribute("name");
71 metadata_element_name = parent_metadata_element_name + MetadataTools.SUBELEMENT_SEPARATOR + metadata_element_name;
72 parent_metadata_element_element = (Element) parent_metadata_element_element.getParentNode();
73 }
74
75 String metadata_element_name_full = metadata_set_namespace + MetadataTools.NAMESPACE_SEPARATOR + metadata_element_name;
76 metadata_set_elements.add(new MetadataElement(metadata_element_name_full, metadata_element_element));
77 }
78 }
79
80
81 public MetadataElement addMetadataElementForThisSession(String metadata_element_name)
82 {
83 String metadata_element_name_full = metadata_set_namespace + MetadataTools.NAMESPACE_SEPARATOR + metadata_element_name;
84 MetadataElement metadata_element = new MetadataElement(metadata_element_name_full, null);
85 metadata_set_elements.add(metadata_element);
86 return metadata_element;
87 }
88
89
90 public int compareMetadataElements(MetadataElement metadata_element_a, MetadataElement metadata_element_b)
91 {
92 // Extracted metadata is sorted alphabetically
93 if (metadata_set_namespace.equals(MetadataSetManager.EXTRACTED_METADATA_NAMESPACE)) {
94 return metadata_element_a.getName().compareTo(metadata_element_b.getName());
95 }
96
97 // Elements in metadata sets are sorted according to the other they are specified in the .mds file
98 return metadata_set_elements.indexOf(metadata_element_a) - metadata_set_elements.indexOf(metadata_element_b);
99 }
100
101 /** we consider MetadataSets to be equal if their names and namespaces match */
102 public boolean equals(Object obj) {
103 if (obj instanceof MetadataSet) {
104 return toString().equals(obj.toString());
105 }
106 return false;
107 }
108
109
110 public String getAttribute(String attribute_name, String language_code)
111 {
112 // Parse the specified metadata set file
113 Document document = XMLTools.parseXMLFile(metadata_set_file);
114 if (document == null) {
115 System.err.println("Error: Could not parse metadata set file " + metadata_set_file.getAbsolutePath());
116 return null;
117 }
118
119 Element document_element = document.getDocumentElement();
120 Element parent_element = document_element;
121 boolean language_matches = false;
122
123 NodeList setlanguage_elements_nodelist = document_element.getElementsByTagName("SetLanguage");
124 for (int i = 0; i < setlanguage_elements_nodelist.getLength(); i++) {
125 Element current_setlanguage_element = (Element) setlanguage_elements_nodelist.item(i);
126 String current_setlanguage_element_code = current_setlanguage_element.getAttribute("code");
127 if (current_setlanguage_element_code.equals(language_code)) {
128 // Found language; use it for the next step
129 parent_element = current_setlanguage_element;
130 language_matches = true;
131 break;
132 }
133 }
134
135 NodeList attribute_elements_nodelist = parent_element.getElementsByTagName(attribute_name);
136 for (int i = 0; i < attribute_elements_nodelist.getLength(); i++) {
137 Element current_attribute_element = (Element) attribute_elements_nodelist.item(i);
138
139 // Check if the language matches
140 String current_attribute_element_language = current_attribute_element.getAttribute("language");
141 if (language_matches || current_attribute_element_language.equals(language_code)) {
142 // Found attribute; returns its value
143 return XMLTools.getElementTextValue(current_attribute_element);
144 }
145 }
146
147 return null;
148 }
149
150
151 public MetadataElement getMetadataElementWithDisplayName(String metadata_element_display_name_full)
152 {
153 // Find the desired metadata element in the list
154 for (int i = 0; i < metadata_set_elements.size(); i++) {
155 MetadataElement metadata_element = (MetadataElement) metadata_set_elements.get(i);
156 if (metadata_element.getDisplayName().equals(metadata_element_display_name_full)) {
157 return metadata_element;
158 }
159 }
160
161 // Not found
162 return null;
163 }
164
165
166 public MetadataElement getMetadataElementWithName(String metadata_element_name)
167 {
168 // Find the desired metadata element in the list
169 for (int i = 0; i < metadata_set_elements.size(); i++) {
170 MetadataElement metadata_element = (MetadataElement) metadata_set_elements.get(i);
171 if (metadata_element.getName().equals(metadata_element_name)) {
172 return metadata_element;
173 }
174 }
175
176 // Not found
177 return null;
178 }
179
180
181 public ArrayList getMetadataSetElements()
182 {
183 // We don't want anyone to modify the list, so return a copy of it
184 return (ArrayList) metadata_set_elements.clone();
185 }
186
187
188 public File getMetadataSetFile()
189 {
190 return metadata_set_file;
191 }
192
193
194 public String getNamespace()
195 {
196 return metadata_set_namespace;
197 }
198
199
200 /** This is used to display the metadata set in the metadata import mapping and explode metadata prompts */
201 public String toString()
202 {
203 return MetadataTools.getMetadataSetAttribute(this, "Name", Configuration.getLanguage(), "en") + " (" + metadata_set_namespace + ")";
204 }
205
206
207 static public class MetadataSetFileFilter
208 extends FileFilter
209 {
210 public boolean accept(File file)
211 {
212 String file_name = file.getName().toLowerCase();
213 if (file_name.endsWith(".mds") || file_name.indexOf(".") == -1) {
214 return true;
215 }
216
217 return false;
218 }
219
220
221 public String getDescription()
222 {
223 return Dictionary.get("MetadataSet.Files");
224 }
225 }
226}
Note: See TracBrowser for help on using the repository browser.