2 * Copyright (c) 2016 Cisco Systems Inc and others. All rights reserved.
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
8 package org.opendaylight.unimgr.mef.nrp.cisco.xr.common.helper;
10 import org.opendaylight.yang.gen.v1.urn.mef.nrp.bandwidth.profile.rev160630.GNRPBwpFlow;
11 import org.opendaylight.yang.gen.v1.urn.mef.nrp.specs.rev160630.g_nrp_connadaptspec.EgressBwpFlow;
12 import org.opendaylight.yang.gen.v1.urn.mef.nrp.specs.rev160630.g_nrp_connadaptspec.IngressBwpFlow;
13 import org.opendaylight.yang.gen.v1.urn.mef.nrp.specs.rev160630.g_nrp_uni_terminationspec.EgressBwpUni;
14 import org.opendaylight.yang.gen.v1.urn.mef.nrp.specs.rev160630.g_nrp_uni_terminationspec.IngressBwpUni;
16 import java.util.Optional;
18 public class BandwidthProfileComposition {
20 public enum BwpDirection {
25 public enum BwpApplicability {
31 public static BandwidthProfileCompositionBuilder builder() {
32 return new BandwidthProfileCompositionBuilder();
35 private static Optional<GNRPBwpFlow> convert(Optional<? extends GNRPBwpFlow> input) {
36 if(input.isPresent()) {
37 return Optional.of(input.get());
40 return Optional.empty();
43 private Optional<IngressBwpFlow> ingressBwProfilePerEvc;
45 private Optional<EgressBwpFlow> egressBwProfilePerEvc;
47 private Optional<IngressBwpUni> ingressBwProfilePerUni;
49 private Optional<EgressBwpUni> egressBwProfilePerUni;
51 private Optional<IngressBwpFlow> defaultIngressBwProfile;
53 private Optional<EgressBwpFlow> defaultEgressBwProfile;
55 private BandwidthProfileComposition(BandwidthProfileCompositionBuilder builder) {
56 this.ingressBwProfilePerEvc = builder.ingressBwProfilePerEvc;
57 this.egressBwProfilePerEvc = builder.egressBwProfilePerEvc;
58 this.ingressBwProfilePerUni = builder.ingressBwProfilePerUni;
59 this.egressBwProfilePerUni = builder.egressBwProfilePerUni;
60 this.defaultIngressBwProfile = builder.defaultIngressBwProfile;
61 this.defaultEgressBwProfile = builder.defaultEgressBwProfile;
64 public Optional<IngressBwpFlow> getIngressBwProfilePerEvc() {
65 return ingressBwProfilePerEvc;
68 public Optional<EgressBwpFlow> getEgressBwProfilePerEvc() {
69 return egressBwProfilePerEvc;
72 public Optional<IngressBwpUni> getIngressBwProfilePerUni() {
73 return ingressBwProfilePerUni;
76 public Optional<EgressBwpUni> getEgressBwProfilePerUni() {
77 return egressBwProfilePerUni;
80 public Optional<IngressBwpFlow> getDefaultIngressBwProfile() {
81 return defaultIngressBwProfile;
84 public Optional<EgressBwpFlow> getDefaultEgressBwProfile() {
85 return defaultEgressBwProfile;
88 public Optional<GNRPBwpFlow> get(BwpDirection direction, BwpApplicability applicability) {
91 switch(applicability) {
93 return convert(defaultIngressBwProfile);
95 return convert(ingressBwProfilePerEvc);
97 return convert(ingressBwProfilePerUni);
99 return Optional.empty();
102 switch(applicability) {
104 return convert(defaultEgressBwProfile);
106 return convert(egressBwProfilePerEvc);
108 return convert(egressBwProfilePerUni);
110 return Optional.empty();
113 return Optional.empty();
117 public boolean hasAnyProfileDefined() {
118 return ingressBwProfilePerEvc.isPresent() ||
119 egressBwProfilePerEvc.isPresent() ||
120 ingressBwProfilePerUni.isPresent() ||
121 egressBwProfilePerUni.isPresent() ||
122 defaultIngressBwProfile.isPresent() ||
123 defaultEgressBwProfile.isPresent();
126 public static class BandwidthProfileCompositionBuilder {
127 private Optional<IngressBwpFlow> ingressBwProfilePerEvc;
129 private Optional<EgressBwpFlow> egressBwProfilePerEvc;
131 private Optional<IngressBwpUni> ingressBwProfilePerUni;
133 private Optional<EgressBwpUni> egressBwProfilePerUni;
135 private Optional<IngressBwpFlow> defaultIngressBwProfile;
137 private Optional<EgressBwpFlow> defaultEgressBwProfile;
139 private BandwidthProfileCompositionBuilder() {
140 ingressBwProfilePerEvc = Optional.empty();
141 egressBwProfilePerEvc = Optional.empty();
142 ingressBwProfilePerUni = Optional.empty();
143 egressBwProfilePerUni = Optional.empty();
144 defaultIngressBwProfile = Optional.empty();
145 defaultEgressBwProfile = Optional.empty();
148 public BandwidthProfileCompositionBuilder ingressBwProfilePerEvc(Optional<IngressBwpFlow> ingressBwProfilePerEvc) {
149 this.ingressBwProfilePerEvc = ingressBwProfilePerEvc;
153 public BandwidthProfileCompositionBuilder egressBwProfilePerEvc(Optional<EgressBwpFlow> egressBwProfilePerEvc) {
154 this.egressBwProfilePerEvc = egressBwProfilePerEvc;
158 public BandwidthProfileCompositionBuilder ingressBwProfilePerUni(Optional<IngressBwpUni> ingressBwProfilePerUni) {
159 this.ingressBwProfilePerUni = ingressBwProfilePerUni;
163 public BandwidthProfileCompositionBuilder egressBwProfilePerUni(Optional<EgressBwpUni> egressBwProfilePerUni) {
164 this.egressBwProfilePerUni = egressBwProfilePerUni;
168 public BandwidthProfileCompositionBuilder defaultIngressBwProfile(Optional<IngressBwpFlow> defaultIngressBwProfile) {
169 this.defaultIngressBwProfile = defaultIngressBwProfile;
173 public BandwidthProfileCompositionBuilder defaultEgressBwProfile(Optional<EgressBwpFlow> defaultEgressBwProfile) {
174 this.defaultEgressBwProfile = defaultEgressBwProfile;
178 public BandwidthProfileComposition build() {
179 return new BandwidthProfileComposition(this);