Use version 13.1.0 of openroadm-service models
[transportpce.git] / servicehandler / src / main / java / org / opendaylight / transportpce / servicehandler / validation / checks / ServicehandlerServiceResiliencyCheck.java
1 /*
2  * Copyright © 2022 Orange, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.transportpce.servicehandler.validation.checks;
10
11 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.resiliency.ServiceResiliency;
12 import org.slf4j.Logger;
13 import org.slf4j.LoggerFactory;
14
15 /**
16  * Class to check compliance of service-resiliency input.
17  */
18 public final class ServicehandlerServiceResiliencyCheck {
19
20     private static final Logger LOG = LoggerFactory.getLogger(ServicehandlerServiceResiliencyCheck.class);
21     public static final String LOG_ATTRIBUTE_NOT_DEDICATED = "An attribute not dedicated for this type of "
22             + "resiliency was filled";
23     public static final String LOG_RESILIENCY_TYPE_UNMANAGED = "Resiliency unmanaged for compliance check !";
24     public static final String LOG_RESILIENCY_NULL = "Resiliency is null !";
25
26     /**
27      * Function to check coherency of service-resiliency inputs.
28      *
29      * @param serviceResiliency ServiceResiliency to check
30      * @return <code> true </code>  if coherent
31      *         <code> false </code> otherwise
32      */
33     public static ComplianceCheckResult check(ServiceResiliency serviceResiliency) {
34         if (serviceResiliency.getResiliency() == null) {
35             LOG.warn(LOG_RESILIENCY_NULL);
36             return new ComplianceCheckResult(false, LOG_RESILIENCY_NULL);
37         }
38         String serviceResiliencyType = serviceResiliency.getResiliency().toString().split("\\{")[0];
39         switch (serviceResiliencyType) {
40             case "Unprotected":
41                 return checkUnprotectedResiliency(serviceResiliency);
42             case "UnprotectedDiverselyRouted":
43                 return checkUnprotectedDiverselyRoutedResiliency(serviceResiliency);
44             case "Protected":
45                 return checkProtectedResiliency(serviceResiliency);
46             case "Restorable":
47             case "ExternalTriggerRestorable":
48                 return checkRestorableAndExternalTriggerRestorableResiliency(serviceResiliency);
49             default:
50                 LOG.warn(LOG_RESILIENCY_TYPE_UNMANAGED);
51                 return new ComplianceCheckResult(false, LOG_RESILIENCY_TYPE_UNMANAGED);
52         }
53     }
54
55     private static ComplianceCheckResult checkUnprotectedResiliency(ServiceResiliency serviceResiliency) {
56         return serviceResiliency.getRevertive() == null
57                 && serviceResiliency.getWaitToRestore() == null
58                 && serviceResiliency.getHoldoffTime() == null
59                 && serviceResiliency.getPreCalculatedBackupPathNumber() == null
60                 && serviceResiliency.getCoupledService() == null
61                     ? new ComplianceCheckResult(true, "")
62                     : new ComplianceCheckResult(false, LOG_ATTRIBUTE_NOT_DEDICATED);
63     }
64
65     private static ComplianceCheckResult checkUnprotectedDiverselyRoutedResiliency(
66             ServiceResiliency serviceResiliency) {
67         return serviceResiliency.getRevertive() == null
68                 && serviceResiliency.getWaitToRestore() == null
69                 && serviceResiliency.getHoldoffTime() == null
70                 && serviceResiliency.getPreCalculatedBackupPathNumber() == null
71                     ? new ComplianceCheckResult(true, "")
72                     : new ComplianceCheckResult(false, LOG_ATTRIBUTE_NOT_DEDICATED);
73     }
74
75     private static ComplianceCheckResult checkProtectedResiliency(ServiceResiliency serviceResiliency) {
76         return (serviceResiliency.getWaitToRestore() == null
77                 || (serviceResiliency.getRevertive() != null && serviceResiliency.getRevertive()))
78                 && serviceResiliency.getPreCalculatedBackupPathNumber() == null
79                 && serviceResiliency.getCoupledService() == null
80                     ? new ComplianceCheckResult(true, "")
81                     : new ComplianceCheckResult(false, LOG_ATTRIBUTE_NOT_DEDICATED);
82     }
83
84     private static ComplianceCheckResult checkRestorableAndExternalTriggerRestorableResiliency(
85             ServiceResiliency serviceResiliency) {
86         return (serviceResiliency.getWaitToRestore() == null
87                 || (serviceResiliency.getRevertive() != null && serviceResiliency.getRevertive()))
88                 && serviceResiliency.getCoupledService() == null
89                     ? new ComplianceCheckResult(true, "")
90                     : new ComplianceCheckResult(false, LOG_ATTRIBUTE_NOT_DEDICATED);
91     }
92
93     private ServicehandlerServiceResiliencyCheck() {
94     }
95 }