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("/organizations")
public class RFMOrganizationImplementation extends RFMImplementation{
private static Logger log = Logger.getLogger(RFMOrganizationImplementation.class);
@Path("/{page:(/page/[^/]+?)?}{items:(/items/[^/]+?)?}")
@GET
@Produces("application/json")
public String getOrganizations(@PathParam("page") String page, @PathParam("items") String items) {
String query = "collection:organizations";
return doPagingQuery(query, page, items, "getOrganizations",TranslateResultsformat.RFML);
}
@Path("/{organization_id}")
@GET
@Produces("application/json")
public String getOrganization(@PathParam("organization_id") String id) {
if (id.equalsIgnoreCase("")) {
log.error("getOrganization: Not a valid organization identifier");
return "{ }";
}
log.info("getOrganization: organization_id=" + id);
try {
String fullquery = "rdf.organization.id : \"" + id + "\"";
String result = QueryMetadataFactory.getQueryImpl(TranslateLanguage.LUCENE).query(fullquery, 1, 1, TranslateResultsformat.RFME);
return result;
} catch (QueryTranslationException e) {
log.error("getOrganization:QueryTranslationException", e);
} catch (QueryMetadataException e) {
log.error("getOrganization:QueryMetadataException", e);
}
return "{ }";
}
@Path("/search/{keyword}{page:(/page/[^/]+?)?}{items:(/items/[^/]+?)?}")
@GET
@Produces("application/json")
public String getOrganizationsFromKeyword(@PathParam("keyword") String keyword, @PathParam("page") String page, @PathParam("items") String items) {
String query = "collection:organizations AND contents:" + keyword;
return doPagingQuery(query, page, items, "getOrganizationsFromQuery",TranslateResultsformat.RFML);
}
@Path("/co-author-organizations/{organization_id}{page:(/page/[^/]+?)?}{items:(/items/[^/]+?)?}")
@GET
@Produces("application/json")
public String getCoAuthorOrganizationsByOrganization(@PathParam("organization_id") String id, @PathParam("page") String page, @PathParam("items") String items) {
if (id.equalsIgnoreCase("")) {
log.error("getCoAuthorOrganizationsByOrganization: Not a valid organization identifier");
return "{ }";
}
String fullquery = "";
if(idGroups.containsKey(id)) {
for (String sameId : idGroups.get(id)) {
if(!fullquery.equalsIgnoreCase("")) {
fullquery += " OR ";
}else {
fullquery += "(";
}
fullquery += "rdf.publication.author.person.affiliation.organization.id : \"" + sameId + "\"";
}
if(!fullquery.equalsIgnoreCase("")) fullquery += ") ";
}else {
fullquery = "rdf.publication.author.person.affiliation.organization.id : \"" + id + "\" ";
}
return doPagingQuery(fullquery, page, items, "getCoAuthorOrganizationsByOrganization",TranslateResultsformat.RFMCOAFFILL);
}
@Path("/search")
@GET
@Produces("application/json")
public String getOrganizationsFromQuery(@QueryParam("q") String query, @QueryParam("page") String page, @QueryParam("items") String items) {
query = "collection:organizations AND contents:" + query;
return doQuery(query, page, items, "getOrganizationsFromQuery",TranslateResultsformat.RFML);
}
}