package hk.hku.cecid.edi.as2.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.edi.as2.AS2PlusProcessor;
/**
* This is a AS2 Configuration Web Service.
*
* The XML SOAP Message should be liked this.
*
* <pre>
* <active-module-status> true | false </active-module-status>
* <inmessage-interval>15000 </inmessage-interval>
* <inmessage-maxthread>0</inmessage-maxthread>
* <outmessage-interval>15000</outmessage-interval>
* <outmessage-maxthread>0</outmessage-maxthread>
* <outpayload-interval>15000</outpayload-interval>
* <outpayload-maxthread>0</outpayload-maxthread>
* <pre>
*
* @author Twinsen Tsang.
* @version 1.0.0
* @since 1.0.0
*/
public class AS2ConfigService extends WebServicesAdaptor
{
private static final String ACTIVEMODULE_STATUS = "active-module-status";
private static final String [] AS2_MODS_EI = {"inmessage-interval"
,"outmessage-interval"
,"outpayload-interval"};
private static final String [] AS2_MODS_MAXTHREAD = {"inmessage-maxthread"
,"outmessage-maxthread"
,"outpayload-maxthread"};
private static final String [] AS2_MODS_NAME = {"as2.core.incoming.message"
,"as2.core.outgoing.message"
,"as2.core.outgoing.payload"};
public void serviceRequested(WebServicesRequest request,
WebServicesResponse response) throws SOAPRequestException
{
Element[] bodies = request.getBodies();
try
{
long [] as2ModEI = new long[AS2_MODS_NAME.length];
int [] as2ModMaxThread = new int[AS2_MODS_NAME.length];
boolean [] as2ModFlag = new boolean[AS2_MODS_NAME.length];
boolean activeModuleStatus = Boolean.valueOf (this.getText(bodies, ACTIVEMODULE_STATUS)).booleanValue();
for (int i = 0; i < AS2_MODS_NAME.length; i++){
as2ModMaxThread[i] = StringUtilities.parseInt(this.getText(bodies, AS2_MODS_MAXTHREAD[i]), -1);
as2ModEI[i] = StringUtilities.parseInt(this.getText(bodies, AS2_MODS_EI[i]), -1);
AS2PlusProcessor.getInstance().getLogger().info("test");
if (as2ModMaxThread[i] != -1 && as2ModEI[i] != -1){
as2ModFlag[i] = true;
AS2PlusProcessor.getInstance().getLogger().info("thread" + as2ModMaxThread[i]);
AS2PlusProcessor.getInstance().getLogger().info("ei" + as2ModEI[i]);
}
}
if (activeModuleStatus)
AS2PlusProcessor.getInstance().getModuleGroup().startActiveModules();
else
AS2PlusProcessor.getInstance().getModuleGroup().stopActiveModules();
AS2PlusProcessor.getInstance().getLogger().info("AS2 Active Modules new status: " + String.valueOf(activeModuleStatus));
ActiveTaskModule am = null;
for (int i = 0; i < AS2_MODS_NAME.length; i++)
{
// If both execution interval and thread exist.
if (as2ModFlag[i]){
am = (ActiveTaskModule) (AS2PlusProcessor.getInstance().getModuleGroup().getModule(AS2_MODS_NAME[i]));
if (am != null && am.getMonitor() != null)
{
am.getMonitor().setMaxThreadCount(as2ModMaxThread[i]);
am.setExecutionInterval(as2ModEI[i]);
AS2PlusProcessor.getInstance().getLogger().info(AS2_MODS_NAME[i]
+" Thread set to: "
+ am.getMonitor().getMaxThreadCount()
+" with interval "
+ as2ModEI[i]);
}
}
}
generateReply(response
,"Success"
,"Success in configuring AS2 Configuration");
}
catch(Exception e)
{
AS2PlusProcessor.getInstance().getLogger().debug("Configuration Error", e);
generateReply(response
,"Fail"
,"Error in configuring AS2 Configuration");
}
}
private void generateReply(WebServicesResponse response, String status,
String statusDescription) throws SOAPRequestException
{
try {
SOAPElement responseElement = createText("status", status, "http://service.as2.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;
}
}