/* * Copyright 2015 Open Networking Laboratory * * 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.Objects; import com.google.common.collect.ImmutableList; /** * Implementation of port chain. */ public final class DefaultPortChain implements PortChain { private final PortChainId portChainId; private final TenantId tenantId; private final String name; private final String description; private final List portPairGroupList; private final List flowClassifierList; /** * Default constructor to create port chain. * * @param portChainId port chain id * @param tenantId tenant id * @param name name of port chain * @param description description of port chain * @param portPairGroupList port pair group list * @param flowClassifierList flow classifier list */ private DefaultPortChain(PortChainId portChainId, TenantId tenantId, String name, String description, List portPairGroupList, List flowClassifierList) { this.portChainId = portChainId; this.tenantId = tenantId; this.name = name; this.description = description; this.portPairGroupList = portPairGroupList; this.flowClassifierList = flowClassifierList; } @Override public PortChainId portChainId() { return portChainId; } @Override public TenantId tenantId() { return tenantId; } @Override public String name() { return name; } @Override public String description() { return description; } @Override public List portPairGroups() { return ImmutableList.copyOf(portPairGroupList); } @Override public List flowClassifiers() { return ImmutableList.copyOf(flowClassifierList); } @Override public int hashCode() { return Objects.hash(portChainId, tenantId, name, description, portPairGroupList, flowClassifierList); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj instanceof DefaultPortChain) { DefaultPortChain that = (DefaultPortChain) obj; return Objects.equals(portChainId, that.portChainId) && Objects.equals(tenantId, that.tenantId) && Objects.equals(name, that.name) && Objects.equals(description, that.description) && Objects.equals(portPairGroupList, that.portPairGroupList) && Objects.equals(flowClassifierList, that.flowClassifierList); } return false; } @Override public boolean exactMatch(PortChain portChain) { return this.equals(portChain) && Objects.equals(this.portChainId, portChain.portChainId()) && Objects.equals(this.tenantId, portChain.tenantId()); } @Override public String toString() { return toStringHelper(this) .add("id", portChainId.toString()) .add("tenantId", tenantId.toString()) .add("name", name) .add("description", description) .add("portPairGroupList", portPairGroupList) .add("flowClassifier", flowClassifierList) .toString(); } /** * To create an instance of the builder. * * @return instance of builder */ public static Builder builder() { return new Builder(); } /** * Builder class for Port chain. */ public static final class Builder implements PortChain.Builder { private PortChainId portChainId; private TenantId tenantId; private String name; private String description; private List portPairGroupList; private List flowClassifierList; @Override public Builder setId(PortChainId portChainId) { this.portChainId = portChainId; 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 setPortPairGroups(List portPairGroups) { this.portPairGroupList = portPairGroups; return this; } @Override public Builder setFlowClassifiers(List flowClassifiers) { this.flowClassifierList = flowClassifiers; return this; } @Override public PortChain build() { checkNotNull(portChainId, "Port chain id cannot be null"); checkNotNull(tenantId, "Tenant id cannot be null"); checkNotNull(portPairGroupList, "Port pair groups cannot be null"); return new DefaultPortChain(portChainId, tenantId, name, description, portPairGroupList, flowClassifierList); } } }