From c7b722fa833db68a511c4cc47d61f52a43895fa3 Mon Sep 17 00:00:00 2001 From: speckij Date: Sun, 1 Oct 2017 19:42:57 +0200 Subject: [PATCH 1/5] Added Service filter functionality in Parent Class. Added Service filter to `/stations` Endpoint [untested]. --- .../series/db/da/SessionAwareRepository.java | 19 +++++++++++++++++++ .../n52/series/db/da/StationRepository.java | 11 +++++++---- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/dao/src/main/java/org/n52/series/db/da/SessionAwareRepository.java b/dao/src/main/java/org/n52/series/db/da/SessionAwareRepository.java index 0b796f8e..39463170 100644 --- a/dao/src/main/java/org/n52/series/db/da/SessionAwareRepository.java +++ b/dao/src/main/java/org/n52/series/db/da/SessionAwareRepository.java @@ -32,6 +32,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.function.Predicate; import org.hibernate.Session; import org.n52.io.crs.CRSUtils; @@ -296,4 +297,22 @@ private void assertServiceAvailable(DescribableEntity entity) throws IllegalStat } } + protected List withServiceFilter(List allInstances, DbQuery query) { + Predicate serviceFilter = + entity -> !query.getParameters().getServices().isEmpty() && + !query.getParameters().getServices() + .contains(Long.toString(getServiceEntity(entity).getPkid())); + allInstances.removeIf(serviceFilter); + return allInstances; + } + + protected T withServiceFilter(T instance, DbQuery query) { + if (!query.getParameters().getServices().isEmpty() && + !query.getParameters().getServices() + .contains(Long.toString(getServiceEntity(instance).getPkid()))) { + return null; + } else { + return instance; + } + } } diff --git a/dao/src/main/java/org/n52/series/db/da/StationRepository.java b/dao/src/main/java/org/n52/series/db/da/StationRepository.java index d0ba1480..b471c8c8 100644 --- a/dao/src/main/java/org/n52/series/db/da/StationRepository.java +++ b/dao/src/main/java/org/n52/series/db/da/StationRepository.java @@ -81,7 +81,7 @@ public Collection searchFor(IoParameters parameters) { try { FeatureDao stationDao = createDao(session); DbQuery query = addPointLocationOnlyRestriction(getDbQuery(parameters)); - List found = stationDao.find(query); + List found = withServiceFilter(stationDao.find(query), query); return convertToSearchResults(found, query); } finally { returnSession(session); @@ -142,7 +142,7 @@ public List getAllExpanded(DbQuery parameters, Session session) t private List getAllInstances(DbQuery parameters, Session session) throws DataAccessException { FeatureDao featureDao = createDao(session); - return featureDao.getAllInstances(addPointLocationOnlyRestriction(parameters)); + return withServiceFilter(featureDao.getAllInstances(addPointLocationOnlyRestriction(parameters)), parameters); } @Override @@ -167,13 +167,16 @@ public StationOutput getInstance(String id, DbQuery parameters, Session session) private FeatureEntity getFeatureEntity(String id, DbQuery parameters, Session session) throws DataAccessException, BadRequestException { DbQuery query = addPointLocationOnlyRestriction(parameters); - return createDao(session).getInstance(parseId(id), query); + return withServiceFilter(createDao(session).getInstance(parseId(id), query), parameters); } public StationOutput getCondensedInstance(String id, DbQuery parameters, Session session) throws DataAccessException { FeatureDao featureDao = createDao(session); - FeatureEntity result = featureDao.getInstance(parseId(id), getDbQuery(IoParameters.createDefaults())); + FeatureEntity result = withServiceFilter( + featureDao.getInstance(parseId(id), getDbQuery(IoParameters.createDefaults())), + parameters + ); return createCondensed(result, parameters); } From 5412efca5e2a632b60d62a7499548de87991bba5 Mon Sep 17 00:00:00 2001 From: speckij Date: Fri, 20 Oct 2017 16:25:32 +0200 Subject: [PATCH 2/5] Refactored Service Parameter to use Generics. Added Service Parameter to all Repositories. --- .../n52/series/db/da/DatasetRepository.java | 6 +++-- .../series/db/da/GeometriesRepository.java | 13 ++++++---- .../da/HierarchicalParameterRepository.java | 6 +++-- .../n52/series/db/da/ParameterRepository.java | 14 ++++++++--- .../n52/series/db/da/PlatformRepository.java | 8 +++---- .../n52/series/db/da/ServiceRepository.java | 6 +++-- .../series/db/da/SessionAwareRepository.java | 24 ++++++++++++------- .../n52/series/db/da/StationRepository.java | 8 +++---- .../series/db/da/TimeseriesRepository.java | 12 ++++++---- 9 files changed, 61 insertions(+), 36 deletions(-) diff --git a/dao/src/main/java/org/n52/series/db/da/DatasetRepository.java b/dao/src/main/java/org/n52/series/db/da/DatasetRepository.java index d1aca959..7a1c7a16 100644 --- a/dao/src/main/java/org/n52/series/db/da/DatasetRepository.java +++ b/dao/src/main/java/org/n52/series/db/da/DatasetRepository.java @@ -139,7 +139,8 @@ private void addCondensedResults(DatasetDao< ? extends DatasetEntity> dao, List results, Session session) throws DataAccessException { - for (DatasetEntity series : dao.getAllInstances(query)) { + Iterable entities = addServiceFilter(dao.getAllInstances(query), query); + for (DatasetEntity series : entities) { results.add(createCondensed(series, query, session)); } } @@ -212,7 +213,8 @@ private void addExpandedResults(DatasetDao< ? extends DatasetEntity> dao, List results, Session session) throws DataAccessException { - for (DatasetEntity series : dao.getAllInstances(query)) { + Iterable entities = addServiceFilter(dao.getAllInstances(query), query); + for (DatasetEntity series : entities) { results.add(createExpanded(series, query, session)); } } diff --git a/dao/src/main/java/org/n52/series/db/da/GeometriesRepository.java b/dao/src/main/java/org/n52/series/db/da/GeometriesRepository.java index 5873962e..d16d266e 100644 --- a/dao/src/main/java/org/n52/series/db/da/GeometriesRepository.java +++ b/dao/src/main/java/org/n52/series/db/da/GeometriesRepository.java @@ -190,7 +190,7 @@ private GeometryInfo getPlatformLocationGeometry(String id, DbQuery parameters, private FeatureEntity getFeatureEntity(String id, DbQuery parameters, Session session) throws DataAccessException { FeatureDao dao = createFeatureDao(session); long geometryId = Long.parseLong(GeometryType.extractId(id)); - return dao.getInstance(geometryId, parameters); + return addServiceFilter(dao.getInstance(geometryId, parameters), parameters); } private List getAllSites(DbQuery parameters, Session session, boolean expanded) @@ -200,7 +200,8 @@ private List getAllSites(DbQuery parameters, Session session, bool DbQuery siteQuery = dbQueryFactory.createFrom(parameters.getParameters() .replaceWith(Parameters.FILTER_PLATFORM_TYPES, "stationary")); - for (FeatureEntity featureEntity : dao.getAllInstances(siteQuery)) { + Iterable entities = addServiceFilter(dao.getAllInstances(siteQuery), parameters); + for (FeatureEntity featureEntity : entities) { GeometryInfo geometryInfo = createSite(featureEntity, parameters, expanded); if (geometryInfo != null) { geometryInfoList.add(geometryInfo); @@ -224,7 +225,8 @@ private Collection getAllTracks(DbQuery parameters, Session sessio DbQuery trackQuery = dbQueryFactory.createFrom(parameters.getParameters() .replaceWith(Parameters.FILTER_PLATFORM_TYPES, "mobile")); - for (FeatureEntity featureEntity : featureDao.getAllInstances(trackQuery)) { + List entities = addServiceFilter(featureDao.getAllInstances(trackQuery), parameters); + for (FeatureEntity featureEntity : entities) { geometryInfoList.add(createTrack(featureEntity, parameters, expanded, session)); } return geometryInfoList; @@ -335,8 +337,9 @@ private PlatformOutput getPlatfom(FeatureEntity entity, DbQuery parameters) thro .extendWith(Parameters.FEATURES, String.valueOf(entity.getPkid())) .extendWith(Parameters.FILTER_PLATFORM_TYPES, - "all")); - + "all") + .removeAllOf(Parameters.SERVICES) + .removeAllOf(Parameters.SERVICE)); List platforms = platformRepository.getAllCondensed(platformQuery); return platforms.iterator() .next(); diff --git a/dao/src/main/java/org/n52/series/db/da/HierarchicalParameterRepository.java b/dao/src/main/java/org/n52/series/db/da/HierarchicalParameterRepository.java index a346a832..a6d64439 100644 --- a/dao/src/main/java/org/n52/series/db/da/HierarchicalParameterRepository.java +++ b/dao/src/main/java/org/n52/series/db/da/HierarchicalParameterRepository.java @@ -46,7 +46,8 @@ public abstract class HierarchicalParameterRepository createExpanded(Iterable entities, DbQuery query, Session session) throws DataAccessException { Set results = new HashSet<>(); - if (entities != null) { + if (entities != null && entities.iterator().hasNext()) { + addServiceFilter(entities, query); for (E entity : entities) { O result = createExpanded(entity, query, session); results.add(result); @@ -58,7 +59,8 @@ protected List createExpanded(Iterable entities, DbQuery query, Session se @Override protected List createCondensed(Iterable entities, DbQuery query, Session session) { Set results = new HashSet<>(); - if (entities != null) { + if (entities != null && entities.iterator().hasNext()) { + addServiceFilter(entities, query); for (E entity : entities) { O result = createCondensed(entity, query, session); results.add(result); diff --git a/dao/src/main/java/org/n52/series/db/da/ParameterRepository.java b/dao/src/main/java/org/n52/series/db/da/ParameterRepository.java index 514093dd..6aea916c 100644 --- a/dao/src/main/java/org/n52/series/db/da/ParameterRepository.java +++ b/dao/src/main/java/org/n52/series/db/da/ParameterRepository.java @@ -88,7 +88,14 @@ public List getAllCondensed(DbQuery query, Session session) throws DataAccess protected List createCondensed(Iterable allInstances, DbQuery query, Session session) { List results = new ArrayList<>(); - for (E entity : allInstances) { + Iterable entities = addServiceFilter(allInstances, query); + for (E entity : entities) { + /* + * there are cases where entity does not match a filter + * which could not be added to a db criteria, e.g. spatial + * filters on mobile platforms (last location is calculated + * after db query has been finished already) + */ results.add(createCondensed(entity, query, session)); } return results; @@ -131,11 +138,12 @@ public List getAllExpanded(DbQuery query, Session session) throws DataAccessE protected List createExpanded(Iterable allInstances, DbQuery query, Session session) throws DataAccessException { List results = new ArrayList<>(); - for (E entity : allInstances) { + Iterable entities = addServiceFilter(allInstances, query); + for (E entity : entities) { O instance = createExpanded(entity, query, session); if (instance != null) { /* - * there are cases where entities does not match a filter + * there are cases where entity does not match a filter * which could not be added to a db criteria, e.g. spatial * filters on mobile platforms (last location is calculated * after db query has been finished already) diff --git a/dao/src/main/java/org/n52/series/db/da/PlatformRepository.java b/dao/src/main/java/org/n52/series/db/da/PlatformRepository.java index 2f39c283..772ea336 100644 --- a/dao/src/main/java/org/n52/series/db/da/PlatformRepository.java +++ b/dao/src/main/java/org/n52/series/db/da/PlatformRepository.java @@ -153,9 +153,9 @@ public PlatformOutput getInstance(String id, DbQuery query, Session session) thr PlatformEntity getEntity(String id, DbQuery parameters, Session session) throws DataAccessException { if (PlatformType.isStationaryId(id)) { - return getStation(id, parameters, session); + return addServiceFilter(getStation(id, parameters, session), parameters); } else { - return getPlatform(id, parameters, session); + return addServiceFilter(getPlatform(id, parameters, session), parameters); } } @@ -266,10 +266,10 @@ protected List getAllInstances(DbQuery query, Session session) t List platforms = new ArrayList<>(); FilterResolver filterResolver = query.getFilterResolver(); if (filterResolver.shallIncludeStationaryPlatformTypes()) { - platforms.addAll(getAllStationary(query, session)); + platforms.addAll(addServiceFilter(getAllStationary(query, session), query)); } if (filterResolver.shallIncludeMobilePlatformTypes()) { - platforms.addAll(getAllMobile(query, session)); + platforms.addAll(addServiceFilter(getAllMobile(query, session), query)); } return platforms; } diff --git a/dao/src/main/java/org/n52/series/db/da/ServiceRepository.java b/dao/src/main/java/org/n52/series/db/da/ServiceRepository.java index f753bd5b..7e17f33d 100644 --- a/dao/src/main/java/org/n52/series/db/da/ServiceRepository.java +++ b/dao/src/main/java/org/n52/series/db/da/ServiceRepository.java @@ -29,8 +29,9 @@ package org.n52.series.db.da; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -138,7 +139,7 @@ public Collection searchFor(IoParameters parameters) { @Override protected List getAllInstances(DbQuery parameters, Session session) throws DataAccessException { return serviceEntity != null - ? Collections.singletonList(serviceEntity) + ? new ArrayList(Arrays.asList(serviceEntity)) : createDao(session).getAllInstances(parameters); } @@ -148,6 +149,7 @@ protected ServiceEntity getEntity(Long id, AbstractDao dao, DbQue ServiceEntity result = !isConfiguredServiceInstance(id) ? dao.getInstance(id, query) : serviceEntity; + addServiceFilter(result, query); if (result == null) { throw new ResourceNotFoundException("Resource with id '" + id + "' could not be found."); } diff --git a/dao/src/main/java/org/n52/series/db/da/SessionAwareRepository.java b/dao/src/main/java/org/n52/series/db/da/SessionAwareRepository.java index 39463170..c944e25b 100644 --- a/dao/src/main/java/org/n52/series/db/da/SessionAwareRepository.java +++ b/dao/src/main/java/org/n52/series/db/da/SessionAwareRepository.java @@ -32,7 +32,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.function.Predicate; +import java.util.Iterator; import org.hibernate.Session; import org.n52.io.crs.CRSUtils; @@ -297,16 +297,22 @@ private void assertServiceAvailable(DescribableEntity entity) throws IllegalStat } } - protected List withServiceFilter(List allInstances, DbQuery query) { - Predicate serviceFilter = - entity -> !query.getParameters().getServices().isEmpty() && - !query.getParameters().getServices() - .contains(Long.toString(getServiceEntity(entity).getPkid())); - allInstances.removeIf(serviceFilter); + protected > V addServiceFilter(V allInstances, DbQuery query) { + Iterator iterator = allInstances.iterator(); + while (iterator.hasNext()) { + T element = (T) iterator.next(); + if (!query.getParameters().getServices().isEmpty() && + !query.getParameters() + .getServices() + .contains(Long.toString(getServiceEntity(element) + .getPkid()))) { + iterator.remove(); + } + } return allInstances; } - - protected T withServiceFilter(T instance, DbQuery query) { + + protected T addServiceFilter(T instance, DbQuery query) { if (!query.getParameters().getServices().isEmpty() && !query.getParameters().getServices() .contains(Long.toString(getServiceEntity(instance).getPkid()))) { diff --git a/dao/src/main/java/org/n52/series/db/da/StationRepository.java b/dao/src/main/java/org/n52/series/db/da/StationRepository.java index b471c8c8..8ecdb5bf 100644 --- a/dao/src/main/java/org/n52/series/db/da/StationRepository.java +++ b/dao/src/main/java/org/n52/series/db/da/StationRepository.java @@ -81,7 +81,7 @@ public Collection searchFor(IoParameters parameters) { try { FeatureDao stationDao = createDao(session); DbQuery query = addPointLocationOnlyRestriction(getDbQuery(parameters)); - List found = withServiceFilter(stationDao.find(query), query); + List found = addServiceFilter(stationDao.find(query), query); return convertToSearchResults(found, query); } finally { returnSession(session); @@ -142,7 +142,7 @@ public List getAllExpanded(DbQuery parameters, Session session) t private List getAllInstances(DbQuery parameters, Session session) throws DataAccessException { FeatureDao featureDao = createDao(session); - return withServiceFilter(featureDao.getAllInstances(addPointLocationOnlyRestriction(parameters)), parameters); + return addServiceFilter(featureDao.getAllInstances(addPointLocationOnlyRestriction(parameters)), parameters); } @Override @@ -167,13 +167,13 @@ public StationOutput getInstance(String id, DbQuery parameters, Session session) private FeatureEntity getFeatureEntity(String id, DbQuery parameters, Session session) throws DataAccessException, BadRequestException { DbQuery query = addPointLocationOnlyRestriction(parameters); - return withServiceFilter(createDao(session).getInstance(parseId(id), query), parameters); + return addServiceFilter(createDao(session).getInstance(parseId(id), query), parameters); } public StationOutput getCondensedInstance(String id, DbQuery parameters, Session session) throws DataAccessException { FeatureDao featureDao = createDao(session); - FeatureEntity result = withServiceFilter( + FeatureEntity result = addServiceFilter( featureDao.getInstance(parseId(id), getDbQuery(IoParameters.createDefaults())), parameters ); diff --git a/dao/src/main/java/org/n52/series/db/da/TimeseriesRepository.java b/dao/src/main/java/org/n52/series/db/da/TimeseriesRepository.java index e229ff74..b031efe5 100644 --- a/dao/src/main/java/org/n52/series/db/da/TimeseriesRepository.java +++ b/dao/src/main/java/org/n52/series/db/da/TimeseriesRepository.java @@ -137,7 +137,8 @@ public List getAllCondensed(DbQuery query) throws Data public List getAllCondensed(DbQuery query, Session session) throws DataAccessException { List results = new ArrayList<>(); DatasetDao seriesDao = createDao(session); - for (QuantityDatasetEntity timeseries : seriesDao.getAllInstances(query)) { + Iterable entities = addServiceFilter(seriesDao.getAllInstances(query), query); + for (QuantityDatasetEntity timeseries : entities) { results.add(createCondensed(timeseries, query, session)); } return results; @@ -157,7 +158,8 @@ public List getAllExpanded(DbQuery query) throws DataA public List getAllExpanded(DbQuery query, Session session) throws DataAccessException { List results = new ArrayList<>(); DatasetDao seriesDao = createDao(session); - for (QuantityDatasetEntity timeseries : seriesDao.getAllInstances(query)) { + Iterable entities = addServiceFilter(seriesDao.getAllInstances(query), query); + for (QuantityDatasetEntity timeseries : entities) { results.add(createExpanded(timeseries, query, session)); } return results; @@ -174,14 +176,14 @@ public TimeseriesMetadataOutput getInstance(String timeseriesId, DbQuery dbQuery } @Override - public TimeseriesMetadataOutput getInstance(String timeseriesId, DbQuery dbQuery, Session session) + public TimeseriesMetadataOutput getInstance(String timeseriesId, DbQuery query, Session session) throws DataAccessException { DatasetDao seriesDao = createDao(session); - QuantityDatasetEntity result = seriesDao.getInstance(parseId(timeseriesId), dbQuery); + QuantityDatasetEntity result = addServiceFilter(seriesDao.getInstance(parseId(timeseriesId), query), query); if (result == null) { throw new ResourceNotFoundException("Resource with id '" + timeseriesId + "' could not be found."); } - return createExpanded(result, dbQuery, session); + return createExpanded(result, query, session); } protected TimeseriesMetadataOutput createExpanded(QuantityDatasetEntity series, DbQuery query, Session session) From 213a32814fa30fc3be4446b729deaf609516df6d Mon Sep 17 00:00:00 2001 From: speckij Date: Thu, 26 Oct 2017 11:04:03 +0200 Subject: [PATCH 3/5] minor code style fix. --- .../main/java/org/n52/series/db/da/SessionAwareRepository.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dao/src/main/java/org/n52/series/db/da/SessionAwareRepository.java b/dao/src/main/java/org/n52/series/db/da/SessionAwareRepository.java index f143263f..95cc39b5 100644 --- a/dao/src/main/java/org/n52/series/db/da/SessionAwareRepository.java +++ b/dao/src/main/java/org/n52/series/db/da/SessionAwareRepository.java @@ -309,8 +309,7 @@ protected > V addServiceFilte if (!query.getParameters().getServices().isEmpty() && !query.getParameters() .getServices() - .contains(Long.toString(getServiceEntity(element) - .getPkid()))) { + .contains(Long.toString(getServiceEntity(element).getPkid()))) { iterator.remove(); } } From da0f516c3e0e979af939e1509de49041fe09f805 Mon Sep 17 00:00:00 2001 From: speckij Date: Thu, 26 Oct 2017 12:20:25 +0200 Subject: [PATCH 4/5] Revert implementation of Service Parameter on Endpoints where it is not to be implemented. (align docs with implementation) --- .../org/n52/series/db/da/GeometriesRepository.java | 12 ++++-------- .../java/org/n52/series/db/da/ServiceRepository.java | 6 ++---- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/dao/src/main/java/org/n52/series/db/da/GeometriesRepository.java b/dao/src/main/java/org/n52/series/db/da/GeometriesRepository.java index d16d266e..dd74e15f 100644 --- a/dao/src/main/java/org/n52/series/db/da/GeometriesRepository.java +++ b/dao/src/main/java/org/n52/series/db/da/GeometriesRepository.java @@ -190,7 +190,7 @@ private GeometryInfo getPlatformLocationGeometry(String id, DbQuery parameters, private FeatureEntity getFeatureEntity(String id, DbQuery parameters, Session session) throws DataAccessException { FeatureDao dao = createFeatureDao(session); long geometryId = Long.parseLong(GeometryType.extractId(id)); - return addServiceFilter(dao.getInstance(geometryId, parameters), parameters); + return dao.getInstance(geometryId, parameters); } private List getAllSites(DbQuery parameters, Session session, boolean expanded) @@ -200,8 +200,7 @@ private List getAllSites(DbQuery parameters, Session session, bool DbQuery siteQuery = dbQueryFactory.createFrom(parameters.getParameters() .replaceWith(Parameters.FILTER_PLATFORM_TYPES, "stationary")); - Iterable entities = addServiceFilter(dao.getAllInstances(siteQuery), parameters); - for (FeatureEntity featureEntity : entities) { + for (FeatureEntity featureEntity : dao.getAllInstances(siteQuery)) { GeometryInfo geometryInfo = createSite(featureEntity, parameters, expanded); if (geometryInfo != null) { geometryInfoList.add(geometryInfo); @@ -225,8 +224,7 @@ private Collection getAllTracks(DbQuery parameters, Session sessio DbQuery trackQuery = dbQueryFactory.createFrom(parameters.getParameters() .replaceWith(Parameters.FILTER_PLATFORM_TYPES, "mobile")); - List entities = addServiceFilter(featureDao.getAllInstances(trackQuery), parameters); - for (FeatureEntity featureEntity : entities) { + for (FeatureEntity featureEntity : featureDao.getAllInstances(trackQuery)) { geometryInfoList.add(createTrack(featureEntity, parameters, expanded, session)); } return geometryInfoList; @@ -337,9 +335,7 @@ private PlatformOutput getPlatfom(FeatureEntity entity, DbQuery parameters) thro .extendWith(Parameters.FEATURES, String.valueOf(entity.getPkid())) .extendWith(Parameters.FILTER_PLATFORM_TYPES, - "all") - .removeAllOf(Parameters.SERVICES) - .removeAllOf(Parameters.SERVICE)); + "all")); List platforms = platformRepository.getAllCondensed(platformQuery); return platforms.iterator() .next(); diff --git a/dao/src/main/java/org/n52/series/db/da/ServiceRepository.java b/dao/src/main/java/org/n52/series/db/da/ServiceRepository.java index 7e17f33d..f753bd5b 100644 --- a/dao/src/main/java/org/n52/series/db/da/ServiceRepository.java +++ b/dao/src/main/java/org/n52/series/db/da/ServiceRepository.java @@ -29,9 +29,8 @@ package org.n52.series.db.da; -import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -139,7 +138,7 @@ public Collection searchFor(IoParameters parameters) { @Override protected List getAllInstances(DbQuery parameters, Session session) throws DataAccessException { return serviceEntity != null - ? new ArrayList(Arrays.asList(serviceEntity)) + ? Collections.singletonList(serviceEntity) : createDao(session).getAllInstances(parameters); } @@ -149,7 +148,6 @@ protected ServiceEntity getEntity(Long id, AbstractDao dao, DbQue ServiceEntity result = !isConfiguredServiceInstance(id) ? dao.getInstance(id, query) : serviceEntity; - addServiceFilter(result, query); if (result == null) { throw new ResourceNotFoundException("Resource with id '" + id + "' could not be found."); } From 8f879049667a5ea6f85caf550d212e125dd8da4b Mon Sep 17 00:00:00 2001 From: speckij Date: Thu, 26 Oct 2017 12:43:14 +0200 Subject: [PATCH 5/5] Added handling for /services Endpoint where Service parameter is not wanted but no custom createCondensed/createExpanded is implemented. --- .../java/org/n52/series/db/da/SessionAwareRepository.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/dao/src/main/java/org/n52/series/db/da/SessionAwareRepository.java b/dao/src/main/java/org/n52/series/db/da/SessionAwareRepository.java index 95cc39b5..57194a2d 100644 --- a/dao/src/main/java/org/n52/series/db/da/SessionAwareRepository.java +++ b/dao/src/main/java/org/n52/series/db/da/SessionAwareRepository.java @@ -310,7 +310,11 @@ protected > V addServiceFilte !query.getParameters() .getServices() .contains(Long.toString(getServiceEntity(element).getPkid()))) { - iterator.remove(); + try { + iterator.remove(); + } catch (UnsupportedOperationException e) { + // dao returning immutable list does not want serviceFilter to be added + } } } return allInstances;