X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=policy-agent%2Fsrc%2Fmain%2Fjava%2Forg%2Foransc%2Fpolicyagent%2Frepository%2FRic.java;h=ab320655e2c95ebcdada3a8dba65a9f8759dfa8d;hb=refs%2Fchanges%2F65%2F2665%2F3;hp=bfd8ef65e1316ca8e6e6a640fe4aa9a58cd5be77;hpb=63036ab25f7878781e74b2ca0706b28451f59f27;p=nonrtric.git diff --git a/policy-agent/src/main/java/org/oransc/policyagent/repository/Ric.java b/policy-agent/src/main/java/org/oransc/policyagent/repository/Ric.java index bfd8ef65..ab320655 100644 --- a/policy-agent/src/main/java/org/oransc/policyagent/repository/Ric.java +++ b/policy-agent/src/main/java/org/oransc/policyagent/repository/Ric.java @@ -20,86 +20,163 @@ package org.oransc.policyagent.repository; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +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; -import org.oransc.policyagent.repository.Ric.RicState; /** * Represents the dynamic information about a NearRealtime-RIC. */ public class Ric { + private final RicConfig ricConfig; - private RicState state = RicState.NOT_INITIATED; + private final List managedElementIds; + + private RicState state = RicState.UNDEFINED; + private Map 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. */ public Ric(RicConfig ricConfig) { this.ricConfig = ricConfig; + this.managedElementIds = new ArrayList<>(ricConfig.managedElementIds()); // TODO, this is config why is it + // copied here? } public String name() { 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 synchronized void setState(RicState state) { + this.state = state; + } + + /** + * Gets the nodes managed by this Ric. + * + * @return a vector containing the nodes managed by this Ric. + */ + public synchronized Collection getManagedElementIds() { + return 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); + public synchronized boolean isManaging(String managedElementId) { + return managedElementIds.contains(managedElementId); } /** * Adds the given node as managed by this Ric. * - * @param nodeName the node to add. + * @param managedElementId the node to add. */ - public void addManagedNode(String nodeName) { - if (!ricConfig.managedElementIds().contains(nodeName)) { - ricConfig.managedElementIds().add(nodeName); + public synchronized void addManagedElement(String managedElementId) { + if (!managedElementIds.contains(managedElementId)) { + managedElementIds.add(managedElementId); } } /** * Removes the given node as managed by this Ric. * - * @param nodeName the node to remove. + * @param managedElementId the node to remove. + */ + public synchronized void removeManagedElement(String managedElementId) { + managedElementIds.remove(managedElementId); + } + + /** + * Gets the policy types supported by this Ric. + * + * @return the policy types supported by this Ric in an unmodifiable list. + */ + public synchronized Collection getSupportedPolicyTypes() { + return new Vector<>(supportedPolicyTypes.values()); + } + + public synchronized Collection getSupportedPolicyTypeNames() { + return new Vector<>(supportedPolicyTypes.keySet()); + } + + /** + * Adds a policy type as supported by this Ric. + * + * @param type the policy type to support. */ - public void removeManagedNode(String nodeName) { - ricConfig.managedElementIds().remove(nodeName); + public synchronized void addSupportedPolicyType(PolicyType type) { + supportedPolicyTypes.put(type.name(), type); + } + + /** + * Removes all policy type as supported by this Ric. + */ + public synchronized void clearSupportedPolicyTypes() { + supportedPolicyTypes.clear(); + } + + /** + * Checks if a type is supported by this Ric. + * + * @param typeName the name of the type to check if it is supported. + * + * @return true if the given type is supported by this Ric, false otherwise. + */ + 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: " + managedElementIds; } /** * Represents the states possible for a Ric. */ - public static enum RicState { - /** - * The Ric has not been initiated yet. - */ - NOT_INITIATED, + public enum RicState { /** - * The Ric is working fine. + * The agent view of the Ric may be inconsistent. */ - ACTIVE, + UNDEFINED, /** - * Something is wrong with the Ric. + * The normal state. Policies can be configured. */ - FAULTY, + IDLE, /** - * The node is unreachable at the moment. + * The agent is synchronizing the view of the Ric. */ - UNREACHABLE + SYNCHRONIZING } }