Toshio Koide

Implement BandwidthResourceRequest class and its builder.

...@@ -3,11 +3,34 @@ package org.onlab.onos.net.resource; ...@@ -3,11 +3,34 @@ package org.onlab.onos.net.resource;
3 /** 3 /**
4 * Representation of a request for bandwidth resource. 4 * Representation of a request for bandwidth resource.
5 */ 5 */
6 -public interface BandwidthResourceRequest { 6 +public final class BandwidthResourceRequest implements ResourceRequest {
7 + private final Bandwidth bandwidth;
8 +
9 + /**
10 + * Creates a new {@link BandwidthResourceRequest} with {@link Bandwidth}
11 + * object.
12 + *
13 + * @param bandwidth {@link Bandwidth} object to be requested
14 + */
15 + public BandwidthResourceRequest(Bandwidth bandwidth) {
16 + this.bandwidth = bandwidth;
17 + }
18 +
19 + /**
20 + * Creates a new {@link BandwidthResourceRequest} with bandwidth value.
21 + *
22 + * @param bandwidth bandwidth value to be requested
23 + */
24 + public BandwidthResourceRequest(double bandwidth) {
25 + this.bandwidth = Bandwidth.valueOf(bandwidth);
26 + }
27 +
7 /** 28 /**
8 * Returns the bandwidth resource. 29 * Returns the bandwidth resource.
9 * 30 *
10 * @return the bandwidth resource 31 * @return the bandwidth resource
11 */ 32 */
12 - Bandwidth bandwidth(); 33 + Bandwidth bandwidth() {
34 + return bandwidth;
35 + }
13 } 36 }
......
...@@ -3,6 +3,6 @@ package org.onlab.onos.net.resource; ...@@ -3,6 +3,6 @@ package org.onlab.onos.net.resource;
3 /** 3 /**
4 * Representation of a request for lambda resource. 4 * Representation of a request for lambda resource.
5 */ 5 */
6 -public interface LambdaResourceRequest { 6 +public class LambdaResourceRequest implements ResourceRequest {
7 7
8 } 8 }
......
1 package org.onlab.onos.net.resource; 1 package org.onlab.onos.net.resource;
2 2
3 import java.util.Collection; 3 import java.util.Collection;
4 +import java.util.HashSet;
4 import java.util.Set; 5 import java.util.Set;
5 6
6 import org.onlab.onos.net.Link; 7 import org.onlab.onos.net.Link;
7 import org.onlab.onos.net.intent.IntentId; 8 import org.onlab.onos.net.intent.IntentId;
8 9
10 +import com.google.common.collect.ImmutableSet;
11 +
9 /** 12 /**
10 * Representation of a request for link resource. 13 * Representation of a request for link resource.
11 */ 14 */
12 -public interface LinkResourceRequest extends ResourceRequest { 15 +public final class LinkResourceRequest implements ResourceRequest {
16 + // TODO: should this class be interface?
17 +
18 + private final IntentId intentId;
19 + private final Collection<Link> links;
20 + private final Set<ResourceRequest> resources;
21 +
22 + /**
23 + * Creates a new link resource request with the given ID, links, and
24 + * resource requests.
25 + *
26 + * @param intentId intent ID related to this request
27 + * @param links a set of links for the request
28 + * @param resources a set of resources to be requested
29 + */
30 + private LinkResourceRequest(IntentId intentId,
31 + Collection<Link> links,
32 + Set<ResourceRequest> resources) {
33 + this.intentId = intentId;
34 + this.links = ImmutableSet.copyOf(links);
35 + this.resources = ImmutableSet.copyOf(resources);
36 + }
13 37
14 /** 38 /**
15 * Returns the {@link IntentId} associated with the request. 39 * Returns the {@link IntentId} associated with the request.
16 * 40 *
17 * @return the {@link IntentId} associated with the request 41 * @return the {@link IntentId} associated with the request
18 */ 42 */
19 - IntentId intendId(); 43 + IntentId intendId() {
44 + return intentId;
45 + }
20 46
21 /** 47 /**
22 * Returns the set of target links. 48 * Returns the set of target links.
23 * 49 *
24 * @return the set of target links 50 * @return the set of target links
25 */ 51 */
26 - Collection<Link> links(); 52 + Collection<Link> links() {
53 + return links;
54 + }
27 55
28 /** 56 /**
29 * Returns the set of resource requests. 57 * Returns the set of resource requests.
30 * 58 *
31 * @return the set of resource requests 59 * @return the set of resource requests
32 */ 60 */
33 - Set<ResourceRequest> resources(); 61 + Set<ResourceRequest> resources() {
62 + return resources;
63 + }
64 +
65 + /**
66 + * Returns builder of link resource request.
67 + *
68 + * @param intentId intent ID related to this request
69 + * @param links a set of links for the request
70 + * @return builder of link resource request
71 + */
72 + public static LinkResourceRequest.Builder builder(
73 + IntentId intentId, Collection<Link> links) {
74 + return new Builder(intentId, links);
75 + }
76 +
77 + /**
78 + * Builder of link resource request.
79 + */
80 + public static final class Builder {
81 + private IntentId intentId;
82 + private Collection<Link> links;
83 + private Set<ResourceRequest> resources;
84 +
85 + /**
86 + * Creates a new link resource request.
87 + *
88 + * @param intentId intent ID related to this request
89 + * @param links a set of links for the request
90 + */
91 + private Builder(IntentId intentId, Collection<Link> links) {
92 + this.intentId = intentId;
93 + this.links = links;
94 + this.resources = new HashSet<>();
95 + }
96 +
97 + /**
98 + * Adds lambda request.
99 + *
100 + * @return self
101 + */
102 + public Builder addLambdaRequest() {
103 + resources.add(new LambdaResourceRequest());
104 + return this;
105 + }
106 +
107 + /**
108 + * Adds bandwidth request with bandwidth value.
109 + *
110 + * @param bandwidth bandwidth value to be requested
111 + * @return self
112 + */
113 + public Builder addBandwidthRequest(double bandwidth) {
114 + resources.add(new BandwidthResourceRequest(bandwidth));
115 + return this;
116 + }
117 +
118 + /**
119 + * Returns link resource request.
120 + *
121 + * @return link resource request
122 + */
123 + public LinkResourceRequest build() {
124 + return new LinkResourceRequest(intentId, links, resources);
125 + }
126 + }
34 } 127 }
......