mirror of https://github.com/balkian/SOJA.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
164 lines
6.3 KiB
Java
164 lines
6.3 KiB
Java
package es.upm.dit.gsi.sojason.services.nlu;
|
|
|
|
import static es.upm.dit.gsi.sojason.services.nlu.NLUModel.JSON_CURRENCY_NODENAME;
|
|
import static es.upm.dit.gsi.sojason.services.nlu.NLUModel.JSON_DATES_DEPART_NODENAME;
|
|
import static es.upm.dit.gsi.sojason.services.nlu.NLUModel.JSON_DATES_NODENAME;
|
|
import static es.upm.dit.gsi.sojason.services.nlu.NLUModel.JSON_DATES_RETURN_NODENAME;
|
|
import static es.upm.dit.gsi.sojason.services.nlu.NLUModel.JSON_DOMAINS_NODENAME;
|
|
import static es.upm.dit.gsi.sojason.services.nlu.NLUModel.JSON_FROM_NODENAME;
|
|
import static es.upm.dit.gsi.sojason.services.nlu.NLUModel.JSON_TO_NODENAME;
|
|
import static es.upm.dit.gsi.sojason.services.nlu.NLUModel.JSON_LOCATIONS_NODENAME;
|
|
import static es.upm.dit.gsi.sojason.services.nlu.NLUModel.JSON_MAX_NODENAME;
|
|
import static es.upm.dit.gsi.sojason.services.nlu.NLUModel.JSON_MIN_NODENAME;
|
|
import static es.upm.dit.gsi.sojason.services.nlu.NLUModel.JSON_NUMBER_NODENAME;
|
|
import static es.upm.dit.gsi.sojason.services.nlu.NLUModel.JSON_PRICE_NODENAME;
|
|
import static es.upm.dit.gsi.sojason.services.nlu.NLUModel.JSON_TIME_DEPART_NODENAME;
|
|
import static es.upm.dit.gsi.sojason.services.nlu.NLUModel.JSON_TIME_NODENAME;
|
|
import static es.upm.dit.gsi.sojason.services.nlu.NLUModel.JSON_TIME_RETURN_NODENAME;
|
|
import static es.upm.dit.gsi.sojason.services.nlu.NLUModel.JSON_TRAVEL_NODENAME;
|
|
import jason.asSyntax.Literal;
|
|
|
|
import java.io.IOException;
|
|
import java.io.UnsupportedEncodingException;
|
|
import java.net.MalformedURLException;
|
|
import java.net.URL;
|
|
import java.net.URLConnection;
|
|
import java.net.URLEncoder;
|
|
import java.util.Arrays;
|
|
import java.util.Collection;
|
|
import java.util.logging.Logger;
|
|
|
|
import org.codehaus.jackson.JsonNode;
|
|
import org.codehaus.jackson.map.ObjectMapper;
|
|
|
|
import es.upm.dit.gsi.jason.utils.NotationUtils;
|
|
import es.upm.dit.gsi.sojason.Web40Model;
|
|
import es.upm.dit.gsi.sojason.beans.NLUTravel;
|
|
import es.upm.dit.gsi.sojason.services.WebServiceConnector;
|
|
|
|
/**
|
|
* Project: Web40SOJason
|
|
* Package: es.upm.dit.gsi.sojason.services.nlu
|
|
* Class: NLUConnector
|
|
*
|
|
* @author Miguel Coronado (miguelcb@dit.upm.es)
|
|
* @version Feb 27, 2012
|
|
*
|
|
*/
|
|
public class NLUConnector implements WebServiceConnector{
|
|
|
|
/** The url of the service */
|
|
private String serviceUrl;
|
|
/** */
|
|
private Logger logger = Logger.getLogger("Web40SOJason." + NLUConnector.class.getName());
|
|
|
|
|
|
/** Constructor */
|
|
public NLUConnector(String serviceUrl) {
|
|
this.serviceUrl = serviceUrl;
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
public Collection<Literal> call(String... params) {
|
|
|
|
/* Are parameters correct */
|
|
if (!validateParams(params)){
|
|
logger.info("Parameters are not valid:" + Arrays.toString(params));
|
|
return null;
|
|
}
|
|
|
|
try {
|
|
// Prepare the request
|
|
String urlRequest = prepareRequest(params[0], params[1]);
|
|
|
|
URL url = new URL(urlRequest);
|
|
URLConnection connection = url.openConnection();
|
|
connection.connect();
|
|
|
|
// Parse the data received (using Jackson lib)
|
|
ObjectMapper mapper = new ObjectMapper();
|
|
JsonNode rootNode = mapper.readValue(connection.getInputStream(), JsonNode.class); // src can be a File, URL, InputStream etc
|
|
JsonNode travelNode = rootNode.with(JSON_DOMAINS_NODENAME).get(JSON_TRAVEL_NODENAME);
|
|
|
|
NLUTravel travel = new NLUTravel();
|
|
travel.setDepartureDate(travelNode.with(JSON_DATES_NODENAME).get(JSON_DATES_DEPART_NODENAME).getTextValue());
|
|
travel.setReturnDate(travelNode.with(JSON_DATES_NODENAME).get(JSON_DATES_RETURN_NODENAME).getTextValue());
|
|
|
|
travel.setCurrency(travelNode.with(JSON_PRICE_NODENAME).get(JSON_CURRENCY_NODENAME).getTextValue());
|
|
travel.setPriceMax(travelNode.with(JSON_PRICE_NODENAME).get(JSON_MAX_NODENAME).getTextValue());
|
|
travel.setPriceMin(travelNode.with(JSON_PRICE_NODENAME).get(JSON_MIN_NODENAME).getTextValue());
|
|
|
|
travel.setLocationFrom(travelNode.with(JSON_LOCATIONS_NODENAME).get(JSON_FROM_NODENAME).getTextValue());
|
|
travel.setLocationTo(travelNode.with(JSON_LOCATIONS_NODENAME).get(JSON_TO_NODENAME).getTextValue());
|
|
|
|
travel.setNumber(travelNode.get(JSON_NUMBER_NODENAME).getTextValue());
|
|
|
|
travel.setReturnTime(travelNode.with(JSON_TIME_NODENAME).get(JSON_TIME_RETURN_NODENAME).getTextValue());
|
|
travel.setDepartureTime(travelNode.with(JSON_TIME_NODENAME).get(JSON_TIME_DEPART_NODENAME).getTextValue());
|
|
|
|
travel.setQueryId(params[0]);
|
|
|
|
// System.out.println(travel);
|
|
|
|
return travel.toPercepts();
|
|
|
|
} catch (MalformedURLException e) {
|
|
// return CollectionUtils.wrapList("error(malformed_url, \"The given url is not valid\")");
|
|
logger.info("MalformedURLException:" + e.getMessage()); return null;
|
|
} catch (UnsupportedEncodingException e) {
|
|
// return CollectionUtils.wrapList("error(undupported_encodig, \"The encoding given is not supported\")");
|
|
logger.info("UnsupportedEncodingException:" + e.getMessage()); return null;
|
|
} catch (IOException e) {
|
|
// return CollectionUtils.wrapList("error(io_exception, \"Someio exception ocurr\")");
|
|
logger.info("IOException:" + e.getMessage()); return null;
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* This generates a String used as http GET request to access the service
|
|
* including the parameters given by the user
|
|
*
|
|
* @param queryid
|
|
* @param message
|
|
* @return the url service string (utf-8 encoded)
|
|
* @throws UnsupportedEncodingException
|
|
*/
|
|
String prepareRequest(String queryid, String message) throws UnsupportedEncodingException {
|
|
String urlRequest = this.serviceUrl;
|
|
urlRequest = urlRequest.concat("?text=");
|
|
message = NotationUtils.removeQuotation(message);
|
|
urlRequest = urlRequest.concat(URLEncoder.encode(message, "utf-8"));
|
|
// urlRequest = urlRequest.concat(URLEncoder.encode("&query_id=", "utf-8"));
|
|
urlRequest = urlRequest.concat("&query_id=");
|
|
urlRequest = urlRequest.concat(URLEncoder.encode(queryid, "utf-8"));
|
|
|
|
logger.info(urlRequest);
|
|
return urlRequest ;
|
|
}
|
|
|
|
/**
|
|
* This validates the parameters received. The
|
|
* {@link NLUConnector#call(String...)} method expects to receive two
|
|
* parameters of the nature and characteristics described below:
|
|
*
|
|
* <ul>
|
|
* <li>The first parameter is que query id. It is an alphanumeric string
|
|
* which normally will contain numbers, but other non-digit characters
|
|
* are permitted. <b>No alphanumeric values are not allowed</b></li>
|
|
* <li></li>
|
|
* </ul>
|
|
*
|
|
*/
|
|
public boolean validateParams(String... params) {
|
|
if (params.length != 2){
|
|
return false;
|
|
}
|
|
// TODO: check other things
|
|
return true;
|
|
}
|
|
|
|
}
|