source: other-projects/GlamED/trunk/src/org/honours/greenstone/ArchiveFileEditor.java@ 26588

Last change on this file since 26588 was 26588, checked in by davidb, 11 years ago

Initial import of Korii's 520 project for managing digital cultural collections from Greenstone in Expeditee.

File size: 2.8 KB
Line 
1package org.honours.greenstone;
2
3import java.io.*;
4
5import javax.xml.transform.*;
6import javax.xml.transform.dom.DOMSource;
7import javax.xml.transform.stream.StreamResult;
8
9import org.apache.log4j.Logger;
10import org.expeditee.items.Text;
11import org.greenstone.gsdl3.util.GSXML;
12import org.greenstone.gsdl3.util.XMLConverter;
13import org.w3c.dom.*;
14
15
16public class ArchiveFileEditor {
17
18 static Logger logger = Logger.getLogger(org.honours.greenstone.ArchiveFileEditor.class.getName());
19 private XMLConverter _xmlConverter;
20 private Document _document;
21 private String _archiveDocFile;
22
23 public ArchiveFileEditor(String docXML){
24 _xmlConverter = new XMLConverter();
25 _archiveDocFile = docXML;
26 _document = _xmlConverter.getDOM(new File(_archiveDocFile));
27 }
28
29 public void editArchiveDocFile(Text text){
30 try{
31 String newText = text.getText();
32 String data = (text.getData() != null) ? text.getData().get(0) : "";
33
34 if(data.equals(""))
35 return;
36
37
38 NodeList nl = _document.getDocumentElement().getElementsByTagName("Description");
39 Element description = (Element)nl.item(0);
40
41 nl = description.getChildNodes();
42 boolean found = false;
43 for(int i = 0; i < nl.getLength(); i++){
44 Node node = nl.item(i);
45
46 if(node.getNodeType() == Node.ELEMENT_NODE){
47 Element e = (Element)node;
48 String originalText = e.getTextContent();
49
50 if(e.getTagName().equals("Metadata") && e.getAttribute("name").equals(data)){
51
52 if(!originalText.equals(newText)){
53 GSXML.setNodeText(e, newText);
54 }
55 found = true;
56 }
57 }
58 }
59
60 if(!found){
61 System.err.println("Create a new metadata");
62 Element newElem = _document.createElement("Metadata");
63 newElem.setAttribute("name",data);
64 newElem.setTextContent(newText);
65 description.appendChild(newElem);
66 description.appendChild(_document.createTextNode("\n\t"));
67 found = true;
68 }
69
70 }catch(Exception e){
71 e.printStackTrace();
72 }
73 }
74
75 /**
76 * Write out new stuff to doc.xml
77 */
78 public void write(){
79
80 try{
81 TransformerFactory tf = TransformerFactory.newInstance();
82 Transformer trans = tf.newTransformer();
83
84 //generating string from xml tree.
85 StringWriter sw = new StringWriter();
86 StreamResult result = new StreamResult(sw);
87 DOMSource source = new DOMSource(_document);
88
89 trans.transform(source,result);
90 String xmlString = sw.toString();
91
92 //Saving XML content back to doc.xml file
93 //System.err.println(_archiveDocFile);
94 OutputStream os = new FileOutputStream(_archiveDocFile);
95 byte[] buf = xmlString.getBytes();
96
97 for(int i = 0; i < buf.length; i++)
98 os.write(buf[i]);
99
100 os.close();
101 buf = null;
102
103 }catch(Exception e){
104 e.printStackTrace();
105 return;
106 }
107 }
108
109}
Note: See TracBrowser for help on using the repository browser.