package kr.ac.kaist.resl.lilliput.rest; import java.io.IOException; import java.util.List; import javax.xml.datatype.DatatypeConfigurationException; import kr.ac.kaist.resl.lilliput.ac.AccessController; import kr.ac.kaist.resl.lilliput.ac.AccessibilityPair; import kr.ac.kaist.resl.lilliput.util.EPCISHelper; import kr.ac.kaist.resl.lilliput.util.MashalInteger; import kr.ac.kaist.resl.lilliput.util.MashalFloat; import kr.ac.kaist.resl.lilliput.util.MashalBoolean; import net.sf.json.xml.XMLSerializer; import org.fosstrak.epcis.model.Poll; import org.fosstrak.epcis.model.QueryResults; import org.fosstrak.epcis.queryclient.QueryControlClient; import org.fosstrak.epcis.soap.ImplementationExceptionResponse; import org.fosstrak.epcis.soap.NoSuchNameExceptionResponse; import org.fosstrak.epcis.soap.QueryParameterExceptionResponse; import org.fosstrak.epcis.soap.QueryTooComplexExceptionResponse; import org.fosstrak.epcis.soap.QueryTooLargeExceptionResponse; import org.fosstrak.epcis.soap.SecurityExceptionResponse; import org.fosstrak.epcis.soap.ValidationExceptionResponse; import org.fosstrak.epcis.utils.QueryResultsParser; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.MarshalFloat; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapPrimitive; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.HttpTransportSE; import org.restlet.ext.json.JsonRepresentation; import org.restlet.resource.Get; import org.restlet.resource.ServerResource; import org.xmlpull.v1.XmlPullParserException; import com.mongodb.MongoException; import edu.stanford.smi.protege.model.Project; import edu.stanford.smi.protege.server.RemoteProjectManager; import edu.stanford.smi.protegex.owl.model.OWLDatatypeProperty; import edu.stanford.smi.protegex.owl.model.OWLModel; import edu.stanford.smi.protegex.owl.model.OWLObjectProperty; import edu.stanford.smi.protegex.owl.model.RDFIndividual; public class PushService extends ServerResource { @Get("json") public JsonRepresentation toJson() throws JSONException { try { //epc�� ���ͼ� String epc = getQuery().getValues("epc"); String service = (String)getRequest().getAttributes().get("service"); String param = (String)getRequest().getAttributes().get("params"); //JSON���� �� Str if( epc == null ) { return null; } //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(); List<AccessibilityPair> acPair = AccessController.getAccessibilityList(owlModel, epc); AccessibilityPair ap = null; for(int i = 0 ; i < acPair.size() ; i++ ) { AccessibilityPair ac = acPair.get(i); if( ac.subject.equals(epc) && ac.object.equals(service)) { ap = ac; break; } } if( ap == null) { return null; } //���� AC�� �����. RDFIndividual targetService = owlModel.getOWLIndividual(ap.object); OWLObjectProperty isServiceOf = owlModel.getOWLObjectProperty("isServiceOf"); OWLDatatypeProperty urlProp = owlModel.getOWLDatatypeProperty("epcisURL"); RDFIndividual targetEPC = null; String url = null; JSONObject returnObj = null; //EPCIS��� if( ap.object.contains("EPCIS")) { //�������� �˾Ƴ��� targetEPC = (RDFIndividual)targetService.getPropertyValue(isServiceOf); //EPCIS�� �����Ѵ� url = (String)targetService.getPropertyValue(urlProp); String targetEPCStr = targetEPC.getBrowserText(); returnObj = invokeEPCIS(targetEPCStr, url); } else if( ap.object.contains("WebService")) { JSONArray paramArr = new JSONArray(param); OWLDatatypeProperty methodNamed = owlModel.getOWLDatatypeProperty("wsMethodName"); OWLDatatypeProperty soapActiond = owlModel.getOWLDatatypeProperty("wsSoapAction"); OWLDatatypeProperty nameSpaced = owlModel.getOWLDatatypeProperty("wsNameSpace"); OWLDatatypeProperty wsUrld = owlModel.getOWLDatatypeProperty("wsURL"); String METHOD_NAME = (String)targetService.getPropertyValue(methodNamed); String SOAP_ACTION = (String)targetService.getPropertyValue(soapActiond); String NAMESPACE = (String)targetService.getPropertyValue(nameSpaced); String URL = (String)targetService.getPropertyValue(wsUrld); SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.implicitTypes = true; for( int i = 0 ; i < paramArr.length() ; i ++ ) { JSONObject paramObj = paramArr.getJSONObject(i); String paramName = paramObj.getString("name"); String paramType = paramObj.getString("type"); String paramValue = paramObj.getString("value"); if( paramType.equals("float")) { request.addProperty(paramName, Float.parseFloat(paramValue)); envelope.addMapping(NAMESPACE, "float", float.class); MarshalFloat mf = new MarshalFloat(); mf.register(envelope); }else if( paramType.equals("int")) { request.addProperty(paramName, Integer.parseInt(paramValue)); envelope.addMapping(NAMESPACE, "int", int.class); MashalInteger mi = new MashalInteger(); mi.register(envelope); }else if( paramType.equals("boolean")) { request.addProperty(paramName, Boolean.parseBoolean(param)); envelope.addMapping(NAMESPACE, "boolean", boolean.class); MashalBoolean mb = new MashalBoolean(); mb.register(envelope); } } envelope.setOutputSoapObject(request); HttpTransportSE ht = new HttpTransportSE(URL); ht.call(SOAP_ACTION, envelope); SoapPrimitive response = (SoapPrimitive)envelope.getResponse(); if( response != null ) { returnObj.put("WS_Message", response.toString()); } else { return null; } } p.dispose(); JsonRepresentation representation = new JsonRepresentation(returnObj); return representation; } catch (MongoException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } JSONObject returnJson = new JSONObject(); returnJson.put("message", "error occured"); JsonRepresentation representation = new JsonRepresentation(returnJson); return representation; } public JSONObject invokeEPCIS(String epc, String url) { try { QueryControlClient client = new QueryControlClient(url); //Poll EPCISHelper eHelper = new EPCISHelper(); Poll poll = null; Poll poll2 = null; if( epc.contains("gid") || epc.contains("sgtin")) { poll = eHelper.createRecentObjectPoll(epc); poll2 = eHelper.createRecentSensingObjectPoll(epc); QueryResults results = client.poll(poll); QueryResults results2 = client.poll(poll2); //Retrieve Document String result = QueryResultsParser.queryResultsToXml(results); String result2 = QueryResultsParser.queryResultsToXml(results2); XMLSerializer serializer = new XMLSerializer(); net.sf.json.JSONObject resultJSON = (net.sf.json.JSONObject)serializer.read(result); net.sf.json.JSONObject resultJSON2 = (net.sf.json.JSONObject)serializer.read(result2); JSONObject returnObject = new JSONObject(resultJSON.toString()); JSONObject returnObject2 = new JSONObject(resultJSON2.toString()); JSONObject totObj = new JSONObject(); totObj.put("ObjectEvent", returnObject); totObj.put("SensingEvent", returnObject2); JsonRepresentation representation = new JsonRepresentation(totObj); return totObj; } else if( epc.contains("sgln")) { poll = eHelper.createRecentPoll(epc); QueryResults results = client.poll(poll); String result = QueryResultsParser.queryResultsToXml(results); XMLSerializer serializer = new XMLSerializer(); net.sf.json.JSONObject resultJSON = (net.sf.json.JSONObject)serializer.read(result); JSONObject returnObject = new JSONObject(resultJSON.toString()); return returnObject; } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (DatatypeConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ImplementationExceptionResponse e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (QueryTooComplexExceptionResponse e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (QueryTooLargeExceptionResponse e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityExceptionResponse e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ValidationExceptionResponse e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchNameExceptionResponse e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (QueryParameterExceptionResponse e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null ; } }