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

Last change on this file since 8164 was 8164, checked in by mdewsnip, 20 years ago

Added headers at the top of each file.

  • Property svn:keywords set to Author Date Id Revision
File size: 6.3 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.*;
31import java.util.*;
32import org.greenstone.gatherer.util.XMLTools;
33import org.w3c.dom.*;
34
35
36/** This class represents one metadata set */
37public class MetadataSet
38{
39 private File metadata_set_file = null;
40 private ArrayList metadata_set_elements = new ArrayList();
41 private String metadata_set_namespace = null;
42
43
44 public MetadataSet(File metadata_set_file)
45 {
46 this.metadata_set_file = metadata_set_file;
47
48 // Parse the specified metadata set file
49 Document document = XMLTools.parseXMLFile(metadata_set_file);
50 if (document == null) {
51 System.err.println("Error: Could not parse metadata set file " + metadata_set_file.getAbsolutePath());
52 return;
53 }
54
55 // Read the metadata set's namespace
56 metadata_set_namespace = document.getDocumentElement().getAttribute("namespace");
57
58 // Read the Element elements in the metadata set
59 NodeList element_elements_nodelist = document.getElementsByTagName("Element");
60 for (int i = 0; i < element_elements_nodelist.getLength(); i++) {
61 Element metadata_element_element = (Element) element_elements_nodelist.item(i);
62 String metadata_element_name = metadata_element_element.getAttribute("name");
63 String metadata_element_name_full = metadata_set_namespace + MetadataTools.NAMESPACE_SEPARATOR + metadata_element_name;
64 metadata_set_elements.add(new MetadataElement(metadata_element_name_full, metadata_element_element));
65 }
66 }
67
68
69 public MetadataElement addMetadataElementForThisSession(String metadata_element_name)
70 {
71 String metadata_element_name_full = metadata_set_namespace + MetadataTools.NAMESPACE_SEPARATOR + metadata_element_name;
72 MetadataElement metadata_element = new MetadataElement(metadata_element_name_full, null);
73 metadata_set_elements.add(metadata_element);
74 return metadata_element;
75 }
76
77
78 public int compareMetadataElements(MetadataElement metadata_element_a, MetadataElement metadata_element_b)
79 {
80 // Extracted metadata is sorted alphabetically
81 if (metadata_set_namespace.equals(MetadataSetManager.EXTRACTED_METADATA_NAMESPACE)) {
82 return metadata_element_a.getName().compareTo(metadata_element_b.getName());
83 }
84
85 // Elements in metadata sets are sorted according to the other they are specified in the .mds file
86 return metadata_set_elements.indexOf(metadata_element_a) - metadata_set_elements.indexOf(metadata_element_b);
87 }
88
89
90 public String getAttribute(String attribute_name, String language_code)
91 {
92 // Parse the specified metadata set file
93 Document document = XMLTools.parseXMLFile(metadata_set_file);
94 if (document == null) {
95 System.err.println("Error: Could not parse metadata set file " + metadata_set_file.getAbsolutePath());
96 return null;
97 }
98
99 Element document_element = document.getDocumentElement();
100 Element parent_element = document_element;
101 boolean language_matches = false;
102
103 NodeList setlanguage_elements_nodelist = document_element.getElementsByTagName("SetLanguage");
104 for (int i = 0; i < setlanguage_elements_nodelist.getLength(); i++) {
105 Element current_setlanguage_element = (Element) setlanguage_elements_nodelist.item(i);
106 String current_setlanguage_element_code = current_setlanguage_element.getAttribute("code");
107 if (current_setlanguage_element_code.equals(language_code)) {
108 // Found language; use it for the next step
109 parent_element = current_setlanguage_element;
110 language_matches = true;
111 break;
112 }
113 }
114
115 NodeList attribute_elements_nodelist = parent_element.getElementsByTagName(attribute_name);
116 for (int i = 0; i < attribute_elements_nodelist.getLength(); i++) {
117 Element current_attribute_element = (Element) attribute_elements_nodelist.item(i);
118
119 // Check if the language matches
120 String current_attribute_element_language = current_attribute_element.getAttribute("language");
121 if (language_matches || current_attribute_element_language.equals(language_code)) {
122 // Found attribute; returns its value
123 return XMLTools.getElementTextValue(current_attribute_element);
124 }
125 }
126
127 return null;
128 }
129
130
131 public MetadataElement getMetadataElementWithDisplayName(String metadata_element_display_name_full)
132 {
133 // Find the desired metadata element in the list
134 for (int i = 0; i < metadata_set_elements.size(); i++) {
135 MetadataElement metadata_element = (MetadataElement) metadata_set_elements.get(i);
136 if (metadata_element.getDisplayName().equals(metadata_element_display_name_full)) {
137 return metadata_element;
138 }
139 }
140
141 // Not found
142 return null;
143 }
144
145
146 public MetadataElement getMetadataElementWithName(String metadata_element_name)
147 {
148 // Find the desired metadata element in the list
149 for (int i = 0; i < metadata_set_elements.size(); i++) {
150 MetadataElement metadata_element = (MetadataElement) metadata_set_elements.get(i);
151 if (metadata_element.getName().equals(metadata_element_name)) {
152 return metadata_element;
153 }
154 }
155
156 // Not found
157 return null;
158 }
159
160
161 public ArrayList getMetadataSetElements()
162 {
163 // We don't want anyone to modify the list, so return a copy of it
164 return (ArrayList) metadata_set_elements.clone();
165 }
166
167
168 public File getMetadataSetFile()
169 {
170 return metadata_set_file;
171 }
172
173
174 public String getNamespace()
175 {
176 return metadata_set_namespace;
177 }
178}
Note: See TracBrowser for help on using the repository browser.