/sedecdi/ejb/src/main/java/es/imserso/sede/service/registration/solicitud/AbstractSolicitudRegistration.java

https://bitbucket.org/czamorano2/sedecdi · Java · 359 lines · 141 code · 53 blank · 165 comment · 0 complexity · 77705f64cdd15d233362ef6d8bea49b5 MD5 · raw file

  1. package es.imserso.sede.service.registration.solicitud;
  2. import javax.enterprise.event.Event;
  3. import javax.inject.Inject;
  4. import javax.validation.constraints.NotNull;
  5. import org.hibernate.validator.constraints.Email;
  6. import org.jboss.logging.Logger;
  7. import es.imserso.sede.data.TramiteRepository;
  8. import es.imserso.sede.data.dto.solicitud.SolicitudDTOI;
  9. import es.imserso.sede.model.EventMessage;
  10. import es.imserso.sede.model.Solicitud;
  11. import es.imserso.sede.service.registration.RegistrationException;
  12. import es.imserso.sede.service.registration.event.RegistrationPhase;
  13. import es.imserso.sede.service.registration.event.RegistrationPhaseEvent;
  14. import es.imserso.sede.service.registration.event.RegistrationResult;
  15. import es.imserso.sede.util.Utils;
  16. import es.imserso.sede.util.exception.SedeException;
  17. import es.imserso.sede.util.exception.ValidationException;
  18. /**
  19. * Clase que extenderá cualquier implementación de SolicitudRegistrationI para
  20. * registrar una solicitud.
  21. * <p>
  22. * Invoca secuencialmente a las distintas fases necesarias para el registro de
  23. * una solicitud.
  24. * <p>
  25. * Cada implementación de esta clase sobreescribirá las fases que necesite para
  26. * registrar la solicitud.
  27. * <p>
  28. * Es muy aconsejable que los métodos sobreescritos de las distintas fases
  29. * implementen la llamada super.{metodo}() para que se lancen los eventos
  30. * correspondientes.
  31. * <p>
  32. *
  33. *
  34. * @author 11825775
  35. *
  36. */
  37. public class AbstractSolicitudRegistration implements SolicitudRegistrationI {
  38. protected static final String SOLICITUD_VALIDADA_CORRECTAMENTE = "Solicitud validada correctamente!";
  39. protected static final String SOLICITUD_CONVERTIDA_A_PDF = "Solicitud convertida a pdf!";
  40. protected static final String SOLICITUD_DADA_DE_ALTA_EN_REGISTRO = "La solicitud ha sido dada de alta en el registro!";
  41. protected static final String JUSTIFICANTE_GENERADO = "justificante generado!";
  42. protected static final String JUSTIFICANTE_FIRMADO = "justificante firmado!";
  43. protected static final String JUSTIFICANTE_REGISTRADO = "justificante registrado!";
  44. @Inject
  45. private Logger log;
  46. @Inject
  47. protected Event<RegistrationPhaseEvent> registrationPhaseEvent;
  48. @Inject
  49. protected Event<EventMessage> registrationEvent;
  50. @Inject
  51. protected Event<RegistrationResult> registrationResultEvent;
  52. @Inject
  53. protected TramiteRepository tramiteRepository;
  54. /**
  55. * Instancia del dto con la que vamos a trabajar.
  56. */
  57. protected SolicitudDTOI dtoInstance;
  58. /**
  59. * Instancia de Solicitud con la que vamos a trabajar creada a partir del dto.
  60. */
  61. protected Solicitud solicitudInstance;
  62. /**
  63. * pdf generado a partir de los datos del dto
  64. */
  65. protected byte[] solicitudPdf;
  66. /**
  67. * Justificante generado
  68. */
  69. protected byte[] receipt;
  70. /**
  71. * Justificante generado y firmado
  72. */
  73. protected byte[] signedReceipt;
  74. /*
  75. * (non-Javadoc)
  76. *
  77. * @see es.imserso.sede.service.SolicitudRegistrationI#persist()
  78. */
  79. @Override
  80. public Solicitud register(@NotNull SolicitudDTOI dto) throws ValidationException, RegistrationException {
  81. log.debug("se va a registrar la solicitud...");
  82. try {
  83. // asignamos la solicitud a la instancia que vamos a manejar en la clase
  84. dtoInstance = dto;
  85. executePhases();
  86. log.info("solicitud registrada satisfactoriamente!");
  87. registrationResultEvent.fire(new RegistrationResult(RegistrationResult.Result.RESULT_OK));
  88. } catch (Exception e) {
  89. String errmsg = String.format("Error durante el registro de la solicitud: %s",
  90. Utils.getExceptionMessage(e));
  91. registrationPhaseEvent.fire(new RegistrationPhaseEvent(RegistrationPhase.AFTER_VALIDATION, errmsg));
  92. // propagamos la excepción
  93. throw e;
  94. }
  95. return solicitudInstance;
  96. }
  97. /**
  98. * Ejecuta cada fase del registro de una solicitud en la Sede Electrónica
  99. *
  100. * @throws ValidationException
  101. * si no ha pasado las validaciones
  102. * @throws RegistrationException
  103. * si ha ocurrido cualquier problema al registrar la solicitud en la
  104. * Sede
  105. */
  106. protected void executePhases() throws RegistrationException, ValidationException {
  107. beforeValidation();
  108. validate();
  109. afterValidation();
  110. // convertimos la solicitud en pdf
  111. beforeConvertToPdf();
  112. convertToPdf();
  113. afterConvertToPdf();
  114. // persistimos la solicitud en la BBDD
  115. beforePersistOnBBDD();
  116. persistOnBBDD();
  117. afterPersistOnBBDD();
  118. // persistimos la solicitud en el registro
  119. beforePersistOnRegister();
  120. persistOnRegistry();
  121. afterPersistOnRegister();
  122. // generamos el justificante
  123. generateReceipt();
  124. // firmamos el justificante
  125. signReceipt();
  126. // persistimos el justificante en el registro
  127. beforePersistReceiptOnRegister();
  128. persistReceiptOnRegister();
  129. afterPersistReceiptOnRegister();
  130. // actualizamos la solicitud en la BBDD
  131. beforeUpdateOnBBDD();
  132. updateOnBBDD();
  133. afterUpdateOnBBDD();
  134. }
  135. /**
  136. * antes de validar la solicitud
  137. *
  138. * @throws RegistrationException
  139. */
  140. protected void beforeValidation() throws ValidationException {
  141. registrationPhaseEvent.fire(new RegistrationPhaseEvent(RegistrationPhase.BEFORE_VALIDATION));
  142. }
  143. /**
  144. * valida la solicitud
  145. *
  146. * @throws RegistrationException
  147. */
  148. protected void validate() throws ValidationException {
  149. registrationPhaseEvent.fire(new RegistrationPhaseEvent(RegistrationPhase.VALIDATION));
  150. }
  151. /**
  152. * tras validar la solicitud
  153. *
  154. * @throws RegistrationException
  155. */
  156. protected void afterValidation() throws ValidationException {
  157. registrationPhaseEvent.fire(new RegistrationPhaseEvent(RegistrationPhase.AFTER_VALIDATION));
  158. }
  159. /**
  160. * Antes de convertir la solicitud a pdf
  161. *
  162. * @throws RegistrationException
  163. */
  164. protected void beforeConvertToPdf() throws RegistrationException {
  165. registrationPhaseEvent.fire(new RegistrationPhaseEvent(RegistrationPhase.BEFORE_CONVERT_TO_PDF));
  166. }
  167. /**
  168. * Convierte la solicitud a pdf
  169. *
  170. * @throws RegistrationException
  171. */
  172. protected void convertToPdf() throws RegistrationException {
  173. registrationPhaseEvent.fire(new RegistrationPhaseEvent(RegistrationPhase.CONVERT_TO_PDF));
  174. }
  175. /**
  176. * Después de convertir la solicitud a pdf
  177. *
  178. * @throws RegistrationException
  179. */
  180. protected void afterConvertToPdf() throws RegistrationException {
  181. registrationPhaseEvent.fire(new RegistrationPhaseEvent(RegistrationPhase.AFTER_CONVERT_TO_PDF));
  182. }
  183. /**
  184. * Antes de persistir la solicitud en la base de datos
  185. *
  186. * @throws RegistrationException
  187. */
  188. protected void beforePersistOnBBDD() throws RegistrationException {
  189. registrationPhaseEvent.fire(new RegistrationPhaseEvent(RegistrationPhase.BEFORE_PERSIST_ON_BBDD));
  190. }
  191. /**
  192. * Persiste la solicitud en la base de datos
  193. *
  194. * @throws RegistrationException
  195. */
  196. protected void persistOnBBDD() throws RegistrationException {
  197. registrationPhaseEvent.fire(new RegistrationPhaseEvent(RegistrationPhase.PERSIST_ON_BBDD));
  198. }
  199. /**
  200. * Después de persistir la solicitud en la base de datos
  201. *
  202. * @throws RegistrationException
  203. */
  204. protected void afterPersistOnBBDD() throws RegistrationException {
  205. registrationPhaseEvent.fire(new RegistrationPhaseEvent(RegistrationPhase.AFTER_PERSIST_ON_BBDD));
  206. }
  207. /**
  208. * Antes de dar de alta la solicitud en el registro electrónico
  209. *
  210. * @throws RegistrationException
  211. */
  212. protected void beforePersistOnRegister() throws RegistrationException {
  213. registrationPhaseEvent.fire(new RegistrationPhaseEvent(RegistrationPhase.BEFORE_PERSIST_ON_REGISTER));
  214. }
  215. /**
  216. * Da de alta la solicitud en el registro electrónico
  217. *
  218. * @throws RegistrationException
  219. * @throws SedeException
  220. */
  221. protected void persistOnRegistry() throws RegistrationException {
  222. registrationPhaseEvent.fire(new RegistrationPhaseEvent(RegistrationPhase.PERSIST_ON_REGISTER));
  223. }
  224. /**
  225. * Después de dar de alta la solicitud en el registro electrónico
  226. *
  227. * @throws RegistrationException
  228. */
  229. protected void afterPersistOnRegister() throws RegistrationException {
  230. registrationPhaseEvent.fire(new RegistrationPhaseEvent(RegistrationPhase.AFTER_PERSIST_ON_REGISTER));
  231. }
  232. /**
  233. * Genera el Justificante.
  234. *
  235. * @throws RegistrationException
  236. */
  237. protected void generateReceipt() throws RegistrationException {
  238. registrationPhaseEvent.fire(new RegistrationPhaseEvent(RegistrationPhase.GENERATE_RECEIPT));
  239. }
  240. /**
  241. * Firma el Justificante.
  242. *
  243. * @throws RegistrationException
  244. */
  245. protected void signReceipt() throws RegistrationException {
  246. registrationPhaseEvent.fire(new RegistrationPhaseEvent(RegistrationPhase.SIGN_RECEIPT));
  247. }
  248. /**
  249. * Antes de guardar el Justificante en el registro electrónico.
  250. *
  251. * @throws RegistrationException
  252. */
  253. protected void beforePersistReceiptOnRegister() throws RegistrationException {
  254. registrationPhaseEvent.fire(new RegistrationPhaseEvent(RegistrationPhase.BEFORE_PERSIST_RECEIPT_ON_REGISTER));
  255. }
  256. /**
  257. * Guarda el Justificante en el registro electrónico.
  258. *
  259. * @throws RegistrationException
  260. */
  261. protected void persistReceiptOnRegister() throws RegistrationException {
  262. registrationPhaseEvent.fire(new RegistrationPhaseEvent(RegistrationPhase.PERSIST_RECEIPT_ON_REGISTER));
  263. }
  264. /**
  265. * Después de guardar el Justificante en el registro electrónico.
  266. *
  267. * @throws RegistrationException
  268. */
  269. protected void afterPersistReceiptOnRegister() throws RegistrationException {
  270. registrationPhaseEvent.fire(new RegistrationPhaseEvent(RegistrationPhase.AFTER_PERSIST_RECEIPT_ON_REGISTER));
  271. }
  272. /**
  273. * Antes de actualizar la solicitud en la base de datos
  274. *
  275. * @throws RegistrationException
  276. */
  277. protected void beforeUpdateOnBBDD() throws RegistrationException {
  278. registrationPhaseEvent.fire(new RegistrationPhaseEvent(RegistrationPhase.BEFORE_UPDATE_ON_BBDD));
  279. }
  280. /**
  281. * Actualiza la solicitud en la base de datos
  282. *
  283. * @throws RegistrationException
  284. */
  285. protected void updateOnBBDD() throws RegistrationException {
  286. registrationPhaseEvent.fire(new RegistrationPhaseEvent(RegistrationPhase.UPDATE_ON_BBDD));
  287. }
  288. /**
  289. * Después de actualizar la solicitud en la base de datos
  290. *
  291. * @throws RegistrationException
  292. */
  293. protected void afterUpdateOnBBDD() throws RegistrationException {
  294. registrationPhaseEvent.fire(new RegistrationPhaseEvent(RegistrationPhase.AFTER_UPDATE_ON_BBDD));
  295. }
  296. /**
  297. * Después de actualizar la solicitud en la base de datos
  298. *
  299. * @param sentMailTo
  300. * dirección a la que se ha enviado la confirmación
  301. * @throws RegistrationException
  302. */
  303. protected void afterUpdateOnBBDD(@Email String sentMailTo) throws RegistrationException {
  304. registrationPhaseEvent.fire(new RegistrationPhaseEvent(RegistrationPhase.AFTER_UPDATE_ON_BBDD, sentMailTo));
  305. }
  306. }