package org.jrebirth.af.rest.service; import java.util.List; import javax.ws.rs.client.Entity; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.GenericType; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import org.jrebirth.af.api.wave.Wave; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class CRUDRestService<O extends Object> extends AbstractRestService { // /** The Wave Item ALL_EXPRESSIONS. */ // public static final WaveItem<List<O>> PLANETS = new WaveItemBase<List<O>>() { // }; // // /** The WaveType return action name. */ // public static final String PLANETS_LIST = "PLANETS_LIST"; // // /** The Wave Type DO_BUILD_TABLES. */ // public static final WaveType DO_GET_PLANETS = Builders.waveType("GET_PLANETS") // .returnAction(PLANETS_LIST) // .returnItem(PLANETS); /** The class logger. */ private static final Logger LOGGER = LoggerFactory.getLogger(CRUDRestService.class); private final String crudPath = "planets"; private final GenericType<O> genericSingle = new GenericType<O>() { }; private final GenericType<List<O>> genericList = new GenericType<List<O>>() { }; /** * {@inheritDoc} */ @Override protected WebTarget getWebTarget() { return super.getWebTarget().path(getCRUDPath()); } public String getCRUDPath() { return crudPath; } /** * . * * @param wave the source wave */ public boolean doCreateObject(O object, final Wave wave) { final Response updateResponse = getWebTarget() .request(MediaType.APPLICATION_XML) .post(Entity.xml(object)); return updateResponse.getStatusInfo() == Status.OK; } /** * . * * @param wave the source wave */ public boolean doUpdateObject(O object, final Wave wave) { final Response updateResponse = getWebTarget() .request(MediaType.APPLICATION_XML) .put(Entity.xml(object)); return updateResponse.getStatusInfo() == Status.OK; } /** * . * * @param wave the source wave */ public boolean doDeleteObject(O object, final Wave wave) { LOGGER.trace("Delete Object."); final Response deleteResponse = getWebTarget().path("1"/* object.id() */) .request(MediaType.APPLICATION_XML) .delete(); return deleteResponse.getStatusInfo() == Status.OK; } /** * . * * @param wave the source wave */ public O doGetObject(Integer id, final Wave wave) { LOGGER.trace("Get Planet."); final O object = getWebTarget() .request(MediaType.APPLICATION_XML) .get(genericSingle); return object; } /** * . * * @param wave the source wave */ public List<O> doGetObjects(final Wave wave) { LOGGER.trace("Get Planets."); final List<O> objects = getWebTarget() .request(MediaType.APPLICATION_XML) .get(genericList); return objects; } }