| /* |
| * 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; |
| } |
| } |
| } |