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

Crea método para hacer rollback en la vista

Es necesario tener en cuenta si se trata de un rollback de un save, un
update o un delete
parent ccbc37f8
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -42,4 +42,6 @@ public interface IRWBaseESRepository<TModel extends BaseES<?>> {
	EventApplicationResult delete(String id);

	EventApplicationResult delete(String id, String parentId);

	EventApplicationResult rollback(TModel modelToIndex, String id);
}
+33 −0
Original line number Diff line number Diff line
@@ -25,9 +25,11 @@ import org.springframework.beans.factory.annotation.Autowired;

import es.redmic.elasticsearchlib.common.repository.IRWBaseESRepository;
import es.redmic.elasticsearchlib.common.utils.ElasticPersistenceUtils;
import es.redmic.exception.data.ItemNotFoundException;
import es.redmic.models.es.common.dto.EventApplicationResult;
import es.redmic.models.es.common.model.BaseES;
import es.redmic.models.es.common.query.dto.SimpleQueryDTO;
import es.redmic.models.es.data.common.model.DataHitWrapper;

public abstract class RWDataESRepository<TModel extends BaseES<?>, TQueryDTO extends SimpleQueryDTO>
		extends RDataESRepository<TModel, TQueryDTO> implements IRWBaseESRepository<TModel> {
@@ -115,6 +117,37 @@ public abstract class RWDataESRepository<TModel extends BaseES<?>, TQueryDTO ext
		return elasticPersistenceUtils.delete(getIndex()[0], getType(), id, parentId);
	}

	@Override
	public EventApplicationResult rollback(TModel modelToIndex, String id) {

		return rollback(modelToIndex, id, null);
	}

	@SuppressWarnings("unchecked")
	public EventApplicationResult rollback(TModel modelToIndex, String id, String parentId) {

		// rollback de un insert
		if (modelToIndex == null) {
			return delete(id, parentId);
		}

		// rollback de un delete
		DataHitWrapper<?> currentRecord;
		try {
			currentRecord = findById(id, parentId);
		} catch (ItemNotFoundException e) {
			return save(modelToIndex, parentId);
		}

		// rollback de un update
		if (rollbackIsRequired((TModel) currentRecord.get_source(), modelToIndex)) {
			return update((TModel) currentRecord.get_source(), parentId);
		}
		return new EventApplicationResult(true);
	}

	protected abstract boolean rollbackIsRequired(TModel currentModel, TModel modelToIndex);

	/*
	 * Función que comprueba que las restricciones necesarias para añadir el item se
	 * cumplen. Por ejemplo que no exista el identificador, que no haya códigos