Commit 5006b168 authored by Noel Alonso's avatar Noel Alonso
Browse files

Implementa método base para consultas

parent 9f9ba29a
Loading
Loading
Loading
Loading
+64 −0
Original line number Diff line number Diff line
package es.redmic.api.privatedata.service;

import java.util.ArrayList;
import java.util.List;

import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.Point;

/*-
 * #%L
 * API
@@ -25,14 +31,72 @@ import org.springframework.stereotype.Service;

import es.redmic.api.privatedata.repository.GeoFixedObservationSeriesESRepository;
import es.redmic.es.geodata.common.service.RGeoDataESService;
import es.redmic.models.es.common.DataPrefixType;
import es.redmic.models.es.common.model.ReferencesES;
import es.redmic.models.es.common.query.dto.GeoDataQueryDTO;
import es.redmic.models.es.geojson.common.model.Feature;
import es.redmic.models.es.geojson.common.model.GeoPointData;
import es.redmic.models.es.geojson.common.model.GeoSearchWrapper;
import es.redmic.models.es.geojson.geofixedstation.dto.GeoFixedTimeSeriesDTO;
import es.redmic.models.es.geojson.properties.model.GeoDataProperties;
import es.redmic.models.es.geojson.properties.model.Measurement;

@Service
public class GeoFixedObservationSeriesESService extends RGeoDataESService<GeoFixedTimeSeriesDTO, GeoPointData> {

	GeoFixedObservationSeriesESRepository repository;

	@Autowired
	public GeoFixedObservationSeriesESService(GeoFixedObservationSeriesESRepository repository) {
		super(repository);
		this.repository = repository;
	}

	public <T extends Geometry> GeoSearchWrapper<GeoDataProperties, T> findByDataDefinition(Long dataDefinitionId) {
		return repository.findByDataDefinition(dataDefinitionId);
	}

	@SuppressWarnings({ "unchecked" })
	public List<String> getDescendantsIds(List<String> parentsPath) {

		List<String> ids = new ArrayList<>();

		int size = parentsPath.size();
		List<String> paths = new ArrayList<>();
		for (int i = 0; i < size; i++) {
			String idProperty = parentsPath.get(i);
			if (idProperty.split("\\.").length == 2)
				paths.add(idProperty);
			else
				ids.add(idProperty);
		}

		if (!paths.isEmpty()) {

			GeoDataQueryDTO query = new GeoDataQueryDTO();
			query.setDataType(DataPrefixType.getPrefixTypeFromClass(typeOfTDTO));
			List<String> returnFields = new ArrayList<>();
			returnFields.add("id");
			returnFields.add("uuid");
			returnFields.add("properties");
			query.setReturnFields(returnFields);
			query.addTerm("ids", paths);

			GeoSearchWrapper<GeoDataProperties, Point> response = (GeoSearchWrapper<GeoDataProperties, Point>) repository.find(query);

			if (response != null) {
				List<Feature<GeoDataProperties, Point>> features = response.getSourceList();

				if (features.isEmpty())
					return parentsPath;

				for (int i = 0; i < features.size(); i++) {
					List<Measurement> measurements = features.get(i).getProperties().getMeasurements();
					for (int j=0; j<measurements.size(); j++)
						ids.add(measurements.get(j).getParameter().getPath());
				}
			}
		}
		return ids;
	}
}