/* * Copyright 2016-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.behaviour.protection; import static com.google.common.base.Preconditions.checkNotNull; import java.util.List; import javax.annotation.concurrent.Immutable; import org.onosproject.net.DeviceId; import com.google.common.annotations.Beta; import com.google.common.base.MoreObjects; import com.google.common.collect.ImmutableList; /** * Configuration for a protected transport entity endpoint. */ @Beta @Immutable public class ProtectedTransportEndpointDescription { /** * List of underlying transport entity endpoints in priority order. */ private final List<TransportEndpointDescription> paths; /** * DeviceId of remote peer of this endpoint. */ private final DeviceId peer; // Note: Do we need opaque configuration? // ⇨ For device specific configuration, // NO, it should be expressed as org.onosproject.net.config.Config // For information needed for caller to correlate Intent to description, // use fingerprint /** * Caller specified fingerprint to identify this protected transport entity. * <p> * Virtual port corresponding to this description, * should have annotations {@link ProtectionConfigBehaviour#FINGERPRINT} * with the value specified by this field. */ private final String fingerprint; /** * Constructor. * * @param paths {@link TransportEndpointDescription}s * @param peer remote peer of this endpoint * @param fingerprint to identify this protected transport entity. */ protected ProtectedTransportEndpointDescription(List<TransportEndpointDescription> paths, DeviceId peer, String fingerprint) { this.paths = ImmutableList.copyOf(paths); this.peer = checkNotNull(peer); this.fingerprint = checkNotNull(fingerprint); } /** * Returns List of underlying transport entity endpoints in priority order. * * @return the transport entity endpoint descriptions */ public List<TransportEndpointDescription> paths() { return paths; } /** * Returns DeviceId of remote peer of this endpoint. * @return the peer */ public DeviceId peer() { return peer; } /** * Returns fingerprint to identify this protected transport entity. * * @return the fingerprint */ public String fingerprint() { return fingerprint; } @Override public String toString() { return MoreObjects.toStringHelper(this) .add("paths", paths) .add("peer", peer) .add("fingerprint", fingerprint) .toString(); } /** * Creates a {@link ProtectedTransportEndpointDescription}. * * @param paths {@link TransportEndpointDescription}s forming protection * @param peer DeviceId of remote peer of this endpoint. * @param fingerprint opaque fingerprint object. must be serializable. * @return {@link TransportEndpointDescription} */ public static final ProtectedTransportEndpointDescription buildDescription(List<TransportEndpointDescription> paths, DeviceId peer, String fingerprint) { return new ProtectedTransportEndpointDescription(paths, peer, fingerprint); } /** * Creates a {@link ProtectedTransportEndpointDescription}. * * @param paths {@link TransportEndpointDescription}s forming protection * @param peer DeviceId of remote peer of this endpoint. * @param fingerprint opaque fingerprint object. must be serializable. * @return {@link TransportEndpointDescription} */ public static final ProtectedTransportEndpointDescription of(List<TransportEndpointDescription> paths, DeviceId peer, String fingerprint) { return new ProtectedTransportEndpointDescription(paths, peer, fingerprint); } }