blob: 2f759004176232ae152b873a789a68f9bbbdd66e [file] [log] [blame]
/*
* Copyright 2016-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.tetunnel.api.lsp;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import org.onosproject.tetopology.management.api.node.TeNodeKey;
import org.onosproject.tetopology.management.api.node.TtpKey;
import org.onosproject.tetunnel.api.tunnel.TeTunnel;
import org.onosproject.tetunnel.api.tunnel.TeTunnelKey;
import org.onosproject.tetunnel.api.tunnel.path.TeRouteSubobject;
import java.util.List;
/**
* Default implementation of TE LSP.
*/
public class DefaultTeLsp implements TeLsp {
private final TeLspKey teLspKey;
private final TeNodeKey srcNode;
private final TeNodeKey dstNode;
private final TtpKey srcTp;
private final TtpKey dstTp;
private final TeTunnelKey teTunnelKey;
private final TeTunnel.Type tunnelType;
private final TeTunnel.State operStatus;
private final LspProtectionRole lspProtectionRole;
private final OriginType originType;
private final List<TeRouteSubobject> lspRecordRoutes;
/**
* Creates an instance of default TE LSP with supplied information.
*
* @param teLspKey TE LSP key
* @param srcNode source TE node key
* @param dstNode destination TE node key
* @param srcTp source TE termination point key
* @param dstTp destination TE termination point key
* @param teTunnelKey TE tunnel key
* @param tunnelType TE tunnel type
* @param operStatus operational status
* @param lspProtectionRole protection type
* @param originType origin type
* @param lspRecordRoutes route of the LSP
*/
protected DefaultTeLsp(TeLspKey teLspKey, TeNodeKey srcNode, TeNodeKey dstNode,
TtpKey srcTp, TtpKey dstTp, TeTunnelKey teTunnelKey,
TeTunnel.Type tunnelType, TeTunnel.State operStatus,
LspProtectionRole lspProtectionRole,
OriginType originType,
List<TeRouteSubobject> lspRecordRoutes) {
this.srcNode = srcNode;
this.dstNode = dstNode;
this.srcTp = srcTp;
this.dstTp = dstTp;
this.teTunnelKey = teTunnelKey;
this.tunnelType = tunnelType;
this.operStatus = operStatus;
this.lspProtectionRole = lspProtectionRole;
this.originType = originType;
this.lspRecordRoutes = Lists.newArrayList(lspRecordRoutes);
this.teLspKey = teLspKey;
}
@Override
public TeLspKey teLspKey() {
return teLspKey;
}
@Override
public TeNodeKey srcNode() {
return srcNode;
}
@Override
public TeNodeKey dstNode() {
return dstNode;
}
@Override
public TtpKey srcTp() {
return srcTp;
}
@Override
public TtpKey dstTp() {
return dstTp;
}
@Override
public TeTunnelKey teTunnelKey() {
return teTunnelKey;
}
@Override
public TeTunnel.Type tunnelType() {
return tunnelType;
}
@Override
public TeTunnel.State operStatus() {
return operStatus;
}
@Override
public LspProtectionRole lspProtectionRole() {
return lspProtectionRole;
}
@Override
public OriginType originType() {
return originType;
}
@Override
public List<TeRouteSubobject> lspRecordRoutes() {
return ImmutableList.copyOf(lspRecordRoutes);
}
/**
* Creates a new default TE LSP builder.
*
* @return default builder
*/
public static Builder builder() {
return new Builder();
}
/**
* Builder for default TE LSP objects.
*/
public static class Builder {
private TeLspKey teLspKey = null;
private TeNodeKey srcNode = null;
private TeNodeKey dstNode = null;
private TtpKey srcTp = null;
private TtpKey dstTp = null;
private TeTunnelKey teTunnelKey = null;
private TeTunnel.Type tunnelType = null;
private TeTunnel.State operStatus = null;
private LspProtectionRole lspProtectionRole = null;
private OriginType originType = null;
private List<TeRouteSubobject> lspRecordRoutes = Lists.newArrayList();
/**
* Builds a default TE LSP object from the accumulated parameters.
*
* @return default TE LSP object
*/
public DefaultTeLsp build() {
return new DefaultTeLsp(teLspKey, srcNode, dstNode, srcTp, dstTp,
teTunnelKey, tunnelType, operStatus,
lspProtectionRole, originType,
lspRecordRoutes);
}
/**
* Sets TE LSP key to be used by this builder.
*
* @param teLspKey TE LSP key
* @return self
*/
public Builder teLspKey(TeLspKey teLspKey) {
this.teLspKey = teLspKey;
return this;
}
/**
* Sets source node key to be used by this builder.
*
* @param srcNode source node key
* @return self
*/
public Builder srcNode(TeNodeKey srcNode) {
this.srcNode = srcNode;
return this;
}
/**
* Sets destination node key to be used by this builder.
*
* @param dstNode destination node key
* @return self
*/
public Builder dstNode(TeNodeKey dstNode) {
this.dstNode = dstNode;
return this;
}
/**
* Sets source termination point key to be used by this builder.
*
* @param srcTp source termination point key
* @return self
*/
public Builder srcTp(TtpKey srcTp) {
this.srcTp = srcTp;
return this;
}
/**
* Sets destination termination point key to be used by this builder.
*
* @param dstTp destination termination point key
* @return self
*/
public Builder dstTp(TtpKey dstTp) {
this.dstTp = dstTp;
return this;
}
/**
* Sets TE tunnel key to be used by this builder.
*
* @param teTunnelKey TE tunnel key
* @return self
*/
public Builder teTunnelKey(TeTunnelKey teTunnelKey) {
this.teTunnelKey = teTunnelKey;
return this;
}
/**
* Sets TE tunnel type to be used by this builder.
*
* @param tunnelType TE tunnel type
* @return self
*/
public Builder tunnelType(TeTunnel.Type tunnelType) {
this.tunnelType = tunnelType;
return this;
}
/**
* Sets LSP operational status to be used by this builder.
*
* @param operStatus LSP operational status
* @return self
*/
public Builder operStatus(TeTunnel.State operStatus) {
this.operStatus = operStatus;
return this;
}
/**
* Sets LSP protection role to be used by this builder.
*
* @param lspProtectionRole LSP protection role
* @return self
*/
public Builder lspProtectionRole(LspProtectionRole lspProtectionRole) {
this.lspProtectionRole = lspProtectionRole;
return this;
}
/**
* Sets LSP origin type to be used by this builder.
*
* @param originType LSP origin type
* @return self
*/
public Builder originType(OriginType originType) {
this.originType = originType;
return this;
}
/**
* Sets LSP record routes to be used by this builder.
*
* @param lspRecordRoutes LSP record routes
* @return self
*/
public Builder lspRecordRoutes(List<TeRouteSubobject> lspRecordRoutes) {
if (lspRecordRoutes != null) {
this.lspRecordRoutes = lspRecordRoutes;
}
return this;
}
}
}