Add service-resiliency compliance check
[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.rev211210.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             switch (serviceResiliency.getResiliency().getSimpleName()) {
36                 case "Unprotected":
37                     return checkUnprotectedResiliency(serviceResiliency);
38
39                 case "UnprotectedDiverselyRouted":
40                     return checkUnprotectedDiverselyRoutedResiliency(serviceResiliency);
41
42                 case "Protected":
43                     return checkProtectedResiliency(serviceResiliency);
44
45                 case "Restorable":
46                 case "ExternalTriggerRestorable":
47                     return checkRestorableAndExternalTriggerRestorableResiliency(serviceResiliency);
48
49                 default:
50                     LOG.warn(LOG_RESILIENCY_TYPE_UNMANAGED);
51                     return new ComplianceCheckResult(false, LOG_RESILIENCY_TYPE_UNMANAGED);
52             }
53         } else {
54             LOG.warn(LOG_RESILIENCY_NULL);
55             return new ComplianceCheckResult(false, LOG_RESILIENCY_NULL);
56         }
57     }
58
59     private static ComplianceCheckResult checkUnprotectedResiliency(ServiceResiliency serviceResiliency) {
60         return serviceResiliency.getRevertive() == null
61                 && serviceResiliency.getWaitToRestore() == null
62                 && serviceResiliency.getHoldoffTime() == null
63                 && serviceResiliency.getPreCalculatedBackupPathNumber() == null
64                 && serviceResiliency.getCoupledService() == null
65                     ? new ComplianceCheckResult(true, "")
66                     : new ComplianceCheckResult(false, LOG_ATTRIBUTE_NOT_DEDICATED);
67     }
68
69     private static ComplianceCheckResult checkUnprotectedDiverselyRoutedResiliency(
70             ServiceResiliency serviceResiliency) {
71         return serviceResiliency.getRevertive() == null
72                 && serviceResiliency.getWaitToRestore() == null
73                 && serviceResiliency.getHoldoffTime() == null
74                 && serviceResiliency.getPreCalculatedBackupPathNumber() == null
75                     ? new ComplianceCheckResult(true, "")
76                     : new ComplianceCheckResult(false, LOG_ATTRIBUTE_NOT_DEDICATED);
77     }
78
79     private static ComplianceCheckResult checkProtectedResiliency(ServiceResiliency serviceResiliency) {
80         return (serviceResiliency.getWaitToRestore() == null
81                 || (serviceResiliency.getRevertive() != null && serviceResiliency.getRevertive()))
82                 && serviceResiliency.getPreCalculatedBackupPathNumber() == null
83                 && serviceResiliency.getCoupledService() == null
84                     ? new ComplianceCheckResult(true, "")
85                     : new ComplianceCheckResult(false, LOG_ATTRIBUTE_NOT_DEDICATED);
86     }
87
88     private static ComplianceCheckResult checkRestorableAndExternalTriggerRestorableResiliency(
89             ServiceResiliency serviceResiliency) {
90         return (serviceResiliency.getWaitToRestore() == null
91                 || (serviceResiliency.getRevertive() != null && serviceResiliency.getRevertive()))
92                 && serviceResiliency.getCoupledService() == null
93                     ? new ComplianceCheckResult(true, "")
94                     : new ComplianceCheckResult(false, LOG_ATTRIBUTE_NOT_DEDICATED);
95     }
96
97     private ServicehandlerServiceResiliencyCheck() {
98     }
99 }