package eu.geoknow.generator.rest;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.ws.rs.CookieParam;
import javax.ws.rs.GET;
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 com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.rdf.model.StmtIterator;
import com.hp.hpl.jena.vocabulary.RDF;
import com.hp.hpl.jena.vocabulary.RDFS;
import com.ontos.ldiw.vocabulary.LDIWO;
import eu.geoknow.generator.configuration.FrameworkConfiguration;
import eu.geoknow.generator.datasources.DatasoucesManager;
import eu.geoknow.generator.datasources.beans.DatabaseType;
import eu.geoknow.generator.datasources.beans.Endpoint;
import eu.geoknow.generator.users.FrameworkUserManager;
import eu.geoknow.generator.users.UserProfile;
@Path("/datasources")
public class Datasources {
private static final Logger log = Logger.getLogger(Datasources.class);
/**
* Get the types of Databases
*
* @return JSON
*/
@GET
@Path("database-types")
@Produces(MediaType.APPLICATION_JSON)
public Response getService(@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();
}
try {
List<DatabaseType> types = new ArrayList<DatabaseType>();
Model model = LDIWO.getModel();
StmtIterator uris = model.listStatements(null, RDF.type, LDIWO.DatabaseType);
while (uris.hasNext()) {
DatabaseType d = new DatabaseType();
Resource s = uris.next().getSubject();
d.setUri(s.getURI());
d.setLabel(s.getProperty(RDFS.label).getLiteral().getString());
types.add(d);
}
Gson gson = new Gson();
String json = "{ \"databaseTypes\" : " + gson.toJson(types) + "}";
return Response.status(Response.Status.OK).entity(json).type(MediaType.APPLICATION_JSON)
.build();
} catch (Exception e) {
log.error(e);
e.printStackTrace();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
}
}
/**
* Provide all Endpoints registered on the settings
*
* @param userc
* @param token
* @return JSON array of {@Endpoint}
*/
@GET
@Path("endpoints")
@Produces(MediaType.APPLICATION_JSON)
public Response getEndpoints(@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();
}
try {
DatasoucesManager manager =
new DatasoucesManager(FrameworkConfiguration.getInstance().getSystemRdfStoreManager());
Collection<Endpoint> endpoints = manager.getAllEndpoints();
Gson gson = new Gson();
String json = "{ \"endpoints\" : " + gson.toJson(endpoints) + "}";
return Response.status(Response.Status.OK).entity(json).type(MediaType.APPLICATION_JSON)
.build();
} catch (Exception e) {
log.error(e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
}
}
}