blob: bd5d99812475c673b5c728fc64a6005acd4871f8 [file] [log] [blame]
Jordi Ortizaa8de492016-12-01 00:21:36 +01001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2015-present Open Networking Foundation
Jordi Ortizaa8de492016-12-01 00:21:36 +01003 *
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.net.meter;
17
18import com.google.common.base.MoreObjects;
cansu.toprak409289d2017-10-27 10:04:05 +030019import com.google.common.collect.Sets;
Jordi Ortizaa8de492016-12-01 00:21:36 +010020import org.onosproject.net.DeviceId;
21
22import java.util.HashSet;
23import java.util.Set;
24
25import static com.google.common.base.Preconditions.checkNotNull;
26
27/**
28 * Default implementation of MeterFeatures.
29 */
30public final class DefaultMeterFeatures implements MeterFeatures {
31 private DeviceId deviceId;
32 private long maxMeter;
33 private Set<Band.Type> bandTypes;
34 private Set<Meter.Unit> units;
35 private boolean burst;
36 private boolean stats;
37 private short maxBands;
38 private short maxColor;
cansu.toprak409289d2017-10-27 10:04:05 +030039 private Set<MeterFeaturesFlag> features;
Jordi Ortizaa8de492016-12-01 00:21:36 +010040
41 private DefaultMeterFeatures(DeviceId did, long maxMeter,
42 Set<Band.Type> bandTypes, Set<Meter.Unit> units,
43 boolean burst, boolean stats,
cansu.toprak409289d2017-10-27 10:04:05 +030044 short maxBands, short maxColor, Set<MeterFeaturesFlag> flag) {
Jordi Ortizaa8de492016-12-01 00:21:36 +010045 this.deviceId = did;
46 this.maxMeter = maxMeter;
47 this.bandTypes = bandTypes;
48 this.burst = burst;
49 this.stats = stats;
50 this.units = units;
51 this.maxBands = maxBands;
52 this.maxColor = maxColor;
cansu.toprak409289d2017-10-27 10:04:05 +030053 this.features = flag;
Jordi Ortizaa8de492016-12-01 00:21:36 +010054 }
55
56 @Override
57 public DeviceId deviceId() {
58 return deviceId;
59 }
60
61 @Override
62 public long maxMeter() {
63 return maxMeter;
64 }
65
66 @Override
67 public Set<Band.Type> bandTypes() {
68 return bandTypes;
69 }
70
71 @Override
72 public Set<Meter.Unit> unitTypes() {
73 return units;
74 }
75
76 @Override
77 public boolean isBurstSupported() {
78 return burst;
79 }
80
81 @Override
82 public boolean isStatsSupported() {
83 return stats;
84 }
85
86 @Override
87 public short maxBands() {
88 return maxBands;
89 }
90
91 @Override
92 public short maxColor() {
93 return maxColor;
94 }
95
cansu.toprak409289d2017-10-27 10:04:05 +030096 @Override
97 public Set<MeterFeaturesFlag> features() {
98 return features;
99 }
100
Jordi Ortizaa8de492016-12-01 00:21:36 +0100101 public static Builder builder() {
102 return new Builder();
103 }
104
105 public static MeterFeatures noMeterFeatures(DeviceId deviceId) {
106 return DefaultMeterFeatures.builder().forDevice(deviceId)
107 .build();
108 }
109
110 @Override
111 public String toString() {
112 return MoreObjects.toStringHelper(getClass())
113 .add("deviceId", deviceId())
114 .add("maxMeter", maxMeter())
115 .add("maxBands", maxBands())
116 .add("maxColor", maxColor())
117 .add("bands", bandTypes())
118 .add("burst", isBurstSupported())
119 .add("stats", isStatsSupported())
120 .add("units", unitTypes())
121 .toString();
122 }
123
124 /**
125 * A DefaultMeterFeatures builder.
126 */
127 public static final class Builder implements MeterFeatures.Builder {
128 private DeviceId did;
129 private long mmeter = 0L;
130 private short mbands = 0;
131 private short mcolors = 0;
132 private Set<Band.Type> bandTypes = new HashSet<>();
133 private Set<Meter.Unit> units1 = new HashSet<>();
134 private boolean burst = false;
135 private boolean stats = false;
cansu.toprak409289d2017-10-27 10:04:05 +0300136 private Set<MeterFeaturesFlag> features = Sets.newHashSet();
Jordi Ortizaa8de492016-12-01 00:21:36 +0100137
138 @Override
139 public MeterFeatures.Builder forDevice(DeviceId deviceId) {
140 did = deviceId;
141 return this;
142 }
143
144 @Override
145 public MeterFeatures.Builder withMaxMeters(long maxMeter) {
146 mmeter = maxMeter;
147 return this;
148 }
149
150 @Override
151 public MeterFeatures.Builder withMaxBands(short maxBands) {
152 mbands = maxBands;
153 return this;
154 }
155
156 @Override
157 public MeterFeatures.Builder withMaxColors(short maxColors) {
158 mcolors = maxColors;
159 return this;
160 }
161
162 @Override
163 public MeterFeatures.Builder withBandTypes(Set<Band.Type> types) {
164 bandTypes = types;
165 return this;
166 }
167
168 @Override
169 public MeterFeatures.Builder withUnits(Set<Meter.Unit> units) {
170 units1 = units;
171 return this;
172 }
173
174 @Override
175 public MeterFeatures.Builder hasBurst(boolean hasBurst) {
176 burst = hasBurst;
177 return this;
178 }
179
180 @Override
181 public MeterFeatures.Builder hasStats(boolean hasStats) {
182 stats = hasStats;
183 return this;
184 }
185
186 @Override
cansu.toprak409289d2017-10-27 10:04:05 +0300187 public MeterFeatures.Builder withFeatures(Set<MeterFeaturesFlag> featureFlags) {
188 features = featureFlags;
189 return this;
190 }
191
192 @Override
Jordi Ortizaa8de492016-12-01 00:21:36 +0100193 public MeterFeatures build() {
194 checkNotNull(did, "Must specify a device");
cansu.toprak409289d2017-10-27 10:04:05 +0300195 return new DefaultMeterFeatures(did, mmeter, bandTypes, units1, burst, stats, mbands, mcolors, features);
Jordi Ortizaa8de492016-12-01 00:21:36 +0100196 }
197 }
198}