source: trunk/gli/src/org/greenstone/gatherer/metadata/MetadataElement.java@ 8131

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

More improvements to the new metadata code, including language-specific metadata element display and a 5x speed up in the skimming of the doc.xml files.

  • Property svn:keywords set to Author Date Id Revision
File size: 3.9 KB
Line 
1package org.greenstone.gatherer.metadata;
2
3
4import java.io.File;
5import org.greenstone.gatherer.Gatherer;
6import org.greenstone.gatherer.util.XMLTools;
7import org.w3c.dom.*;
8
9
10/** This class represents one Metadata element */
11public class MetadataElement
12{
13 private String metadata_element_name_full = null;
14 private Element metadata_element_element = null;
15 private MetadataValueTreeModel metadata_value_tree_model = null;
16
17
18 public MetadataElement(String metadata_element_name_full, Element metadata_element_element)
19 {
20 this.metadata_element_name_full = metadata_element_name_full;
21 this.metadata_element_element = metadata_element_element;
22 this.metadata_value_tree_model = new MetadataValueTreeModel(this);
23 }
24
25
26 public MetadataValueTreeNode addMetadataValue(String metadata_value)
27 {
28 return metadata_value_tree_model.addMetadataValue(metadata_value);
29 }
30
31
32 public String getAttribute(String attribute_name, String language_code)
33 {
34 // Some extracted metadata elements may not be in ex.mds, and so have no attributes
35 if (metadata_element_element == null) {
36 return null;
37 }
38
39 Element parent_element = metadata_element_element;
40 boolean language_matches = false;
41
42 NodeList language_elements_nodelist = metadata_element_element.getElementsByTagName("Language");
43 for (int i = 0; i < language_elements_nodelist.getLength(); i++) {
44 Element current_language_element = (Element) language_elements_nodelist.item(i);
45 String current_language_element_code = current_language_element.getAttribute("code");
46 if (current_language_element_code.equals(language_code)) {
47 // Found language; use it for the next step
48 parent_element = current_language_element;
49 language_matches = true;
50 break;
51 }
52 }
53
54 NodeList attribute_elements_nodelist = parent_element.getElementsByTagName("Attribute");
55 for (int i = 0; i < attribute_elements_nodelist.getLength(); i++) {
56 Element current_attribute_element = (Element) attribute_elements_nodelist.item(i);
57 String current_attribute_element_name = current_attribute_element.getAttribute("name");
58 if (!current_attribute_element_name.equals(attribute_name)) {
59 // Move on to the next Attribute element if the name doesn't match
60 continue;
61 }
62
63 // Check if the language matches
64 String current_attribute_element_language = current_attribute_element.getAttribute("language");
65 if (language_matches || current_attribute_element_language.equals(language_code)) {
66 // Found attribute; returns its value
67 return XMLTools.getElementTextValue(current_attribute_element);
68 }
69 }
70
71 return null;
72 }
73
74
75 public String getDisplayName()
76 {
77 String metadata_element_display_name = MetadataTools.getMetadataElementAttribute(this, "identifier", Gatherer.config.getLanguage(), "en");
78 if (metadata_element_display_name != null) {
79 return getNamespace() + "." + metadata_element_display_name;
80 }
81
82 return metadata_element_name_full;
83 }
84
85
86 public MetadataValueTreeModel getMetadataValueTreeModel()
87 {
88 return metadata_value_tree_model;
89 }
90
91
92 public MetadataValueTreeNode getMetadataValueTreeNode(String metadata_value)
93 {
94 return metadata_value_tree_model.getMetadataValueTreeNode(metadata_value);
95 }
96
97
98 public String getFullName()
99 {
100 return metadata_element_name_full;
101 }
102
103
104 public String getNamespace()
105 {
106 return MetadataTools.getMetadataSetNamespace(metadata_element_name_full);
107 }
108
109
110 public String getName()
111 {
112 return MetadataTools.getMetadataElementName(metadata_element_name_full);
113 }
114
115
116 public boolean isExtractedMetadata()
117 {
118 return getNamespace().equals(MetadataSetManager.EXTRACTED_METADATA_NAMESPACE);
119 }
120
121
122 /** This is used to display the element in the metadata value table */
123 public String toString()
124 {
125 return getDisplayName();
126 }
127
128
129 public void writeHierarchyFile(File hierarchy_file)
130 {
131 metadata_value_tree_model.writeHierarchyFile(hierarchy_file);
132 }
133}
Note: See TracBrowser for help on using the repository browser.