/*
* MyNewServicesTemplate.java - a dummy class showing how to create new
* services for Greenstone3
*
* This class has two dummy services: TextQuery and MyDifferentService
*/
// This file needs to be put in org/greenstone/gsdl3/service
package org.greenstone.gsdl3.service;
// Greenstone classes
import org.greenstone.gsdl3.util.*;
// XML classes
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.apache.log4j.*;
// change the class name (and the filename) to something more appropriate
public class MyNewServicesTemplate
extends ServiceRack {
// add in a logger for error messages
static Logger logger = Logger.getLogger("MyNewServicesTemplate");
// the new service names
protected static final String QUERY_SERVICE = "TextQuery";
protected static final String DIFFERENT_SERVICE = "MyDifferentService";
// initialize any custom variables
public MyNewServicesTemplate() {
}
// clean up anything that we need to
public void cleanUp() {
super.cleanUp();
}
// Configure the class based in info in buildConfig.xml and collectionConfig.xml
// info is the element from
// buildConfig.xml, and extra_info is the whole collectionConfig.xml file
// in case its needed
public boolean configure(Element info, Element extra_info) {
if (!super.configure(info, extra_info)) {
return false;
}
logger.info("Configuring MyNewServicesTemplate...");
// set up short_service_info - this currently is a list of services,
// with their names and service types
// we have two services, a new textquery, and a new one of a new type
Element tq_service = this.doc.createElement(GSXML.SERVICE_ELEM);
tq_service.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_QUERY);
tq_service.setAttribute(GSXML.NAME_ATT, QUERY_SERVICE);
this.short_service_info.appendChild(tq_service);
Element diff_service = this.doc.createElement(GSXML.SERVICE_ELEM);
diff_service.setAttribute(GSXML.TYPE_ATT, "xxx");
diff_service.setAttribute(GSXML.NAME_ATT, DIFFERENT_SERVICE);
this.short_service_info.appendChild(diff_service);
// Extract any relevant information from info and extra_info
// This can be used to set up variables.
// If there is any formatting information, add it in to format_info_map
// Do this for all services as appropriate
Element format = null; // find it from info/extra_info
if (format != null) {
this.format_info_map.put(QUERY_SERVICE, this.doc.importNode(format, true));
}
return true;
}
// get the desription of a service. Could include parameter lists, displayText
protected Element getServiceDescription(String service, String lang, String subset) {
// check that we have been asked for the right service
if (!service.equals(QUERY_SERVICE) && !service.equals(DIFFERENT_SERVICE)) {
return null;
}
if (service.equals(QUERY_SERVICE)) {
Element tq_service = this.doc.createElement(GSXML.SERVICE_ELEM);
tq_service.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_QUERY);
tq_service.setAttribute(GSXML.NAME_ATT, QUERY_SERVICE);
if (subset==null || subset.equals(GSXML.DISPLAY_TEXT_ELEM+GSXML.LIST_MODIFIER)) {
// add in any elements
// name, for example - get from properties file
tq_service.appendChild(GSXML.createDisplayTextElement(this.doc, GSXML.DISPLAY_TEXT_NAME, getTextString(QUERY_SERVICE+".name", lang) ));
}
if (subset==null || subset.equals(GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER)) {
// add in a param list if this service has parameters
Element param_list = this.doc.createElement(GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER);
tq_service.appendChild(param_list);
// create any params and append to param_list
}
return tq_service;
}
if (service.equals(DIFFERENT_SERVICE)) {
Element diff_service = this.doc.createElement(GSXML.SERVICE_ELEM);
diff_service.setAttribute(GSXML.TYPE_ATT, "xxx");
diff_service.setAttribute(GSXML.NAME_ATT, DIFFERENT_SERVICE);
if (subset==null || subset.equals(GSXML.DISPLAY_TEXT_ELEM+GSXML.LIST_MODIFIER)) {
// add in any elements
// name, for example - get from properties file
diff_service.appendChild(GSXML.createDisplayTextElement(this.doc, GSXML.DISPLAY_TEXT_NAME, getTextString(DIFFERENT_SERVICE+".name", lang) ));
}
if (subset==null || subset.equals(GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER)) {
// add in a param list if this service has parameters
Element param_list = this.doc.createElement(GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER);
diff_service.appendChild(param_list);
// create any params and append to param_list
}
return diff_service;
}
// not a valid service for this class
return null;
}
/** This is the method that actually handles the TextQuery Service */
protected Element processTextQuery(Element request) {
Element result = this.doc.createElement(GSXML.RESPONSE_ELEM);
result.setAttribute(GSXML.FROM_ATT, QUERY_SERVICE);
result.setAttribute(GSXML.TYPE_ATT, GSXML.REQUEST_TYPE_PROCESS);
// fill in the rest
return result;
}
/** This is the method that actually handles the MyDifferentService service */
protected Element processMyDifferentService(Element request) {
Element result = this.doc.createElement(GSXML.RESPONSE_ELEM);
result.setAttribute(GSXML.FROM_ATT, DIFFERENT_SERVICE);
result.setAttribute(GSXML.TYPE_ATT, GSXML.REQUEST_TYPE_PROCESS);
// fill in the rest
return result;
}
}