source: main/trunk/greenstone3/src/java/org/greenstone/gsdl3/action/SystemAction.java@ 23333

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

Working on saving the format statement. Currently have a button that calls the system action and returns some html. Working on system.xsl but need to get the format string from String to XML. I have found out that HTML is not necessarily valid XML.

  • Property svn:keywords set to Author Date Id Revision
File size: 4.3 KB
Line 
1package org.greenstone.gsdl3.action;
2
3import org.greenstone.gsdl3.core.ModuleInterface;
4import org.greenstone.gsdl3.util.*;
5
6// XML classes
7import org.w3c.dom.Node;
8import org.w3c.dom.Element;
9import org.w3c.dom.Document;
10
11// other java stuff
12import java.io.File;
13import java.util.HashMap;
14import java.util.*;
15import java.io.StringReader;
16import org.xml.sax.InputSource;
17import javax.xml.parsers.DocumentBuilder;
18import javax.xml.parsers.DocumentBuilderFactory;
19
20import org.apache.log4j.*;
21
22public class SystemAction extends Action {
23
24 static Logger logger = Logger.getLogger(org.greenstone.gsdl3.action.SystemAction.class.getName());
25
26 /** process a request */
27 public Node process (Node message_node) {
28
29 Element message = this.converter.nodeToElement(message_node);
30
31 // assume only one request
32 Element request = (Element)GSXML.getChildByTagName(message, GSXML.REQUEST_ELEM);
33
34 String subaction = request.getAttribute(GSXML.SUBACTION_ATT);
35 String lang = request.getAttribute(GSXML.LANG_ATT);
36 String uid = request.getAttribute(GSXML.USER_ID_ATT);
37 // get the param list
38 Element cgi_param_list = (Element)GSXML.getChildByTagName(request, GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER);
39 HashMap params = GSXML.extractParams(cgi_param_list, false);
40
41 Element result = this.doc.createElement(GSXML.MESSAGE_ELEM);
42
43 String coll = (String)params.get(GSParams.SYSTEM_CLUSTER);
44
45 String to = "";
46 if (coll!=null && !coll.equals("")) {
47 to = coll;
48 }
49
50 Element mr_request_message = this.doc.createElement(GSXML.MESSAGE_ELEM);
51 Element mr_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_SYSTEM, to, lang, uid);
52 mr_request_message.appendChild(mr_request);
53
54 Element system = this.doc.createElement(GSXML.SYSTEM_ELEM);
55 mr_request.appendChild(system);
56
57 // will need to change the following if can do more than one system request at once
58 if (subaction.equals("c")) { // configure
59 system.setAttribute(GSXML.TYPE_ATT, GSXML.SYSTEM_TYPE_CONFIGURE);
60 String info = (String)params.get(GSParams.SYSTEM_SUBSET);
61 system.setAttribute(GSXML.SYSTEM_SUBSET_ATT, info);
62 }
63 else if(subaction.equals("s")) { // save format statement
64 logger.error("Initiate save");
65 String format_string = (String)params.get("data");
66 logger.error("data="+format_string);
67 Iterator it = params.keySet().iterator();
68 while(it.hasNext())
69 {
70 logger.error("Param: "+it.next());
71 }
72 Element page_response = this.doc.createElement(GSXML.RESPONSE_ELEM);
73
74 try {
75 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
76 DocumentBuilder builder = factory.newDocumentBuilder();
77 InputSource is = new InputSource( new StringReader( format_string ) );
78 Document d = builder.parse( is );
79 page_response.appendChild(d);
80 }
81 catch( Exception ex ) {
82 logger.error("There was an exception "+ex);
83 }
84
85 //Element child = this.doc.createElement("div"); //format_string);
86 //Node text = this.doc.createTextNode(format_string); //"<h1>Hi there and greetings!</h1>");
87 //child.innerHTML = "<h1>Hi there and greetings!</h1>";
88 //child.setNodeValue(format_string);
89 //child.appendChild(text);
90 result.appendChild(page_response);
91 return result;
92 } else {
93 String name = (String)params.get(GSParams.SYSTEM_MODULE_NAME);
94 String type = (String)params.get(GSParams.SYSTEM_MODULE_TYPE);
95
96 system.setAttribute(GSXML.SYSTEM_MODULE_NAME_ATT, name);
97 system.setAttribute(GSXML.SYSTEM_MODULE_TYPE_ATT, type);
98
99 if (subaction.equals("d")) { // delete
100 system.setAttribute(GSXML.TYPE_ATT, GSXML.SYSTEM_TYPE_DEACTIVATE);
101
102 } else if (subaction.equals("a")) { // add
103 system.setAttribute(GSXML.TYPE_ATT, GSXML.SYSTEM_TYPE_ACTIVATE);
104 } else {
105 // create the default response
106 // for now just have an error
107 logger.error("bad subaction type");
108 Element page_response = this.doc.createElement(GSXML.RESPONSE_ELEM);
109 result.appendChild(page_response);
110
111 return result;
112 }
113 }
114
115 Node response_message = this.mr.process(mr_request_message);
116
117 result.appendChild(GSXML.duplicateWithNewName(this.doc, (Element)GSXML.getChildByTagName(response_message, GSXML.RESPONSE_ELEM), GSXML.RESPONSE_ELEM, true));
118 return result;
119
120 }
121
122}
Note: See TracBrowser for help on using the repository browser.