Merge "Added STD sim 2.0.0 tests"
[nonrtric.git] / policy-agent / src / main / java / org / oransc / policyagent / repository / Ric.java
index 68b07aa..fb2e4b9 100644 (file)
@@ -25,18 +25,30 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Vector;
 
+import lombok.Getter;
+import lombok.Setter;
+
+import org.oransc.policyagent.clients.A1Client.A1ProtocolType;
 import org.oransc.policyagent.configuration.RicConfig;
 
 /**
- * Represents the dynamic information about a NearRealtime-RIC.
+ * Represents the dynamic information about a Near-RT RIC.
  */
 public class Ric {
-    private final RicConfig ricConfig;
-    private RicState state = RicState.NOT_INITIATED;
+
+    @Setter
+    private RicConfig ricConfig;
+    private RicState state = RicState.UNAVAILABLE;
     private Map<String, PolicyType> supportedPolicyTypes = new HashMap<>();
+    @Getter
+    @Setter
+    private A1ProtocolType protocolVersion = A1ProtocolType.UNKNOWN;
+
+    @Getter
+    private final Lock lock = new Lock();
 
     /**
-     * Creates the Ric. Initial state is {@link RicState.NOT_INITIATED}.
+     * Creates the Ric. Initial state is {@link RicState.UNDEFINED}.
      *
      * @param ricConfig The {@link RicConfig} for this Ric.
      */
@@ -48,16 +60,16 @@ public class Ric {
         return ricConfig.name();
     }
 
-    public RicState state() {
-        return state;
+    public RicConfig getConfig() {
+        return this.ricConfig;
     }
 
-    public void setState(RicState newState) {
-        state = newState;
+    public synchronized RicState getState() {
+        return this.state;
     }
 
-    public RicConfig getConfig() {
-        return this.ricConfig;
+    public synchronized void setState(RicState state) {
+        this.state = state;
     }
 
     /**
@@ -65,38 +77,18 @@ public class Ric {
      *
      * @return a vector containing the nodes managed by this Ric.
      */
-    public Vector<String> getManagedNodes() {
+    public synchronized Collection<String> getManagedElementIds() {
         return ricConfig.managedElementIds();
     }
 
     /**
      * Determines if the given node is managed by this Ric.
      *
-     * @param nodeName the node name to check.
+     * @param managedElementId the node name to check.
      * @return true if the given node is managed by this Ric.
      */
-    public boolean isManaging(String nodeName) {
-        return ricConfig.managedElementIds().contains(nodeName);
-    }
-
-    /**
-     * Adds the given node as managed by this Ric.
-     *
-     * @param nodeName the node to add.
-     */
-    public void addManagedNode(String nodeName) {
-        if (!ricConfig.managedElementIds().contains(nodeName)) {
-            ricConfig.managedElementIds().add(nodeName);
-        }
-    }
-
-    /**
-     * Removes the given node as managed by this Ric.
-     *
-     * @param nodeName the node to remove.
-     */
-    public void removeManagedNode(String nodeName) {
-        ricConfig.managedElementIds().remove(nodeName);
+    public synchronized boolean isManaging(String managedElementId) {
+        return ricConfig.managedElementIds().contains(managedElementId);
     }
 
     /**
@@ -104,12 +96,12 @@ public class Ric {
      *
      * @return the policy types supported by this Ric in an unmodifiable list.
      */
-    public Collection<PolicyType> getSupportedPolicyTypes() {
-        return supportedPolicyTypes.values();
+    public synchronized Collection<PolicyType> getSupportedPolicyTypes() {
+        return new Vector<>(supportedPolicyTypes.values());
     }
 
-    public Collection<String> getSupportedPolicyTypeNames() {
-        return supportedPolicyTypes.keySet();
+    public synchronized Collection<String> getSupportedPolicyTypeNames() {
+        return new Vector<>(supportedPolicyTypes.keySet());
     }
 
     /**
@@ -117,60 +109,54 @@ public class Ric {
      *
      * @param type the policy type to support.
      */
-    public void addSupportedPolicyType(PolicyType type) {
+    public synchronized void addSupportedPolicyType(PolicyType type) {
         supportedPolicyTypes.put(type.name(), type);
     }
 
     /**
-     * Adds policy types as supported by this Ric.
-     *
-     * @param types the policy types to support.
+     * Removes all policy type as supported by this Ric.
      */
-    public void addSupportedPolicyTypes(Collection<PolicyType> types) {
-        for (PolicyType type : types) {
-            addSupportedPolicyType(type);
-        }
-    }
-
-    /**
-     * Removes a policy type as supported by this Ric.
-     *
-     * @param type the policy type to remove as supported by this Ric.
-     */
-    public void removeSupportedPolicyType(PolicyType type) {
-        supportedPolicyTypes.remove(type.name());
+    public synchronized void clearSupportedPolicyTypes() {
+        supportedPolicyTypes.clear();
     }
 
     /**
      * Checks if a type is supported by this Ric.
      *
-     * @param type the type to check if it is supported.
+     * @param typeName the name of the type to check if it is supported.
      *
-     * @return true if the given type issupported by this Ric, false otherwise.
+     * @return true if the given type is supported by this Ric, false otherwise.
      */
-    public boolean isSupportingType(String typeName) {
+    public synchronized boolean isSupportingType(String typeName) {
         return supportedPolicyTypes.containsKey(typeName);
     }
 
+    @Override
+    public synchronized String toString() {
+        return Ric.class.getSimpleName() + ": " + "name: " + name() + ", state: " + state + ", baseUrl: "
+            + ricConfig.baseUrl() + ", managedNodes: " + ricConfig.managedElementIds();
+    }
+
     /**
      * Represents the states possible for a Ric.
      */
-    public static enum RicState {
+    public enum RicState {
         /**
-         * The Ric has not been initiated yet.
+         * The agent view of the Ric may be inconsistent.
          */
-        NOT_INITIATED,
+        UNAVAILABLE,
         /**
-         * The Ric is working fine.
+         * The normal state. Policies can be configured.
          */
-        ACTIVE,
+        AVAILABLE,
         /**
-         * Something is wrong with the Ric.
+         * The agent is synchronizing the view of the Ric.
          */
-        FAULTY,
+        SYNCHRONIZING,
+
         /**
-         * The node is unreachable at the moment.
+         * A consistency check between the agent and the Ric is done
          */
-        UNREACHABLE
+        CONSISTENCY_CHECK
     }
 }