New EI Consumer API, aligned to ORAN WG2
[nonrtric.git] / enrichment-coordinator-service / src / main / java / org / oransc / enrichment / repository / EiTypes.java
index 7668ff1..6397c2f 100644 (file)
 
 package org.oransc.enrichment.repository;
 
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Vector;
 
 import org.oransc.enrichment.exceptions.ServiceException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
- * Dynamic representation of all EI Types in the system.
+ * Dynamic representation of all EI types in the system.
  */
+@SuppressWarnings("squid:S2629") // Invoke method(s) only conditionally
 public class EiTypes {
-    Map<String, EiType> allEiTypes = new HashMap<>();
+    private final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+    private final Map<String, EiType> allEiTypes = new HashMap<>();
 
     public synchronized void put(EiType type) {
-        allEiTypes.put(type.id(), type);
+        allEiTypes.put(type.getId(), type);
     }
 
     public synchronized Collection<EiType> getAllEiTypes() {
@@ -44,7 +49,7 @@ public class EiTypes {
     public synchronized EiType getType(String id) throws ServiceException {
         EiType type = allEiTypes.get(id);
         if (type == null) {
-            throw new ServiceException("Could not find EI Job: " + id);
+            throw new ServiceException("Could not find EI type: " + id);
         }
         return type;
     }
@@ -57,6 +62,10 @@ public class EiTypes {
         allEiTypes.remove(id);
     }
 
+    public synchronized void remove(EiType type) {
+        this.remove(type.getId());
+    }
+
     public synchronized int size() {
         return allEiTypes.size();
     }
@@ -65,4 +74,12 @@ public class EiTypes {
         this.allEiTypes.clear();
     }
 
+    public void deregisterType(EiType type, EiJobs eiJobs) {
+        this.remove(type);
+        for (EiJob job : eiJobs.getJobsForType(type.getId())) {
+            eiJobs.remove(job);
+            this.logger.warn("Deleted job {} because no producers left", job.id());
+        }
+    }
+
 }