source: greenstone3/trunk/resources/java/MyNewServicesTemplate.java@ 20125

Last change on this file since 20125 was 20125, checked in by kjdon, 15 years ago

a demo service rack, talked about in the manual. describes how to create a new service rack. copied this form a really old greenstone, not sure if its still valid...

File size: 5.5 KB
Line 
1/*
2 * MyNewServicesTemplate.java - a dummy class showing how to create new
3 * services for Greenstone3
4 *
5 * This class has two dummy services: TextQuery and MyDifferentService
6 */
7
8// Is it in a package??
9//package ...
10
11// Greenstone classes
12import org.greenstone.gsdl3.util.*;
13
14// need to import this class unless this is going in the
15// org.greenstone.gsdl3.service package
16import org.greenstone.gsdl3.service.ServiceRack;
17
18// XML classes
19import org.w3c.dom.Document;
20import org.w3c.dom.Element;
21import org.w3c.dom.NodeList;
22
23import org.apache.log4j.*;
24
25// change the class name (and the filename) to something more appropriate
26public class MyNewServicesTemplate
27 extends ServiceRack {
28
29 // add in a logger for error messages
30 static Logger logger = Logger.getLogger("MyNewServicesTemplate");
31
32 // the new service names
33 protected static final String QUERY_SERVICE = "TextQuery";
34 protected static final String DIFFERENT_SERVICE = "MyDifferentService";
35
36 // initialize any custom variables
37 public MyNewServicesTemplate() {
38
39 }
40
41 // clean up anything that we need to
42 public void cleanUp() {
43 super.cleanUp();
44 }
45
46 // Configure the class based in info in buildConfig.xml and collectionConfig.xml
47 // info is the <serviceRack name="MyNewServicesTemplate"/> element from
48 // buildConfig.xml, and extra_info is the whole collectionConfig.xml file
49 // in case its needed
50 public boolean configure(Element info, Element extra_info) {
51
52 if (!super.configure(info, extra_info)) {
53 return false;
54 }
55
56 logger.info("Configuring MyNewServicesTemplate...");
57
58 // set up short_service_info - this currently is a list of services,
59 // with their names and service types
60 // we have two services, a new textquery, and a new one of a new type
61 Element tq_service = this.doc.createElement(GSXML.SERVICE_ELEM);
62 tq_service.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_QUERY);
63 tq_service.setAttribute(GSXML.NAME_ATT, QUERY_SERVICE);
64 this.short_service_info.appendChild(tq_service);
65
66 Element diff_service = this.doc.createElement(GSXML.SERVICE_ELEM);
67 diff_service.setAttribute(GSXML.TYPE_ATT, "xxx");
68 diff_service.setAttribute(GSXML.NAME_ATT, DIFFERENT_SERVICE);
69 this.short_service_info.appendChild(diff_service);
70
71
72 // Extract any relevant information from info and extra_info
73 // This can be used to set up variables.
74
75 // If there is any formatting information, add it in to format_info_map
76
77 // Do this for all services as appropriate
78 Element format = null; // find it from info/extra_info
79 if (format != null) {
80 this.format_info_map.put(QUERY_SERVICE, this.doc.importNode(format, true));
81 }
82
83 return true;
84
85 }
86
87 // get the desription of a service. Could include parameter lists, displayText
88 protected Element getServiceDescription(String service, String lang, String subset) {
89
90 // check that we have been asked for the right service
91 if (!service.equals(QUERY_SERVICE) && !service.equals(DIFFERENT_SERVICE)) {
92 return null;
93 }
94
95 if (service.equals(QUERY_SERVICE)) {
96 Element tq_service = this.doc.createElement(GSXML.SERVICE_ELEM);
97 tq_service.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_QUERY);
98 tq_service.setAttribute(GSXML.NAME_ATT, QUERY_SERVICE);
99 if (subset==null || subset.equals(GSXML.DISPLAY_TEXT_ELEM+GSXML.LIST_MODIFIER)) {
100 // add in any <displayText> elements
101 // name, for example - get from properties file
102 tq_service.appendChild(GSXML.createDisplayTextElement(this.doc, GSXML.DISPLAY_TEXT_NAME, getTextString(QUERY_SERVICE+".name", lang) ));
103 }
104
105 if (subset==null || subset.equals(GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER)) {
106 // add in a param list if this service has parameters
107 Element param_list = this.doc.createElement(GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER);
108 tq_service.appendChild(param_list);
109 // create any params and append to param_list
110 }
111 return tq_service;
112 }
113
114 if (service.equals(DIFFERENT_SERVICE)) {
115 Element diff_service = this.doc.createElement(GSXML.SERVICE_ELEM);
116 diff_service.setAttribute(GSXML.TYPE_ATT, "xxx");
117 diff_service.setAttribute(GSXML.NAME_ATT, DIFFERENT_SERVICE);
118 if (subset==null || subset.equals(GSXML.DISPLAY_TEXT_ELEM+GSXML.LIST_MODIFIER)) {
119 // add in any <displayText> elements
120 // name, for example - get from properties file
121 diff_service.appendChild(GSXML.createDisplayTextElement(this.doc, GSXML.DISPLAY_TEXT_NAME, getTextString(DIFFERENT_SERVICE+".name", lang) ));
122 }
123
124 if (subset==null || subset.equals(GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER)) {
125 // add in a param list if this service has parameters
126 Element param_list = this.doc.createElement(GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER);
127 diff_service.appendChild(param_list);
128 // create any params and append to param_list
129 }
130
131 return diff_service;
132 }
133
134 // not a valid service for this class
135 return null;
136
137
138
139 }
140
141 /** This is the method that actually handles the TextQuery Service */
142 protected Element processTextQuery(Element request) {
143
144 Element result = this.doc.createElement(GSXML.RESPONSE_ELEM);
145 result.setAttribute(GSXML.FROM_ATT, QUERY_SERVICE);
146 result.setAttribute(GSXML.TYPE_ATT, GSXML.REQUEST_TYPE_PROCESS);
147
148 // fill in the rest
149 return result;
150 }
151
152 /** This is the method that actually handles the MyDifferentService service */
153 protected Element processMyDifferentService(Element request) {
154
155 Element result = this.doc.createElement(GSXML.RESPONSE_ELEM);
156 result.setAttribute(GSXML.FROM_ATT, DIFFERENT_SERVICE);
157 result.setAttribute(GSXML.TYPE_ATT, GSXML.REQUEST_TYPE_PROCESS);
158
159 // fill in the rest
160 return result;
161 }
162}
163
164
165
Note: See TracBrowser for help on using the repository browser.