25
25
using System . Collections . Specialized ;
26
26
using System . Web ;
27
27
using Terradue . ServiceModel . Ogc . Owc . AtomEncoding ;
28
+ using Terradue . Stars . Services . Supplier ;
28
29
29
30
namespace Terradue . Stars . Data . ThirdParty . Geosquare
30
31
{
@@ -100,7 +101,8 @@ private GeosquarePublicationModel CreateModelFromPublication(IPublicationModel p
100
101
AdditionalLinks = publicationModel . AdditionalLinks ,
101
102
CreateIndex = true ,
102
103
SubjectsList = publicationModel . Subjects ? . Select ( s => new Subject ( s ) ) . ToList ( ) ,
103
- CatalogId = publicationModel . CatalogId ?? geosquareConfiguration . BaseUri . ToString ( )
104
+ CatalogId = publicationModel . CatalogId ?? geosquareConfiguration . BaseUri . ToString ( ) ,
105
+ AssetsFilters = publicationModel . AssetsFilters
104
106
} ;
105
107
}
106
108
@@ -148,9 +150,26 @@ public async Task<object> PostCollectionToCatalog(Terradue.Stars.Interface.IColl
148
150
{
149
151
GeosquarePublicationState catalogPublicationState = state as GeosquarePublicationState ;
150
152
AtomItemNode atomItemNode = null ;
153
+
154
+ // Filter assets
155
+ // Create the asset filters based on the asset filters string from the catalog publication model
156
+ AssetFilters assetFilters = AssetFilters . CreateAssetFilters ( catalogPublicationState . GeosquarePublicationModel . AssetsFilters ) ;
157
+ // Create a filtered asset container
158
+ FilteredAssetContainer filteredAssetContainer = new FilteredAssetContainer ( collectionNode , assetFilters ) ;
159
+ // Create a container node with the filtered asset container
160
+ ICollection filteredNode = new CollectionContainerNode ( collectionNode , filteredAssetContainer . Assets , "filtered" ) ;
161
+ // If the item is StacCollection, we recreate the StacCollection with the filtered assets
162
+ if ( collectionNode is StacCollectionNode stacCollectionNode )
163
+ {
164
+ StacCollection stacCollection = new StacCollection ( stacCollectionNode . StacCollection ) ;
165
+ stacCollection . Assets . Clear ( ) ;
166
+ stacCollection . Assets . AddRange ( filteredAssetContainer . Assets . ToDictionary ( asset => asset . Key , asset => ( asset . Value as StacAssetAsset ) . StacAsset ) ) ;
167
+ filteredNode = new StacCollectionNode ( stacCollection , collectionNode . Uri ) ;
168
+ }
169
+
151
170
try
152
171
{
153
- atomItemNode = await translatorManager . TranslateAsync < AtomItemNode > ( collectionNode , ct ) ;
172
+ atomItemNode = await translatorManager . TranslateAsync < AtomItemNode > ( filteredNode , ct ) ;
154
173
}
155
174
catch ( Exception e )
156
175
{
@@ -176,9 +195,26 @@ public async Task<object> PostItemToCatalog(IItem itemNode, IRouter router, obje
176
195
{
177
196
GeosquarePublicationState catalogPublicationState = state as GeosquarePublicationState ;
178
197
AtomItemNode atomItemNode = null ;
198
+
199
+ // Filter assets
200
+ // Create the asset filters based on the asset filters string from the catalog publication model
201
+ AssetFilters assetFilters = AssetFilters . CreateAssetFilters ( catalogPublicationState . GeosquarePublicationModel . AssetsFilters ) ;
202
+ // Create a filtered asset container
203
+ FilteredAssetContainer filteredAssetContainer = new FilteredAssetContainer ( itemNode , assetFilters ) ;
204
+ // Create a container node with the filtered asset container
205
+ IItem filteredNode = new ItemContainerNode ( itemNode , filteredAssetContainer . Assets , "filtered" ) ;
206
+ // If the item is StacItem, we recreate the StacItem with the filtered assets
207
+ if ( itemNode is StacItemNode stacItemNode )
208
+ {
209
+ StacItem stacItem = new StacItem ( stacItemNode . StacItem ) ;
210
+ stacItem . Assets . Clear ( ) ;
211
+ stacItem . Assets . AddRange ( filteredAssetContainer . Assets . ToDictionary ( asset => asset . Key , asset => ( asset . Value as StacAssetAsset ) . StacAsset ) ) ;
212
+ filteredNode = new StacItemNode ( stacItem , itemNode . Uri ) ;
213
+ }
214
+
179
215
try
180
216
{
181
- atomItemNode = await translatorManager . TranslateAsync < AtomItemNode > ( itemNode , ct ) ;
217
+ atomItemNode = await translatorManager . TranslateAsync < AtomItemNode > ( filteredNode , ct ) ;
182
218
}
183
219
catch ( Exception e )
184
220
{
0 commit comments