Add service-resiliency compliance check
[transportpce.git] / servicehandler / src / main / java / org / opendaylight / transportpce / servicehandler / validation / checks / ServicehandlerServiceResiliencyCheck.java
diff --git a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/validation/checks/ServicehandlerServiceResiliencyCheck.java b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/validation/checks/ServicehandlerServiceResiliencyCheck.java
new file mode 100644 (file)
index 0000000..2d5b173
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+ * Copyright © 2022 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.servicehandler.validation.checks;
+
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.resiliency.ServiceResiliency;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Class to check compliance of service-resiliency input.
+ */
+public final class ServicehandlerServiceResiliencyCheck {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ServicehandlerServiceResiliencyCheck.class);
+    public static final String LOG_ATTRIBUTE_NOT_DEDICATED = "An attribute not dedicated for this type of "
+            + "resiliency was filled";
+    public static final String LOG_RESILIENCY_TYPE_UNMANAGED = "Resiliency unmanaged for compliance check !";
+    public static final String LOG_RESILIENCY_NULL = "Resiliency is null !";
+
+    /**
+     * Function to check coherency of service-resiliency inputs.
+     *
+     * @param serviceResiliency ServiceResiliency to check
+     * @return <code> true </code>  if coherent
+     *         <code> false </code> otherwise
+     */
+    public static ComplianceCheckResult check(ServiceResiliency serviceResiliency) {
+        if (serviceResiliency.getResiliency() != null) {
+            switch (serviceResiliency.getResiliency().getSimpleName()) {
+                case "Unprotected":
+                    return checkUnprotectedResiliency(serviceResiliency);
+
+                case "UnprotectedDiverselyRouted":
+                    return checkUnprotectedDiverselyRoutedResiliency(serviceResiliency);
+
+                case "Protected":
+                    return checkProtectedResiliency(serviceResiliency);
+
+                case "Restorable":
+                case "ExternalTriggerRestorable":
+                    return checkRestorableAndExternalTriggerRestorableResiliency(serviceResiliency);
+
+                default:
+                    LOG.warn(LOG_RESILIENCY_TYPE_UNMANAGED);
+                    return new ComplianceCheckResult(false, LOG_RESILIENCY_TYPE_UNMANAGED);
+            }
+        } else {
+            LOG.warn(LOG_RESILIENCY_NULL);
+            return new ComplianceCheckResult(false, LOG_RESILIENCY_NULL);
+        }
+    }
+
+    private static ComplianceCheckResult checkUnprotectedResiliency(ServiceResiliency serviceResiliency) {
+        return serviceResiliency.getRevertive() == null
+                && serviceResiliency.getWaitToRestore() == null
+                && serviceResiliency.getHoldoffTime() == null
+                && serviceResiliency.getPreCalculatedBackupPathNumber() == null
+                && serviceResiliency.getCoupledService() == null
+                    ? new ComplianceCheckResult(true, "")
+                    : new ComplianceCheckResult(false, LOG_ATTRIBUTE_NOT_DEDICATED);
+    }
+
+    private static ComplianceCheckResult checkUnprotectedDiverselyRoutedResiliency(
+            ServiceResiliency serviceResiliency) {
+        return serviceResiliency.getRevertive() == null
+                && serviceResiliency.getWaitToRestore() == null
+                && serviceResiliency.getHoldoffTime() == null
+                && serviceResiliency.getPreCalculatedBackupPathNumber() == null
+                    ? new ComplianceCheckResult(true, "")
+                    : new ComplianceCheckResult(false, LOG_ATTRIBUTE_NOT_DEDICATED);
+    }
+
+    private static ComplianceCheckResult checkProtectedResiliency(ServiceResiliency serviceResiliency) {
+        return (serviceResiliency.getWaitToRestore() == null
+                || (serviceResiliency.getRevertive() != null && serviceResiliency.getRevertive()))
+                && serviceResiliency.getPreCalculatedBackupPathNumber() == null
+                && serviceResiliency.getCoupledService() == null
+                    ? new ComplianceCheckResult(true, "")
+                    : new ComplianceCheckResult(false, LOG_ATTRIBUTE_NOT_DEDICATED);
+    }
+
+    private static ComplianceCheckResult checkRestorableAndExternalTriggerRestorableResiliency(
+            ServiceResiliency serviceResiliency) {
+        return (serviceResiliency.getWaitToRestore() == null
+                || (serviceResiliency.getRevertive() != null && serviceResiliency.getRevertive()))
+                && serviceResiliency.getCoupledService() == null
+                    ? new ComplianceCheckResult(true, "")
+                    : new ComplianceCheckResult(false, LOG_ATTRIBUTE_NOT_DEDICATED);
+    }
+
+    private ServicehandlerServiceResiliencyCheck() {
+    }
+}