source: trunk/greenstone3-extensions/gs3build/src/org/greenstone/gsdl3/gs3build/metadata/GSDL3Namespace.java@ 12188

Last change on this file since 12188 was 12188, checked in by kjdon, 18 years ago

Initial revision

  • Property svn:keywords set to Author Date Id Revision
File size: 3.2 KB
Line 
1package org.greenstone.gsdl3.gs3build.metadata;
2
3import java.io.PrintWriter;
4import java.util.Iterator;
5import java.util.List;
6import java.util.Map;
7import java.util.ArrayList;
8import java.util.HashMap;
9
10import org.w3c.dom.Document;
11import org.w3c.dom.Element;
12import org.w3c.dom.NamedNodeMap;
13import org.w3c.dom.Node;
14import org.w3c.dom.NodeList;
15import org.w3c.dom.Text;
16
17import org.greenstone.gsdl3.gs3build.util.MultiMap;
18import org.greenstone.gsdl3.gs3build.util.XMLTools;
19
20/**
21 * Implement a simple, unordered, namespace in METS.
22 *
23 * @see: org.greenstone.gsdl3.gs3build.metadata.METSNamespace
24 */
25
26public class GSDL3Namespace extends SimpleNamespace
27{
28 public static String GSDL3_NAMESPACE_ID = "gsdl3";
29 private static String GSDL3_METADATA_TAG = "Metadata";
30
31 public GSDL3Namespace()
32 {
33 super(GSDL3_NAMESPACE_ID);
34 }
35
36 public GSDL3Namespace(METSLocation location)
37 {
38 super(GSDL3_NAMESPACE_ID, location);
39 }
40
41 public GSDL3Namespace(Element mdWrapTag)
42 {
43 super(GSDL3_NAMESPACE_ID);
44
45 NodeList childNodes = mdWrapTag.getChildNodes();
46 for (int c = 0; c < childNodes.getLength(); c ++){
47 // a metadata node
48 if (childNodes.item(c).getNodeType() == org.w3c.dom.Node.ELEMENT_NODE){
49 String metadataLabel = childNodes.item(c).getNodeName();
50
51 // cull any leading "GSDL3" tag and its colon...
52 if (metadataLabel.startsWith(GSDL3_NAMESPACE_ID + ":")){
53 metadataLabel = metadataLabel.substring(this.name.length() + 1);
54 }
55
56 // TODO: throw error: bad metadata type
57 if (metadataLabel.equals(GSDL3_METADATA_TAG) == false){
58 continue;
59 }
60
61 // Get the label - if the name isn't set, abort.
62 // TODO: throw error: incomplete metadata tag
63 metadataLabel = ((Element) childNodes.item(c)).getAttribute("name");
64 if (metadataLabel == null) {
65 continue;
66 }
67
68 // now build the associated value.
69 String metadataValue = "";
70
71 Element childElement = (Element) childNodes.item(c);
72 for (int i = 0; i < childElement.getChildNodes().getLength(); i ++) {
73 metadataValue = metadataValue + childElement.getChildNodes().item(i).toString();
74 }
75
76 this.addMetadata(metadataLabel, metadataValue);
77 }
78 }
79 }
80
81 /**
82 * Write out a single element - this may be overloaded to provide for the
83 * appropriate formatting for this metadata.
84 */
85 protected boolean writeItem(PrintWriter writer, String label)
86 {
87 if (this.location == null){
88 // just place the metadata in a simple wrapper
89 Iterator values = this.metadataMap.getAll(label).iterator();
90
91 while (values.hasNext()){
92 String tag;
93 String value = values.next().toString();
94
95 tag = XMLTools.getOpenTag(GSDL3_NAMESPACE_ID, GSDL3_METADATA_TAG);
96 tag = XMLTools.addAttribute(tag, "name", label);
97 writer.print(tag);
98 writer.print(value);
99
100 writer.println(XMLTools.getCloseTag(this.name, GSDL3_METADATA_TAG));
101 }
102 }
103 else {
104 String tag = XMLTools.getOpenTag("mets", "mdRef");
105 tag = XMLTools.addAttribute(tag, "LOCTYPE", this.location.getType());
106 tag = XMLTools.addAttribute(tag, "xlink:href", this.location.getLocation().toString());
107 tag = XMLTools.addAttribute(tag, "MDTYPE", this.getName());
108 tag = XMLTools.makeSingleton(tag);
109 writer.println(tag);
110 }
111 return true;
112 }
113}
Note: See TracBrowser for help on using the repository browser.