blob: f74ff040d87ab0e165e47aba524c01da7e013c6b [file] [log] [blame]
Sean Condon0e89bda2017-03-21 14:23:19 +00001/*
2 * Copyright 2017-present Open Networking Foundation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.onosproject.incubator.net.l2monitoring.soam.delay;
17
18import java.util.ArrayList;
19import java.util.Collection;
20
21import org.onosproject.incubator.net.l2monitoring.cfm.Mep.Priority;
22import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MepId;
23import org.onosproject.incubator.net.l2monitoring.soam.DefaultMeasurementCreateBase;
24import org.onosproject.incubator.net.l2monitoring.soam.SoamConfigException;
25
26/**
27 * The default implementation of {@link org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementCreate}.
28 */
29public class DefaultDelayMeasurementCreate extends DefaultMeasurementCreateBase
30 implements DelayMeasurementCreate {
31
32 protected final DmType dmCfgType;
33 protected final Collection<MeasurementOption> measurementsEnabled;
34 protected final Short binsPerFdInterval;
35 protected final Short binsPerIfdvInterval;
36 protected final Short ifdvSelectionOffset;
37 protected final Short binsPerFdrInterval;
38 protected final Collection<DelayMeasurementThreshold> thresholds;
39
40 protected DefaultDelayMeasurementCreate(DefaultDmCreateBuilder builder) {
41 super(builder);
42 this.dmCfgType = builder.dmCfgType;
43 this.measurementsEnabled = builder.measurementsEnabled;
44 this.binsPerFdInterval = builder.binsPerFdInterval;
45 this.binsPerIfdvInterval = builder.binsPerIfdvInterval;
46 this.ifdvSelectionOffset = builder.ifdvSelectionOffset;
47 this.binsPerFdrInterval = builder.binsPerFdrInterval;
48 this.thresholds = builder.thresholds;
49 }
50
51 @Override
52 public DmType dmCfgType() {
53 return dmCfgType;
54 }
55
56 @Override
57 public Collection<MeasurementOption> measurementsEnabled() {
58 return measurementsEnabled;
59 }
60
61 @Override
62 public Short binsPerFdInterval() {
63 return binsPerFdInterval;
64 }
65
66 @Override
67 public Short binsPerIfdvInterval() {
68 return binsPerIfdvInterval;
69 }
70
71 @Override
72 public Short ifdvSelectionOffset() {
73 return ifdvSelectionOffset;
74 }
75
76 @Override
77 public Short binsPerFdrInterval() {
78 return binsPerFdrInterval;
79 }
80
81 @Override
82 public Collection<DelayMeasurementThreshold> thresholds() {
83 return thresholds;
84 }
85
86 public static DmCreateBuilder builder(DmType dmCfgType,
87 Version version, MepId remoteMepId, Priority priority)
88 throws SoamConfigException {
89 return new DefaultDmCreateBuilder(dmCfgType, version, remoteMepId, priority);
90 }
91
92 /**
93 * Builder for {@link org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementCreate}.
94 */
95 protected static class DefaultDmCreateBuilder extends DefaultMeasCreateBaseBuilder
96 implements DmCreateBuilder {
97 protected final DmType dmCfgType;
98
99 protected Collection<MeasurementOption> measurementsEnabled;
100 protected Short binsPerFdInterval;
101 protected Short binsPerIfdvInterval;
102 protected Short ifdvSelectionOffset;
103 protected Short binsPerFdrInterval;
104 protected Collection<DelayMeasurementThreshold> thresholds;
105
106 protected DefaultDmCreateBuilder(DmType dmCfgType, Version version,
107 MepId remoteMepId, Priority priority)
108 throws SoamConfigException {
109 super(version, remoteMepId, priority);
110 this.dmCfgType = dmCfgType;
111 measurementsEnabled = new ArrayList<>();
112 thresholds = new ArrayList<>();
113 }
114
115 @Override
116 public DmCreateBuilder addToMeasurementsEnabled(
117 MeasurementOption measurementEnabled) {
118 this.measurementsEnabled.add(measurementEnabled);
119 return this;
120 }
121
122 @Override
123 public DmCreateBuilder binsPerFdInterval(Short binsPerFdInterval)
124 throws SoamConfigException {
125 if (binsPerFdInterval < 2 || binsPerFdInterval > 100) {
126 throw new SoamConfigException(
127 "Bins Per Fd Interval must be between 2..100. Rejecting: " +
128 binsPerFdInterval);
129 }
130 this.binsPerFdInterval = binsPerFdInterval;
131 return this;
132 }
133
134 @Override
135 public DmCreateBuilder binsPerIfdvInterval(Short binsPerIfdvInterval)
136 throws SoamConfigException {
137 if (binsPerIfdvInterval < 2 || binsPerIfdvInterval > 100) {
138 throw new SoamConfigException(
139 "Bins Per Ifdv Interval must be between 2..100. Rejecting: " +
140 binsPerIfdvInterval);
141 }
142 this.binsPerIfdvInterval = binsPerIfdvInterval;
143 return this;
144 }
145
146 @Override
147 public DmCreateBuilder ifdvSelectionOffset(Short ifdvSelectionOffset)
148 throws SoamConfigException {
149 if (ifdvSelectionOffset < 2 || ifdvSelectionOffset > 100) {
150 throw new SoamConfigException(
151 "IFDV Selection Offset must be between 2..100. Rejecting: " +
152 ifdvSelectionOffset);
153 }
154 this.ifdvSelectionOffset = ifdvSelectionOffset;
155 return this;
156 }
157
158 @Override
159 public DmCreateBuilder binsPerFdrInterval(Short binsPerFdrInterval)
160 throws SoamConfigException {
161 if (binsPerFdrInterval < 2 || binsPerFdrInterval > 100) {
162 throw new SoamConfigException(
163 "Bins Per Fd Interval must be between 2..100. Rejecting: " +
164 binsPerFdrInterval);
165 }
166 this.binsPerFdrInterval = binsPerFdrInterval;
167 return this;
168 }
169
170 @Override
171 public DmCreateBuilder addToThresholds(
172 DelayMeasurementThreshold threshold) {
173 this.thresholds.add(threshold);
174 return this;
175 }
176
177 @Override
178 public DelayMeasurementCreate build() {
179 return new DefaultDelayMeasurementCreate(this);
180 }
181 }
182}