/* * 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.intent; import com.google.common.base.MoreObjects; import com.google.common.collect.ImmutableList; import org.onosproject.core.ApplicationId; import org.onosproject.net.DeviceId; import org.onosproject.net.NetworkResource; import org.onosproject.net.ResourceGroup; import org.onosproject.net.flowobjective.Objective; import java.util.Collection; import java.util.List; import static com.google.common.base.Preconditions.checkArgument; /** * Intent expressed as (and backed by) a collection of flow objectives through * which the intent is to be accomplished. */ public final class FlowObjectiveIntent extends Intent { private final List<Objective> objectives; private final List<DeviceId> devices; /** * Constructor for serialization. */ protected FlowObjectiveIntent() { super(); this.objectives = null; this.devices = null; } /** * Creates a flow objective intent with the specified objectives and * resources. * * @param appId application id * @param devices list of target devices; in same order as the objectives * @param objectives backing flow objectives * @param resources backing network resources * @deprecated 1.9.1 */ @Deprecated public FlowObjectiveIntent(ApplicationId appId, List<DeviceId> devices, List<Objective> objectives, Collection<NetworkResource> resources) { this(appId, null, devices, objectives, resources, null); } /** * Creates a flow objective intent with the specified objectives and * resources. * * @param appId application id * @param key intent key * @param devices list of target devices; in same order as the objectives * @param objectives backing flow objectives * @param resources backing network resources * @deprecated 1.9.1 */ @Deprecated public FlowObjectiveIntent(ApplicationId appId, Key key, List<DeviceId> devices, List<Objective> objectives, Collection<NetworkResource> resources) { this(appId, key, devices, objectives, resources, null); } /** * Creates a flow objective intent with the specified objectives and * resources. * * @param appId application id * @param key intent key * @param devices list of target devices; in same order as the objectives * @param objectives backing flow objectives * @param resources backing network resources * @param resourceGroup resource goup for this intent */ public FlowObjectiveIntent(ApplicationId appId, Key key, List<DeviceId> devices, List<Objective> objectives, Collection<NetworkResource> resources, ResourceGroup resourceGroup) { super(appId, key, resources, DEFAULT_INTENT_PRIORITY, resourceGroup); checkArgument(devices.size() == objectives.size(), "Number of devices and objectives does not match"); this.objectives = ImmutableList.copyOf(objectives); this.devices = ImmutableList.copyOf(devices); } /** * Returns the collection of backing flow objectives. * * @return flow objectives */ public List<Objective> objectives() { return objectives; } /** * Returns the list of devices for the flow objectives. * * @return devices */ public List<DeviceId> devices() { return devices; } @Override public boolean isInstallable() { return true; } @Override public String toString() { return MoreObjects.toStringHelper(this) .add("id", id()) .add("key", key()) .add("appId", appId()) .add("resources", resources()) .add("device", devices()) .add("objectives", objectives()) .add("resourceGroup", resourceGroup()) .toString(); } }