package kr.ac.kaist.resl.lilliput.core; import java.io.IOException; import java.net.MalformedURLException; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import kr.ac.kaist.resl.lilliput.util.EPCISHelper; import kr.ac.kaist.resl.lilliput.util.JSONHelper; import kr.ac.kaist.resl.lilliput.util.MongoHelper; import kr.ac.kaist.resl.lilliput.util.ObjectEventThread; import org.fosstrak.epcis.model.Poll; import org.fosstrak.epcis.model.QueryResults; import org.fosstrak.epcis.queryclient.QueryControlClient; import org.fosstrak.epcis.utils.QueryResultsParser; import org.json.JSONArray; import org.json.JSONObject; import org.w3c.dom.Document; import edu.stanford.smi.protege.model.Project; import edu.stanford.smi.protege.server.RemoteProjectManager; import edu.stanford.smi.protegex.owl.model.OWLModel; import edu.stanford.smi.protegex.owl.model.OWLNamedClass; import edu.stanford.smi.protegex.owl.model.OWLObjectProperty; import edu.stanford.smi.protegex.owl.model.RDFIndividual; /** * Servlet implementation class ObjectIntegration */ public class ObjectIntegration extends HttpServlet { private static final long serialVersionUID = 1L; private String queryURL; @SuppressWarnings("unused") private String epcLocation; private QueryResults results; // private final static String owlURI = "http://143.248.106.26:8880/Lilliput/OWLFile/IoTSocialGraph0531.owl"; /** * @see HttpServlet#HttpServlet() */ public ObjectIntegration() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub String queryURL = (String)request.getParameter("EPCISQueryURL"); String epcLocation = (String)request.getParameter("EPCLocation"); String period = (String)request.getParameter("Period"); ObjectEventThread objectEventThread = new ObjectEventThread(queryURL, epcLocation, Integer.parseInt(period)); objectEventThread.start(); RequestDispatcher dispatcher = request.getRequestDispatcher("registration.jsp"); dispatcher.forward(request, response); //ObjectRegistration(queryURL, epcLocation, period); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } @SuppressWarnings("rawtypes") public boolean ObjectRegistration(String epcisURL, String epcLocation, String period) { //coap://iotsensor1.iot.kr:5683/sensors/temp try { //Query to EPCIS repository queryURL = epcisURL; QueryControlClient client = new QueryControlClient(queryURL); this.epcLocation = epcLocation; //Poll EPCISHelper eHelper = new EPCISHelper(); Poll poll = eHelper.createRecentPoll(epcLocation); results = client.poll(poll); //Retrieve Document JSONHelper jHelper = new JSONHelper(); Document result = QueryResultsParser.queryResultsToDocument(results); List<JSONObject> returnedEvent = jHelper.getJSONFromEPC(result); RemoteProjectManager rpm = RemoteProjectManager.getInstance(); Project p = rpm.getProject("localhost:5100", "Lilliput", "1234", "IoTSocialGraph", true); OWLModel owlModel = (OWLModel)p.getKnowledgeBase(); //OWLModel owlModel = ProtegeOWL.createJenaOWLModelFromURI(owlURI); List<String> queryTypes = new ArrayList<String>(); //DB Processing Object and IndoorSpace //�̺�Ʈ�� ������ �׳� ���� if(returnedEvent == null) { System.out.println("There is no Events"); return false; } //Business location ��� //Save Space to Ontology if it is not saved OWLNamedClass indoorSpaceClass = owlModel.getOWLNamedClass("IndoorSpace"); OWLNamedClass objectEventClass = owlModel.getOWLNamedClass("ObjectEvent"); //Identify whethere there is this space or not Collection indoorSpaces = indoorSpaceClass.getInstances(false); Iterator indoorSpaceIter = indoorSpaces.iterator(); RDFIndividual epcLocationInd = null; boolean isItSaved = false; while( indoorSpaceIter.hasNext() ) { epcLocationInd = (RDFIndividual)indoorSpaceIter.next(); if( epcLocationInd.getBrowserText().equals(epcLocation)) { isItSaved = true; break; } } String eventObjectID; OWLObjectProperty hasObjectEvent = owlModel.getOWLObjectProperty("hasObjectEvent"); OWLObjectProperty hasObjectEventIn = owlModel.getOWLObjectProperty("hasObjectEventIn"); // // RDFIndividual spaceEventInd; if( isItSaved == false ) { //���� ����ؾ��� //��������� ��� epcLocationInd = indoorSpaceClass.createRDFIndividual(epcLocation); JSONObject spaceEvent = new JSONObject(); spaceEvent.put("epc", epcLocation); JSONArray events = new JSONArray(); spaceEvent.put("Events", events); queryTypes.add("epc"); //epc�� �����ϰ� objectID�� ������ MongoHelper mHelper = new MongoHelper(); eventObjectID = mHelper.saveToDB("ObjectEvent", spaceEvent, queryTypes); //spaceEvent�� ��������� objectID�� ������ spaceEventInd = objectEventClass.createRDFIndividual(eventObjectID); //������ epcLocationInd.setPropertyValue(hasObjectEvent, spaceEventInd); } else { //���� ����ϴ°� �ƴ϶�� objecteventind�� ��� System.out.println(epcLocationInd.getPropertyValueCount(hasObjectEvent)); spaceEventInd = (RDFIndividual)epcLocationInd.getPropertyValue(hasObjectEvent); //objectID�� �����´� String[] objectIDs = spaceEventInd.getBrowserText().split("#"); eventObjectID = objectIDs[1]; } //���� ������ ��������� ����ϰ� �̺�Ʈ���� ����� ������ //������Ʈ �̺�Ʈ�� ó���Ѵ� //�������̺�Ʈ���� Ȯ���Ѵ� //Processing Object JSONObject epcEvent = returnedEvent.get(0); //epcEvent���� eventTime�� �ִ�. �̰��� �����Ϲ� �������� �ʴ´� MongoHelper mHelper = new MongoHelper(); boolean isLastEvent = mHelper.isLastEventInDB("ObjectEvent", eventObjectID, epcEvent, "Events"); if( isLastEvent == true ) { System.out.println("It is last event"); return false; } //������ �̺�Ʈ�� �ƴ϶�� �����Ѵ�. //�����ؾ��� ������Ʈ�̺�Ʈ�� �˰� �ִ�. spaceEventInd mHelper.saveToDBInArray("ObjectEvent", eventObjectID , epcEvent, "Events"); //���峡 //���� ��������ʿ� ���������ߵ� JSONArray tempEpcs = epcEvent.getJSONArray("epcList"); //�켱 ��������� ��� objectClass�� �ν��Ͻ��� ���� hasObjectEvent�� �ش��ϴ� ���踦 ���� ������ OWLNamedClass objectClass = owlModel.getOWLNamedClass("Object"); Collection objectClasses = objectClass.getInstances(false); Iterator objectIter = objectClasses.iterator(); while(objectIter.hasNext()) { RDFIndividual objectInd = (RDFIndividual)objectIter.next(); Collection objectEvents = objectInd.getPropertyValues(hasObjectEvent); Iterator eventIter = objectEvents.iterator(); while( eventIter.hasNext()) { RDFIndividual eventRDF = (RDFIndividual)eventIter.next(); objectInd.removePropertyValue(hasObjectEvent, eventRDF); } } //�������� //�� OBJECT EPC���� ó������ for( int i = 0 ; i < tempEpcs.length(); i++) { JSONObject tempEpc = tempEpcs.getJSONObject(i); //epc ���ڿ� String EPCObject = tempEpc.get("epc").toString(); RDFIndividual objectInd = null; objectClasses = objectClass.getInstances(false); Iterator objectClassIter = objectClasses.iterator(); isItSaved = false; while( objectClassIter.hasNext()) { objectInd = (RDFIndividual)objectClassIter.next(); if( objectInd.getBrowserText().equals(EPCObject)) { isItSaved = true; break; } } if( isItSaved == false ) { //���� ����ؾ��� //��������� ��� objectInd = objectClass.createRDFIndividual(EPCObject); } //���� ���������� hasObjectEvent�� �������ش� //objectInd -> hasObjectEvent -> objectEventInd; objectInd.setPropertyValue(hasObjectEvent, spaceEventInd); epcLocationInd.setPropertyValue(hasObjectEventIn, spaceEventInd); } // JenaOWLModel jenaOWL = (JenaOWLModel)owlModel; // jenaOWL.save(new URI("file:///d:/Eclipses/Lilliput_WorkspaceU/Lilliput/WebContent/OWLFile/IoTSocialGraph0531.owl"), FileUtils.langXMLAbbrev, new ArrayList()); p.dispose(); System.out.println("Object Event is processed"); return true; } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return false; } }