blob: dd3724d38ede654cf573db1b0f43071b4d429328 [file] [log] [blame]
/*
* Copyright 2016 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.tetopology.management.api.link;
import com.google.common.base.MoreObjects;
import com.google.common.base.Objects;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import org.onosproject.tetopology.management.api.EncodingType;
import org.onosproject.tetopology.management.api.SwitchingType;
import org.onosproject.tetopology.management.api.TeStatus;
import java.util.BitSet;
import java.util.List;
/**
* Representation of link common attributes.
*/
public class CommonLinkData {
private final TeStatus adminStatus;
private final TeStatus opStatus;
private final BitSet flags;
private final SwitchingType switchingLayer;
private final EncodingType encodingLayer;
private final ExternalLink externalLink;
private final UnderlayPath underlayPath;
private final TePathAttributes teAttributes;
private final List<Long> interLayerLocks;
private final LinkBandwidth bandwidth;
private final Long adminGroup;
/**
* Creates an instance of CommonLinkData.
*
* @param adminStatus the admin status
* @param opStatus the operational Status
* @param flags the flags
* @param switchingLayer the network layer switching type
* @param encodingLayer the network layer encoding type
* @param externalLink the external link specific attributes
* @param underlayPath the link underlay path and supporting tunnel
* @param teAttributes the link path TE attributes
* @param adminGroup the administrative group
* @param interLayerLocks the supported inter-layer locks
* @param bandwidth the link maximum and available bandwidth at
* each priority level
*/
public CommonLinkData(TeStatus adminStatus,
TeStatus opStatus, BitSet flags, SwitchingType switchingLayer,
EncodingType encodingLayer, ExternalLink externalLink,
UnderlayPath underlayPath, TePathAttributes teAttributes,
Long adminGroup, List<Long> interLayerLocks,
LinkBandwidth bandwidth) {
this.adminStatus = adminStatus;
this.opStatus = opStatus;
this.flags = flags;
this.switchingLayer = switchingLayer;
this.encodingLayer = encodingLayer;
this.externalLink = externalLink;
this.underlayPath = underlayPath;
this.teAttributes = teAttributes;
this.adminGroup = adminGroup;
this.interLayerLocks = interLayerLocks != null ?
Lists.newArrayList(interLayerLocks) : null;
this.bandwidth = bandwidth;
}
/**
* Creates an instance of CommonLinkData with a TeLink.
*
* @param link the TE link
*/
public CommonLinkData(TeLink link) {
this.adminStatus = link.adminStatus();
this.opStatus = link.opStatus();
this.flags = link.flags();
this.switchingLayer = link.switchingLayer();
this.encodingLayer = link.encodingLayer();
this.externalLink = link.externalLink();
this.underlayPath = new UnderlayPath(link);
this.teAttributes = new TePathAttributes(link);
this.adminGroup = link.administrativeGroup();
this.interLayerLocks = link.interLayerLocks() != null ?
Lists.newArrayList(link.interLayerLocks()) : null;
this.bandwidth = new LinkBandwidth(link);
}
/**
* Returns the admin status.
*
* @return the admin status
*/
public TeStatus adminStatus() {
return adminStatus;
}
/**
* Returns the operational status.
*
* @return the optional status
*/
public TeStatus opStatus() {
return opStatus;
}
/**
* Returns the flags.
*
* @return the flags
*/
public BitSet flags() {
return flags;
}
/**
* Returns the network layer switching type for this link.
*
* @return the switching layer type
*/
public SwitchingType switchingLayer() {
return switchingLayer;
}
/**
* Returns the network layer encoding type for this link.
*
* @return the encoding type
*/
public EncodingType encodingLayer() {
return encodingLayer;
}
/**
* Returns the external link.
*
* @return the external link
*/
public ExternalLink externalLink() {
return externalLink;
}
/**
* Returns the link underlay path and tunnel.
*
* @return the underlay path
*/
public UnderlayPath underlayPath() {
return underlayPath;
}
/**
* Returns the path TE attributes.
*
* @return the path TE Attributes
*/
public TePathAttributes teAttributes() {
return teAttributes;
}
/**
* Returns the link administrative group.
*
* @return the admin group
*/
public Long adminGroup() {
return adminGroup;
}
/**
* Returns the supported inter-layer locks.
*
* @return the inter-layer locks
*/
public List<Long> interLayerLocks() {
if (interLayerLocks == null) {
return null;
}
return ImmutableList.copyOf(interLayerLocks);
}
/**
* Returns the link maximum and available bandwidth at each priority level.
*
* @return the bandwidth
*/
public LinkBandwidth bandwidth() {
return bandwidth;
}
@Override
public int hashCode() {
return Objects.hashCode(adminStatus, opStatus, flags, switchingLayer,
encodingLayer, externalLink, underlayPath,
teAttributes, interLayerLocks, bandwidth);
}
@Override
public boolean equals(Object object) {
if (this == object) {
return true;
}
if (object instanceof CommonLinkData) {
CommonLinkData that = (CommonLinkData) object;
return Objects.equal(adminStatus, that.adminStatus) &&
Objects.equal(opStatus, that.opStatus) &&
Objects.equal(flags, that.flags) &&
Objects.equal(switchingLayer, that.switchingLayer) &&
Objects.equal(encodingLayer, that.encodingLayer) &&
Objects.equal(externalLink, that.externalLink) &&
Objects.equal(underlayPath, that.underlayPath) &&
Objects.equal(teAttributes, that.teAttributes) &&
Objects.equal(interLayerLocks, that.interLayerLocks) &&
Objects.equal(bandwidth, that.bandwidth);
}
return false;
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("adminStatus", adminStatus)
.add("opStatus", opStatus)
.add("flags", flags)
.add("switchingLayer", switchingLayer)
.add("encodingLayer", encodingLayer)
.add("externalLink", externalLink)
.add("underlayPath", underlayPath)
.add("teAttributes", teAttributes)
.add("interLayerLocks", interLayerLocks)
.add("bandwidth", bandwidth)
.toString();
}
}