blob: 4f7740e593c8b602a63533d44eb91f00fb3114e4 [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.tunnel;
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.path.TePath;
import java.util.List;
/**
* Default TE tunnel implementation.
*/
public class DefaultTeTunnel implements TeTunnel {
private final TeTunnelKey teTunnelKey;
private final String name;
private final Type type;
private final LspProtectionType lspProtectionType;
private final State adminState;
private final TeNodeKey srcNode;
private final TeNodeKey dstNode;
private final TtpKey srcTp;
private final TtpKey dstTp;
private final List<TePath> primaryPaths;
private List<TeTunnelKey> segmentTunnels = null;
private TeTunnelKey e2eTunnel = null;
/**
* Creates a TE tunnel with supplied information.
*
* @param teTunnelKey TE tunnel key
* @param name TE tunnel name
* @param type TE tunnel type
* @param lspProtectionType LSP protection type of the TE tunnel
* @param adminState TE tunnel administrative state
* @param srcNode source TE node
* @param dstNode destination TE node
* @param srcTp source termination point
* @param dstTp destination termination point
* @param primaryPaths primary paths
*/
protected DefaultTeTunnel(TeTunnelKey teTunnelKey, String name, Type type,
LspProtectionType lspProtectionType,
State adminState, TeNodeKey srcNode,
TeNodeKey dstNode, TtpKey srcTp, TtpKey dstTp,
List<TePath> primaryPaths) {
this.teTunnelKey = teTunnelKey;
this.name = name;
this.type = type;
this.lspProtectionType = lspProtectionType;
this.adminState = adminState;
this.srcNode = srcNode;
this.dstNode = dstNode;
this.srcTp = srcTp;
this.dstTp = dstTp;
this.primaryPaths = Lists.newArrayList(primaryPaths);
}
@Override
public TeTunnelKey teTunnelKey() {
return teTunnelKey;
}
@Override
public String name() {
return name;
}
@Override
public Type type() {
return type;
}
@Override
public LspProtectionType lspProtectionType() {
return lspProtectionType;
}
@Override
public State adminStatus() {
return adminState;
}
@Override
public TeNodeKey srcNode() {
return srcNode;
}
@Override
public TeNodeKey dstNode() {
return dstNode;
}
@Override
public List<TePath> primaryPaths() {
return ImmutableList.copyOf(primaryPaths);
}
@Override
public List<TeTunnelKey> segmentTunnels() {
return ImmutableList.copyOf(segmentTunnels);
}
@Override
public void segmentTunnels(List<TeTunnelKey> segmentTunnels) {
this.segmentTunnels = Lists.newArrayList(segmentTunnels);
}
@Override
public TeTunnelKey e2eTunnelKey() {
return e2eTunnel;
}
@Override
public void e2eTunnelKey(TeTunnelKey e2eTunnelKey) {
this.e2eTunnel = e2eTunnelKey;
}
@Override
public TtpKey srcTp() {
return srcTp;
}
@Override
public TtpKey dstTp() {
return dstTp;
}
/**
* Creates a new default TE tunnel builder.
*
* @return default builder
*/
public static Builder builder() {
return new Builder();
}
/**
* Builder for default TE tunnel objects.
*/
public static class Builder {
private TeTunnelKey teTunnelKey = null;
private String name = "";
private Type type = null;
private LspProtectionType lspProtectionType = null;
private State adminState = State.UP;
private TeNodeKey srcNode = null;
private TeNodeKey dstNode = null;
private TtpKey srcTp = null;
private TtpKey dstTp = null;
private List<TePath> primaryPaths = Lists.newArrayList();
/**
* Builds a default TE tunnel object from the accumulated parameters.
*
* @return default TE tunnel object
*/
public DefaultTeTunnel build() {
return new DefaultTeTunnel(teTunnelKey, name, type,
lspProtectionType,
adminState, srcNode, dstNode,
srcTp, dstTp, primaryPaths);
}
/**
* 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 name to be used by this builder.
*
* @param name TE tunnel name
* @return self
*/
public Builder name(String name) {
this.name = name;
return this;
}
/**
* Sets TE tunnel type to be used by this builder.
*
* @param type TE tunnel type
* @return self
*/
public Builder type(Type type) {
this.type = type;
return this;
}
/**
* Sets tunnel LSP protection type to be used by this builder.
*
* @param lspProtectionType protection type
* @return self
*/
public Builder lspProtectionType(LspProtectionType lspProtectionType) {
this.lspProtectionType = lspProtectionType;
return this;
}
/**
* Sets administrative state to be used by this builder.
*
* @param adminState administrative state
* @return self
*/
public Builder adminState(State adminState) {
this.adminState = adminState;
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 point key to be used by this builder.
*
* @param dstTp destination point key
* @return self
*/
public Builder dstTp(TtpKey dstTp) {
this.dstTp = dstTp;
return this;
}
/**
* Sets primary paths to be used by this builder.
*
* @param primaryPaths list of TePath
* @return self
*/
public Builder primaryPaths(List<TePath> primaryPaths) {
if (primaryPaths != null) {
this.primaryPaths = primaryPaths;
}
return this;
}
}
}