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.HashSet;
import java.util.Set;
import java.util.Objects;

import org.onlab.util.Bandwidth;
import org.onosproject.net.Link;
import org.onosproject.net.intent.Constraint;
import org.onosproject.net.intent.IntentId;

import com.google.common.collect.ImmutableSet;

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;

/**
 * Implementation of {@link LinkResourceRequest}.
 */
public final class DefaultLinkResourceRequest implements LinkResourceRequest {

    private final IntentId intentId;
    private final Collection links;
    private final Set resources;

    /**
     * Creates a new link resource request with the given ID, links, and
     * resource requests.
     *
     * @param intentId intent ID related to this request
     * @param links a set of links for the request
     * @param resources a set of resources to be requested
     */
    private DefaultLinkResourceRequest(IntentId intentId,
            Collection links,
            Set resources) {
        this.intentId = intentId;
        this.links = ImmutableSet.copyOf(links);
        this.resources = ImmutableSet.copyOf(resources);
    }


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

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

    @Override
    public Collection links() {
        return links;
    }

    @Override
    public Set resources() {
        return resources;
    }

    /**
     * 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 Collection links;
        private Set resources;

        /**
         * 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.links = links;
            this.resources = new HashSet<>();
        }

        /**
         * Adds lambda request.
         *
         * @return self
         */
        @Override
        public Builder addLambdaRequest() {
            resources.add(new LambdaResourceRequest());
            return this;
        }

        /**
         * Adds Mpls request.
         *
         * @return self
         */
        @Override
        public Builder addMplsRequest() {
            resources.add(new MplsLabelResourceRequest());
            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) {
            resources.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().toDouble());
            }
            return this;
        }

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

    @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