package edu.tufts.component.servicetail;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.util.concurrent.Semaphore;
import java.util.Map;
import java.beans.XMLEncoder;
import javax.servlet.http.HttpServletResponse;
import org.meandre.annotations.Component;
import org.meandre.annotations.ComponentInput;
import org.meandre.annotations.ComponentOutput;
import org.meandre.annotations.Component.FiringPolicy;
import org.meandre.annotations.Component.Licenses;
import org.meandre.annotations.Component.Mode;
import org.meandre.core.ComponentContext;
import org.meandre.core.ComponentContextProperties;
import org.meandre.components.abstracts.AbstractExecutableComponent;
import org.seasr.meandre.support.parsers.DataTypeParser;
import org.seasr.meandre.components.tools.Names;
@Component(
baseURL = "meandre://seasr.org/components/servicetail",
creator = "Anoop Kuamr",
description = "Service tail that works with VUE",
name = "Service Tail", tags = "WebUI, process request",
mode = Mode.webui, firingPolicy = Component.FiringPolicy.all
)
public class ServiceTailVUE extends AbstractExecutableComponent {
@ComponentInput(description = "A Map containing the output to response", name = "object")
public final static String INPUT_OBJECT= "object";
@ComponentInput(description = "The response sent by the Service Head.", name = "response")
public final static String INPUT_RESPONSE = "response";
@ComponentInput(description = "The semaphore to signal the response was sent.", name = "semaphore")
public final static String INPUT_SEMAPHORE = "semaphore";
// -------------------------------------------------------------------------
@Override
public void disposeCallBack(ComponentContextProperties arg0)
throws Exception {
// TODO Auto-generated method stub
}
@Override
public void initializeCallBack(ComponentContextProperties cc)
throws Exception {
// TODO Auto-generated method stub
}
public void executeCallBack(ComponentContext cc) throws Exception {
Object object = cc.getDataComponentFromInput(INPUT_OBJECT);
Semaphore sem = (Semaphore) cc
.getDataComponentFromInput(INPUT_SEMAPHORE);
HttpServletResponse response = (HttpServletResponse) cc
.getDataComponentFromInput(INPUT_RESPONSE);
PrintStream ccHandle = cc.getOutputConsole();
ccHandle.println("[INFO] Sending requested results");
try {
PrintWriter pw = response.getWriter();
response.setContentType("text/xml");
pw.println(mapToXML(object));
response.getWriter().flush();
sem.release();
} catch (IOException e) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
e.printStackTrace(ps);
ccHandle.println(baos.toString());
}
}
private String mapToXML(Object object) {
ByteArrayOutputStream os = new ByteArrayOutputStream();
XMLEncoder e = new XMLEncoder(os);
e.writeObject(object);
e.close();
return os.toString();
}
}