@@ -285,25 +285,37 @@ public synchronized void processWatchEvent(Kind kind, Path fullPath) {
285
285
286
286
// remove removed elements
287
287
if (modelVersion == 1 ) {
288
- model .getNodesV1 ().keySet ().stream ().filter (e -> !newElementNames .contains (e ))
289
- .forEach (removedElement -> {
290
- List <JsonNode > removedNodes = model .getNodesV1 ().remove (removedElement );
291
- getElementListeners (removedElement , modelVersion ).forEach (listener -> {
292
- List removedElements = parseJsonNodesV1 (removedNodes , listener .getElementClass (),
293
- null , null );
294
- listener .removedModel (modelName , removedElements );
295
- });
288
+ model .getNodesV1 ().entrySet ().removeIf (e -> {
289
+ String elementName = e .getKey ();
290
+ if (newElementNames .contains (elementName )) {
291
+ return false ;
292
+ }
293
+
294
+ List <JsonNode > removedNodes = e .getValue ();
295
+ if (removedNodes != null ) {
296
+ getElementListeners (elementName , modelVersion ).forEach (listener -> {
297
+ List removedElements = parseJsonNodesV1 (removedNodes , listener .getElementClass (), null ,
298
+ null );
299
+ listener .removedModel (modelName , removedElements );
296
300
});
301
+ }
302
+ return true ;
303
+ });
297
304
} else {
298
- model .getNodes ().keySet ().stream ().filter (e -> !newElementNames .contains (e ))
299
- .forEach (removedElement -> {
300
- JsonNode removedNode = model .getNodes ().remove (removedElement );
301
- getElementListeners (removedElement , modelVersion ).forEach (listener -> {
302
- List removedElements = parseJsonMapNode (removedNode , listener .getElementClass (),
303
- null , null );
304
- listener .removedModel (modelName , removedElements );
305
- });
306
- });
305
+ model .getNodes ().entrySet ().removeIf (e -> {
306
+ String elementName = e .getKey ();
307
+ if (newElementNames .contains (elementName )) {
308
+ return false ;
309
+ }
310
+
311
+ JsonNode removedNode = e .getValue ();
312
+ getElementListeners (elementName , modelVersion ).forEach (listener -> {
313
+ List removedElements = parseJsonMapNode (removedNode , listener .getElementClass (), null ,
314
+ null );
315
+ listener .removedModel (modelName , removedElements );
316
+ });
317
+ return true ;
318
+ });
307
319
}
308
320
309
321
checkElementNames (modelName , model );
@@ -315,6 +327,7 @@ public synchronized void processWatchEvent(Kind kind, Path fullPath) {
315
327
}
316
328
}
317
329
330
+ @ SuppressWarnings ({ "rawtypes" , "unchecked" })
318
331
private void removeModel (String modelName ) {
319
332
YamlModelWrapper removedModel = modelCache .remove (modelName );
320
333
if (removedModel == null ) {
@@ -349,7 +362,8 @@ private void removeModel(String modelName) {
349
362
public void addYamlModelListener (YamlModelListener <? extends YamlElement > listener ) {
350
363
Class <? extends YamlElement > elementClass = listener .getElementClass ();
351
364
String elementName = getElementName (elementClass );
352
- elementListeners .computeIfAbsent (elementName , k -> new CopyOnWriteArrayList <>()).add (listener );
365
+ Objects .requireNonNull (elementListeners .computeIfAbsent (elementName , k -> new CopyOnWriteArrayList <>()))
366
+ .add (listener );
353
367
354
368
// iterate over all models and notify the new listener of already existing models with this type
355
369
modelCache .forEach ((modelName , model ) -> {
@@ -424,8 +438,8 @@ public void addElementToModel(String modelName, YamlElement element) {
424
438
List <JsonNode > addedNodes = new ArrayList <>();
425
439
JsonNode mapAddedNode = null ;
426
440
if (model .getVersion () == 1 ) {
427
- List <JsonNode > modelNodes = model . getNodesV1 (). computeIfAbsent ( elementName ,
428
- k -> new CopyOnWriteArrayList <>());
441
+ List <JsonNode > modelNodes = Objects
442
+ . requireNonNull ( model . getNodesV1 (). computeIfAbsent ( elementName , k -> new CopyOnWriteArrayList <>() ));
429
443
JsonNode newNode = objectMapper .convertValue (element , JsonNode .class );
430
444
modelNodes .add (newNode );
431
445
addedNodes .add (newNode );
0 commit comments