package hk.hku.cecid.ebms.spa.service;
import org.w3c.dom.Element;
import javax.xml.soap.SOAPElement;
import hk.hku.cecid.piazza.commons.soap.SOAPRequestException;
import hk.hku.cecid.piazza.commons.soap.WebServicesAdaptor;
import hk.hku.cecid.piazza.commons.soap.WebServicesRequest;
import hk.hku.cecid.piazza.commons.soap.WebServicesResponse;
import hk.hku.cecid.piazza.commons.module.ActiveTaskModule;
import hk.hku.cecid.piazza.commons.util.StringUtilities;
import hk.hku.cecid.ebms.spa.EbmsProcessor;
/*
* This is a Ebms Configuration Web Service.
*
* The XML SOAP Message should be liked this.
*
* <active-module-status> true | false </active-module-status>
* <outcollector-maxthread>15000</outcollector-maxthread>
* <outcollector-interval>0</inmessage-maxthread>
* <incollecotor-maxthread >15000</incollector-maxthread>
* <incollector-interval>0</incollector-interval>
* <mailcollector-maxthread>15000</mailcollector-maxthread>
* <mailcollector-interval>0</mailcollector-interval >
*
* @author Twinsen Tsang.
* @version 1.0
*/
public class EbmsConfigService extends WebServicesAdaptor
{
private static final String ACTIVEMODULE_STATUS = "active-module-status";
private static final String [] EBMS_MODS_MAXTHREAD = {"incollector-maxthread"
,"outcollector-maxthread"
,"mailcollector-maxthread"};
private static final String [] EBMS_MODS_EI = {"incollector-interval"
,"outcollector-interval"
,"mailcollector-interval"};
private static final String [] EBMS_MODS_NAMES = {"ebms.mail-collector"
,"ebms.outbox-collector"
,"ebms.inbox-collector"};
public void serviceRequested(WebServicesRequest request,
WebServicesResponse response) throws SOAPRequestException
{
Element[] bodies = request.getBodies();
try
{
long [] ebmsModEI = new long[EBMS_MODS_NAMES.length];
int [] ebmsModMaxThread = new int[EBMS_MODS_NAMES.length];
boolean [] ebmsModFlag = new boolean[EBMS_MODS_NAMES.length];
boolean activeModuleStatus = Boolean.valueOf (this.getText(bodies, ACTIVEMODULE_STATUS)).booleanValue();
for (int i = 0; i < EBMS_MODS_NAMES.length; i++){
ebmsModMaxThread[i] = StringUtilities.parseInt(this.getText(bodies, EBMS_MODS_MAXTHREAD[i]), -1);
ebmsModEI[i] = StringUtilities.parseInt(this.getText(bodies, EBMS_MODS_EI[i]), -1);
if (ebmsModMaxThread[i] != -1 && ebmsModEI[i] != -1){
ebmsModFlag[i] = true;
}
}
if (activeModuleStatus)
EbmsProcessor.getModuleGroup().startActiveModules();
else
EbmsProcessor.getModuleGroup().stopActiveModules();
EbmsProcessor.core.log.info("Active Modules new status:" + String.valueOf(activeModuleStatus));
ActiveTaskModule am = null;
for (int i = 0; i < EBMS_MODS_NAMES.length; i++)
{
// If both execution interval and thread exist.
if (ebmsModFlag[i]){
am = (ActiveTaskModule) (EbmsProcessor.getModuleGroup().getModule(EBMS_MODS_NAMES[i]));
if (am != null && am.getMonitor() != null)
{
am.getMonitor().setMaxThreadCount(ebmsModMaxThread[i]);
am.setExecutionInterval(ebmsModEI[i]);
EbmsProcessor.core.log.info(EBMS_MODS_NAMES[i]
+" Thread set to: "
+ am.getMonitor().getMaxThreadCount()
+" with interval "
+ ebmsModEI[i]);
}
}
}
generateReply(response
,"Success"
,"Success in configuring Ebms Configuration");
}
catch(Exception e)
{
EbmsProcessor.core.log.debug("Configuration Error", e);
generateReply(response
,"Fail"
,"Error in configuring Ebms Configuration");
}
}
private void generateReply(WebServicesResponse response, String status,
String statusDescription) throws SOAPRequestException {
try {
SOAPElement responseElement = createText("status", status, "http://service.ebms.edi.cecid.hku.hk/");
response.setBodies(new SOAPElement[]{responseElement});
} catch (Exception e) {
throw new SOAPRequestException("Unable to generate reply message", e);
}
}
public String replaceNullToEmpty(String value) {
if (value == null) {
return new String("");
} else {
return value;
}
}
protected boolean isCacheEnabled() {
return false;
}
}