Loading vessels-view/src/main/java/es/redmic/vesselsview/controller/VesselController.java +27 −0 Original line number Diff line number Diff line Loading @@ -16,9 +16,11 @@ import es.redmic.vesselslib.events.vessel.create.CreateVesselConfirmedEvent; import es.redmic.vesselslib.events.vessel.create.CreateVesselEvent; import es.redmic.vesselslib.events.vessel.delete.DeleteVesselConfirmedEvent; import es.redmic.vesselslib.events.vessel.delete.DeleteVesselEvent; import es.redmic.vesselslib.events.vessel.partialupdate.vesseltype.UpdateVesselTypeInVesselEvent; import es.redmic.vesselslib.events.vessel.update.UpdateVesselConfirmedEvent; import es.redmic.vesselslib.events.vessel.update.UpdateVesselEvent; import es.redmic.vesselsview.model.Vessel; import es.redmic.vesselsview.model.VesselType; import es.redmic.vesselsview.service.VesselESService; import es.redmic.vesselsview.utils.VesselEventFactory; import es.redmic.viewlib.common.controller.RWController; Loading Loading @@ -94,6 +96,31 @@ public class VesselController extends RWController<Vessel, VesselDTO, MetadataQu } } @KafkaHandler public void listen(UpdateVesselTypeInVesselEvent event) { logger.info("Modificar vesseltype en vessel"); EventApplicationResult result = null; try { result = service.updateVesselTypeInVessel(event.getAggregateId(), mapper.getMapperFacade().map(event.getVesselType(), VesselType.class)); } catch (Exception e) { publishFailedEvent( VesselEventFactory.getUpdateVesselFailedEvent(event, ExceptionType.INTERNAL_EXCEPTION.name(), null), vessel_topic); } if (result.isSuccess()) { logger.info("Vessel modificado en la vista"); publishConfirmedEvent(new UpdateVesselConfirmedEvent().buildFrom(event), vessel_topic); } else { publishFailedEvent(VesselEventFactory.getUpdateVesselFailedEvent(event, result.getExeptionType(), result.getExceptionArguments()), vessel_topic); } } @KafkaHandler public void listen(DeleteVesselEvent event) { Loading vessels-view/src/main/java/es/redmic/vesselsview/repository/VesselESRepository.java +21 −0 Original line number Diff line number Diff line package es.redmic.vesselsview.repository; import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder; import java.io.IOException; import java.util.HashMap; import java.util.Map; Loading @@ -7,6 +10,7 @@ import org.elasticsearch.action.search.MultiSearchRequestBuilder; import org.elasticsearch.action.search.MultiSearchResponse; import org.elasticsearch.action.search.MultiSearchResponse.Item; import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; Loading @@ -17,6 +21,7 @@ import es.redmic.exception.common.ExceptionType; import es.redmic.models.es.common.dto.EventApplicationResult; import es.redmic.models.es.common.query.dto.MetadataQueryDTO; import es.redmic.vesselsview.model.Vessel; import es.redmic.vesselsview.model.VesselType; import es.redmic.viewlib.data.repository.IDataRepository; @Repository Loading @@ -37,6 +42,22 @@ public class VesselESRepository extends RWDataESRepository<Vessel, MetadataQuery super(INDEX, TYPE); } @SuppressWarnings("unchecked") public EventApplicationResult updateVesselTypeInVessel(String vesselId, VesselType vesselType) { XContentBuilder doc; try { doc = jsonBuilder().startObject().field("type", objectMapper.convertValue(vesselType, Map.class)) .endObject(); } catch (IllegalArgumentException | IOException e1) { LOGGER.debug("Error modificando el item con id " + vesselId + " en " + getIndex()[0] + " " + getType()[0]); return new EventApplicationResult(ExceptionType.ES_UPDATE_DOCUMENT.toString()); } return update(vesselId, doc); } @Override protected EventApplicationResult checkInsertConstraintsFulfilled(Vessel modelToIndex) { Loading vessels-view/src/main/java/es/redmic/vesselsview/service/VesselESService.java +9 −0 Original line number Diff line number Diff line Loading @@ -3,17 +3,26 @@ package es.redmic.vesselsview.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import es.redmic.models.es.common.dto.EventApplicationResult; import es.redmic.models.es.common.query.dto.MetadataQueryDTO; import es.redmic.vesselslib.dto.VesselDTO; import es.redmic.vesselsview.model.Vessel; import es.redmic.vesselsview.model.VesselType; import es.redmic.vesselsview.repository.VesselESRepository; import es.redmic.viewlib.data.service.RWDataService; @Service public class VesselESService extends RWDataService<Vessel, VesselDTO, MetadataQueryDTO> { VesselESRepository repository; @Autowired public VesselESService(VesselESRepository repository) { super(repository); this.repository = repository; } public EventApplicationResult updateVesselTypeInVessel(String vesselId, VesselType model) { return repository.updateVesselTypeInVessel(vesselId, model); } } vessels-view/src/test/java/es/redmic/test/vesselsview/integration/handler/VesselEventHandlerTest.java +47 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ import es.redmic.vesselslib.events.vessel.create.CreateVesselFailedEvent; import es.redmic.vesselslib.events.vessel.delete.DeleteVesselConfirmedEvent; import es.redmic.vesselslib.events.vessel.delete.DeleteVesselEvent; import es.redmic.vesselslib.events.vessel.delete.DeleteVesselFailedEvent; import es.redmic.vesselslib.events.vessel.partialupdate.vesseltype.UpdateVesselTypeInVesselEvent; import es.redmic.vesselslib.events.vessel.update.UpdateVesselConfirmedEvent; import es.redmic.vesselslib.events.vessel.update.UpdateVesselEvent; import es.redmic.vesselslib.events.vessel.update.UpdateVesselFailedEvent; Loading Loading @@ -155,6 +156,37 @@ public class VesselEventHandlerTest extends DocumentationViewBaseTest { assertEquals(vessel.getName(), event.getVessel().getName()); } @Test public void sendUpdateVesselTypeInVesselEvent_UpdateItem_IfEventIsOk() throws Exception { UpdateVesselEvent event = getUpdateVesselEvent(); repository.save(mapper.getMapperFacade().map(event.getVessel(), Vessel.class)); UpdateVesselTypeInVesselEvent updateEvent = getUpdateVesselTypeInVesselEvent(); ListenableFuture<SendResult<String, Event>> future = kafkaTemplate.send(VESSEL_TOPIC, updateEvent.getAggregateId(), updateEvent); future.addCallback(new SendListener()); Event confirm = (Event) blockingQueue.poll(50, TimeUnit.SECONDS); DataHitWrapper<?> item = repository.findById(event.getAggregateId()); assertNotNull(item.get_source()); // Se restablece el estado de la vista repository.delete(event.getVessel().getId()); assertNotNull(confirm); assertEquals(VesselEventTypes.UPDATE_CONFIRMED.toString(), confirm.getType()); Vessel vessel = (Vessel) item.get_source(); assertEquals(vessel.getId(), event.getAggregateId()); assertEquals(vessel.getMmsi(), event.getVessel().getMmsi()); assertEquals(vessel.getName(), event.getVessel().getName()); assertEquals(vessel.getType().getName(), updateEvent.getVesselType().getName()); } @Test(expected = ItemNotFoundException.class) public void sendVesselDeleteEvent_DeleteItem_IfEventIsOk() throws Exception { Loading Loading @@ -353,6 +385,21 @@ public class VesselEventHandlerTest extends DocumentationViewBaseTest { return updatedEvent; } protected UpdateVesselTypeInVesselEvent getUpdateVesselTypeInVesselEvent() { UpdateVesselTypeInVesselEvent event = new UpdateVesselTypeInVesselEvent().buildFrom(getUpdateVesselEvent()); VesselDTO vessel = getVessel(); vessel.getType().setName("Nombre cambiado"); event.setVesselType(vessel.getType()); event.setAggregateId(vessel.getId()); event.setVersion(3); event.setSessionId(UUID.randomUUID().toString()); event.setUserId(USER_ID); return event; } protected DeleteVesselEvent getDeleteVesselEvent() { DeleteVesselEvent deletedEvent = new DeleteVesselEvent(); Loading Loading
vessels-view/src/main/java/es/redmic/vesselsview/controller/VesselController.java +27 −0 Original line number Diff line number Diff line Loading @@ -16,9 +16,11 @@ import es.redmic.vesselslib.events.vessel.create.CreateVesselConfirmedEvent; import es.redmic.vesselslib.events.vessel.create.CreateVesselEvent; import es.redmic.vesselslib.events.vessel.delete.DeleteVesselConfirmedEvent; import es.redmic.vesselslib.events.vessel.delete.DeleteVesselEvent; import es.redmic.vesselslib.events.vessel.partialupdate.vesseltype.UpdateVesselTypeInVesselEvent; import es.redmic.vesselslib.events.vessel.update.UpdateVesselConfirmedEvent; import es.redmic.vesselslib.events.vessel.update.UpdateVesselEvent; import es.redmic.vesselsview.model.Vessel; import es.redmic.vesselsview.model.VesselType; import es.redmic.vesselsview.service.VesselESService; import es.redmic.vesselsview.utils.VesselEventFactory; import es.redmic.viewlib.common.controller.RWController; Loading Loading @@ -94,6 +96,31 @@ public class VesselController extends RWController<Vessel, VesselDTO, MetadataQu } } @KafkaHandler public void listen(UpdateVesselTypeInVesselEvent event) { logger.info("Modificar vesseltype en vessel"); EventApplicationResult result = null; try { result = service.updateVesselTypeInVessel(event.getAggregateId(), mapper.getMapperFacade().map(event.getVesselType(), VesselType.class)); } catch (Exception e) { publishFailedEvent( VesselEventFactory.getUpdateVesselFailedEvent(event, ExceptionType.INTERNAL_EXCEPTION.name(), null), vessel_topic); } if (result.isSuccess()) { logger.info("Vessel modificado en la vista"); publishConfirmedEvent(new UpdateVesselConfirmedEvent().buildFrom(event), vessel_topic); } else { publishFailedEvent(VesselEventFactory.getUpdateVesselFailedEvent(event, result.getExeptionType(), result.getExceptionArguments()), vessel_topic); } } @KafkaHandler public void listen(DeleteVesselEvent event) { Loading
vessels-view/src/main/java/es/redmic/vesselsview/repository/VesselESRepository.java +21 −0 Original line number Diff line number Diff line package es.redmic.vesselsview.repository; import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder; import java.io.IOException; import java.util.HashMap; import java.util.Map; Loading @@ -7,6 +10,7 @@ import org.elasticsearch.action.search.MultiSearchRequestBuilder; import org.elasticsearch.action.search.MultiSearchResponse; import org.elasticsearch.action.search.MultiSearchResponse.Item; import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; Loading @@ -17,6 +21,7 @@ import es.redmic.exception.common.ExceptionType; import es.redmic.models.es.common.dto.EventApplicationResult; import es.redmic.models.es.common.query.dto.MetadataQueryDTO; import es.redmic.vesselsview.model.Vessel; import es.redmic.vesselsview.model.VesselType; import es.redmic.viewlib.data.repository.IDataRepository; @Repository Loading @@ -37,6 +42,22 @@ public class VesselESRepository extends RWDataESRepository<Vessel, MetadataQuery super(INDEX, TYPE); } @SuppressWarnings("unchecked") public EventApplicationResult updateVesselTypeInVessel(String vesselId, VesselType vesselType) { XContentBuilder doc; try { doc = jsonBuilder().startObject().field("type", objectMapper.convertValue(vesselType, Map.class)) .endObject(); } catch (IllegalArgumentException | IOException e1) { LOGGER.debug("Error modificando el item con id " + vesselId + " en " + getIndex()[0] + " " + getType()[0]); return new EventApplicationResult(ExceptionType.ES_UPDATE_DOCUMENT.toString()); } return update(vesselId, doc); } @Override protected EventApplicationResult checkInsertConstraintsFulfilled(Vessel modelToIndex) { Loading
vessels-view/src/main/java/es/redmic/vesselsview/service/VesselESService.java +9 −0 Original line number Diff line number Diff line Loading @@ -3,17 +3,26 @@ package es.redmic.vesselsview.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import es.redmic.models.es.common.dto.EventApplicationResult; import es.redmic.models.es.common.query.dto.MetadataQueryDTO; import es.redmic.vesselslib.dto.VesselDTO; import es.redmic.vesselsview.model.Vessel; import es.redmic.vesselsview.model.VesselType; import es.redmic.vesselsview.repository.VesselESRepository; import es.redmic.viewlib.data.service.RWDataService; @Service public class VesselESService extends RWDataService<Vessel, VesselDTO, MetadataQueryDTO> { VesselESRepository repository; @Autowired public VesselESService(VesselESRepository repository) { super(repository); this.repository = repository; } public EventApplicationResult updateVesselTypeInVessel(String vesselId, VesselType model) { return repository.updateVesselTypeInVessel(vesselId, model); } }
vessels-view/src/test/java/es/redmic/test/vesselsview/integration/handler/VesselEventHandlerTest.java +47 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ import es.redmic.vesselslib.events.vessel.create.CreateVesselFailedEvent; import es.redmic.vesselslib.events.vessel.delete.DeleteVesselConfirmedEvent; import es.redmic.vesselslib.events.vessel.delete.DeleteVesselEvent; import es.redmic.vesselslib.events.vessel.delete.DeleteVesselFailedEvent; import es.redmic.vesselslib.events.vessel.partialupdate.vesseltype.UpdateVesselTypeInVesselEvent; import es.redmic.vesselslib.events.vessel.update.UpdateVesselConfirmedEvent; import es.redmic.vesselslib.events.vessel.update.UpdateVesselEvent; import es.redmic.vesselslib.events.vessel.update.UpdateVesselFailedEvent; Loading Loading @@ -155,6 +156,37 @@ public class VesselEventHandlerTest extends DocumentationViewBaseTest { assertEquals(vessel.getName(), event.getVessel().getName()); } @Test public void sendUpdateVesselTypeInVesselEvent_UpdateItem_IfEventIsOk() throws Exception { UpdateVesselEvent event = getUpdateVesselEvent(); repository.save(mapper.getMapperFacade().map(event.getVessel(), Vessel.class)); UpdateVesselTypeInVesselEvent updateEvent = getUpdateVesselTypeInVesselEvent(); ListenableFuture<SendResult<String, Event>> future = kafkaTemplate.send(VESSEL_TOPIC, updateEvent.getAggregateId(), updateEvent); future.addCallback(new SendListener()); Event confirm = (Event) blockingQueue.poll(50, TimeUnit.SECONDS); DataHitWrapper<?> item = repository.findById(event.getAggregateId()); assertNotNull(item.get_source()); // Se restablece el estado de la vista repository.delete(event.getVessel().getId()); assertNotNull(confirm); assertEquals(VesselEventTypes.UPDATE_CONFIRMED.toString(), confirm.getType()); Vessel vessel = (Vessel) item.get_source(); assertEquals(vessel.getId(), event.getAggregateId()); assertEquals(vessel.getMmsi(), event.getVessel().getMmsi()); assertEquals(vessel.getName(), event.getVessel().getName()); assertEquals(vessel.getType().getName(), updateEvent.getVesselType().getName()); } @Test(expected = ItemNotFoundException.class) public void sendVesselDeleteEvent_DeleteItem_IfEventIsOk() throws Exception { Loading Loading @@ -353,6 +385,21 @@ public class VesselEventHandlerTest extends DocumentationViewBaseTest { return updatedEvent; } protected UpdateVesselTypeInVesselEvent getUpdateVesselTypeInVesselEvent() { UpdateVesselTypeInVesselEvent event = new UpdateVesselTypeInVesselEvent().buildFrom(getUpdateVesselEvent()); VesselDTO vessel = getVessel(); vessel.getType().setName("Nombre cambiado"); event.setVesselType(vessel.getType()); event.setAggregateId(vessel.getId()); event.setVersion(3); event.setSessionId(UUID.randomUUID().toString()); event.setUserId(USER_ID); return event; } protected DeleteVesselEvent getDeleteVesselEvent() { DeleteVesselEvent deletedEvent = new DeleteVesselEvent(); Loading