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

Last change on this file since 25571 was 25571, checked in by ak19, 12 years ago

Added a ping SystemAction to mirror GS2's updated ability to ping the server as is needed for activate.pl. (GS2 also allows pinging a collection, but that's not been ported to GS3 yet).

  • Property svn:keywords set to Author Date Id Revision
File size: 3.7 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.*;
14import java.io.StringReader;
15import org.xml.sax.InputSource;
16import javax.xml.parsers.DocumentBuilder;
17import javax.xml.parsers.DocumentBuilderFactory;
18
19import java.io.*;
20import org.xml.sax.*;
21import javax.xml.parsers.SAXParserFactory;
22import javax.xml.parsers.ParserConfigurationException;
23import javax.xml.parsers.SAXParser;
24
25import java.io.PrintWriter;
26import java.io.StringWriter;
27
28import org.apache.log4j.*;
29
30public class SystemAction extends Action
31{
32
33 static Logger logger = Logger.getLogger(org.greenstone.gsdl3.action.SystemAction.class.getName());
34
35 String tempVal = "";
36
37 /** process a request */
38 public Node process(Node message_node)
39 {
40
41 Element message = this.converter.nodeToElement(message_node);
42
43 // assume only one request
44 Element request = (Element) GSXML.getChildByTagName(message, GSXML.REQUEST_ELEM);
45
46 String subaction = request.getAttribute(GSXML.SUBACTION_ATT);
47 UserContext userContext = new UserContext(request);
48 // get the param list
49 Element cgi_param_list = (Element) GSXML.getChildByTagName(request, GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER);
50 HashMap params = GSXML.extractParams(cgi_param_list, false);
51
52 Element result = this.doc.createElement(GSXML.MESSAGE_ELEM);
53
54 String coll = (String) params.get(GSParams.SYSTEM_CLUSTER);
55
56 String to = "";
57 if (coll != null && !coll.equals(""))
58 {
59 to = coll;
60 }
61
62 Element mr_request_message = this.doc.createElement(GSXML.MESSAGE_ELEM);
63 Element mr_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_SYSTEM, to, userContext);
64 mr_request_message.appendChild(mr_request);
65
66 Element system = this.doc.createElement(GSXML.SYSTEM_ELEM);
67 mr_request.appendChild(system);
68
69 // will need to change the following if can do more than one system request at once
70 if (subaction.equals("c"))
71 { // configure
72 system.setAttribute(GSXML.TYPE_ATT, GSXML.SYSTEM_TYPE_CONFIGURE);
73 String info = (String) params.get(GSParams.SYSTEM_SUBSET);
74 system.setAttribute(GSXML.SYSTEM_SUBSET_ATT, info);
75 }
76 else if (subaction.equals("ping")){
77 // No pinging on collections yet in GS3 as is there in GS2
78 // The ping subaction is at present just for activate.pl
79 system.setAttribute(GSXML.TYPE_ATT, GSXML.SYSTEM_TYPE_PING);
80 }
81 //else if (subaction.equals("is-persistent")){
82 // system.setAttribute(GSXML.TYPE_ATT, GSXML.SYSTEM_TYPE_ISPERSISTENT);
83 //}
84 else
85 {
86 String name = (String) params.get(GSParams.SYSTEM_MODULE_NAME);
87 String type = (String) params.get(GSParams.SYSTEM_MODULE_TYPE);
88
89 system.setAttribute(GSXML.SYSTEM_MODULE_NAME_ATT, name);
90 system.setAttribute(GSXML.SYSTEM_MODULE_TYPE_ATT, type);
91
92 if (subaction.equals("d"))
93 { // delete
94 system.setAttribute(GSXML.TYPE_ATT, GSXML.SYSTEM_TYPE_DEACTIVATE);
95
96 }
97 else if (subaction.equals("a"))
98 { // add
99 system.setAttribute(GSXML.TYPE_ATT, GSXML.SYSTEM_TYPE_ACTIVATE);
100 }
101 else
102 {
103 // create the default response
104 // for now just have an error
105 logger.error("bad subaction type");
106 Element page_response = this.doc.createElement(GSXML.RESPONSE_ELEM);
107 result.appendChild(page_response);
108
109 return result;
110 }
111 }
112
113 Node response_message = this.mr.process(mr_request_message);
114
115 Element response = GSXML.duplicateWithNewName(this.doc, (Element) GSXML.getChildByTagName(response_message, GSXML.RESPONSE_ELEM), GSXML.RESPONSE_ELEM, true);
116 addSiteMetadata(response, userContext);
117 addInterfaceOptions(response);
118
119 result.appendChild(response);
120 return result;
121
122 }
123
124}
Note: See TracBrowser for help on using the repository browser.