source: other-projects/FileTransfer-WebSocketPair/testGXTWithGreenstone/src/org/greenstone/gatherer/metadata/MetadataElement.java@ 33053

Last change on this file since 33053 was 33053, checked in by ak19, 5 years ago

I still had some stuff of Nathan Kelly's (FileTransfer-WebSocketPair) sitting on my USB. Had already commited the Themes folder at the time, 2 years back. Not sure if he wanted this additional folder commited. But I didn't want to delete it and decided it will be better off on SVN. When we use his project, if we find we didn't need this test folder, we can remove it from svn then.

File size: 8.2 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 org.greenstone.gatherer.Configuration;
32import org.greenstone.gatherer.util.XMLTools;
33import org.greenstone.gatherer.util.StaticStrings;
34import org.w3c.dom.*;
35
36
37/** This class represents one Metadata element */
38public class MetadataElement
39{
40 // Language-independent metadata element name, with namespace (eg. dc.Subject)
41 private String metadata_element_name_full = null;
42 private Element metadata_element_element = null;
43 private MetadataValueTreeModel metadata_value_tree_model = null;
44 /* this is true if the metadata element comes with a pre defined set of values */
45 private boolean predefined_values = false;
46 /* This restricts the user to only the predefined values */
47 private boolean restricted_values = false;
48 /* can we have more than one value for this metadata element per document? */
49 /* default, true = yes */
50 private boolean accumulating = true;
51 public MetadataElement(String metadata_element_name_full, Element metadata_element_element)
52 {
53 this.metadata_element_name_full = metadata_element_name_full;
54 this.metadata_element_element = metadata_element_element;
55 this.metadata_value_tree_model = new MetadataValueTreeModel(this);
56 if (metadata_element_element != null) {
57 if (metadata_element_element.getAttribute(StaticStrings.PREDEFINED_METADATA_ATTRIBUTE).equals("true")) {
58 predefined_values = true;
59 loadOptionList();
60 if (metadata_element_element.getAttribute(StaticStrings.RESTRICTED_METADATA_ATTRIBUTE).equals("true")) {
61 // cant have restricted values if no predefined values
62 restricted_values = true;
63 }
64 }
65 if (metadata_element_element.getAttribute("accumulating").equals("false")) {
66 accumulating = false;
67 }
68 }
69 }
70
71 // do this better
72 protected boolean loadOptionList() {
73 NodeList values = metadata_element_element.getElementsByTagName("Value");
74 for (int i=0; i<values.getLength(); i++) {
75 String val = XMLTools.getValue(values.item(i));
76 addMetadataValue(val);
77 }
78 return true;
79 }
80 public MetadataValueTreeNode addMetadataValue(String metadata_value)
81 {
82 return metadata_value_tree_model.addMetadataValue(metadata_value);
83 }
84
85
86 public String getAttribute(String attribute_name, String language_code)
87 {
88 // Some extracted metadata elements may not be in ex.mds, and so have no attributes
89 if (metadata_element_element == null) {
90 return null;
91 }
92
93 Element parent_element = metadata_element_element;
94 boolean language_matches = false;
95
96 NodeList language_elements_nodelist = metadata_element_element.getElementsByTagName("Language");
97 for (int i = 0; i < language_elements_nodelist.getLength(); i++) {
98 Element current_language_element = (Element) language_elements_nodelist.item(i);
99 String current_language_element_code = current_language_element.getAttribute("code");
100 if (current_language_element_code.equals(language_code)) {
101 // Found language; use it for the next step
102 parent_element = current_language_element;
103 language_matches = true;
104 break;
105 }
106 }
107
108 NodeList attribute_elements_nodelist = parent_element.getElementsByTagName("Attribute");
109 for (int i = 0; i < attribute_elements_nodelist.getLength(); i++) {
110 Element current_attribute_element = (Element) attribute_elements_nodelist.item(i);
111 String current_attribute_element_name = current_attribute_element.getAttribute("name");
112 if (!current_attribute_element_name.equals(attribute_name)) {
113 // Move on to the next Attribute element if the name doesn't match
114 continue;
115 }
116
117 // Check if the language matches
118 String current_attribute_element_language = current_attribute_element.getAttribute("language");
119 if (language_matches || current_attribute_element_language.equals(language_code)) {
120 // Found attribute; returns its value
121 return XMLTools.getElementTextValue(current_attribute_element);
122 }
123 }
124
125 return null;
126 }
127
128
129 /** Returns language-dependent metadata element name, with namespace (eg. dc.Subject and Keywords) */
130 public String getDisplayName()
131 {
132 // now we use label, previously we used identifier
133 String metadata_element_display_name = MetadataTools.getMetadataElementAttribute(this, "label", Configuration.getLanguage(), "en");
134 if (metadata_element_display_name == null) {
135 // try identifier
136 metadata_element_display_name = MetadataTools.getMetadataElementAttribute(this, "identifier", Configuration.getLanguage(), "en");
137 }
138 // Root case (no subelements)
139 if (metadata_element_name_full.indexOf(MetadataTools.SUBELEMENT_SEPARATOR) == -1) {
140 if (metadata_element_display_name != null) {
141 return getNamespace() + "." + metadata_element_display_name;
142 }
143
144 return metadata_element_name_full;
145 }
146
147 // Recursive case (hierarchical metadata elements)
148 else {
149 String parent_metadata_element_name_full = metadata_element_name_full.substring(0, metadata_element_name_full.lastIndexOf(MetadataTools.SUBELEMENT_SEPARATOR));
150 MetadataElement parent_metadata_element = MetadataTools.getMetadataElementWithName(parent_metadata_element_name_full);
151
152 String parent_metadata_element_display_name = parent_metadata_element_name_full;
153 if (parent_metadata_element != null) {
154 parent_metadata_element_display_name = parent_metadata_element.getDisplayName();
155 }
156
157 if (metadata_element_display_name != null) {
158 return parent_metadata_element_display_name + MetadataTools.SUBELEMENT_SEPARATOR + metadata_element_display_name;
159 }
160
161 return parent_metadata_element_display_name + metadata_element_name_full.substring(parent_metadata_element_name_full.length());
162 }
163 }
164
165
166 public MetadataValueTreeModel getMetadataValueTreeModel()
167 {
168 return metadata_value_tree_model;
169 }
170
171
172 public MetadataValueTreeNode getMetadataValueTreeNode(String metadata_value)
173 {
174 return metadata_value_tree_model.getMetadataValueTreeNode(metadata_value);
175 }
176
177
178 /** Returns language-independent metadata element name, with namespace (eg. dc.Subject) */
179 public String getFullName()
180 {
181 return metadata_element_name_full;
182 }
183
184
185 public String getNamespace()
186 {
187 return MetadataTools.getMetadataSetNamespace(metadata_element_name_full);
188 }
189
190
191 /** Returns language-independent metadata element name, *without* namespace (eg. Subject) */
192 public String getName()
193 {
194 return MetadataTools.getMetadataElementName(metadata_element_name_full);
195 }
196
197
198 public boolean isGSExtractedMetadataElement()
199 {
200 return getNamespace().equals(MetadataSetManager.EXTRACTED_METADATA_NAMESPACE);
201 }
202
203 public boolean isExtractedMetadataElement()
204 {
205 return getNamespace().startsWith(MetadataSetManager.EXTRACTED_METADATA_NAMESPACE);
206 }
207
208
209 public boolean isPredefined() {
210 return predefined_values;
211 }
212
213 public boolean isRestricted() {
214 return restricted_values;
215 }
216
217 public boolean isAccumulating() {
218 return accumulating;
219 }
220 public boolean isSubelement()
221 {
222 return (metadata_element_name_full.indexOf(MetadataTools.SUBELEMENT_SEPARATOR) != -1);
223 }
224
225
226 /** This is used to display the element in the metadata value table */
227 public String toString()
228 {
229 return getDisplayName();
230 }
231}
Note: See TracBrowser for help on using the repository browser.