blob: 2b2d7b679c25493ab36017c6cfa58570bd7ba05a [file] [log] [blame]
Boyoung Jeong9e8faec2018-06-17 21:19:23 +09001/*
2 * Copyright 2018-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.openstacktelemetry.impl;
17
18import com.google.common.base.MoreObjects;
19import org.onlab.packet.IpPrefix;
20import org.onlab.packet.TpPort;
21import org.onosproject.openstacktelemetry.api.StatsFlowRule;
22
Jian Liae3fcff2018-07-30 11:55:44 +090023import java.util.Objects;
24
Boyoung Jeong9e8faec2018-06-17 21:19:23 +090025import static com.google.common.base.Preconditions.checkArgument;
26
27public final class DefaultStatsFlowRule implements StatsFlowRule {
28 private final IpPrefix srcIpPrefix;
29 private final IpPrefix dstIpPrefix;
30 private final byte ipProtocol;
Boyoung Jeong4d1c9d12018-07-20 17:09:20 +090031 private final TpPort srcTpPort;
Boyoung Jeong9e8faec2018-06-17 21:19:23 +090032 private final TpPort dstTpPort;
33
34 private static final String NOT_NULL_MSG = "Element % cannot be null";
35
36 protected DefaultStatsFlowRule(IpPrefix srcIpPrefix,
37 IpPrefix dstIpPrefix,
38 byte ipProtoco,
39 TpPort srcTpPort,
40 TpPort dstTpPort) {
41 this.srcIpPrefix = srcIpPrefix;
42 this.dstIpPrefix = dstIpPrefix;
43 this.ipProtocol = ipProtoco;
44 this.srcTpPort = srcTpPort;
45 this.dstTpPort = dstTpPort;
46 }
47
48 @Override
49 public IpPrefix srcIpPrefix() {
50 return srcIpPrefix;
51 }
52
53 @Override
54 public IpPrefix dstIpPrefix() {
55 return dstIpPrefix;
56 }
57
58 @Override
59 public byte ipProtocol() {
60 return ipProtocol;
61 }
62
63 @Override
64 public TpPort srcTpPort() {
65 return srcTpPort;
66 }
67
68 @Override
69 public TpPort dstTpPort() {
70 return dstTpPort;
71 }
72
73 @Override
74 public String toString() {
75 return MoreObjects.toStringHelper(getClass())
76 .add("srcIpPrefix", srcIpPrefix)
77 .add("dstIpPrefix", dstIpPrefix)
78 .add("ipProtocol", ipProtocol)
79 .add("srcTpPort", srcTpPort)
80 .add("dstTpPort", dstTpPort)
81 .toString();
82 }
83
Jian Liae3fcff2018-07-30 11:55:44 +090084 @Override
85 public boolean equals(Object obj) {
86 if (this == obj) {
87 return true;
88 }
89
90 if (obj instanceof DefaultStatsFlowRule) {
91 final DefaultStatsFlowRule other = (DefaultStatsFlowRule) obj;
92 return Objects.equals(this.srcIpPrefix, other.srcIpPrefix) &&
93 Objects.equals(this.dstIpPrefix, other.dstIpPrefix) &&
94 Objects.equals(this.srcTpPort, other.srcTpPort) &&
95 Objects.equals(this.dstTpPort, other.dstTpPort) &&
96 Objects.equals(this.ipProtocol, other.ipProtocol);
97 }
98 return false;
99 }
100
101 @Override
102 public int hashCode() {
103 return Objects.hash(srcIpPrefix, dstIpPrefix, srcTpPort, dstTpPort, ipProtocol);
104 }
105
106 /**
107 * Obtains a default stats flow rule builder object.
108 *
109 * @return flow rule builder object
110 */
Boyoung Jeong9e8faec2018-06-17 21:19:23 +0900111 public static Builder builder() {
112 return new Builder();
113 }
114
Jian Liae3fcff2018-07-30 11:55:44 +0900115 /**
116 * Obtains the builder object existing flow rule.
117 *
118 * @param flowRule flow rule
119 * @return builder object
120 */
Boyoung Jeong9e8faec2018-06-17 21:19:23 +0900121 public static Builder from(StatsFlowRule flowRule) {
122 return new Builder()
123 .srcIpPrefix(flowRule.srcIpPrefix())
124 .dstIpPrefix(flowRule.dstIpPrefix())
125 .ipProtocol(flowRule.ipProtocol())
126 .srcTpPort(flowRule.srcTpPort())
127 .dstTpPort(flowRule.dstTpPort());
128 }
129
130 /**
131 * A builder class for openstack flow rule.
132 */
133 public static final class Builder implements StatsFlowRule.Builder {
134 private IpPrefix srcIpPrefix;
135 private IpPrefix dstIpPrefix;
136 private byte ipProtocol;
137 private TpPort srcTpPort;
138 private TpPort dstTpPort;
139
140 // private constructor not intended to use from external
141 private Builder() {
142 }
143
144 @Override
145 public DefaultStatsFlowRule build() {
146 checkArgument(srcIpPrefix != null, NOT_NULL_MSG, "Source IP Prefix");
147 checkArgument(dstIpPrefix != null, NOT_NULL_MSG, "Destination IP Prefix");
148
149 return new DefaultStatsFlowRule(srcIpPrefix,
150 dstIpPrefix,
151 ipProtocol,
152 srcTpPort,
153 dstTpPort);
154 }
155
156 @Override
157 public Builder srcIpPrefix(IpPrefix srcIpPrefix) {
158 this.srcIpPrefix = srcIpPrefix;
159 return this;
160 }
161
162 @Override
163 public Builder dstIpPrefix(IpPrefix dstIpPrefix) {
164 this.dstIpPrefix = dstIpPrefix;
165 return this;
166 }
167
168 @Override
169 public Builder ipProtocol(byte ipProtocol) {
170 this.ipProtocol = ipProtocol;
171 return this;
172 }
173
174 @Override
175 public Builder srcTpPort(TpPort srcTpPort) {
176 this.srcTpPort = srcTpPort;
177 return this;
178 }
179
180 @Override
181 public Builder dstTpPort(TpPort dstTpPort) {
182 this.dstTpPort = dstTpPort;
183 return this;
184 }
185 }
186}