package org.ariadne_eu.service; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import org.apache.log4j.Logger; import org.ariadne.util.Stopwatch; import org.ariadne_eu.metadata.query.QueryMetadataException; import org.ariadne_eu.metadata.query.QueryMetadataFactory; import org.ariadne_eu.metadata.query.language.QueryTranslationException; import org.ariadne_eu.metadata.query.language.TranslateLanguage; import org.ariadne_eu.metadata.resultsformat.TranslateResultsformat; import org.ariadne_eu.utils.rest.Query; import org.json.JSONException; import org.json.JSONObject; import com.sun.jersey.spi.resource.Singleton; @Singleton @Path("/ariadne") public class ARIADNEImplementation { private static Logger log = Logger.getLogger(ARIADNEImplementation.class); @GET @Produces("application/json") public String query(@QueryParam("json") String json) { Stopwatch sw = new Stopwatch(); sw.start(); String query = ""; Query qry = new Query(); JSONObject jo; log.info("query:json=" + json); try { jo = new JSONObject(json); qry.parseJson(jo); //CNF :: ((a OR b) AND (c OR d)) if (qry.searchTerms != null) { for (int i = 0; i < qry.searchTerms.length; i++) { if (i > 0) query = query.concat(" AND "); for (int j = 0; j < qry.searchTerms[i].length; j++) { if (j > 0) query = query.concat(" OR "); if (qry.searchTerms[i].length > 1 && j == 0 ) query = query.concat(" ( "); query = query.concat(qry.searchTerms[i][j]); if (qry.searchTerms[i].length > 1 && j == (qry.searchTerms[i].length - 1) ) query = query.concat(" ) "); } } } if (qry.exclusionTerms != null) { for (int i = 0; i < qry.exclusionTerms.length; i++) { // System.out.println(qry.exclusionTerms[i]); } } if (qry.facets != null) { for (int i = 0; i < qry.facets.length; i++) { // System.out.println(qry.facets[i]); } } // System.out.println(qry.idListOffset); // System.out.println(qry.idListSize); // System.out.println(qry.maxCntFacets); // System.out.println(qry.sortKey); if (qry.rankingTerms != null) { for (int i = 0; i < qry.rankingTerms.length; i++) { System.out.println(qry.rankingTerms[i]); } } String result = QueryMetadataFactory.getQueryImpl(TranslateLanguage.LUCENE).query(query, qry.resultListOffset, qry.resultListSize, TranslateResultsformat.ARFJS); JSONObject jResults = new JSONObject(result); JSONObject jResult = jResults.getJSONObject("result"); jResult.put("processingTime", sw.stop()); return jResults.toString(); } catch (JSONException e) { log.error("synchronousQuery: QueryTranslationException", e); } catch (QueryTranslationException e) { log.error("synchronousQuery: QueryTranslationException", e); } catch (QueryMetadataException e) { log.error("synchronousQuery: QueryMetadataException", e); } return ""; } }