package kr.ac.kaist.resl.lilliput.util; import java.util.ArrayList; import java.util.List; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; 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; public class SaveSpaceEvent { String EPCLocation; JSONObject sensorJson; MongoHelper mHelper; public SaveSpaceEvent(String EPCLocation, JSONObject sensorJson) { this.EPCLocation = EPCLocation; this.sensorJson = sensorJson; this.mHelper = new MongoHelper(); } public void save() { try { //Save Space to Ontology if it is not saved RemoteProjectManager rpm = RemoteProjectManager.getInstance(); Project p = rpm.getProject("localhost:5100", "Lilliput", "1234", "IoTSocialGraph", true); OWLModel owlModel = (OWLModel)p.getKnowledgeBase(); // OWLModel owlModel = ProtegeOWL.createJenaOWLModelFromURI(SensorIntegration.owlURI); OWLNamedClass indoorSpaceClass = owlModel.getOWLNamedClass("IndoorSpace"); OWLNamedClass spaceEventClass = owlModel.getOWLNamedClass("SpaceEvent"); List<String> queryTypes = new ArrayList<String>(); //Identify whethere there is this space or not RDFIndividual epcLocation = owlModel.getRDFIndividual(EPCLocation); OWLObjectProperty hasSpaceEvent = owlModel.getOWLObjectProperty("hasSpaceEvent"); RDFIndividual spaceEventInd; String sensingObjectID; if( epcLocation == null ) { //���� ����ؾ��� //��������� ��� epcLocation = indoorSpaceClass.createRDFIndividual(EPCLocation); JSONObject spaceEvent = new JSONObject(); spaceEvent.put("epc", EPCLocation); JSONArray events = new JSONArray(); spaceEvent.put("Events", events); queryTypes.add("epc"); //epc�� �����ϰ� objectID�� ������ sensingObjectID = mHelper.saveToDB("SpaceEvent", spaceEvent, queryTypes); //spaceEvent�� ��������� objectID�� ������ spaceEventInd = spaceEventClass.createRDFIndividual(sensingObjectID); //������ epcLocation.setPropertyValue(hasSpaceEvent, spaceEventInd); } else { //���� ����ϴ°� �ƴ϶�� spaceeventind�� ��� //space�� �ִ�. ������ event�� ���� �� �ִ�. System.out.println(epcLocation.getPropertyValueCount(hasSpaceEvent)); spaceEventInd = (RDFIndividual)epcLocation.getPropertyValue(hasSpaceEvent); if( spaceEventInd == null ) { JSONObject spaceEvent = new JSONObject(); spaceEvent.put("epc", EPCLocation); JSONArray events = new JSONArray(); spaceEvent.put("Events", events); queryTypes.add("epc"); //epc�� �����ϰ� objectID�� ������ sensingObjectID = mHelper.saveToDB("SpaceEvent", spaceEvent, queryTypes); //spaceEvent�� ��������� objectID�� ������ spaceEventInd = spaceEventClass.createRDFIndividual(sensingObjectID); //������ epcLocation.setPropertyValue(hasSpaceEvent, spaceEventInd); } else { //objectID�� �����´� String[] objectIDs = spaceEventInd.getBrowserText().split("#"); sensingObjectID = objectIDs[1]; } } //���� �����ؾ��� objectID�� �ȴ� mHelper.saveToDBInArray("SpaceEvent", sensingObjectID , sensorJson, "Events"); p.dispose(); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }