/* * Copyright 2015-present 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.bgpio.protocol.linkstate; import java.util.Iterator; import java.util.List; import java.util.Objects; import org.onosproject.bgpio.protocol.linkstate.BgpNodeLSNlriVer4.ProtocolType; import org.onosproject.bgpio.types.BgpValueType; import com.google.common.base.MoreObjects; /** * This Class stores path Attributes, protocol ID and Identifier of LinkState NLRI. */ public class PathAttrNlriDetails { private List<BgpValueType> pathAttributes; private ProtocolType protocolID; private long identifier; /** * Sets path attribute with specified path attribute. * * @param pathAttributes in update message */ public void setPathAttribute(List<BgpValueType> pathAttributes) { this.pathAttributes = pathAttributes; } /** * Returns path attributes. * * @return path attributes */ public List<BgpValueType> pathAttributes() { return this.pathAttributes; } /** * Sets protocolID with specified protocolID. * * @param protocolID in linkstate nlri */ public void setProtocolID(ProtocolType protocolID) { this.protocolID = protocolID; } /** * Returns protocolID. * * @return protocolID */ public ProtocolType protocolID() { return this.protocolID; } /** * Sets identifier with specified identifier. * * @param identifier in linkstate nlri */ public void setIdentifier(long identifier) { this.identifier = identifier; } /** * Returns Identifier. * * @return Identifier */ public long identifier() { return this.identifier; } @Override public int hashCode() { return Objects.hash(pathAttributes, protocolID, identifier); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj instanceof PathAttrNlriDetails) { int countObjSubTlv = 0; int countOtherSubTlv = 0; boolean isCommonSubTlv = true; PathAttrNlriDetails other = (PathAttrNlriDetails) obj; Iterator<BgpValueType> objListIterator = other.pathAttributes.iterator(); countOtherSubTlv = other.pathAttributes.size(); countObjSubTlv = pathAttributes.size(); if (countObjSubTlv != countOtherSubTlv) { return false; } else { while (objListIterator.hasNext() && isCommonSubTlv) { BgpValueType subTlv = objListIterator.next(); if (pathAttributes.contains(subTlv) && other.pathAttributes.contains(subTlv)) { isCommonSubTlv = Objects.equals(pathAttributes.get(pathAttributes.indexOf(subTlv)), other.pathAttributes.get(other.pathAttributes.indexOf(subTlv))); } else { isCommonSubTlv = false; } } return isCommonSubTlv && Objects.equals(identifier, other.identifier) && Objects.equals(protocolID, other.protocolID); } } return false; } @Override public String toString() { return MoreObjects.toStringHelper(getClass()) .add("identifier", identifier) .add("protocolID", protocolID) .add("pathAttributes", pathAttributes) .toString(); } }