PageRenderTime 56ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/src/java/recursos/UsuarioFacadeREST.java

https://bitbucket.org/franjs88/servicio-rest-calendario
Java | 349 lines | 268 code | 35 blank | 46 comment | 21 complexity | 86b111d1711c8cafe0bd73ac960169ff MD5 | raw file
  1. package recursos;
  2. import accesodatos.Calendario;
  3. import accesodatos.Evento;
  4. import accesodatos.Usuario;
  5. import java.text.ParseException;
  6. import java.text.SimpleDateFormat;
  7. import java.util.ArrayList;
  8. import java.util.Collection;
  9. import java.util.Date;
  10. import java.util.Iterator;
  11. import java.util.List;
  12. import javax.ejb.Stateless;
  13. import javax.persistence.EntityManager;
  14. import javax.persistence.PersistenceContext;
  15. import javax.ws.rs.Consumes;
  16. import javax.ws.rs.DELETE;
  17. import javax.ws.rs.GET;
  18. import javax.ws.rs.POST;
  19. import javax.ws.rs.PUT;
  20. import javax.ws.rs.Path;
  21. import javax.ws.rs.PathParam;
  22. import javax.ws.rs.Produces;
  23. import javax.ws.rs.core.Response;
  24. /**
  25. *
  26. * @author fran
  27. */
  28. @Stateless
  29. @Path("usuarios")
  30. public class UsuarioFacadeREST extends AbstractFacade<Usuario> {
  31. @PersistenceContext(unitName = "CalendarioRESTPU")
  32. private EntityManager em;
  33. public UsuarioFacadeREST() {
  34. super(Usuario.class);
  35. }
  36. @POST
  37. @Override
  38. @Consumes({"application/xml", "application/json"})
  39. public Response create(Usuario entity) {
  40. Response respuesta;
  41. try {
  42. super.create(entity);
  43. respuesta = Response.status(Response.Status.CREATED).build();
  44. } catch (Exception e) {
  45. respuesta = Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
  46. }
  47. return respuesta;
  48. }
  49. @PUT
  50. @Override
  51. @Consumes({"application/xml", "application/json"})
  52. public Response edit(Usuario entity) {
  53. Response respuesta;
  54. try {
  55. super.edit(entity);
  56. respuesta = Response.status(Response.Status.ACCEPTED).build();
  57. } catch (Exception e) {
  58. respuesta = Response.status(Response.Status.NOT_MODIFIED).build();
  59. }
  60. return respuesta;
  61. }
  62. @DELETE
  63. @Path("{id}")
  64. public Response remove(@PathParam("id") Integer id) {
  65. Response respuesta;
  66. try {
  67. super.remove(super.find(id));
  68. respuesta = Response.status(Response.Status.NO_CONTENT).build();
  69. } catch (Exception e) {
  70. respuesta = Response.status(Response.Status.NOT_FOUND).build();
  71. }
  72. return respuesta;
  73. }
  74. @GET
  75. @Path("{id}")
  76. @Produces({"application/xml", "application/json"})
  77. public Usuario find(@PathParam("id") Integer id) {
  78. return super.find(id);
  79. }
  80. @GET
  81. @Override
  82. @Produces({"application/xml", "application/json"})
  83. public List<Usuario> findAll() {
  84. return super.findAll();
  85. }
  86. @GET
  87. @Path("{from}/{to}")
  88. @Produces({"application/xml", "application/json"})
  89. public List<Usuario> findRange(@PathParam("from") Integer from, @PathParam("to") Integer to) {
  90. return super.findRange(new int[]{from, to});
  91. }
  92. @GET
  93. @Path("count")
  94. @Produces("text/plain")
  95. public String countREST() {
  96. return String.valueOf(super.count());
  97. }
  98. /**
  99. * Rellena la lista con aquellos calendarios que sean publicos, y la
  100. * devuelve.
  101. *
  102. *
  103. * @param iter
  104. * @param calPublicos
  105. * @return
  106. */
  107. public List<Calendario> rellenaCalPublicos(Iterator<Calendario> iter) {
  108. Calendario calendario;
  109. List<Calendario> calPublicos = new ArrayList<Calendario>();
  110. if (!iter.hasNext()) {
  111. calendario = iter.next();
  112. if (calendario.getPublico()) {
  113. calPublicos.add(calendario);
  114. }
  115. } else {
  116. while (iter.hasNext()) {
  117. calendario = iter.next();
  118. if (calendario.getPublico()) {
  119. calPublicos.add(calendario);
  120. }
  121. }
  122. }
  123. return calPublicos;
  124. }
  125. /**
  126. * Procesa la lista de calendarios que son publicos y devuelve la lista de
  127. * todos los eventos de dichos calendarios.
  128. *
  129. * @param iter
  130. * @param calPublicos
  131. * @return
  132. */
  133. private List<Evento> leeCalPublicos(Iterator<Calendario> iter) {
  134. Calendario actual;
  135. Collection<Evento> eventosDeUnCalendario;
  136. List<Evento> eventosPublicos = new ArrayList<Evento>();
  137. Iterator<Evento> iterEventos;
  138. Evento evento;
  139. while (iter.hasNext()) {
  140. actual = iter.next();
  141. eventosDeUnCalendario = actual.getEventoCollection();
  142. iterEventos = eventosDeUnCalendario.iterator();
  143. if (!iterEventos.hasNext()) {
  144. evento = iterEventos.next();
  145. eventosPublicos.add(evento);
  146. } else {
  147. while (iterEventos.hasNext()) {
  148. evento = iterEventos.next();
  149. eventosPublicos.add(evento);
  150. }
  151. }
  152. }
  153. return eventosPublicos;
  154. }
  155. /**
  156. * Procesa la lista de eventos publicos y la filtra por el calendario
  157. * identificado con el parametro idCalendario.
  158. *
  159. * @param iter
  160. * @param idCalendario
  161. * @return
  162. */
  163. private List<Evento> filtraPorIdCalendario(Iterator<Evento> iter, Integer idCalendario) {
  164. Evento eventoActual;
  165. List<Evento> listaFiltrada = new ArrayList<Evento>();
  166. if (!iter.hasNext()) {
  167. eventoActual = iter.next();
  168. if (eventoActual.getCalendarioidCalendario().getIdCalendario()
  169. .equals(idCalendario)) {
  170. listaFiltrada.add(eventoActual);
  171. }
  172. } else {
  173. while (iter.hasNext()) {
  174. eventoActual = iter.next();
  175. if (eventoActual.getCalendarioidCalendario().getIdCalendario()
  176. .equals(idCalendario)) {
  177. listaFiltrada.add(eventoActual);
  178. }
  179. }
  180. }
  181. return listaFiltrada;
  182. }
  183. /**
  184. *
  185. * @param iter
  186. * @param fecha
  187. * @return
  188. * @throws ParseException
  189. */
  190. private List<Evento> filtrarPorFecha(Iterator<Evento> iter, String fecha) throws ParseException {
  191. Evento eventoActual;
  192. List<Evento> listaFiltrada = new ArrayList<Evento>();
  193. Collection<Evento> eventosPublicos;
  194. String oldstring = fecha;
  195. Date fechaCasting = new SimpleDateFormat("yyyy-MM-dd").parse(oldstring);
  196. if (!iter.hasNext()) {
  197. eventoActual = iter.next();
  198. if (eventoActual.getFecha().equals(fechaCasting)) {
  199. listaFiltrada.add(eventoActual);
  200. }
  201. } else {
  202. while (iter.hasNext()) {
  203. eventoActual = iter.next();
  204. if (eventoActual.getFecha().equals(fechaCasting)) {
  205. listaFiltrada.add(eventoActual);
  206. }
  207. }
  208. }
  209. return listaFiltrada;
  210. }
  211. /**
  212. *
  213. * @param listaOriginal
  214. * @param numero
  215. * @return
  216. */
  217. private List<Evento> filtrarPorNumero(List<Evento> listaOriginal, Integer numero) {
  218. Evento actual;
  219. List<Evento> listaFiltrada = new ArrayList<Evento>();
  220. for(int i = 0; i < numero && i < listaOriginal.size() ; i++){
  221. actual = listaOriginal.get(i);
  222. listaFiltrada.add(actual);
  223. }
  224. return listaFiltrada;
  225. }
  226. @GET
  227. @Path("{id}/calendarios/publicos")
  228. @Produces({"application/xml", "application/json"})
  229. public List<Calendario> findCalendariosPublicos(@PathParam("id") Integer id) {
  230. Usuario user = super.find(id);
  231. Iterator<Calendario> iter = user.getCalendarioCollection().iterator();
  232. return rellenaCalPublicos(iter);
  233. }
  234. @GET
  235. @Path("{id}/calendarios/publicos/eventos")
  236. @Produces({"application/xml", "application/json"})
  237. public List<Evento> findEventosPublicosByUserId(@PathParam("id") Integer id) {
  238. Usuario user = super.find(id);
  239. Iterator<Calendario> iter = user.getCalendarioCollection().iterator();
  240. List<Evento> eventosPublicos;
  241. eventosPublicos = leeCalPublicos(rellenaCalPublicos(iter).iterator());
  242. return eventosPublicos;
  243. }
  244. @GET
  245. @Path("{idUser}/calendarios/{idCalendario}/publicos/eventos")
  246. @Produces({"application/xml", "application/json"})
  247. public List<Evento> findAllEventosPublicosByCalendarioId(@PathParam("idUser") Integer id, @PathParam("idCalendario") Integer idCalendario) {
  248. Usuario user = super.find(id);
  249. Iterator<Calendario> iter = user.getCalendarioCollection().iterator();
  250. List<Evento> eventosPublicos;
  251. eventosPublicos = leeCalPublicos(rellenaCalPublicos(iter).iterator());
  252. return filtraPorIdCalendario(eventosPublicos.iterator(), idCalendario);
  253. }
  254. @GET
  255. @Path("{idUser}/calendarios/{idCalendario}/publicos/eventos/{fecha}")
  256. @Produces({"application/xml", "application/json"})
  257. public List<Evento> findEventosPublicosByFechaCalendario(@PathParam("idUser") Integer id,
  258. @PathParam("idCalendario") Integer idCalendario,
  259. @PathParam("fecha") String fecha) throws ParseException {
  260. //Declaracion de variables
  261. Usuario user = super.find(id);
  262. Iterator<Calendario> iter = user.getCalendarioCollection().iterator();
  263. List<Evento> eventosPublicos;
  264. List<Evento> evsPorCalendario;
  265. //Procesamos los filtrados
  266. eventosPublicos = leeCalPublicos(rellenaCalPublicos(iter).iterator());
  267. evsPorCalendario = filtraPorIdCalendario(eventosPublicos.iterator(),
  268. idCalendario);
  269. return filtrarPorFecha(evsPorCalendario.iterator(), fecha);
  270. }
  271. @GET
  272. @Path("{idUser}/calendarios/publicos/eventos/{fecha}")
  273. @Produces({"application/xml", "application/json"})
  274. public List<Evento> findEventosPublicosByFecha(@PathParam("idUser") Integer id,
  275. @PathParam("fecha") String fecha) throws ParseException {
  276. Usuario user = super.find(id);
  277. Iterator<Calendario> iter = user.getCalendarioCollection().iterator();
  278. List<Evento> eventosPublicos;
  279. eventosPublicos = leeCalPublicos(rellenaCalPublicos(iter).iterator());
  280. return filtrarPorFecha(eventosPublicos.iterator(), fecha);
  281. }
  282. @GET
  283. @Path("{idUser}/calendarios/publicos/eventos/limitar/{num}")
  284. @Produces({"application/xml", "application/json"})
  285. public List<Evento> filtrarEventosPublicosByNum(@PathParam("idUser") Integer id,
  286. @PathParam("num") Integer num) throws ParseException {
  287. List<Evento> eventosPublicos;
  288. Usuario user = super.find(id);
  289. Iterator<Calendario> iter = user.getCalendarioCollection().iterator();
  290. eventosPublicos = leeCalPublicos(rellenaCalPublicos(iter).iterator());
  291. return filtrarPorNumero(eventosPublicos, num);
  292. }
  293. @GET
  294. @Path("{idUser}/calendarios/{idCalendario}/publicos/eventos/limitar/{num}")
  295. @Produces({"application/xml", "application/json"})
  296. public List<Evento> filtrarEvsPubsCalendarioByNum(@PathParam("idUser") Integer id,
  297. @PathParam("idCalendario") Integer idCalendario,
  298. @PathParam("num") Integer num) throws ParseException {
  299. //Declaracion de variables
  300. Usuario user = super.find(id);
  301. Iterator<Calendario> iter = user.getCalendarioCollection().iterator();
  302. List<Evento> eventosPublicos;
  303. List<Evento> evsPorCalendario;
  304. //Procesamos los filtrados
  305. eventosPublicos = leeCalPublicos(rellenaCalPublicos(iter).iterator());
  306. evsPorCalendario = filtraPorIdCalendario(eventosPublicos.iterator(),
  307. idCalendario);
  308. return filtrarPorNumero(evsPorCalendario, num);
  309. }
  310. @Override
  311. protected EntityManager getEntityManager() {
  312. return em;
  313. }
  314. }