Loading atlas-view/src/main/java/es/redmic/atlasview/controller/category/CategoryController.java +3 −0 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ public class CategoryController extends DataController<Category, CategoryDTO, Si try { result = service.save(mapper.getMapperFacade().map(event.getCategory(), Category.class)); } catch (Exception e) { e.printStackTrace(); publishFailedEvent(CategoryEventFactory.getEvent(event, CategoryEventTypes.CREATE_FAILED, ExceptionType.INTERNAL_EXCEPTION.name(), null), category_topic); return; Loading @@ -91,6 +92,7 @@ public class CategoryController extends DataController<Category, CategoryDTO, Si try { result = service.update(mapper.getMapperFacade().map(event.getCategory(), Category.class)); } catch (Exception e) { e.printStackTrace(); publishFailedEvent(CategoryEventFactory.getEvent(event, CategoryEventTypes.UPDATE_FAILED, ExceptionType.INTERNAL_EXCEPTION.name(), null), category_topic); return; Loading @@ -112,6 +114,7 @@ public class CategoryController extends DataController<Category, CategoryDTO, Si try { result = service.delete(event.getAggregateId()); } catch (Exception e) { e.printStackTrace(); publishFailedEvent(CategoryEventFactory.getEvent(event, CategoryEventTypes.DELETE_FAILED, ExceptionType.INTERNAL_EXCEPTION.name(), null), category_topic); return; Loading atlas-view/src/main/java/es/redmic/atlasview/repository/category/CategoryESRepository.java +33 −1 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import org.elasticsearch.client.RequestOptions; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.join.query.HasChildQueryBuilder; import org.elasticsearch.join.query.JoinQueryBuilders; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.springframework.stereotype.Repository; Loading Loading @@ -139,7 +140,38 @@ public class CategoryESRepository extends RWDataESRepository<Category, SimpleQue @Override protected EventApplicationResult checkDeleteConstraintsFulfilled(String modelToIndexId) { // TODO: mirar si tiene hijos HasChildQueryBuilder hasChildTerm = JoinQueryBuilders.hasChildQuery(Layer.JOIN_INDEX_NAME, QueryBuilders.matchAllQuery(), ScoreMode.None); MultiSearchRequest request = new MultiSearchRequest(); SearchSourceBuilder requestBuilderHasChild = new SearchSourceBuilder().query(hasChildTerm).size(1); request.add(new SearchRequest().indices(getIndex()).source(requestBuilderHasChild)); // @formatter:on MultiSearchResponse sr; try { sr = ESProvider.getClient().msearch(request, RequestOptions.DEFAULT); } catch (IOException e) { e.printStackTrace(); throw new ESQueryException(); } Map<String, String> arguments = new HashMap<>(); Item[] responses = sr.getResponses(); if (responses != null && responses[0].getResponse().getHits().getTotalHits() > 0) { arguments.put(ID_PROPERTY, modelToIndexId); } if (arguments.size() > 0) { // TODO: crear excepción propia return new EventApplicationResult(ExceptionType.ES_UPDATE_DOCUMENT.toString(), arguments); } return new EventApplicationResult(true); } Loading atlas-view/src/test/java/es/redmic/test/atlasview/integration/handler/CategoryEventHandlerTest.java +29 −3 Original line number Diff line number Diff line Loading @@ -22,7 +22,6 @@ package es.redmic.test.atlasview.integration.handler; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.util.Map; import java.util.UUID; Loading Loading @@ -64,12 +63,15 @@ import es.redmic.atlaslib.events.category.update.UpdateCategoryEvent; import es.redmic.atlaslib.events.category.update.UpdateCategoryFailedEvent; import es.redmic.atlasview.AtlasViewApplication; import es.redmic.atlasview.model.category.Category; import es.redmic.atlasview.model.layer.Layer; import es.redmic.atlasview.repository.category.CategoryESRepository; import es.redmic.atlasview.repository.layer.LayerESRepository; import es.redmic.brokerlib.avro.common.Event; import es.redmic.brokerlib.listener.SendListener; import es.redmic.exception.data.ItemNotFoundException; import es.redmic.models.es.data.common.model.DataHitWrapper; import es.redmic.testutils.documentation.DocumentationViewBaseTest; import es.redmic.testutils.utils.JsonToBeanTestUtil; import es.redmic.viewlib.config.MapperScanBeanItfc; @SpringBootTest(classes = { AtlasViewApplication.class }) Loading @@ -88,6 +90,9 @@ public class CategoryEventHandlerTest extends DocumentationViewBaseTest { @Autowired CategoryESRepository repository; @Autowired LayerESRepository layerRepository; protected static BlockingQueue<Object> blockingQueue; @Autowired Loading Loading @@ -259,8 +264,29 @@ public class CategoryEventHandlerTest extends DocumentationViewBaseTest { @Test public void sendCategoryDeleteEvent_PublishDeleteCategoryFailedEvent_IfNoConstraintsFulfilled() throws Exception { // TODO: Implementar cuando se metan las referencias en la vista. assertTrue(true); CategoryDTO category = getCategory(); // Guarda el que se va a borrar repository.save(mapper.getMapperFacade().map(category, Category.class)); Layer layer = (Layer) JsonToBeanTestUtil.getBean("/data/model/layer/layer.json", Layer.class); layer.getJoinIndex().setParent(category.getId()); // guarda un hijo layerRepository.save(layer, category.getId()); DeleteCategoryEvent event = getDeleteCategoryEvent(); ListenableFuture<SendResult<String, Event>> future = kafkaTemplate.send(CATEGORY_TOPIC, event.getAggregateId(), event); future.addCallback(new SendListener()); Event failed = (Event) blockingQueue.poll(50, TimeUnit.SECONDS); assertNotNull(failed); assertEquals(CategoryEventTypes.DELETE_FAILED.toString(), failed.getType()); layerRepository.delete(layer.getId(), category.getId()); repository.delete(category.getId()); } @KafkaHandler Loading Loading
atlas-view/src/main/java/es/redmic/atlasview/controller/category/CategoryController.java +3 −0 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ public class CategoryController extends DataController<Category, CategoryDTO, Si try { result = service.save(mapper.getMapperFacade().map(event.getCategory(), Category.class)); } catch (Exception e) { e.printStackTrace(); publishFailedEvent(CategoryEventFactory.getEvent(event, CategoryEventTypes.CREATE_FAILED, ExceptionType.INTERNAL_EXCEPTION.name(), null), category_topic); return; Loading @@ -91,6 +92,7 @@ public class CategoryController extends DataController<Category, CategoryDTO, Si try { result = service.update(mapper.getMapperFacade().map(event.getCategory(), Category.class)); } catch (Exception e) { e.printStackTrace(); publishFailedEvent(CategoryEventFactory.getEvent(event, CategoryEventTypes.UPDATE_FAILED, ExceptionType.INTERNAL_EXCEPTION.name(), null), category_topic); return; Loading @@ -112,6 +114,7 @@ public class CategoryController extends DataController<Category, CategoryDTO, Si try { result = service.delete(event.getAggregateId()); } catch (Exception e) { e.printStackTrace(); publishFailedEvent(CategoryEventFactory.getEvent(event, CategoryEventTypes.DELETE_FAILED, ExceptionType.INTERNAL_EXCEPTION.name(), null), category_topic); return; Loading
atlas-view/src/main/java/es/redmic/atlasview/repository/category/CategoryESRepository.java +33 −1 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import org.elasticsearch.client.RequestOptions; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.join.query.HasChildQueryBuilder; import org.elasticsearch.join.query.JoinQueryBuilders; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.springframework.stereotype.Repository; Loading Loading @@ -139,7 +140,38 @@ public class CategoryESRepository extends RWDataESRepository<Category, SimpleQue @Override protected EventApplicationResult checkDeleteConstraintsFulfilled(String modelToIndexId) { // TODO: mirar si tiene hijos HasChildQueryBuilder hasChildTerm = JoinQueryBuilders.hasChildQuery(Layer.JOIN_INDEX_NAME, QueryBuilders.matchAllQuery(), ScoreMode.None); MultiSearchRequest request = new MultiSearchRequest(); SearchSourceBuilder requestBuilderHasChild = new SearchSourceBuilder().query(hasChildTerm).size(1); request.add(new SearchRequest().indices(getIndex()).source(requestBuilderHasChild)); // @formatter:on MultiSearchResponse sr; try { sr = ESProvider.getClient().msearch(request, RequestOptions.DEFAULT); } catch (IOException e) { e.printStackTrace(); throw new ESQueryException(); } Map<String, String> arguments = new HashMap<>(); Item[] responses = sr.getResponses(); if (responses != null && responses[0].getResponse().getHits().getTotalHits() > 0) { arguments.put(ID_PROPERTY, modelToIndexId); } if (arguments.size() > 0) { // TODO: crear excepción propia return new EventApplicationResult(ExceptionType.ES_UPDATE_DOCUMENT.toString(), arguments); } return new EventApplicationResult(true); } Loading
atlas-view/src/test/java/es/redmic/test/atlasview/integration/handler/CategoryEventHandlerTest.java +29 −3 Original line number Diff line number Diff line Loading @@ -22,7 +22,6 @@ package es.redmic.test.atlasview.integration.handler; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.util.Map; import java.util.UUID; Loading Loading @@ -64,12 +63,15 @@ import es.redmic.atlaslib.events.category.update.UpdateCategoryEvent; import es.redmic.atlaslib.events.category.update.UpdateCategoryFailedEvent; import es.redmic.atlasview.AtlasViewApplication; import es.redmic.atlasview.model.category.Category; import es.redmic.atlasview.model.layer.Layer; import es.redmic.atlasview.repository.category.CategoryESRepository; import es.redmic.atlasview.repository.layer.LayerESRepository; import es.redmic.brokerlib.avro.common.Event; import es.redmic.brokerlib.listener.SendListener; import es.redmic.exception.data.ItemNotFoundException; import es.redmic.models.es.data.common.model.DataHitWrapper; import es.redmic.testutils.documentation.DocumentationViewBaseTest; import es.redmic.testutils.utils.JsonToBeanTestUtil; import es.redmic.viewlib.config.MapperScanBeanItfc; @SpringBootTest(classes = { AtlasViewApplication.class }) Loading @@ -88,6 +90,9 @@ public class CategoryEventHandlerTest extends DocumentationViewBaseTest { @Autowired CategoryESRepository repository; @Autowired LayerESRepository layerRepository; protected static BlockingQueue<Object> blockingQueue; @Autowired Loading Loading @@ -259,8 +264,29 @@ public class CategoryEventHandlerTest extends DocumentationViewBaseTest { @Test public void sendCategoryDeleteEvent_PublishDeleteCategoryFailedEvent_IfNoConstraintsFulfilled() throws Exception { // TODO: Implementar cuando se metan las referencias en la vista. assertTrue(true); CategoryDTO category = getCategory(); // Guarda el que se va a borrar repository.save(mapper.getMapperFacade().map(category, Category.class)); Layer layer = (Layer) JsonToBeanTestUtil.getBean("/data/model/layer/layer.json", Layer.class); layer.getJoinIndex().setParent(category.getId()); // guarda un hijo layerRepository.save(layer, category.getId()); DeleteCategoryEvent event = getDeleteCategoryEvent(); ListenableFuture<SendResult<String, Event>> future = kafkaTemplate.send(CATEGORY_TOPIC, event.getAggregateId(), event); future.addCallback(new SendListener()); Event failed = (Event) blockingQueue.poll(50, TimeUnit.SECONDS); assertNotNull(failed); assertEquals(CategoryEventTypes.DELETE_FAILED.toString(), failed.getType()); layerRepository.delete(layer.getId(), category.getId()); repository.delete(category.getId()); } @KafkaHandler Loading