source: trunk/gli/src/org/greenstone/gatherer/metadata/MetadataSetManager.java@ 8140

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

One of the last pieces of new metadata code: support for importing metadata when copying files from outside the collection.

  • Property svn:keywords set to Author Date Id Revision
File size: 6.1 KB
Line 
1package org.greenstone.gatherer.metadata;
2
3
4import java.io.*;
5import java.util.*;
6import org.greenstone.gatherer.gui.MetadataImportMappingPrompt;
7
8
9/** This class is a static class that manages the metadata sets */
10public class MetadataSetManager
11{
12 static public final String EXTRACTED_METADATA_NAMESPACE = "ex";
13
14 static private ArrayList metadata_sets = new ArrayList();
15
16
17 static public void clearMetadataSets()
18 {
19 metadata_sets.clear();
20 }
21
22
23 static public int compareMetadataElements(MetadataElement metadata_element_a, MetadataElement metadata_element_b)
24 {
25 // First compare the namespaces of the two metadata elements
26 if (!metadata_element_a.getNamespace().equals(metadata_element_b.getNamespace())) {
27 return metadata_element_a.getNamespace().compareTo(metadata_element_b.getNamespace());
28 }
29
30 // Otherwise compare the two elements within the one set
31 MetadataSet metadata_set = getMetadataSet(metadata_element_a.getNamespace());
32 return metadata_set.compareMetadataElements(metadata_element_a, metadata_element_b);
33 }
34
35
36 static public ArrayList getEveryMetadataSetElement()
37 {
38 ArrayList every_metadata_set_element = new ArrayList();
39
40 for (int i = 0; i < metadata_sets.size(); i++) {
41 MetadataSet metadata_set = (MetadataSet) metadata_sets.get(i);
42 every_metadata_set_element.addAll(metadata_set.getMetadataSetElements());
43 }
44
45 return every_metadata_set_element;
46 }
47
48
49 static public MetadataSet getMetadataSet(String metadata_set_namespace)
50 {
51 // Find the desired metadata set in the list
52 for (int i = 0; i < metadata_sets.size(); i++) {
53 MetadataSet metadata_set = (MetadataSet) metadata_sets.get(i);
54 if (metadata_set.getNamespace().equals(metadata_set_namespace)) {
55 return metadata_set;
56 }
57 }
58
59 // Not found
60 // System.err.println("No metadata set with namespace \"" + metadata_set_namespace + "\" found.");
61 return null;
62 }
63
64
65 static public ArrayList getMetadataSets()
66 {
67 // We don't want anyone to modify the list, so return a copy of it
68 return (ArrayList) metadata_sets.clone();
69 }
70
71
72 static public ArrayList listMetadataSets(File directory)
73 {
74 // Make sure the directory (metadata) exists
75 if (directory.exists() == false) {
76 return null;
77 }
78
79 // Load just those .mds files in this directory, and return them
80 ArrayList directory_metadata_sets = new ArrayList();
81 File[] directory_files = directory.listFiles();
82 for (int i = 0; i < directory_files.length; i++) {
83 File child_file = directory_files[i];
84 if (!child_file.isDirectory() && child_file.getName().endsWith(".mds")) {
85 MetadataSet metadata_set = new MetadataSet(child_file);
86 directory_metadata_sets.add(metadata_set);
87 }
88 }
89
90 return directory_metadata_sets;
91 }
92
93
94 static public void loadMetadataSets(File directory)
95 {
96 // Make sure the directory (metadata) exists
97 if (directory.exists() == false) {
98 return;
99 }
100
101 // Look recursively at each subfile of the directory for .mds files
102 File[] directory_files = directory.listFiles();
103 for (int i = 0; i < directory_files.length; i++) {
104 File child_file = directory_files[i];
105 if (child_file.isDirectory()) {
106 loadMetadataSets(child_file);
107 }
108 else if (child_file.getName().endsWith(".mds")) {
109 loadMetadataSet(child_file);
110 }
111 }
112 }
113
114
115 static public void loadMetadataSet(File metadata_set_file)
116 {
117 MetadataSet metadata_set = new MetadataSet(metadata_set_file);
118 metadata_sets.add(metadata_set);
119 }
120
121
122 static public String mapUnloadedMetadataElement(String metadata_element_name)
123 {
124 // Check if we have an import mapping for this metadata element
125 String target_metadata_element_name_full = ProfileXMLFileManager.getMetadataElementFor(metadata_element_name);
126 if (target_metadata_element_name_full != null) {
127 // Yes, so return it
128 return target_metadata_element_name_full;
129 }
130
131 // If there are no metadata sets loaded then there is nothing to map the element into
132 if (metadata_sets.size() <= 1) {
133 return null;
134 }
135
136 // Ask the user how they want to deal with this element
137 MetadataImportMappingPrompt metadata_import_mapping_prompt = new MetadataImportMappingPrompt(metadata_element_name);
138 int result = metadata_import_mapping_prompt.getResult();
139
140 // !!! Add the element into an existing metadata set
141 if (result == MetadataImportMappingPrompt.ADD_BUTTON_PRESSED) {
142 MetadataSet target_metadata_set = metadata_import_mapping_prompt.getSelectedMetadataSet();
143 System.err.println("Added to " + target_metadata_set);
144 // target_metadata_element_name_full =
145 }
146
147 // Replace the element with an element in an existing metadata set
148 if (result == MetadataImportMappingPrompt.REPLACE_BUTTON_PRESSED) {
149 MetadataElement target_metadata_element = metadata_import_mapping_prompt.getSelectedMetadataElement();
150 target_metadata_element_name_full = target_metadata_element.getFullName();
151 }
152
153 // Ignore the element
154 if (result == MetadataImportMappingPrompt.IGNORE_BUTTON_PRESSED) {
155 target_metadata_element_name_full = "";
156 }
157
158 // Store this import mapping for future elements with the same name
159 ProfileXMLFileManager.mapElement(metadata_element_name, target_metadata_element_name_full);
160
161 return target_metadata_element_name_full;
162 }
163
164
165 static public void unloadMetadataSet(MetadataSet metadata_set)
166 {
167 // Find the metadata set in the list of loaded sets, and remove it
168 for (int i = 0; i < metadata_sets.size(); i++) {
169 if (metadata_set == (MetadataSet) metadata_sets.get(i)) {
170 metadata_sets.remove(i);
171 break;
172 }
173 }
174 }
175
176
177 static public void writeHierarchyFiles(File directory)
178 {
179 // Make sure the directory (etc) exists
180 if (directory.exists() == false) {
181 return;
182 }
183
184 // Write a hierarchy file for each loaded metadata element, except extracted metadata
185 ArrayList every_metadata_set_element = getEveryMetadataSetElement();
186 for (int i = 0; i < every_metadata_set_element.size(); i++) {
187 MetadataElement metadata_element = (MetadataElement) every_metadata_set_element.get(i);
188 if (metadata_element.isExtractedMetadata() == false) {
189 File hierarchy_file = new File(directory, metadata_element.getFullName() + ".txt");
190 metadata_element.writeHierarchyFile(hierarchy_file);
191 }
192 }
193 }
194}
Note: See TracBrowser for help on using the repository browser.