package org.ariadne_eu.service;
import java.io.File;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Vector;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import org.apache.log4j.Logger;
import org.ariadne.util.CsvReader;
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;
@Path("/authors")
public class RFMAuthorImplementation extends RFMImplementation{
private static Logger log = Logger.getLogger(RFMAuthorImplementation.class);
@Path("/{set:(/set/[^/]+?)?}{page:(/page/[^/]+?)?}{items:(/items/[^/]+?)?}")
@GET
@Produces("application/json")
public String getAuthors(@PathParam("set") String set,@PathParam("page") String page, @PathParam("items") String items) {
String query = "collection:persons";
return doPagingSetQuery(set, query, page, items, "getAuthors",TranslateResultsformat.RFML);
}
@Path("/{author_id}")
@GET
@Produces("application/json")
public String getAuthor(@PathParam("author_id") String id) {
if (id.equalsIgnoreCase("")) {
log.error("getAuthor: Not a valid author identifier");
return "{ }";
}
log.info("getAuthor: author_id=" + id);
try {
String fullquery = "";
if(idGroups.containsKey(id)) {
for (String sameId : idGroups.get(id)) {
if(!fullquery.equalsIgnoreCase("")) fullquery += " OR ";
fullquery += "rdf.person.id : \"" + sameId + "\"";
}
}else {
fullquery = "rdf.person.id : \"" + id + "\"";
}
String result = QueryMetadataFactory.getQueryImpl(TranslateLanguage.LUCENE).query(fullquery, 1, 1, TranslateResultsformat.RFME);
return result;
} catch (QueryTranslationException e) {
log.error("getAuthor:QueryTranslationException", e);
} catch (QueryMetadataException e) {
log.error("getAuthor:QueryMetadataException", e);
}
return "{ }";
}
@Path("/search/{keyword}{page:(/page/[^/]+?)?}{items:(/items/[^/]+?)?}")
@GET
@Produces("application/json")
public String getAuthorsFromKeyword(@PathParam("keyword") String keyword, @PathParam("page") String page, @PathParam("items") String items) {
String thePage = null;
if (page != null && !page.equalsIgnoreCase("")) {
thePage = page.split("/")[2];
}
String theItems = null;
if (items != null && !items.equalsIgnoreCase("")) {
theItems = items.split("/")[2];
}
return getAuthorsFromQuery(keyword, thePage, theItems);
}
@Path("/search")
@GET
@Produces("application/json")
public String getAuthorsFromQuery(@QueryParam("q") String query, @QueryParam("page") String page, @QueryParam("items") String items) {
query = "collection:persons AND contents:" + query;
return doQuery(query, page, items, "getAuthorsFromQuery",TranslateResultsformat.RFML);
}
@Path("/organization/{organization_id}{keyword:(/search/[^/]+?)?}{page:(/page/[^/]+?)?}{items:(/items/[^/]+?)?}")
@GET
@Produces("application/json")
public String getAuthorsOrganization(@PathParam("organization_id") String id, @PathParam("keyword") String keyword, @PathParam("page") String page,
@PathParam("items") String items) {
if (id.equalsIgnoreCase("")) {
log.error("getAuthorsOrganization: Not a valid organization identifier");
return "{ }";
}
Vector<String> queries = new Vector<String>();
String fullquery = "";
if(idGroups.containsKey(id)) {
for (String sameId : idGroups.get(id)) {
if(!fullquery.equalsIgnoreCase("")) {
fullquery += " OR ";
}else {
fullquery += "(";
}
fullquery += "rdf.person.affiliation.organization.id : \"" + sameId + "\"";
}
if(!fullquery.equalsIgnoreCase("")) fullquery += ") ";
}else {
fullquery = "rdf.person.affiliation.organization.id : \"" + id + "\" ";
}
if (!keyword.equalsIgnoreCase("")) {
queries.add("contents:" + keyword.split("/")[2]);
}
for (int i = 0; i < queries.size(); i++) {
fullquery = fullquery.concat(" AND " + queries.get(i));
}
log.info("getAuthorsOrganization: organization_id=" + id);
return doPagingQuery(fullquery, page, items, "getAuthorsOrganization",TranslateResultsformat.RFML);
}
}