blob: 410c098d33baf48111780ec0069c9c447f92c783 [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) {
86 return null;
87 }
88
89 @Override
90 public KubevirtPort updateDeviceId(DeviceId deviceId) {
91 return null;
92 }
93
94 @Override
95 public boolean equals(Object o) {
96 if (this == o) {
97 return true;
98 }
99 if (o == null || getClass() != o.getClass()) {
100 return false;
101 }
102 DefaultKubevirtPort that = (DefaultKubevirtPort) o;
Jian Li7bca1272021-01-14 11:30:36 +0900103 return networkId.equals(that.networkId) && macAddress.equals(that.macAddress) &&
104 ipAddress.equals(that.ipAddress) && deviceId.equals(that.deviceId) &&
105 portNumber.equals(that.portNumber);
Jian Lie1fe06a2021-01-08 03:18:35 +0900106 }
107
108 @Override
109 public int hashCode() {
Jian Li7bca1272021-01-14 11:30:36 +0900110 return Objects.hash(networkId, macAddress, ipAddress, deviceId, portNumber);
Jian Lie1fe06a2021-01-08 03:18:35 +0900111 }
112
113 @Override
114 public String toString() {
115 return MoreObjects.toStringHelper(this)
Jian Li7bca1272021-01-14 11:30:36 +0900116 .add("networkId", networkId)
Jian Lie1fe06a2021-01-08 03:18:35 +0900117 .add("macAddress", macAddress)
118 .add("ipAddress", ipAddress)
119 .add("deviceId", deviceId)
120 .add("portNumber", portNumber)
121 .toString();
122 }
123
124 /**
125 * Returns new builder instance.
126 *
127 * @return kubevirt port builder
128 */
129 public static Builder builder() {
130 return new Builder();
131 }
132
133 /**
134 * Default builder implementation.
135 */
136 public static final class Builder implements KubevirtPort.Builder {
137
Jian Li7bca1272021-01-14 11:30:36 +0900138 private String networkId;
Jian Lie1fe06a2021-01-08 03:18:35 +0900139 private MacAddress macAddress;
140 private IpAddress ipAddress;
141 private DeviceId deviceId;
142 private PortNumber portNumber;
143
144 // private constructor not intended to use from external
145 private Builder() {
146 }
147
148 @Override
149 public KubevirtPort build() {
Jian Li7bca1272021-01-14 11:30:36 +0900150 checkArgument(networkId != null, NOT_NULL_MSG, "networkId");
Jian Lie1fe06a2021-01-08 03:18:35 +0900151 checkArgument(macAddress != null, NOT_NULL_MSG, "macAddress");
152 checkArgument(ipAddress != null, NOT_NULL_MSG, "ipAddress");
153
Jian Li7bca1272021-01-14 11:30:36 +0900154 return new DefaultKubevirtPort(networkId, macAddress, ipAddress,
155 deviceId, portNumber);
156 }
157
158 @Override
159 public Builder networkId(String networkId) {
160 this.networkId = networkId;
161 return this;
Jian Lie1fe06a2021-01-08 03:18:35 +0900162 }
163
164 @Override
165 public Builder macAddress(MacAddress macAddress) {
166 this.macAddress = macAddress;
167 return this;
168 }
169
170 @Override
171 public Builder ipAddress(IpAddress ipAddress) {
172 this.ipAddress = ipAddress;
173 return this;
174 }
175
176 @Override
177 public Builder deviceId(DeviceId deviceId) {
178 this.deviceId = deviceId;
179 return this;
180 }
181
182 @Override
183 public Builder portNumber(PortNumber portNumber) {
184 this.portNumber = portNumber;
185 return this;
186 }
187 }
188}