Merge "Bump transportpce-models upstream dependency"
[transportpce.git] / pce / src / main / java / org / opendaylight / transportpce / pce / graph / InAlgoPathValidator.java
1 /*
2  * Copyright © 2017 AT&T, 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.pce.graph;
10
11 import org.jgrapht.GraphPath;
12 import org.jgrapht.alg.shortestpath.PathValidator;
13 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmLinkType;
14 import org.slf4j.Logger;
15 import org.slf4j.LoggerFactory;
16
17 public class InAlgoPathValidator implements PathValidator<String, PceGraphEdge> {
18     /* Logging. */
19     private static final Logger LOG = LoggerFactory.getLogger(InAlgoPathValidator.class);
20     private static final String IN_CHECK_PATH_DROPPED_MSG = "in checkPath dropped {} {} ";
21
22     public InAlgoPathValidator() {
23         super();
24     }
25
26     @Override
27     public boolean isValidPath(GraphPath<String, PceGraphEdge> partialPath, PceGraphEdge edge) {
28         int size = partialPath.getEdgeList().size();
29         if (size == 0) {
30             return true;
31         }
32         LOG.debug("InAlgoPathValidator: partialPath size: {} prev edge {} new edge {}",
33             size, edge.link().getlinkType(), partialPath.getEdgeList().get(size - 1).link().getlinkType());
34
35         return (checkTurn(partialPath.getEdgeList().get(size - 1).link().getlinkType(), edge.link().getlinkType()));
36     }
37
38     @SuppressWarnings("java:S1541")
39     //sonar issue The Cyclomatic Complexity of this method "checkTurn" is 13 which is greater than 10 authorized.
40     //here we have clear conditional, so for the moment no need to manage this issue
41     private boolean checkTurn(OpenroadmLinkType prevType, OpenroadmLinkType nextType) {
42
43         if (nextType == OpenroadmLinkType.ADDLINK && prevType != OpenroadmLinkType.XPONDEROUTPUT) {
44             LOG.debug(IN_CHECK_PATH_DROPPED_MSG, prevType, nextType);
45             return false;
46         }
47
48         if (nextType == OpenroadmLinkType.EXPRESSLINK && prevType != OpenroadmLinkType.ROADMTOROADM) {
49             LOG.debug(IN_CHECK_PATH_DROPPED_MSG, prevType, nextType);
50             return false;
51         }
52
53         if (nextType == OpenroadmLinkType.DROPLINK && prevType != OpenroadmLinkType.ROADMTOROADM) {
54             LOG.debug(IN_CHECK_PATH_DROPPED_MSG, prevType, nextType);
55             return false;
56         }
57
58         if (nextType == OpenroadmLinkType.XPONDERINPUT && prevType != OpenroadmLinkType.DROPLINK) {
59             LOG.debug(IN_CHECK_PATH_DROPPED_MSG, prevType, nextType);
60             return false;
61         }
62
63         if (prevType == OpenroadmLinkType.EXPRESSLINK && nextType != OpenroadmLinkType.ROADMTOROADM) {
64             LOG.debug(IN_CHECK_PATH_DROPPED_MSG, prevType, nextType);
65             return false;
66         }
67
68         if (prevType == OpenroadmLinkType.ADDLINK && nextType != OpenroadmLinkType.ROADMTOROADM) {
69             LOG.debug(IN_CHECK_PATH_DROPPED_MSG, prevType, nextType);
70             return false;
71         }
72
73         return true;
74     }
75 }
76