package org.oliot.epcis.service.query;
import java.io.StringReader;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import javax.jws.WebService;
import javax.xml.bind.JAXB;
import org.oliot.epcis.configuration.Configuration;
import org.oliot.epcis.service.query.mongodb.MongoQueryService;
import org.oliot.model.epcis.EPCISQueryDocumentType;
import org.oliot.model.epcis.QueryParams;
import org.oliot.model.epcis.QueryResults;
import org.oliot.model.epcis.SubscriptionControls;
/**
* Copyright (C) 2014 Jaewook Byun
*
* This project is part of Oliot (oliot.org), pursuing the implementation of
* Electronic Product Code Information Service(EPCIS) v1.1 specification in
* EPCglobal.
* [http://www.gs1.org/gsmp/kc/epcglobal/epcis/epcis_1_1-standard-20140520.pdf]
*
*
* @author Jaewook Byun, Ph.D student
*
* Korea Advanced Institute of Science and Technology (KAIST)
*
* Real-time Embedded System Laboratory(RESL)
*
* bjw0829@kaist.ac.kr, bjw0829@gmail.com
*/
@WebService(endpointInterface = "org.oliot.epcis.service.query.CoreQueryService")
public class SoapQueryService implements CoreQueryService {
@Override
public void subscribe(String queryName, QueryParams params, URI dest,
SubscriptionControls controls, String subscriptionID) {
if (Configuration.backend.equals("MongoDB")) {
MongoQueryService mqs = new MongoQueryService();
mqs.subscribe(queryName, params, dest, controls, subscriptionID);
} else if (Configuration.backend.equals("Cassandra")) {
} else if (Configuration.backend.equals("MySQL")) {
}
}
@Override
public void unsubscribe(String subscriptionID) {
if (Configuration.backend.equals("MongoDB")) {
MongoQueryService mqs = new MongoQueryService();
mqs.unsubscribe(subscriptionID);
} else if (Configuration.backend.equals("Cassandra")) {
} else if (Configuration.backend.equals("MySQL")) {
}
}
@Override
public QueryResults poll(String queryName, QueryParams params) {
if (Configuration.backend.equals("MongoDB")) {
MongoQueryService mqs = new MongoQueryService();
String queryResultString = mqs.poll(queryName, params);
// QueryResults Cannot Contains Error Message if according to SPEC
EPCISQueryDocumentType resultXML = JAXB.unmarshal(new StringReader(
queryResultString), EPCISQueryDocumentType.class);
if (resultXML != null
&& resultXML.getEPCISBody() != null
&& resultXML.getEPCISBody().getQueryResults() != null
&& resultXML.getEPCISBody().getQueryResults()
.getResultsBody() != null) {
QueryResults queryResults = new QueryResults();
queryResults.setQueryName(queryName);
queryResults.setResultsBody(resultXML.getEPCISBody()
.getQueryResults().getResultsBody());
return queryResults;
}
} else if (Configuration.backend.equals("Cassandra")) {
} else if (Configuration.backend.equals("MySQL")) {
}
return null;
}
@Override
public List<String> getQueryNames() {
List<String> queryNames = new ArrayList<String>();
queryNames.add("SimpleEventQuery");
queryNames.add("SimpleMasterDataQuery");
return queryNames;
}
@Override
public List<String> getSubscriptionIDs(String queryName) {
if (Configuration.backend.equals("MongoDB")) {
MongoQueryService mqs = new MongoQueryService();
return mqs.getSubscriptionIDs(queryName);
} else if (Configuration.backend.equals("Cassandra")) {
} else if (Configuration.backend.equals("MySQL")) {
}
return null;
}
@Override
public String getStandardVersion() {
return "1.1";
}
@Override
public String getVendorVersion() {
return null;
}
}