package kr.ac.kaist.resl.lilliput.adaptor; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import kr.ac.kaist.resl.lilliput.utility.TitanHelper; import org.apache.commons.configuration.BaseConfiguration; import org.apache.commons.configuration.Configuration; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import com.thinkaurelius.titan.core.TitanFactory; import com.thinkaurelius.titan.core.TitanGraph; import com.tinkerpop.blueprints.Vertex; /** * Servlet implementation class RFIDAdaptor */ public class RFIDAdaptor extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public RFIDAdaptor() { super(); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Do Nothing } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Configuration conf = new BaseConfiguration(); conf.setProperty("storage.backend", "cassandra"); conf.setProperty("storage.hostname", "127.0.0.1"); TitanGraph g = TitanFactory.open(conf); try { InputStream is = request.getInputStream(); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder; dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(is); doc.getDocumentElement().normalize(); NodeList epcs = doc.getElementsByTagName("epc"); List<Vertex> objects = new ArrayList<Vertex>(); Vertex place = null ; for( int i = 0 ; i < epcs.getLength() ; i++ ) { // EPC Node epc = epcs.item(i); String epcStr = epc.getTextContent(); Vertex v = TitanHelper.getVertex(g, "epc", epcStr); if( v == null ){ System.out.println("[RFIDAdaptor] Create New Vertex : " + epcStr ); Vertex object = g.addVertex(null); object.setProperty("epc", epc.getTextContent()); object.setProperty("ltype", "Object"); objects.add(object); } else { System.out.println("[RFIDAdaptor] Existing Vertex : " + epcStr ); objects.add(v); } } NodeList locs = doc.getElementsByTagName("logicalReader"); if( locs.getLength() != 0 ) { Node loc = locs.item(0); String locStr = loc.getTextContent(); Vertex v = TitanHelper.getVertex(g, "epc", locStr); if( v == null ){ System.out.println("[RFIDAdaptor] Create New Vertex : " + locStr ); place = g.addVertex(null); place.setProperty("epc", loc.getTextContent()); place.setProperty("ltype", "Place"); } else { System.out.println("[RFIDAdaptor] Existing Vertex : " + locStr ); place = v; } } for( int i = 0 ; i < objects.size() ; i++ ) { g.addEdge(null, objects.get(i), place, "isLocatedIn"); g.addEdge(null, place, objects.get(i), "isContaining"); } g.commit(); System.out.println("[RFIDAdaptor] Graph Committed "); response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<html><head><meta http-equiv='Content-Type' content='text/html; charset=UTF-8'></meta></head><body>"); out.println("[RFIDAdaptor] Graph Committed "); out.println("</body></html>"); out.close(); g.shutdown(); } catch (ParserConfigurationException e) { g.shutdown(); } catch (SAXException e) { e.printStackTrace(); g.shutdown(); } } }