source: main/trunk/greenstone3/src/java/org/greenstone/gsdl3/action/FormatAction.java@ 25635

Last change on this file since 25635 was 25635, checked in by sjm84, 12 years ago

Fixing Greenstone 3's use (or lack thereof) of generics, this was done automatically so we may want to change it over time. This change will also auto-format any files that have not already been formatted.

File size: 5.7 KB
Line 
1package org.greenstone.gsdl3.action;
2
3import org.greenstone.gsdl3.core.ModuleInterface;
4import org.greenstone.gsdl3.util.*;
5import org.greenstone.util.GlobalProperties;
6
7// XML classes
8import org.w3c.dom.Node;
9import org.w3c.dom.Element;
10import org.w3c.dom.Document;
11
12// other java stuff
13import java.io.File;
14import java.util.*;
15import java.io.StringReader;
16import org.xml.sax.InputSource;
17import javax.xml.parsers.DocumentBuilder;
18import javax.xml.parsers.DocumentBuilderFactory;
19
20import java.io.*;
21import org.xml.sax.*;
22import javax.xml.parsers.SAXParserFactory;
23import javax.xml.parsers.ParserConfigurationException;
24import javax.xml.parsers.SAXParser;
25
26import java.io.PrintWriter;
27import java.io.Serializable;
28import java.io.StringWriter;
29
30import org.apache.log4j.*;
31
32public class FormatAction extends Action {
33
34 static Logger logger = Logger.getLogger(org.greenstone.gsdl3.action.FormatAction.class.getName());
35 XMLTransformer transformer = null;
36
37 String tempVal = "";
38
39 /** process a request */
40 public Node process (Node message_node) {
41
42 Element message = this.converter.nodeToElement(message_node);
43
44 // assume only one request
45 Element request = (Element)GSXML.getChildByTagName(message, GSXML.REQUEST_ELEM);
46
47 String subaction = request.getAttribute(GSXML.SUBACTION_ATT);
48 UserContext userContext = new UserContext(request);
49 // get the param list
50 Element cgi_param_list = (Element)GSXML.getChildByTagName(request, GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER);
51 HashMap<String, Serializable> params = GSXML.extractParams(cgi_param_list, false);
52
53 Element result = this.doc.createElement(GSXML.MESSAGE_ELEM);
54
55 String coll = (String)params.get(GSParams.COLLECTION); //SYSTEM_CLUSTER);
56 String service = (String)params.get(GSParams.SERVICE);
57 String classifier = (String)params.get("cl");
58
59 String to = "";
60 if (coll!=null && !coll.equals("")) {
61 to = coll;
62 }
63
64 Element mr_request_message = this.doc.createElement(GSXML.MESSAGE_ELEM);
65 Element mr_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_FORMAT_STRING, to, userContext);
66
67 mr_request.setAttribute("service", service);
68 mr_request.setAttribute("subaction", subaction);
69 //if(classifier != null)
70 mr_request.setAttribute("classifier", classifier);
71
72 mr_request_message.appendChild(mr_request);
73
74 String format_string = (String)params.get("data");
75
76 Element page_response = this.doc.createElement(GSXML.RESPONSE_ELEM);
77
78 Iterator<String> it = params.keySet().iterator();
79
80 if(subaction.equals("saveDocument"))
81 {
82 Element format = this.doc.createElement(GSXML.FORMAT_STRING_ELEM);
83 try{
84 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
85 DocumentBuilder builder = factory.newDocumentBuilder();
86 InputSource is = new InputSource( new StringReader( format_string ) );
87 Document d = (Document) builder.parse( is );
88 Node n1 = d.getFirstChild();
89
90 Element format_statement = (Element) this.doc.importNode(n1, true);
91 format.appendChild(format_statement);
92 mr_request.appendChild(format);
93 } catch( Exception ex ) {
94 logger.error("There was an exception "+ex);
95
96 StringWriter sw = new StringWriter();
97 PrintWriter pw = new PrintWriter(sw, true);
98 ex.printStackTrace(pw);
99 pw.flush();
100 sw.flush();
101 logger.error(sw.toString());
102 }
103
104 }
105
106 else
107 {
108
109 try {
110 Document d = this.converter.getDOM(format_string);
111
112 // Call XSLT to transform document to xml format string
113 XMLTransformer transformer = new XMLTransformer();
114 String style = GSFile.interfaceStylesheetFile(GlobalProperties.getGSDL3Home(),(String)this.config_params.get(GSConstants.INTERFACE_NAME), "formatString.xsl");
115 //logger.error("Style doc is "+style+", compared to /research/sjb48/greenstone3/web/interfaces/oran/transform/formatString.xsl");
116 Document style_doc = this.converter.getDOM(new File(style), "UTF-8");
117 //Document style_doc = this.converter.getDOM(new File("/research/sjb48/greenstone3/web/interfaces/oran/transform/formatString.xsl"), "UTF-8"); /*************************/
118
119 if(style_doc == null)
120 logger.error("style_doc is null");
121
122 logger.error("About to transform");
123 Node transformed = (Node) transformer.transform(style_doc, d);
124
125 if(transformed.getNodeType() == Node.DOCUMENT_NODE)
126 transformed = ((Document)transformed).getDocumentElement();
127
128 Element format = this.doc.createElement(GSXML.FORMAT_STRING_ELEM);
129 format.appendChild(this.doc.importNode(transformed,true));
130 mr_request.appendChild(format);
131 logger.error("Transformed: "+transformed);
132
133 } catch( Exception ex ) {
134 logger.error("There was an exception "+ex);
135
136 StringWriter sw = new StringWriter();
137 PrintWriter pw = new PrintWriter(sw, true);
138 ex.printStackTrace(pw);
139 pw.flush();
140 sw.flush();
141 logger.error(sw.toString());
142 }
143 }
144
145 Node response_message = this.mr.process(mr_request_message);
146
147 result.appendChild(GSXML.duplicateWithNewName(this.doc, (Element)GSXML.getChildByTagName(response_message, GSXML.RESPONSE_ELEM), GSXML.RESPONSE_ELEM, true));
148 return result;
149
150 }
151
152}
Note: See TracBrowser for help on using the repository browser.