11import { PagingParameters } from '@ngageoint/mage.service/lib/entities/entities.global' ;
2+ import { MageEventId } from "@ngageoint/mage.service/lib/entities/events/entities.events" ;
23import { MageEventRepository } from '@ngageoint/mage.service/lib/entities/events/entities.events' ;
34import { EventScopedObservationRepository , ObservationRepositoryForEvent } from '@ngageoint/mage.service/lib/entities/observations/entities.observations' ;
45import { UserRepository } from '@ngageoint/mage.service/lib/entities/users/entities.users' ;
@@ -164,19 +165,23 @@ export class ObservationProcessor {
164165 private async updateConfig ( ) : Promise < ArcGISPluginConfig > {
165166 const config = await this . safeGetConfig ( )
166167
167- // Include form definitions while detecting changes in config
168- const eventForms = await this . _eventRepo . findAll ( ) ;
168+ // Include configured eventform definitions while detecting changes in config
169+ const eventIds = config . featureServices
170+ . flatMap ( service => service . layers )
171+ . flatMap ( layer => layer . eventIds )
172+ . filter ( ( eventId ) : eventId is MageEventId => typeof eventId === 'number' ) ;
173+
174+ const eventForms = await this . _eventRepo . findAllByIds ( eventIds ) ;
169175 const fullConfig = { ...config , eventForms } ;
170176
171177 const configJson = JSON . stringify ( fullConfig )
172178 if ( this . _previousConfig == null || this . _previousConfig != configJson ) {
173179 this . _transformer = new ObservationsTransformer ( config , console ) ;
174180 this . _geometryChangeHandler = new GeometryChangedHandler ( this . _transformer ) ;
175- this . _eventDeletionHandler = new EventDeletionHandler ( this . _console , config ) ;
181+ this . _eventDeletionHandler . updateConfig ( config ) ;
176182 this . _layerProcessors = [ ] ;
177183 await this . getFeatureServiceLayers ( config ) ;
178184 this . _previousConfig = configJson
179- this . _firstRun = true ;
180185 }
181186 return config
182187 }
@@ -186,7 +191,6 @@ export class ObservationProcessor {
186191 */
187192 async start ( ) {
188193 this . _isRunning = true ;
189- this . _firstRun = true ;
190194 this . processAndScheduleNext ( ) ;
191195 }
192196
@@ -207,7 +211,7 @@ export class ObservationProcessor {
207211 try {
208212 const identityManager = await this . _identityService . signin ( service )
209213 const response = await request ( service . url , { authentication : identityManager } )
210- this . handleFeatureService ( response , service , config )
214+ await this . handleFeatureService ( response , service , config )
211215 } catch ( err ) {
212216 console . error ( err )
213217 }
@@ -235,25 +239,7 @@ export class ObservationProcessor {
235239 }
236240
237241 for ( const featureLayer of featureServiceConfig . layers ) {
238- const eventNames : string [ ] = [ ]
239- const events = featureLayer . events
240- if ( events != null ) {
241- for ( const event of events ) {
242- const eventId = Number ( event ) ;
243- if ( isNaN ( eventId ) ) {
244- eventNames . push ( String ( event ) ) ;
245- } else {
246- const mageEvent = await this . _eventRepo . findById ( eventId )
247- if ( mageEvent != null ) {
248- eventNames . push ( mageEvent . name ) ;
249- }
250- }
251- }
252- }
253- if ( eventNames . length > 0 ) {
254- featureLayer . events = eventNames
255- }
256-
242+ // TODO - this used to convert event ids to names and set back on featureLayer.events. What is impact of not doing?
257243 const layer = serviceLayers . get ( featureLayer . layer )
258244
259245 let layerId = undefined
@@ -270,7 +256,7 @@ export class ObservationProcessor {
270256 const featureService = new FeatureService ( console , featureServiceConfig , identityManager )
271257 const layerInfo = await featureService . queryLayerInfo ( layerId ) ;
272258 const url = `${ featureServiceConfig . url } /${ layerId } ` ;
273- this . handleLayerInfo ( url , featureServiceConfig , featureLayer , layerInfo , config ) ;
259+ await this . handleLayerInfo ( url , featureServiceConfig , featureLayer , layerInfo , config ) ;
274260 }
275261 }
276262 }
@@ -286,10 +272,10 @@ export class ObservationProcessor {
286272 */
287273 private async handleLayerInfo ( url : string , featureServiceConfig : FeatureServiceConfig , featureLayer : FeatureLayerConfig , layerInfo : LayerInfoResult , config : ArcGISPluginConfig ) {
288274 if ( layerInfo . geometryType != null ) {
289- const events = featureLayer . events as string [ ]
290275 const admin = new FeatureServiceAdmin ( config , this . _identityService , this . _console )
276+ const eventIds = featureLayer . eventIds || [ ]
291277 await admin . updateLayer ( featureServiceConfig , featureLayer , layerInfo , this . _eventRepo )
292- const info = new LayerInfo ( url , events , layerInfo )
278+ const info = new LayerInfo ( url , eventIds , layerInfo )
293279 const identityManager = await this . _identityService . signin ( featureServiceConfig )
294280 const layerProcessor = new FeatureLayerProcessor ( info , config , identityManager , this . _console ) ;
295281 this . _layerProcessors . push ( layerProcessor ) ;
@@ -310,9 +296,13 @@ export class ObservationProcessor {
310296 layerProcessor . processPendingUpdates ( ) ;
311297 }
312298 this . _console . info ( 'ArcGIS plugin processing new observations...' ) ;
313- const activeEvents = await this . _eventRepo . findActiveEvents ( ) ;
314- this . _eventDeletionHandler . checkForEventDeletion ( activeEvents , this . _layerProcessors , this . _firstRun ) ;
315- const eventsToProcessors = this . _organizer . organize ( activeEvents , this . _layerProcessors ) ;
299+ const enabledEvents = ( await this . _eventRepo . findActiveEvents ( ) ) . filter ( event =>
300+ this . _layerProcessors . some ( layerProcessor =>
301+ layerProcessor . layerInfo . hasEvent ( event . id )
302+ )
303+ ) ;
304+ this . _eventDeletionHandler . checkForEventDeletion ( enabledEvents , this . _layerProcessors , this . _firstRun ) ;
305+ const eventsToProcessors = this . _organizer . organize ( enabledEvents , this . _layerProcessors ) ;
316306 const nextQueryTime = Date . now ( ) ;
317307 for ( const pair of eventsToProcessors ) {
318308 this . _console . info ( 'ArcGIS getting newest observations for event ' + pair . event . name ) ;
0 commit comments