/* * 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.net.intent; import com.google.common.annotations.Beta; import com.google.common.base.MoreObjects; import org.onosproject.core.ApplicationId; import org.onosproject.net.CltSignalType; import org.onosproject.net.ConnectPoint; import org.onosproject.net.ResourceGroup; import java.util.Collections; import static com.google.common.base.Preconditions.checkNotNull; /** * An optical layer intent for circuits between two OduClt ports. * No traffic selector or traffic treatment are needed. */ @Beta public class OpticalCircuitIntent extends Intent { private final ConnectPoint src; private final ConnectPoint dst; private final CltSignalType signalType; private final boolean isBidirectional; /** * Creates an optical circuit intent between the specified * connection points. * * @param appId application identification * @param key intent key * @param src the source transponder port * @param dst the destination transponder port * @param signalType ODU signal type * @param isBidirectional indicate if intent is bidirectional * @param priority priority to use for flows from this intent * @deprecated 1.9.1 */ @Deprecated protected OpticalCircuitIntent(ApplicationId appId, Key key, ConnectPoint src, ConnectPoint dst, CltSignalType signalType, boolean isBidirectional, int priority) { super(appId, key, Collections.emptyList(), priority, null); this.src = checkNotNull(src); this.dst = checkNotNull(dst); this.signalType = checkNotNull(signalType); this.isBidirectional = isBidirectional; } /** * Creates an optical circuit intent between the specified * connection points. * * @param appId application identification * @param key intent key * @param src the source transponder port * @param dst the destination transponder port * @param signalType ODU signal type * @param isBidirectional indicate if intent is bidirectional * @param priority priority to use for flows from this intent * @param resourceGroup resource group for this intent */ protected OpticalCircuitIntent(ApplicationId appId, Key key, ConnectPoint src, ConnectPoint dst, CltSignalType signalType, boolean isBidirectional, int priority, ResourceGroup resourceGroup) { super(appId, key, Collections.emptyList(), priority, resourceGroup); this.src = checkNotNull(src); this.dst = checkNotNull(dst); this.signalType = checkNotNull(signalType); this.isBidirectional = isBidirectional; } /** * Returns a new optical circuit intent builder. * * @return host to host intent builder */ public static Builder builder() { return new Builder(); } /** * Builder for optical circuit intents. */ public static class Builder extends Intent.Builder { private ConnectPoint src; private ConnectPoint dst; private CltSignalType signalType; private boolean isBidirectional; @Override public Builder appId(ApplicationId appId) { return (Builder) super.appId(appId); } @Override public Builder key(Key key) { return (Builder) super.key(key); } @Override public Builder priority(int priority) { return (Builder) super.priority(priority); } @Override public Builder resourceGroup(ResourceGroup resourceGroup) { return (Builder) super.resourceGroup(resourceGroup); } /** * Sets the source for the intent that will be built. * * @param src source to use for built intent * @return this builder */ public Builder src(ConnectPoint src) { this.src = src; return this; } /** * Sets the destination for the intent that will be built. * * @param dst dest to use for built intent * @return this builder */ public Builder dst(ConnectPoint dst) { this.dst = dst; return this; } /** * Sets the ODU signal type for the intent that will be built. * * @param signalType signal type to use for built intent * @return this builder */ public Builder signalType(CltSignalType signalType) { this.signalType = signalType; return this; } /** * Sets the directionality of the intent. * * @param isBidirectional true if bidirectional, false if unidirectional * @return this builder */ public Builder bidirectional(boolean isBidirectional) { this.isBidirectional = isBidirectional; return this; } /** * Builds an optical circuit intent from the accumulated parameters. * * @return point to point intent */ public OpticalCircuitIntent build() { return new OpticalCircuitIntent( appId, key, src, dst, signalType, isBidirectional, priority, resourceGroup ); } } /** * Constructor for serializer. */ protected OpticalCircuitIntent() { super(); this.src = null; this.dst = null; this.signalType = null; this.isBidirectional = false; } /** * Returns the source transponder port. * * @return source transponder port */ public ConnectPoint getSrc() { return src; } /** * Returns the destination transponder port. * * @return source transponder port */ public ConnectPoint getDst() { return dst; } /** * Returns the ODU signal type. * * @return ODU signal type */ public CltSignalType getSignalType() { return signalType; } /** * Returns the directionality of the intent. * * @return true if bidirectional, false if unidirectional */ public boolean isBidirectional() { return isBidirectional; } @Override public String toString() { return MoreObjects.toStringHelper(this) .add("id", id()) .add("key", key()) .add("appId", appId()) .add("priority", priority()) .add("resources", resources()) .add("src", src) .add("dst", dst) .add("signalType", signalType) .add("isBidirectional", isBidirectional) .add("resourceGroup", resourceGroup()) .toString(); } }