Commit afeecc1c authored by Noel Alonso's avatar Noel Alonso
Browse files

Añade componentes para manejar ediciones parciales

parent 512840ae
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -32,10 +32,12 @@ import es.redmic.atlaslib.events.layer.LayerEventFactory;
import es.redmic.atlaslib.events.layer.LayerEventTypes;
import es.redmic.atlaslib.events.layer.create.CreateLayerEvent;
import es.redmic.atlaslib.events.layer.delete.DeleteLayerEvent;
import es.redmic.atlaslib.events.layer.partialupdate.themeinspire.UpdateThemeInspireInLayerEvent;
import es.redmic.atlaslib.events.layer.refresh.RefreshLayerEvent;
import es.redmic.atlaslib.events.layer.update.UpdateLayerEvent;
import es.redmic.atlasview.mapper.layer.LayerESMapper;
import es.redmic.atlasview.mapper.layer.LayerWMSESMapper;
import es.redmic.atlasview.mapper.themeinspire.ThemeInspireESMapper;
import es.redmic.atlasview.model.layer.Layer;
import es.redmic.atlasview.service.layer.LayerESService;
import es.redmic.exception.common.ExceptionType;
@@ -154,6 +156,28 @@ public class LayerController extends DataController<Layer, LayerDTO, GeoDataQuer
		}
	}

	@KafkaHandler
	public void listen(UpdateThemeInspireInLayerEvent event) {

		EventApplicationResult result = null;

		try {
			result = service.updateThemeInspireInLayer(event.getAggregateId(),
					Mappers.getMapper(ThemeInspireESMapper.class).map(event.getThemeInspire()));
		} catch (Exception e) {
			publishFailedEvent(LayerEventFactory.getEvent(event, LayerEventTypes.UPDATE_FAILED,
					ExceptionType.INTERNAL_EXCEPTION.name(), null), layer_topic);
			return;
		}

		if (result.isSuccess()) {
			publishConfirmedEvent(new UpdateThemeInspireInLayerEvent().buildFrom(event), layer_topic);
		} else {
			publishFailedEvent(LayerEventFactory.getEvent(event, LayerEventTypes.UPDATE_FAILED,
					result.getExeptionType(), result.getExceptionArguments()), layer_topic);
		}
	}

	@KafkaHandler(isDefault = true)
	public void listenDefualt(Object event) {
	}
+25 −0
Original line number Diff line number Diff line
package es.redmic.atlasview.repository.layer;

import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;

/*-
 * #%L
 * Atlas-query-endpoint
@@ -29,6 +31,7 @@ import org.elasticsearch.action.search.MultiSearchResponse;
import org.elasticsearch.action.search.MultiSearchResponse.Item;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
@@ -39,6 +42,8 @@ import org.springframework.stereotype.Repository;
import es.redmic.atlasview.common.query.LayerQueryUtils;
import es.redmic.atlasview.model.layer.Layer;
import es.redmic.atlasview.model.layer.LayerWMS;
import es.redmic.atlasview.model.themeinspire.ThemeInspire;
import es.redmic.elasticsearchlib.common.model.JoinIndex;
import es.redmic.elasticsearchlib.common.utils.ElasticPersistenceUtils;
import es.redmic.elasticsearchlib.data.repository.RWDataESRepository;
import es.redmic.exception.common.ExceptionType;
@@ -72,6 +77,26 @@ public class LayerESRepository extends RWDataESRepository<Layer, GeoDataQueryDTO
		setInternalQuery(getLayerQuery());
	}

	@SuppressWarnings("unchecked")
	public EventApplicationResult updateThemeInspireInLayer(String layerId, ThemeInspire themeInspire) {

		Layer source = (Layer) queryById(layerId).get_source();

		JoinIndex joinIndex = source.getJoinIndex();

		XContentBuilder doc;

		try {
			doc = jsonBuilder().startObject().field("jobIndex", objectMapper.convertValue(joinIndex, Map.class))
					.field("themeInspire", objectMapper.convertValue(themeInspire, Map.class)).endObject();
		} catch (IllegalArgumentException | IOException e1) {
			LOGGER.debug("Error modificando el item con id " + layerId + " en " + getIndex()[0] + " " + getType());
			return new EventApplicationResult(ExceptionType.ES_UPDATE_DOCUMENT.toString());
		}

		return update(layerId, source.getJoinIndex().getParent(), doc);
	}

	@Override
	protected EventApplicationResult checkInsertConstraintsFulfilled(Layer modelToIndex) {

+5 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import es.redmic.atlaslib.dto.layer.LayerDTO;
import es.redmic.atlasview.mapper.layer.LayerESMapper;
import es.redmic.atlasview.model.layer.Layer;
import es.redmic.atlasview.model.layer.LayerWMS;
import es.redmic.atlasview.model.themeinspire.ThemeInspire;
import es.redmic.atlasview.repository.category.CategoryESRepository;
import es.redmic.atlasview.repository.layer.LayerESRepository;
import es.redmic.exception.common.ExceptionType;
@@ -94,6 +95,10 @@ public class LayerESService extends RDataService<Layer, LayerDTO, GeoDataQueryDT
		return repository.delete(id);
	}

	public EventApplicationResult updateThemeInspireInLayer(String id, ThemeInspire themeInspire) {
		return repository.updateThemeInspireInLayer(id, themeInspire);
	}

	/**
	 * Sobrescribe findById para realizar una query en lugar de un get. En caso
	 * contrario sería necesario pasarle el id del padre