package edu.harvard.i2b2.crc.loader.ws;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.StringReader;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.ws.Service;
import javax.xml.ws.ServiceMode;
import javax.xml.ws.WebServiceProvider;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMText;
import org.apache.axiom.om.impl.builder.StAXOMBuilder;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.context.OperationContext;
import org.apache.axis2.wsdl.WSDLConstants;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import edu.harvard.i2b2.common.exception.I2B2Exception;
import edu.harvard.i2b2.crc.loader.delegate.GetLoadStatusRequestHandler;
import edu.harvard.i2b2.crc.loader.delegate.GetMissingTermRequestHandler;
import edu.harvard.i2b2.crc.loader.delegate.LoaderQueryRequestDelegate;
import edu.harvard.i2b2.crc.loader.delegate.PublishDataRequestHandler;
/**
* Test a Provider<Source>
*
* @see
* @author rkuttan
*
*/
//@WebServiceProvider(serviceName = "ProviderService", portName = "ProviderPort", targetNamespace = "http://org.jboss.ws/provider", wsdlLocation = "WEB-INF/wsdl/Provider.wsdl")
//@ServiceMode(value = Service.Mode.PAYLOAD)
// - PAYLOAD is implicit
public class ProviderRestService {
/** log **/
protected final Log log = LogFactory.getLog(getClass());
public OMElement publishDataRequest(OMElement request) {
LoaderQueryRequestDelegate queryDelegate = new LoaderQueryRequestDelegate();
OMElement responseElement = null;
try {
String requestXml = request.toString();
PublishDataRequestHandler handler = new PublishDataRequestHandler(
requestXml);
String response = queryDelegate.handleRequest(requestXml, handler);
responseElement = buildOMElementFromString(response);
} catch (XMLStreamException e) {
log.error("xml stream exception", e);
} catch (I2B2Exception e) {
log.error("i2b2 exception", e);
} catch (Throwable e) {
log.error("Throwable", e);
}
return responseElement;
}
public OMElement getLoadDataStatusRequest(OMElement request) {
LoaderQueryRequestDelegate queryDelegate = new LoaderQueryRequestDelegate();
OMElement responseElement = null;
try {
String requestXml = request.toString();
GetLoadStatusRequestHandler handler = new GetLoadStatusRequestHandler(
requestXml);
String response = queryDelegate.handleRequest(requestXml, handler);
responseElement = buildOMElementFromString(response);
} catch (XMLStreamException e) {
log.error("xml stream exception", e);
} catch (I2B2Exception e) {
log.error("i2b2 exception", e);
} catch (Throwable e) {
log.error("Throwable", e);
}
return responseElement;
}
public OMElement getMissingTermRequest(OMElement request) {
LoaderQueryRequestDelegate queryDelegate = new LoaderQueryRequestDelegate();
OMElement responseElement = null;
try {
String requestXml = request.toString();
GetMissingTermRequestHandler handler = new GetMissingTermRequestHandler(
requestXml);
String response = queryDelegate.handleRequest(requestXml, handler);
responseElement = buildOMElementFromString(response);
} catch (XMLStreamException e) {
log.error("xml stream exception", e);
} catch (I2B2Exception e) {
log.error("i2b2 exception", e);
} catch (Throwable e) {
log.error("Throwable", e);
}
return responseElement;
}
public OMElement mtomSample(OMElement element) throws Exception {
OMElement _fileNameEle = null;
OMElement _imageElement = null;
System.out.println("server side request element " + element);
MessageContext inMessageContext = MessageContext
.getCurrentMessageContext();
OperationContext operationContext = inMessageContext
.getOperationContext();
System.out.println(inMessageContext.isServerSide() + " "
+ inMessageContext.isDoingREST() + " "
+ inMessageContext.isDoingSwA());
;
DataHandler dataHandler = inMessageContext
.getAttachment("fileattachment");
if (dataHandler == null) {
System.out.println("attachement is null");
} else {
System.out.println("attachement is not null cool");
}
System.out
.println("Attachment length "
+ inMessageContext.getAttachmentMap()
.getAllContentIDs().length);
// OMText firstText = (OMText) element.getFirstOMChild();
// System.out.println(firstText);
OMText binaryNode = (OMText) (element.getFirstElement())
.getFirstOMChild();
// OMText binaryNode = firstText;
binaryNode.setOptimize(true);
System.out.println("server side request element1 ");
DataHandler actualDH;
// actualDH = (DataHandler) binaryNode.getDataHandler();
actualDH = dataHandler;
System.out.println("server side request element2 ");
ByteArrayInputStream is = (ByteArrayInputStream) actualDH
.getDataSource().getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is,
"UTF-8"));
String fileSaveName = "FileAttachment";
File file = new File(fileSaveName);
PrintWriter filetmp = new PrintWriter(new BufferedWriter(
new FileWriter(file, true)));
String ligne = null;
while ((ligne = br.readLine()) != null)
filetmp.println(ligne);
filetmp.flush();
filetmp.close();
// setting response
MessageContext outMessageContext = operationContext
.getMessageContext(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
String attachmentfilename = "/crcapp/jdbc.properties";
javax.activation.DataHandler outDataHandler = new javax.activation.DataHandler(
new FileDataSource(attachmentfilename));
outMessageContext.addAttachment(outDataHandler);
outMessageContext.addAttachment("f2", outDataHandler);
return element;
}
/**
* Function constructs OMElement for the given String
*
* @param xmlString
* @return OMElement
* @throws XMLStreamException
*/
private OMElement buildOMElementFromString(String xmlString)
throws XMLStreamException {
XMLInputFactory xif = XMLInputFactory.newInstance();
StringReader strReader = new StringReader(xmlString);
XMLStreamReader reader = xif.createXMLStreamReader(strReader);
StAXOMBuilder builder = new StAXOMBuilder(reader);
OMElement element = builder.getDocumentElement();
return element;
}
}