All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.onosproject.net.resource.link.DefaultLinkResourceRequest Maven / Gradle / Ivy

There is a newer version: 2.7.0
Show newest version
/*
 * Copyright 2014-2015 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.resource.link;

import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.Objects;
import java.util.stream.Collectors;

import com.google.common.annotations.Beta;
import com.google.common.collect.ImmutableMap;
import org.onlab.util.Bandwidth;
import org.onosproject.net.Link;
import org.onosproject.net.intent.Constraint;
import org.onosproject.net.intent.IntentId;

import org.onosproject.net.intent.constraint.BandwidthConstraint;
import org.onosproject.net.intent.constraint.LambdaConstraint;
import org.onosproject.net.resource.ResourceRequest;
import org.onosproject.net.resource.ResourceType;

import static com.google.common.base.Preconditions.checkNotNull;

/**
 * Implementation of {@link LinkResourceRequest}.
 *
 * @deprecated in Emu Release
 */
@Deprecated
public final class DefaultLinkResourceRequest implements LinkResourceRequest {

    private final IntentId intentId;
    protected final Map> requests;

    /**
     * Creates a new link resource request with the specified Intent ID,
     * and resource requests over links.
     *
     * @param intentId intent ID associated with this request
     * @param requests resource requests over links
     */
    private DefaultLinkResourceRequest(IntentId intentId, Map> requests) {
        this.intentId = checkNotNull(intentId);
        this.requests = checkNotNull(ImmutableMap.copyOf(requests));
    }

    @Override
    public ResourceType type() {
        return null;
    }

    @Override
    public IntentId intentId() {
        return intentId;
    }

    @Override
    public Collection links() {
        return requests.keySet();
    }

    @Override
    public Set resources() {
        return requests.values().stream()
                .flatMap(Collection::stream)
                .collect(Collectors.toSet());
    }

    @Override
    public Set resources(Link link) {
        return requests.get(link);
    }

    /**
     * Returns builder of link resource request.
     *
     * @param intentId intent ID related to this request
     * @param links a set of links for the request
     * @return builder of link resource request
     */
    public static LinkResourceRequest.Builder builder(
            IntentId intentId, Collection links) {
        return new Builder(intentId, links);
    }

    /**
     * Builder of link resource request.
     */
    public static final class Builder implements LinkResourceRequest.Builder {
        private IntentId intentId;
        private Map> requests;

        /**
         * Creates a new link resource request.
         *
         * @param intentId intent ID related to this request
         * @param links a set of links for the request
         */
        private Builder(IntentId intentId, Collection links) {
            this.intentId = intentId;
            this.requests = new HashMap<>();
            for (Link link : links) {
                requests.put(link, new HashSet<>());
            }
        }

        /**
         * Adds lambda request.
         *
         * @return self
         * @deprecated in Emu Release
         */
        @Deprecated
        @Override
        public Builder addLambdaRequest() {
            for (Link link : requests.keySet()) {
                requests.get(link).add(new LambdaResourceRequest());
            }
            return this;
        }

        @Beta
        @Override
        public LinkResourceRequest.Builder addLambdaRequest(LambdaResource lambda) {
            for (Link link : requests.keySet()) {
                requests.get(link).add(new LambdaResourceRequest(lambda));
            }
            return this;
        }

        /**
         * Adds Mpls request.
         *
         * @return self
         * @deprecated in Emu Release
         */
        @Deprecated
        @Override
        public Builder addMplsRequest() {
            for (Link link : requests.keySet()) {
                requests.get(link).add(new MplsLabelResourceRequest());
            }
            return this;
        }

        @Beta
        @Override
        public Builder addMplsRequest(MplsLabel label) {
            for (Link link : requests.keySet()) {
                requests.get(link).add(new MplsLabelResourceRequest(label));
            }
            return this;
        }

        @Beta
        @Override
        public LinkResourceRequest.Builder addMplsRequest(Map labels) {
            for (Link link : labels.keySet()) {
                if (!requests.containsKey(link)) {
                    requests.put(link, new HashSet<>());
                }
                requests.get(link).add(new MplsLabelResourceRequest(labels.get(link)));
            }

            return this;
        }

        /**
         * Adds bandwidth request with bandwidth value.
         *
         * @param bandwidth bandwidth value in bits per second to be requested
         * @return self
         */
        @Override
        public Builder addBandwidthRequest(double bandwidth) {
            for (Link link : requests.keySet()) {
                requests.get(link).add(new BandwidthResourceRequest(new BandwidthResource(Bandwidth.bps(bandwidth))));
            }
            return this;
        }

        @Override
        public LinkResourceRequest.Builder addConstraint(Constraint constraint) {
            if (constraint instanceof LambdaConstraint) {
                return addLambdaRequest();
            } else if (constraint instanceof BandwidthConstraint) {
                BandwidthConstraint bw = (BandwidthConstraint) constraint;
                return addBandwidthRequest(bw.bandwidth().bps());
            }
            return this;
        }

        /**
         * Returns link resource request.
         *
         * @return link resource request
         */
        @Override
        public LinkResourceRequest build() {
            return new DefaultLinkResourceRequest(intentId, requests);
        }
    }

    @Override
    public int hashCode() {
        return Objects.hash(intentId, links());
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null || getClass() != obj.getClass()) {
            return false;
        }
        final DefaultLinkResourceRequest other = (DefaultLinkResourceRequest) obj;
        return Objects.equals(this.intentId, other.intentId)
                && Objects.equals(this.links(), other.links());
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy