package eu.geoknow.generator.rest;
import java.util.HashMap;
import java.util.Map;
import javax.ws.rs.CookieParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Cookie;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.apache.log4j.Logger;
import com.google.gson.Gson;
import eu.geoknow.generator.common.Namespace;
import eu.geoknow.generator.configuration.FrameworkConfiguration;
import eu.geoknow.generator.users.FrameworkUserManager;
import eu.geoknow.generator.users.UserProfile;
@Path("/namespaces")
public class Namespaces {
private static final Logger log = Logger.getLogger(Components.class);
private static Map<String, String> prefixToNamespace;
static {
prefixToNamespace = new HashMap<String, String>();
prefixToNamespace.put("acl", "http://www.w3.org/ns/auth/acl#");
prefixToNamespace.put("cco", "http://purl.org/acco/ns#");
prefixToNamespace.put("dbo", "http://dbpedia.org/ontology/");
prefixToNamespace.put("dbp", "http://dbpedia.org/property/");
prefixToNamespace.put("dbr", "http://dbpedia.org/resource/");
prefixToNamespace.put("dcterms", "http://purl.org/dc/terms/");
prefixToNamespace.put("dc", "http://purl.org/dc/elements/1.1/");
prefixToNamespace.put("foaf", "http://xmlns.com/foaf/0.1/");
prefixToNamespace.put("geo", "http://www.w3.org/2003/01/geo/wgs84_pos#");
prefixToNamespace.put("geoknow", "http://geoknow.eu/geodata#");
prefixToNamespace.put("geom", "http://geovocab.org/geometry#");
prefixToNamespace.put("geos", "http://www.opengis.net/ont/geosparql#");
prefixToNamespace.put("ontos", "http://ldiw.ontos.com/ontology/");
prefixToNamespace.put("gz", "http://data.admin.ch/vocab/");
prefixToNamespace.put("gzp", "http://data.admin.ch/bfs/class/1.0");
prefixToNamespace.put("ld", "http://ld.geoknow.eu/flights/ontology/");
prefixToNamespace.put("lds", "http://stack.linkeddata.org/ldis-schema/");
prefixToNamespace.put("lexvo", "http://lexvo.org/ontology#");
prefixToNamespace.put("lgdo", "http://linkedgeodata.org/ontology/");
prefixToNamespace.put("ch", "http://opendata.ch/ontology#");
prefixToNamespace.put("owl", "http://www.w3.org/2002/07/owl#");
prefixToNamespace.put("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
prefixToNamespace.put("rdfs", "http://www.w3.org/2000/01/rdf-schema#");
prefixToNamespace.put("sd", "http://www.w3.org/ns/sparql-service-description#");
prefixToNamespace.put("skos", "http://www.w3.org/2004/02/skos/core#");
prefixToNamespace.put("void", "http://rdfs.org/ns/void#");
prefixToNamespace.put("wktrm", "http://wiktionary.dbpedia.org/terms/");
prefixToNamespace
.put("drugbank", "http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/");
prefixToNamespace.put("sider", "http://www4.wiwiss.fu-berlin.de/sider/resource/sider/");
prefixToNamespace.put("diseasome",
"http://www4.wiwiss.fu-berlin.de/diseasome/resource/diseasome/");
prefixToNamespace.put("gv", "http://geoknow.eu/coevolution/graphversioning/");
prefixToNamespace.put("gvg", "http://geoknow.eu/coevolution/graphversioning/graphset");
prefixToNamespace.put("cec", "http://geoknow.eu/coevolution/change/");
}
/**
* Get the data of a single service
*
* @return JSON
*/
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getAll(@CookieParam(value = "user") Cookie userc,
@CookieParam(value = "token") String token) {
FrameworkUserManager frameworkUserManager;
UserProfile user;
try {
frameworkUserManager = FrameworkConfiguration.getInstance().getFrameworkUserManager();
// authenticates the user, throw exception if fail
user = frameworkUserManager.validate(userc, token);
if (user == null) {
return Response.status(Response.Status.UNAUTHORIZED).entity("Invalid credentials").build();
}
} catch (Exception e) {
log.error(e);
e.printStackTrace();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
}
Gson gson = new Gson();
String json = "{ \"service\" : " + gson.toJson(prefixToNamespace) + "}";
return Response.status(Response.Status.OK).entity(json).type(MediaType.APPLICATION_JSON)
.build();
}
@POST
@Produces(MediaType.APPLICATION_JSON)
public Response getAll(@CookieParam(value = "user") Cookie userc,
@CookieParam(value = "token") String token, Namespace ns) {
FrameworkUserManager frameworkUserManager;
UserProfile user;
try {
frameworkUserManager = FrameworkConfiguration.getInstance().getFrameworkUserManager();
// authenticates the user, throw exception if fail
user = frameworkUserManager.validate(userc, token);
if (user == null) {
return Response.status(Response.Status.UNAUTHORIZED).entity("Invalid credentials").build();
}
} catch (Exception e) {
log.error(e);
e.printStackTrace();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
}
if (!prefixToNamespace.containsKey(ns.getPrefix()))
prefixToNamespace.put(ns.getPrefix(), ns.getUri());
else {
return Response.status(Response.Status.CONFLICT)
.entity("The prefix already exists for " + prefixToNamespace.get(ns.getPrefix()))
.type(MediaType.APPLICATION_JSON).build();
}
return Response.status(Response.Status.CREATED).type(MediaType.APPLICATION_JSON).build();
}
}