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

Last change on this file since 32448 was 32448, checked in by kjdon, 6 years ago

params class changed, now returns false by default for shouldsave. so don't need to add any that we don't want saving in the session. turned hard coded strings into static string variables

File size: 5.8 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
36 public static final String CLASSIFIER_ARG = "cl";
37 public static final String DATA_ARG = "data";
38
39 XMLTransformer transformer = null;
40
41 String tempVal = "";
42
43 /** process a request */
44 public Node process (Node message_node) {
45
46 Element message = GSXML.nodeToElement(message_node);
47 Document doc = message.getOwnerDocument();
48
49 // assume only one request
50 Element request = (Element)GSXML.getChildByTagName(message, GSXML.REQUEST_ELEM);
51
52 String subaction = request.getAttribute(GSXML.SUBACTION_ATT);
53 UserContext userContext = new UserContext(request);
54 // get the param list
55 Element cgi_param_list = (Element)GSXML.getChildByTagName(request, GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER);
56 HashMap<String, Serializable> params = GSXML.extractParams(cgi_param_list, false);
57
58 Element result = doc.createElement(GSXML.MESSAGE_ELEM);
59
60 String coll = (String)params.get(GSParams.COLLECTION); //SYSTEM_CLUSTER);
61 String service = (String)params.get(GSParams.SERVICE);
62 String classifier = (String)params.get(CLASSIFIER_ARG);
63
64 String to = "";
65 if (coll!=null && !coll.equals("")) {
66 to = coll;
67 }
68
69 Element mr_request_message = doc.createElement(GSXML.MESSAGE_ELEM);
70 Element mr_request = GSXML.createBasicRequest(doc, GSXML.REQUEST_TYPE_FORMAT_STRING, to, userContext);
71
72 mr_request.setAttribute("service", service);
73 mr_request.setAttribute("subaction", subaction);
74 //if(classifier != null)
75 mr_request.setAttribute("classifier", classifier);
76
77 mr_request_message.appendChild(mr_request);
78
79 String format_string = (String)params.get(DATA_ARG);
80
81 Element page_response = doc.createElement(GSXML.RESPONSE_ELEM);
82
83 Iterator<String> it = params.keySet().iterator();
84
85 if(subaction.equals("saveDocument"))
86 {
87 Element format = doc.createElement(GSXML.FORMAT_STRING_ELEM);
88 try{
89 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
90 DocumentBuilder builder = factory.newDocumentBuilder();
91 InputSource is = new InputSource( new StringReader( format_string ) );
92 Document d = (Document) builder.parse( is );
93 Node n1 = d.getFirstChild();
94
95 Element format_statement = (Element) doc.importNode(n1, true);
96 format.appendChild(format_statement);
97 mr_request.appendChild(format);
98 } catch( Exception ex ) {
99 logger.error("There was an exception "+ex);
100
101 StringWriter sw = new StringWriter();
102 PrintWriter pw = new PrintWriter(sw, true);
103 ex.printStackTrace(pw);
104 pw.flush();
105 sw.flush();
106 logger.error(sw.toString());
107 }
108
109 }
110
111 else
112 {
113
114 try {
115 Document d = this.converter.getDOM(format_string);
116
117 // Call XSLT to transform document to xml format string
118 XMLTransformer transformer = new XMLTransformer();
119 String style = GSFile.interfaceStylesheetFile(GlobalProperties.getGSDL3Home(),(String)this.config_params.get(GSConstants.INTERFACE_NAME), "formatString.xsl");
120 //logger.error("Style doc is "+style+", compared to /research/sjb48/greenstone3/web/interfaces/oran/transform/formatString.xsl");
121 Document style_doc = this.converter.getDOM(new File(style), "UTF-8");
122 //Document style_doc = this.converter.getDOM(new File("/research/sjb48/greenstone3/web/interfaces/oran/transform/formatString.xsl"), "UTF-8"); /*************************/
123
124 if(style_doc == null)
125 logger.error("style_doc is null");
126
127 logger.error("About to transform");
128 Node transformed = (Node) transformer.transform(style_doc, d);
129
130 if(transformed.getNodeType() == Node.DOCUMENT_NODE)
131 transformed = ((Document)transformed).getDocumentElement();
132
133 Element format = doc.createElement(GSXML.FORMAT_STRING_ELEM);
134 format.appendChild(doc.importNode(transformed,true));
135 mr_request.appendChild(format);
136 logger.error("Transformed: "+transformed);
137
138 } catch( Exception ex ) {
139 logger.error("There was an exception "+ex);
140
141 StringWriter sw = new StringWriter();
142 PrintWriter pw = new PrintWriter(sw, true);
143 ex.printStackTrace(pw);
144 pw.flush();
145 sw.flush();
146 logger.error(sw.toString());
147 }
148 }
149
150 Node response_message = this.mr.process(mr_request_message);
151
152 result.appendChild(GSXML.duplicateWithNewName(doc, (Element)GSXML.getChildByTagName(response_message, GSXML.RESPONSE_ELEM), GSXML.RESPONSE_ELEM, true));
153 return result;
154
155 }
156
157}
Note: See TracBrowser for help on using the repository browser.