package org.greenstone.gsdl3.action;
import org.greenstone.gsdl3.core.ModuleInterface;
import org.greenstone.gsdl3.util.*;
import org.greenstone.util.GlobalProperties;
// XML classes
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import org.w3c.dom.Document;
// other java stuff
import java.io.File;
import java.util.HashMap;
import java.util.*;
import java.io.StringReader;
import org.xml.sax.InputSource;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.*;
import org.xml.sax.*;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import java.io.PrintWriter;
import java.io.StringWriter;
import org.apache.log4j.*;
public class FormatAction extends Action {
static Logger logger = Logger.getLogger(org.greenstone.gsdl3.action.FormatAction.class.getName());
XMLTransformer transformer = null;
String tempVal = "";
/** process a request */
public Node process (Node message_node) {
Element message = this.converter.nodeToElement(message_node);
// assume only one request
Element request = (Element)GSXML.getChildByTagName(message, GSXML.REQUEST_ELEM);
String subaction = request.getAttribute(GSXML.SUBACTION_ATT);
String lang = request.getAttribute(GSXML.LANG_ATT);
String uid = request.getAttribute(GSXML.USER_ID_ATT);
// get the param list
Element cgi_param_list = (Element)GSXML.getChildByTagName(request, GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER);
HashMap params = GSXML.extractParams(cgi_param_list, false);
Element result = this.doc.createElement(GSXML.MESSAGE_ELEM);
String coll = (String)params.get(GSParams.COLLECTION); //SYSTEM_CLUSTER);
String service = (String)params.get(GSParams.SERVICE);
String classifier = (String)params.get("cl");
logger.error("Collection="+coll);
logger.error("Service="+service);
logger.error("Classifier="+classifier);
String to = "";
if (coll!=null && !coll.equals("")) {
to = coll;
}
Element mr_request_message = this.doc.createElement(GSXML.MESSAGE_ELEM);
Element mr_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_FORMAT_STRING, to, lang, uid);
request.setAttribute("service", service);
if(classifier != null)
request.setAttribute("classifier", classifier);
mr_request_message.appendChild(mr_request);
//Element format = this.doc.createElement(GSXML.FORMAT_STRING_ELEM);
//mr_request.appendChild(format);
String format_string = (String)params.get("data");
Element page_response = this.doc.createElement(GSXML.RESPONSE_ELEM);
Iterator it = params.keySet().iterator();
//while(it.hasNext())
//{
// logger.error("Param: "+it.next());
//}
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
//String input = "
" + format_string + "";
String input = format_string;
InputSource is = new InputSource( new StringReader( input ) );
Document d = (Document) builder.parse( is );
//Element e = d.getDocumentElement();
//Node d2 = this.doc.importNode(e,true);
//Document format_doc = this.converter.newDOM();
//doc.appendChild(d2);
//File interface_config_file = new File(GSFile.interfaceConfigFile(GSFile.interfaceHome(GlobalProperties.getGSDL3Home(), (String)this.config_params.get(GSConstants.INTERFACE_NAME))));
//if (!interface_config_file.exists()) {
// logger.error(" interface config file: "+interface_config_file.getPath()+" not found!");
//}
//Document config_doc = this.converter.getDOM(interface_config_file, "utf-8");
//if (config_doc == null) {
// logger.error(" could not parse interface config file: "+interface_config_file.getPath());
//}
//Element config_elem = config_doc.getDocumentElement();
//String base_interface = config_elem.getAttribute("baseInterface");
// Call XSLT to transform document to xml format string
XMLTransformer transformer = new XMLTransformer();
//String stylesheet = GSFile.stylesheetFile(GlobalProperties.getGSDL3Home(), (String)this.config_params.get(GSConstants.SITE_NAME), coll, (String)this.config_params.get(GSConstants.INTERFACE_NAME), "oran", "FormatAction");
//logger.error(stylesheet);
Document style_doc = this.converter.getDOM(new File("/home/sam/greenstone3/web/interfaces/oran/transform/formatString.xsl"), "UTF-8");
if(style_doc == null)
logger.error("style_doc is null");
// not sure what to do here - some code from Transforming Receptionist
String transformed = transformer.transformToString(style_doc, d);
//Node transformed = transformer.transform(style_doc, d);
Element format = this.doc.createElement(GSXML.FORMAT_STRING_ELEM);
GSXML.setNodeText(format, transformed);
//format.appendChild(this.doc.createTextNode(transformed));
//format.setNodeValue(transformed);
mr_request.appendChild(format);
logger.error("Transformed: "+transformed);
//page_response.appendChild(this.doc.importNode(e, true));
} catch( Exception ex ) {
logger.error("There was an exception "+ex);
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw, true);
ex.printStackTrace(pw);
pw.flush();
sw.flush();
logger.error(sw.toString());
}
// Call XSLT to transform document to xml format string
//XMLTransformer transformer = new XMLTransformer();
// not sure what to do here - some code from Transforming Receptionist
//transformer.transformToString(Document stylesheet, Document source);
// create a mesage to send to the collection object via the message router
Node response_message = this.mr.process(mr_request_message);
result.appendChild(GSXML.duplicateWithNewName(this.doc, (Element)GSXML.getChildByTagName(response_message, GSXML.RESPONSE_ELEM), GSXML.RESPONSE_ELEM, true));
return result;
}
}