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

Merge branch 'dev' into 'master'

Comprueba si existe por el id de dataDefinition

See merge request redmic-project/server/library/db!3
parents 5458e6c8 cefd9122
Loading
Loading
Loading
Loading
+8 −9
Original line number Diff line number Diff line
@@ -13,7 +13,6 @@ import javax.persistence.Table;
import es.redmic.databaselib.common.model.LongModel;
import es.redmic.db.maintenance.parameter.model.DataDefinition;


/**
 * The persistent class for the measurement database table.
 * 
@@ -27,11 +26,11 @@ public class FixedMeasurement extends LongModel implements Serializable {
	private double z;

	// bi-directional many-to-one association to Surveystation
	@ManyToOne
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "fixedsurveyid", nullable = false)
	private FixedSurvey fixedSurvey;

	@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
	@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	@JoinColumn(name = "datadefinitionid", nullable = false, unique = true)
	private DataDefinition dataDefinition;

+5 −0
Original line number Diff line number Diff line
package es.redmic.db.geodata.properties.fixedsurvey.repository;

import java.util.List;

import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

@@ -17,4 +19,7 @@ public interface FixedMeasurementRepository extends BaseRepository<FixedMeasurem
	FixedMeasurement findByDataDefinitionId(@Param("id") Long dataDefinitionId);

	FixedMeasurement findByDataDefinition(DataDefinition dataDefinition);

	@Query("select s from FixedMeasurement s where s.fixedSurvey.id = :id")
	List<FixedMeasurement> findByFixedSurveyId(@Param("id") Long fixedSurveyId);
}
+31 −6
Original line number Diff line number Diff line
@@ -118,11 +118,12 @@ public abstract class GeoSeriesService<TModel extends FixedSurvey, TDTO extends
				// Si el dataDefinition no es null, se espera que exista el Measurement sin
				// modificar la z
				fixedMeasurement = getFixedMeasurement(model.getId(), dataDefinitionDTO.getId(), z);
				// El measurement, en caso de no existir, lanza
				if (fixedMeasurement == null)
					throw new DBNotFoundException("FixedMeasurement",
							"FixedSurveyId=" + model.getId() + " z=" + dataDefinitionDTO.getZ());

				// Si se ha modificado la z se debe modificar el fixedMeasurement
				if (fixedMeasurement == null) {
					fixedMeasurement = fixedMeasurementRepository.findByDataDefinitionId(dataDefinitionDTO.getId());
					fixedMeasurement.setZ(z);
					fixedMeasurement = fixedMeasurementRepository.save(fixedMeasurement);
				}
				dataDefinition = dataDefinitionService.updateModel(dataDefinition);
			}
			DataDefinitionSeriesDTO dataDefinitionItem = factory.getMapperFacade().map(dataDefinition,
@@ -139,11 +140,35 @@ public abstract class GeoSeriesService<TModel extends FixedSurvey, TDTO extends
			measurementItem.setUnit(unitDto);
			measurementsResult.add(measurementItem);
		}
		// TODO: busca dataDefinition que no lleguen en dto y los elimina.
		// busca dataDefinition que no lleguen en la request y los elimina.
		deleteDataDefinitions(source.getProperties().getSite().getId(), measurementsResult);
		target.getProperties().setMeasurements(measurementsResult);
		return target;
	}

	private void deleteDataDefinitions(Long fixedSurveyId, List<MeasurementDTO> measurements) {

		List<FixedMeasurement> fixedMeasurements = fixedMeasurementRepository.findByFixedSurveyId(fixedSurveyId);

		for (int i = 0; i < fixedMeasurements.size(); i++) {

			boolean found = false;
			FixedMeasurement fixedMeasurement = fixedMeasurements.get(i);
			for (int j = 0; j < measurements.size(); j++) {
				if (measurements.get(j).getDataDefinition().getId()
						.equals(fixedMeasurement.getDataDefinition().getId())) {
					found = true;
					break;
				}
			}
			if (found == false) {
				Long dataDefinitionId = fixedMeasurement.getDataDefinition().getId();
				fixedMeasurementRepository.delete(fixedMeasurement);
				dataDefinitionService.delete(dataDefinitionId);
			}
		}
	}

	private ParameterUnit getParameterUnit(Long parameterId, Long unitId) {
		ParameterUnit parameterUnit = parameterUnitRepository.findByUnitAndParameter(parameterId, unitId);