source: trunk/gli/src/org/greenstone/gatherer/metadata/MetadataXMLFileManager.java@ 7822

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

All this new code just lying around makes me nervous, so I'm committing it. It isn't complete, but it's getting there.

  • Property svn:keywords set to Author Date Id Revision
File size: 3.8 KB
Line 
1package org.greenstone.gatherer.metadata;
2
3
4import java.io.*;
5import java.util.*;
6import org.greenstone.gatherer.file.FileNode;
7
8
9/** This class is a static class that manages the metadata.xml files */
10public class MetadataXMLFileManager
11{
12 static private ArrayList metadata_xml_files = new ArrayList();
13
14
15 static public void addMetadata(FileNode[] file_nodes, MetadataValue metadata_value)
16 {
17 for (int i = 0; i < file_nodes.length; i++) {
18 File current_file = file_nodes[i].getFile();
19 System.err.println("Adding metadata to " + current_file.getAbsolutePath());
20
21 // Find which metadata.xml file needs editing
22 File current_file_directory = (current_file.isDirectory() ? current_file : current_file.getParentFile());
23 for (int j = 0; j < metadata_xml_files.size(); j++) {
24 MetadataXMLFile metadata_xml_file = (MetadataXMLFile) metadata_xml_files.get(j);
25
26 // This metadata.xml file is only potentially applicable if it is above or at the same level as the file
27 if (current_file_directory.getAbsolutePath().startsWith(metadata_xml_file.getParentFile().getAbsolutePath())) {
28 metadata_xml_file.addMetadata(current_file, metadata_value);
29 }
30 }
31 }
32 }
33
34
35 static public void clearMetadataXMLFiles()
36 {
37 metadata_xml_files.clear();
38 }
39
40
41 static public ArrayList getMetadataAssignedToFile(File file)
42 {
43 // Build up a list of metadata values assigned to this file
44 ArrayList metadata_values = new ArrayList();
45
46 // Look at each loaded metadata.xml file to see if any assign metadata to this file
47 File file_directory = (file.isDirectory() ? file : file.getParentFile());
48 for (int i = 0; i < metadata_xml_files.size(); i++) {
49 MetadataXMLFile metadata_xml_file = (MetadataXMLFile) metadata_xml_files.get(i);
50
51 // This metadata.xml file is only potentially applicable if it is above or at the same level as the file
52 if (file_directory.getAbsolutePath().startsWith(metadata_xml_file.getParentFile().getAbsolutePath())) {
53 metadata_values.addAll(metadata_xml_file.getMetadataAssignedToFile(file));
54 }
55 }
56
57 return metadata_values;
58 }
59
60
61 static public void loadMetadataXMLFiles(File directory)
62 {
63 // Look recursively at each subfile of the directory for metadata.xml files
64 File[] directory_files = directory.listFiles();
65 for (int i = 0; i < directory_files.length; i++) {
66 File child_file = directory_files[i];
67 if (child_file.isDirectory()) {
68 loadMetadataXMLFiles(child_file);
69 }
70 else if (child_file.getName().equals("metadata.xml")) {
71 loadMetadataXMLFile(child_file);
72 }
73 }
74 }
75
76
77 static private void loadMetadataXMLFile(File metadata_xml_file_file)
78 {
79 MetadataXMLFile metadata_xml_file = new MetadataXMLFile(metadata_xml_file_file.getAbsolutePath());
80 metadata_xml_files.add(metadata_xml_file);
81 }
82
83
84 static public void removeMetadata(FileNode[] file_nodes, MetadataValue metadata_value)
85 {
86 for (int i = 0; i < file_nodes.length; i++) {
87 File current_file = file_nodes[i].getFile();
88 System.err.println("Removing metadata from " + current_file.getAbsolutePath());
89
90 // Find which metadata.xml file needs editing
91 File current_file_directory = (current_file.isDirectory() ? current_file : current_file.getParentFile());
92 for (int j = 0; j < metadata_xml_files.size(); j++) {
93 MetadataXMLFile metadata_xml_file = (MetadataXMLFile) metadata_xml_files.get(j);
94
95 // This metadata.xml file is only potentially applicable if it is above or at the same level as the file
96 if (current_file_directory.getAbsolutePath().startsWith(metadata_xml_file.getParentFile().getAbsolutePath())) {
97 System.err.println("Applicable metadata.xml file: " + metadata_xml_file.getAbsolutePath());
98 metadata_xml_file.removeMetadata(current_file, metadata_value);
99 }
100 }
101 }
102 }
103}
Note: See TracBrowser for help on using the repository browser.