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

Last change on this file since 23633 was 23633, checked in by sjb48, 13 years ago

Fixed a couple of format-related issues with Katherine's help :).

File size: 7.1 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.HashMap;
15import java.util.*;
16import java.io.StringReader;
17import org.xml.sax.InputSource;
18import javax.xml.parsers.DocumentBuilder;
19import javax.xml.parsers.DocumentBuilderFactory;
20
21import java.io.*;
22import org.xml.sax.*;
23import javax.xml.parsers.SAXParserFactory;
24import javax.xml.parsers.ParserConfigurationException;
25import javax.xml.parsers.SAXParser;
26
27import java.io.PrintWriter;
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 String lang = request.getAttribute(GSXML.LANG_ATT);
49 String uid = request.getAttribute(GSXML.USER_ID_ATT);
50 // get the param list
51 Element cgi_param_list = (Element)GSXML.getChildByTagName(request, GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER);
52 HashMap params = GSXML.extractParams(cgi_param_list, false);
53
54 Element result = this.doc.createElement(GSXML.MESSAGE_ELEM);
55
56 String coll = (String)params.get(GSParams.COLLECTION); //SYSTEM_CLUSTER);
57 //String subaction = (String)params.get(GSParams.SUBACTION);
58 String service = (String)params.get(GSParams.SERVICE);
59 String classifier = (String)params.get("cl");
60
61
62 logger.error("Collection="+coll);
63 logger.error("Subaction="+subaction);
64 logger.error("Service="+service);
65 logger.error("Classifier="+classifier);
66
67
68 String to = "";
69 if (coll!=null && !coll.equals("")) {
70 to = coll;
71 }
72
73 Element mr_request_message = this.doc.createElement(GSXML.MESSAGE_ELEM);
74 Element mr_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_FORMAT_STRING, to, lang, uid);
75
76 mr_request.setAttribute("service", service);
77 mr_request.setAttribute("subaction", subaction);
78 //if(classifier != null)
79 mr_request.setAttribute("classifier", classifier);
80
81 mr_request_message.appendChild(mr_request);
82
83 //Element format = this.doc.createElement(GSXML.FORMAT_STRING_ELEM);
84 //mr_request.appendChild(format);
85
86 String format_string = (String)params.get("data");
87 //logger.error("Original format string");
88 //logger.error(format_string);
89
90 Element page_response = this.doc.createElement(GSXML.RESPONSE_ELEM);
91
92 Iterator it = params.keySet().iterator();
93 //while(it.hasNext())
94 //{
95 // logger.error("Param: "+it.next());
96 //}
97
98 try {
99 //DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
100 //DocumentBuilder builder = factory.newDocumentBuilder();
101 //String input = "<html><head><title></title></head><body>" + format_string + "</body></html>";
102 //String input = format_string;
103 //InputSource is = new InputSource( new StringReader( input ) );
104 //Document d = (Document) builder.parse( is );
105 Document d = this.converter.getDOM(format_string); //(Document) builder.parse( is );
106 //Node n1 = d.getFirstChild();
107 //Document d2 = (Document) this.doc.importNode(e, true);
108
109 //Element format_statement = this.doc.importNode(d, true);
110
111 // Call XSLT to transform document to xml format string
112 XMLTransformer transformer = new XMLTransformer();
113 // HOW DO I DO THIS PROPERLY?
114 //String style = stylesheetFile(String gsdl3_home, String site_name, String collection, String interface_name, ArrayList base_interfaces, String filename);
115 //Document style_doc = this.converter.getDOM(new File(style), "UTF-8"); //"/home/sam/greenstone3/web/interfaces/oran/transform/formatString.xsl"), "UTF-8"); /*************************/
116 Document style_doc = this.converter.getDOM(new File("/home/sam/greenstone3/web/interfaces/oran/transform/formatString.xsl"), "UTF-8"); /*************************/
117
118 if(style_doc == null)
119 logger.error("style_doc is null");
120
121 // not sure what to do here - some code from Transforming Receptionist
122 //String transformed = transformer.transformToString(style_doc, d);
123 logger.error("About to transform");
124 Node transformed = (Node) transformer.transform(style_doc, d); // Failing org.w3c.dom.DOMException: HIERARCHY_REQUEST_ERR: An attempt was made to insert a node where it is not permitted. ; SystemID: file:///home/sam/greenstone3/packages/tomcat/bin/dummy.xsl
125
126 logger.error("Transform successful?");
127
128 if(transformed==null) // not null
129 logger.error("TRANSFORMED IS NULL");
130
131 if(transformed.getNodeType() == Node.DOCUMENT_NODE)
132 transformed = ((Document)transformed).getDocumentElement();
133 logger.error("Node type: "+transformed.getNodeType());
134
135 //logger.error("begin import");
136 //Node imported = this.doc.importNode(transformed, true); // There was an exception org.w3c.dom.DOMException: NOT_SUPPORTED_ERR: The implementation does not support the requested type of object or operation.
137 //logger.error("finished import");
138
139 //String format_string2 = GSXML.xmlNodeToString(imported); // null pointer exception occuring here
140 //logger.error("format string="+format_string2);
141
142 Element format = this.doc.createElement(GSXML.FORMAT_STRING_ELEM);
143 //GSXML.setNodeText(format, transformed);
144 format.appendChild(this.doc.importNode(transformed,true));
145 //format.setNodeValue(transformed);
146 mr_request.appendChild(format);
147 logger.error("Transformed: "+transformed);
148
149
150 //page_response.appendChild(this.doc.importNode(e, true));
151 } catch( Exception ex ) {
152 logger.error("There was an exception "+ex);
153
154 StringWriter sw = new StringWriter();
155 PrintWriter pw = new PrintWriter(sw, true);
156 ex.printStackTrace(pw);
157 pw.flush();
158 sw.flush();
159 logger.error(sw.toString());
160 }
161
162
163 // Call XSLT to transform document to xml format string
164 //XMLTransformer transformer = new XMLTransformer();
165
166 // not sure what to do here - some code from Transforming Receptionist
167 //transformer.transformToString(Document stylesheet, Document source);
168
169 // create a mesage to send to the collection object via the message router
170
171 Node response_message = this.mr.process(mr_request_message);
172
173 result.appendChild(GSXML.duplicateWithNewName(this.doc, (Element)GSXML.getChildByTagName(response_message, GSXML.RESPONSE_ELEM), GSXML.RESPONSE_ELEM, true));
174 return result;
175
176 }
177
178}
Note: See TracBrowser for help on using the repository browser.