blob: 4fe0125f01fca037533f3c6a1dc30e45d9c7a38d [file] [log] [blame]
Jian Lie1fe06a2021-01-08 03:18:35 +09001/*
2 * Copyright 2021-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.kubevirtnetworking.api;
17
18import com.google.common.base.MoreObjects;
19import org.onlab.packet.IpAddress;
20import org.onlab.packet.MacAddress;
21import org.onosproject.net.DeviceId;
22import org.onosproject.net.PortNumber;
23
24import java.util.Objects;
25
26import static com.google.common.base.Preconditions.checkArgument;
27
28/**
29 * Default implementation of kubernetes port.
30 */
31public final class DefaultKubevirtPort implements KubevirtPort {
32
33 private static final String NOT_NULL_MSG = "Port % cannot be null";
34
Jian Li7bca1272021-01-14 11:30:36 +090035 private final String networkId;
Jian Lie1fe06a2021-01-08 03:18:35 +090036 private final MacAddress macAddress;
37 private final IpAddress ipAddress;
38 private final DeviceId deviceId;
39 private final PortNumber portNumber;
40
41 /**
42 * Default constructor.
43 *
Jian Li7bca1272021-01-14 11:30:36 +090044 * @param networkId network identifier
Jian Lie1fe06a2021-01-08 03:18:35 +090045 * @param macAddress MAC address
46 * @param ipAddress IP address
47 * @param deviceId device identifier
48 * @param portNumber port number
49 */
Jian Li7bca1272021-01-14 11:30:36 +090050 public DefaultKubevirtPort(String networkId, MacAddress macAddress, IpAddress ipAddress,
Jian Lie1fe06a2021-01-08 03:18:35 +090051 DeviceId deviceId, PortNumber portNumber) {
Jian Li7bca1272021-01-14 11:30:36 +090052 this.networkId = networkId;
Jian Lie1fe06a2021-01-08 03:18:35 +090053 this.macAddress = macAddress;
54 this.ipAddress = ipAddress;
55 this.deviceId = deviceId;
56 this.portNumber = portNumber;
57 }
58
59 @Override
Jian Li7bca1272021-01-14 11:30:36 +090060 public String networkId() {
61 return networkId;
62 }
63
64 @Override
Jian Lie1fe06a2021-01-08 03:18:35 +090065 public MacAddress macAddress() {
66 return macAddress;
67 }
68
69 @Override
70 public IpAddress ipAddress() {
71 return ipAddress;
72 }
73
74 @Override
75 public DeviceId deviceId() {
76 return deviceId;
77 }
78
79 @Override
80 public PortNumber portNumber() {
81 return portNumber;
82 }
83
84 @Override
85 public KubevirtPort updatePortNumber(PortNumber portNumber) {
Jian Li60df92d2021-01-17 04:26:18 +090086 return new Builder()
87 .networkId(networkId)
88 .macAddress(macAddress)
89 .ipAddress(ipAddress)
90 .deviceId(deviceId)
91 .portNumber(portNumber)
92 .build();
Jian Lie1fe06a2021-01-08 03:18:35 +090093 }
94
95 @Override
96 public KubevirtPort updateDeviceId(DeviceId deviceId) {
Jian Li60df92d2021-01-17 04:26:18 +090097 return new Builder()
98 .networkId(networkId)
99 .macAddress(macAddress)
100 .ipAddress(ipAddress)
101 .deviceId(deviceId)
102 .portNumber(portNumber)
103 .build();
Jian Lie1fe06a2021-01-08 03:18:35 +0900104 }
105
106 @Override
107 public boolean equals(Object o) {
108 if (this == o) {
109 return true;
110 }
111 if (o == null || getClass() != o.getClass()) {
112 return false;
113 }
114 DefaultKubevirtPort that = (DefaultKubevirtPort) o;
Jian Li7bca1272021-01-14 11:30:36 +0900115 return networkId.equals(that.networkId) && macAddress.equals(that.macAddress) &&
116 ipAddress.equals(that.ipAddress) && deviceId.equals(that.deviceId) &&
117 portNumber.equals(that.portNumber);
Jian Lie1fe06a2021-01-08 03:18:35 +0900118 }
119
120 @Override
121 public int hashCode() {
Jian Li7bca1272021-01-14 11:30:36 +0900122 return Objects.hash(networkId, macAddress, ipAddress, deviceId, portNumber);
Jian Lie1fe06a2021-01-08 03:18:35 +0900123 }
124
125 @Override
126 public String toString() {
127 return MoreObjects.toStringHelper(this)
Jian Li7bca1272021-01-14 11:30:36 +0900128 .add("networkId", networkId)
Jian Lie1fe06a2021-01-08 03:18:35 +0900129 .add("macAddress", macAddress)
130 .add("ipAddress", ipAddress)
131 .add("deviceId", deviceId)
132 .add("portNumber", portNumber)
133 .toString();
134 }
135
136 /**
137 * Returns new builder instance.
138 *
139 * @return kubevirt port builder
140 */
141 public static Builder builder() {
142 return new Builder();
143 }
144
145 /**
146 * Default builder implementation.
147 */
148 public static final class Builder implements KubevirtPort.Builder {
149
Jian Li7bca1272021-01-14 11:30:36 +0900150 private String networkId;
Jian Lie1fe06a2021-01-08 03:18:35 +0900151 private MacAddress macAddress;
152 private IpAddress ipAddress;
153 private DeviceId deviceId;
154 private PortNumber portNumber;
155
156 // private constructor not intended to use from external
157 private Builder() {
158 }
159
160 @Override
161 public KubevirtPort build() {
Jian Li7bca1272021-01-14 11:30:36 +0900162 checkArgument(networkId != null, NOT_NULL_MSG, "networkId");
Jian Lie1fe06a2021-01-08 03:18:35 +0900163 checkArgument(macAddress != null, NOT_NULL_MSG, "macAddress");
164 checkArgument(ipAddress != null, NOT_NULL_MSG, "ipAddress");
165
Jian Li7bca1272021-01-14 11:30:36 +0900166 return new DefaultKubevirtPort(networkId, macAddress, ipAddress,
167 deviceId, portNumber);
168 }
169
170 @Override
171 public Builder networkId(String networkId) {
172 this.networkId = networkId;
173 return this;
Jian Lie1fe06a2021-01-08 03:18:35 +0900174 }
175
176 @Override
177 public Builder macAddress(MacAddress macAddress) {
178 this.macAddress = macAddress;
179 return this;
180 }
181
182 @Override
183 public Builder ipAddress(IpAddress ipAddress) {
184 this.ipAddress = ipAddress;
185 return this;
186 }
187
188 @Override
189 public Builder deviceId(DeviceId deviceId) {
190 this.deviceId = deviceId;
191 return this;
192 }
193
194 @Override
195 public Builder portNumber(PortNumber portNumber) {
196 this.portNumber = portNumber;
197 return this;
198 }
199 }
200}