/* # Licensed Materials - Property of IBM # Copyright IBM Corp. 2011, 2012 */ package com.ibm.streamsx.inet.rest.servlets; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.ibm.streams.operator.Attribute; import com.ibm.streams.operator.OutputTuple; import com.ibm.streams.operator.StreamingOutput; /** * Inject a tuple into an output port from a HTTP GET or POST. * */ public class InjectTuple extends HttpServlet { /** * */ private static final long serialVersionUID = 1938530466506624733L; private final StreamingOutput<OutputTuple> port; public InjectTuple(StreamingOutput<OutputTuple> port) { this.port = port; } @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { OutputTuple tuple = port.newTuple(); populateTupleFromRequest(request, tuple); try { port.submit(tuple); } catch (Exception e) { throw new IOException(e); } response.setStatus(HttpServletResponse.SC_NO_CONTENT); } public static void populateTupleFromRequest(HttpServletRequest request, OutputTuple tuple) { for (Attribute attr : tuple.getStreamSchema()) { final String value = request.getParameter(attr.getName()); if (value == null) continue; final int ai = attr.getIndex(); switch (attr.getType().getMetaType()) { case INT8: tuple.setByte(ai, Byte.parseByte(value)); break; case INT16: tuple.setShort(ai, Short.parseShort(value)); break; case INT32: tuple.setInt(ai, Integer.parseInt(value)); break; case INT64: tuple.setLong(ai, Long.parseLong(value)); break; case FLOAT32: tuple.setFloat(ai, Float.parseFloat(value)); break; case FLOAT64: tuple.setDouble(ai, Double.parseDouble(value)); break; case BOOLEAN: tuple.setBoolean(ai, Boolean.parseBoolean(value)); default: tuple.setString(ai, value); break; } } } }