| /* |
| * Copyright 2015-present Open Networking Foundation |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.onosproject.vtnrsc; |
| |
| import static com.google.common.base.MoreObjects.toStringHelper; |
| import static com.google.common.base.Preconditions.checkNotNull; |
| |
| import java.util.List; |
| import java.util.Map; |
| import java.util.Objects; |
| import java.util.concurrent.ConcurrentHashMap; |
| |
| import com.google.common.collect.ImmutableList; |
| import com.google.common.collect.ImmutableMap; |
| |
| /** |
| * Implementation of port pair group. |
| */ |
| public final class DefaultPortPairGroup implements PortPairGroup { |
| |
| private final PortPairGroupId portPairGroupId; |
| private final TenantId tenantId; |
| private final String name; |
| private final String description; |
| private final List<PortPairId> portPairList; |
| private final Map<PortPairId, Integer> portPairLoadMap; |
| |
| /** |
| * Default constructor to create Port Pair Group. |
| * |
| * @param portPairGroupId port pair group id |
| * @param tenantId tenant id |
| * @param name name of port pair group |
| * @param description description of port pair group |
| * @param portPairList list of port pairs |
| */ |
| private DefaultPortPairGroup(PortPairGroupId portPairGroupId, TenantId tenantId, |
| String name, String description, |
| List<PortPairId> portPairList) { |
| |
| this.portPairGroupId = portPairGroupId; |
| this.tenantId = tenantId; |
| this.name = name; |
| this.description = description; |
| this.portPairList = portPairList; |
| portPairLoadMap = new ConcurrentHashMap<>(); |
| for (PortPairId portPairId : portPairList) { |
| portPairLoadMap.put(portPairId, new Integer(0)); |
| } |
| } |
| |
| @Override |
| public PortPairGroupId portPairGroupId() { |
| return portPairGroupId; |
| } |
| |
| @Override |
| public TenantId tenantId() { |
| return tenantId; |
| } |
| |
| @Override |
| public String name() { |
| return name; |
| } |
| |
| @Override |
| public String description() { |
| return description; |
| } |
| |
| @Override |
| public List<PortPairId> portPairs() { |
| return ImmutableList.copyOf(portPairList); |
| } |
| |
| @Override |
| public void addLoad(PortPairId portPairId) { |
| int load = portPairLoadMap.get(portPairId); |
| load = load + 1; |
| portPairLoadMap.put(portPairId, new Integer(load)); |
| } |
| |
| @Override |
| public void resetLoad() { |
| for (PortPairId portPairId : portPairList) { |
| portPairLoadMap.put(portPairId, new Integer(0)); |
| } |
| } |
| |
| @Override |
| public int getLoad(PortPairId portPairId) { |
| return portPairLoadMap.get(portPairId); |
| } |
| |
| @Override |
| public Map<PortPairId, Integer> portPairLoadMap() { |
| return ImmutableMap.copyOf(portPairLoadMap); |
| } |
| |
| @Override |
| public int hashCode() { |
| return Objects.hash(portPairGroupId, tenantId, name, description, |
| portPairList); |
| } |
| |
| @Override |
| public boolean equals(Object obj) { |
| if (this == obj) { |
| return true; |
| } |
| if (obj instanceof DefaultPortPairGroup) { |
| DefaultPortPairGroup that = (DefaultPortPairGroup) obj; |
| return Objects.equals(portPairGroupId, that.portPairGroupId) && |
| Objects.equals(tenantId, that.tenantId) && |
| Objects.equals(name, that.name) && |
| Objects.equals(description, that.description) && |
| Objects.equals(portPairList, that.portPairList); |
| } |
| return false; |
| } |
| |
| @Override |
| public boolean exactMatch(PortPairGroup portPairGroup) { |
| return this.equals(portPairGroup) && |
| Objects.equals(this.portPairGroupId, portPairGroup.portPairGroupId()) && |
| Objects.equals(this.tenantId, portPairGroup.tenantId()); |
| } |
| |
| @Override |
| public String toString() { |
| return toStringHelper(this) |
| .add("id", portPairGroupId.toString()) |
| .add("tenantId", tenantId.toString()) |
| .add("name", name) |
| .add("description", description) |
| .add("portPairGroupList", portPairList) |
| .toString(); |
| } |
| |
| /** |
| * To create an instance of the builder. |
| * |
| * @return instance of builder |
| */ |
| public static Builder builder() { |
| return new Builder(); |
| } |
| |
| /** |
| * Builder class for Port pair group. |
| */ |
| public static final class Builder implements PortPairGroup.Builder { |
| |
| private PortPairGroupId portPairGroupId; |
| private TenantId tenantId; |
| private String name; |
| private String description; |
| private List<PortPairId> portPairList; |
| |
| @Override |
| public Builder setId(PortPairGroupId portPairGroupId) { |
| this.portPairGroupId = portPairGroupId; |
| return this; |
| } |
| |
| @Override |
| public Builder setTenantId(TenantId tenantId) { |
| this.tenantId = tenantId; |
| return this; |
| } |
| |
| @Override |
| public Builder setName(String name) { |
| this.name = name; |
| return this; |
| } |
| |
| @Override |
| public Builder setDescription(String description) { |
| this.description = description; |
| return this; |
| } |
| |
| @Override |
| public Builder setPortPairs(List<PortPairId> portPairs) { |
| this.portPairList = portPairs; |
| return this; |
| } |
| |
| @Override |
| public PortPairGroup build() { |
| |
| checkNotNull(portPairGroupId, "Port pair group id cannot be null"); |
| checkNotNull(tenantId, "Tenant id cannot be null"); |
| checkNotNull(portPairList, "Port pairs cannot be null"); |
| |
| return new DefaultPortPairGroup(portPairGroupId, tenantId, name, description, |
| portPairList); |
| } |
| } |
| } |