<mavenBuild _class='hudson.maven.MavenBuild'><action></action><action _class='hudson.maven.reporters.MavenArtifactRecord'><url>https://devel.data-in-motion.biz/jenkins/job/Eclipse%20Sensinact/org.eclipse.sensinact.gateway.northbound.sensorthings$rest.gateway/33/mavenArtifacts/</url></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><artifact><displayPath>rest.gateway-0.0.2-SNAPSHOT-tests.jar</displayPath><fileName>rest.gateway-0.0.2-SNAPSHOT-tests.jar</fileName><relativePath>org.eclipse.sensinact.gateway.northbound.sensorthings/rest.gateway/0.0.2-SNAPSHOT/rest.gateway-0.0.2-SNAPSHOT-tests.jar</relativePath></artifact><artifact><displayPath>rest.gateway-0.0.2-SNAPSHOT.jar</displayPath><fileName>rest.gateway-0.0.2-SNAPSHOT.jar</fileName><relativePath>org.eclipse.sensinact.gateway.northbound.sensorthings/rest.gateway/0.0.2-SNAPSHOT/rest.gateway-0.0.2-SNAPSHOT.jar</relativePath></artifact><artifact><displayPath>rest.gateway-0.0.2-SNAPSHOT.pom</displayPath><fileName>rest.gateway-0.0.2-SNAPSHOT.pom</fileName><relativePath>org.eclipse.sensinact.gateway.northbound.sensorthings/rest.gateway/0.0.2-SNAPSHOT/rest.gateway-0.0.2-SNAPSHOT.pom</relativePath></artifact><building>false</building><displayName>rest.gateway</displayName><duration>29076</duration><estimatedDuration>29456</estimatedDuration><fullDisplayName>Eclipse Sensinact » rest.gateway rest.gateway</fullDisplayName><id>33</id><inProgress>false</inProgress><keepLog>false</keepLog><number>33</number><queueId>-1</queueId><result>SUCCESS</result><timestamp>1723130764561</timestamp><url>https://devel.data-in-motion.biz/jenkins/job/Eclipse%20Sensinact/org.eclipse.sensinact.gateway.northbound.sensorthings$rest.gateway/33/</url><builtOn></builtOn><changeSet _class='hudson.maven.FilteredChangeLogSet'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>northbound/sensorthings/rest.gateway/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/impl/LocationsAccessImpl.java</affectedPath><affectedPath>northbound/sensorthings/rest.gateway/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/impl/RootResourceAccessImpl.java</affectedPath><affectedPath>northbound/sensorthings/rest.gateway/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/impl/DatastreamsAccessImpl.java</affectedPath><affectedPath>northbound/sensorthings/rest.api/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/filters/CountFilter.java</affectedPath><affectedPath>northbound/sensorthings/rest.gateway/src/test/java/org/eclipse/sensinact/sensorthings/sensing/rest/integration/FiltersTest.java</affectedPath><affectedPath>northbound/sensorthings/rest.gateway/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/impl/DtoMapper.java</affectedPath><affectedPath>northbound/sensorthings/rest.gateway/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/impl/AbstractAccess.java</affectedPath><affectedPath>northbound/sensorthings/rest.gateway/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/impl/ThingsAccessImpl.java</affectedPath><affectedPath>northbound/sensorthings/rest.gateway/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/impl/FeaturesOfInterestAccessImpl.java</affectedPath><affectedPath>northbound/sensorthings/rest.gateway/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/impl/HistoricalLocationsAccessImpl.java</affectedPath><affectedPath>northbound/sensorthings/rest.api/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/IFilterConstants.java</affectedPath><affectedPath>northbound/sensorthings/rest.api/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/filters/ExpansionSettingsImpl.java</affectedPath><affectedPath>northbound/sensorthings/rest.gateway/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/impl/ObservationsAccessImpl.java</affectedPath><affectedPath>northbound/sensorthings/rest.api/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/filters/ExpandFilter.java</affectedPath><affectedPath>northbound/sensorthings/rest.gateway/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/impl/SensorsAccessImpl.java</affectedPath><affectedPath>northbound/sensorthings/rest.api/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/ExpansionSettings.java</affectedPath><affectedPath>northbound/sensorthings/rest.gateway/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/impl/ObservedPropertiesAccessImpl.java</affectedPath><affectedPath>northbound/sensorthings/rest.gateway/src/test/java/org/eclipse/sensinact/sensorthings/sensing/rest/integration/ObservationHistoryTest.java</affectedPath><affectedPath>northbound/sensorthings/rest.gateway/src/test/java/org/eclipse/sensinact/sensorthings/sensing/rest/integration/TestUtils.java</affectedPath><commitId>79ed936acb54a0e967160420560a37f864f12751</commitId><timestamp>1721908046000</timestamp><author><absoluteUrl>https://devel.data-in-motion.biz/jenkins/user/timothyjward</absoluteUrl><fullName>timothyjward</fullName></author><authorEmail>timothyjward@apache.org</authorEmail><comment>Implement the expand query for SensorThings northbound

This commit adds a backing implementation for the expand query for the SensorThings REST API. This is a pervasive change which requires us to carry context throughout the query so as to attach additional data structures based on the filter content.

* All queries now use full ProviderSnapshot instances so that we don't have to re-query for other resource data when filling in expansions
* Limited bulk data is included in expansions to prevent the JSON size exploding
* Data context is mapped by id to ensure we can expand values in lists
* All context is carried outside the DTO to avoid unnecessary fields appearing in the JSON output

Note that we require that all ids are able to be turned into strings. This is currently true throughout the gateway.

Signed-off-by: Tim Ward &lt;timothyjward@apache.org&gt;
</comment><date>2024-07-25 12:47:26 +0100</date><id>79ed936acb54a0e967160420560a37f864f12751</id><msg>Implement the expand query for SensorThings northbound</msg><path><editType>edit</editType><file>northbound/sensorthings/rest.api/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/filters/ExpandFilter.java</file></path><path><editType>edit</editType><file>northbound/sensorthings/rest.gateway/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/impl/DatastreamsAccessImpl.java</file></path><path><editType>edit</editType><file>northbound/sensorthings/rest.gateway/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/impl/SensorsAccessImpl.java</file></path><path><editType>edit</editType><file>northbound/sensorthings/rest.gateway/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/impl/FeaturesOfInterestAccessImpl.java</file></path><path><editType>add</editType><file>northbound/sensorthings/rest.gateway/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/impl/AbstractAccess.java</file></path><path><editType>edit</editType><file>northbound/sensorthings/rest.api/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/filters/CountFilter.java</file></path><path><editType>edit</editType><file>northbound/sensorthings/rest.api/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/IFilterConstants.java</file></path><path><editType>edit</editType><file>northbound/sensorthings/rest.gateway/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/impl/ObservedPropertiesAccessImpl.java</file></path><path><editType>edit</editType><file>northbound/sensorthings/rest.gateway/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/impl/ObservationsAccessImpl.java</file></path><path><editType>edit</editType><file>northbound/sensorthings/rest.gateway/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/impl/ThingsAccessImpl.java</file></path><path><editType>edit</editType><file>northbound/sensorthings/rest.gateway/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/impl/HistoricalLocationsAccessImpl.java</file></path><path><editType>add</editType><file>northbound/sensorthings/rest.api/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/filters/ExpansionSettingsImpl.java</file></path><path><editType>edit</editType><file>northbound/sensorthings/rest.gateway/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/impl/LocationsAccessImpl.java</file></path><path><editType>edit</editType><file>northbound/sensorthings/rest.gateway/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/impl/RootResourceAccessImpl.java</file></path><path><editType>edit</editType><file>northbound/sensorthings/rest.gateway/src/test/java/org/eclipse/sensinact/sensorthings/sensing/rest/integration/FiltersTest.java</file></path><path><editType>add</editType><file>northbound/sensorthings/rest.api/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/ExpansionSettings.java</file></path><path><editType>edit</editType><file>northbound/sensorthings/rest.gateway/src/test/java/org/eclipse/sensinact/sensorthings/sensing/rest/integration/ObservationHistoryTest.java</file></path><path><editType>edit</editType><file>northbound/sensorthings/rest.gateway/src/main/java/org/eclipse/sensinact/sensorthings/sensing/rest/impl/DtoMapper.java</file></path><path><editType>edit</editType><file>northbound/sensorthings/rest.gateway/src/test/java/org/eclipse/sensinact/sensorthings/sensing/rest/integration/TestUtils.java</file></path></item></changeSet><culprit><absoluteUrl>https://devel.data-in-motion.biz/jenkins/user/timothyjward</absoluteUrl><fullName>timothyjward</fullName></culprit><mavenArtifacts><url>https://devel.data-in-motion.biz/jenkins/job/Eclipse%20Sensinact/org.eclipse.sensinact.gateway.northbound.sensorthings$rest.gateway/33/mavenArtifacts/</url></mavenArtifacts></mavenBuild>