package com.ia04.species.server; import java.io.IOException; import java.io.InputStream; import java.io.StringWriter; import java.util.Map; import org.codehaus.jackson.map.ObjectMapper; import org.restlet.data.MediaType; import org.restlet.data.Status; import org.restlet.engine.header.Header; import org.restlet.ext.jackson.JacksonRepresentation; import org.restlet.representation.InputRepresentation; import org.restlet.representation.Representation; import org.restlet.representation.StringRepresentation; import org.restlet.resource.Delete; import org.restlet.resource.Get; import org.restlet.resource.Post; import org.restlet.resource.Put; import org.restlet.resource.ServerResource; import org.restlet.util.Series; import com.ia04.species.server.SpeciesStats; public class SpeciesServiceResource extends ServerResource { @Get public void retrieve() { // Récupérer l’attribut "id" Map<String,Object> attributes = getRequest().getAttributes(); String speciesId = (String) attributes.get("id"); // Récupérer l’attribut header "Accept" Series<Header> serie= (Series<Header>) attributes.get("org.restlet.http.headers"); String s = serie.getValues("Accept"); // si l’attribut id n’existe pas erreur if ((DBManager.getSpecies(speciesId).size()) == 0) { error(speciesId); return; } SpeciesStats species = DBManager.getSpecies(speciesId).get(0); // si Accept = species/text if (s.equals("species/text")) { //retourner une StringRepresentation StringRepresentation entity = new StringRepresentation(species.getDescriptif(),MediaType.TEXT_PLAIN); getResponse().setEntity(entity); System.out.println("Entity :"+entity); //mettre le Status à SUCCESS_OK getResponse().setStatus(Status.SUCCESS_OK); return; } // si Accept = text/json if (s.equals("text/json")){ ObjectMapper om = new ObjectMapper(); StringWriter sw = new StringWriter(); try { om.writeValue(sw,species); } catch (Exception e) { System.err.println("Erreur écriture Json"); } getResponse().setEntity( //retourner une StringRepresentation new StringRepresentation( sw.toString(),MediaType.TEXT_PLAIN)); //mettre le Status à SUCCESS_OK getResponse().setStatus(Status.SUCCESS_OK); } } @Delete public void deleteItem() throws IOException{ // Récupérer l’attribut "id" Map<String,Object> attributes = getRequest().getAttributes(); String speciesId = (String) attributes.get("id"); // Récupérer l’attribut header "Accept" Series<Header> serie= (Series<Header>) attributes.get("org.restlet.http.headers"); String s = serie.getValues("Accept"); //on teste si l'espèce envoyée existe sur le serveur if (DBManager.getSpecies(speciesId).size() == 0) { error(speciesId); return; } SpeciesStats species = DBManager.getSpecies(speciesId).get(0); // si Accept = application/delete if (s.equals("application/delete")){ //suppression de l'espèce DBManager.delete(speciesId); getResponse().setStatus(Status.SUCCESS_OK); } } @Put public void storeItem(Representation entity) throws IOException{ // Récupérer l’attribut "id" Map<String,Object> attributes = getRequest().getAttributes(); String speciesId = (String) attributes.get("id"); // Récupérer l’attribut header "Accept" Series<Header> serie= (Series<Header>) attributes.get("org.restlet.http.headers"); String s = serie.getValues("Accept"); //on teste si l'espèce envoyée n'existe pas déjà sur le serveur if ((DBManager.getSpecies(speciesId).size()) == 1){ error_create(speciesId); return; } // si Accept = application/json if (s.equals("application/json")){ InputStream data; data = entity.getStream(); InputRepresentation repr = new InputRepresentation(data); JacksonRepresentation<SpeciesStats> jrepr = new JacksonRepresentation<SpeciesStats>(repr,SpeciesStats.class); SpeciesStats recieved = new SpeciesStats(); recieved=jrepr.getObject(); DBManager.save(recieved); } } @Post public void updateItem(Representation entity) throws IOException{ // Récupérer l’attribut "id" Map<String,Object> attributes = getRequest().getAttributes(); String speciesId = (String) attributes.get("id"); // Récupérer l’attribut header "Accept" Series<Header> serie= (Series<Header>) attributes.get("org.restlet.http.headers"); String s = serie.getValues("Accept"); SpeciesStats species = null; //on teste si l'espèce envoyée existe déjà sur le serveur if ((species = DBManager.getSpecies(speciesId).get(0)) != null) { // si Accept = application/json if (s.equals("application/json")){ //on supprime l'espèce côté serveur DBManager.delete(speciesId); InputStream data; data = entity.getStream(); InputRepresentation repr = new InputRepresentation(data); JacksonRepresentation<SpeciesStats> jrepr = new JacksonRepresentation<SpeciesStats>(repr,SpeciesStats.class); SpeciesStats recieved = new SpeciesStats(); recieved=jrepr.getObject(); DBManager.save(recieved); } } else { error_update(speciesId); return; } } private void error(String speciesId) { getResponse().setEntity( new StringRepresentation( "{\"status\" : \"Parameter Error\"}", MediaType.TEXT_PLAIN)); getResponse().setStatus( Status.CLIENT_ERROR_BAD_REQUEST); } private void error_create(String speciesId) { getResponse().setEntity( new StringRepresentation( "{\"status\" : \"Already existing species\"}", MediaType.TEXT_PLAIN)); getResponse().setStatus( Status.CLIENT_ERROR_CONFLICT); } private void error_update(String speciesId) { getResponse().setEntity( new StringRepresentation( "{\"status\" : \"Species doesn't exists on the server\"}", MediaType.TEXT_PLAIN)); getResponse().setStatus( Status.CLIENT_ERROR_CONFLICT); } }