blob: cca8ed02f3af9fe4119dc8a3e130a6166dd76f6b [file] [log] [blame]
Thomas Vachuska58de4162015-09-10 16:15:33 -07001/*
Sho SHIMIZU6c9e33a2016-01-07 18:45:27 -08002 * Copyright 2015-2016 Open Networking Laboratory
Thomas Vachuska58de4162015-09-10 16:15:33 -07003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -070016package org.onosproject.net.newresource;
17
18import com.google.common.annotations.Beta;
Sho SHIMIZUfa62b472015-11-02 17:35:46 -080019import org.onosproject.store.Store;
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -070020
21import java.util.Collection;
22import java.util.List;
Sho SHIMIZU83258ae2016-01-29 17:39:07 -080023import java.util.Set;
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -070024
25/**
26 * Service for storing resource and consumer information.
27 */
28@Beta
Sho SHIMIZUfa62b472015-11-02 17:35:46 -080029public interface ResourceStore extends Store<ResourceEvent, ResourceStoreDelegate> {
Sho SHIMIZUba41fc12015-08-12 15:43:22 -070030
31 /**
Sho SHIMIZU83e17a02015-08-20 14:07:05 -070032 * Registers the resources in transactional way.
Sho SHIMIZUad619f52015-08-24 10:45:40 -070033 * Resource registration must be done before resource allocation. The state after completion
Sho SHIMIZU4568c412015-08-21 16:39:07 -070034 * of this method is all the resources are registered, or none of the given resources is registered.
Sho SHIMIZUba41fc12015-08-12 15:43:22 -070035 * The whole registration fails when any one of the resource can't be registered.
36 *
Sho SHIMIZU83e17a02015-08-20 14:07:05 -070037 * @param resources resources to be registered
Sho SHIMIZUba41fc12015-08-12 15:43:22 -070038 * @return true if the registration succeeds, false otherwise
39 */
Sho SHIMIZU8fa670a2016-01-14 11:17:18 -080040 boolean register(List<Resource> resources);
Sho SHIMIZUba41fc12015-08-12 15:43:22 -070041
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -070042 /**
Sho SHIMIZU83e17a02015-08-20 14:07:05 -070043 * Unregisters the resources in transactional way.
Sho SHIMIZU2d8a13a2015-08-18 22:37:41 -070044 * The state after completion of this method is all the resources are unregistered,
Sho SHIMIZU5618ee52015-08-21 17:19:44 -070045 * or none of the given resources is unregistered. The whole unregistration fails when any one of the
Sho SHIMIZU2d8a13a2015-08-18 22:37:41 -070046 * resource can't be unregistered.
47 *
Sho SHIMIZU83e17a02015-08-20 14:07:05 -070048 * @param resources resources to be unregistered
Sho SHIMIZU2d8a13a2015-08-18 22:37:41 -070049 * @return true if the registration succeeds, false otherwise
50 */
Sho SHIMIZU8fa670a2016-01-14 11:17:18 -080051 boolean unregister(List<Resource> resources);
Sho SHIMIZU2d8a13a2015-08-18 22:37:41 -070052
53 /**
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -070054 * Allocates the specified resources to the specified consumer in transactional way.
55 * The state after completion of this method is all the resources are allocated to the consumer,
56 * or no resource is allocated to the consumer. The whole allocation fails when any one of
57 * the resource can't be allocated.
58 *
59 * @param resources resources to be allocated
60 * @param consumer resource consumer which the resources are allocated to
61 * @return true if the allocation succeeds, false otherwise.
62 */
Sho SHIMIZU8fa670a2016-01-14 11:17:18 -080063 boolean allocate(List<Resource> resources, ResourceConsumer consumer);
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -070064
65 /**
66 * Releases the specified resources allocated to the specified corresponding consumers
67 * in transactional way. The state after completion of this method is all the resources
68 * are released from the consumer, or no resource is released. The whole release fails
69 * when any one of the resource can't be released. The size of the list of resources and
70 * that of consumers must be equal. The resource and consumer with the same position from
71 * the head of each list correspond to each other.
72 *
73 * @param resources resources to be released
74 * @param consumers resource consumers to whom the resource allocated to
75 * @return true if succeeds, otherwise false
76 */
Sho SHIMIZU8fa670a2016-01-14 11:17:18 -080077 boolean release(List<Resource> resources, List<ResourceConsumer> consumers);
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -070078
79 /**
Sho SHIMIZU6c9e33a2016-01-07 18:45:27 -080080 * Returns the resource consumers to whom the specified resource is allocated.
81 * The return value is a list having only one element when the given resource is discrete type.
82 * The return value may have multiple elements when the given resource is continuous type.
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -070083 *
84 * @param resource resource whose allocated consumer to be returned
Sho SHIMIZU6c9e33a2016-01-07 18:45:27 -080085 * @return resource consumers who are allocated the resource.
86 * Returns empty list if there is no such consumer.
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -070087 */
Sho SHIMIZU2d310222016-01-22 11:45:11 -080088 // TODO: need to change the argument type to ResourceId
Sho SHIMIZU8fa670a2016-01-14 11:17:18 -080089 List<ResourceConsumer> getConsumers(Resource resource);
Sho SHIMIZU6c9e33a2016-01-07 18:45:27 -080090
91 /**
92 * Returns the availability of the specified resource.
93 *
94 * @param resource resource to check the availability
95 * @return true if available, otherwise false
96 */
Sho SHIMIZU8fa670a2016-01-14 11:17:18 -080097 boolean isAvailable(Resource resource);
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -070098
99 /**
100 * Returns a collection of the resources allocated to the specified consumer.
101 *
102 * @param consumer resource consumer whose allocated resource are searched for
103 * @return a collection of the resources allocated to the specified consumer
104 */
Sho SHIMIZU8fa670a2016-01-14 11:17:18 -0800105 Collection<Resource> getResources(ResourceConsumer consumer);
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -0700106
107 /**
Sho SHIMIZU83258ae2016-01-29 17:39:07 -0800108 * Returns a set of the child resources of the specified parent.
Sho SHIMIZUe7f4f3f2015-10-13 16:27:25 -0700109 *
110 * @param parent parent of the resource to be returned
Sho SHIMIZU83258ae2016-01-29 17:39:07 -0800111 * @return a set of the child resources of the specified resource
Sho SHIMIZUe7f4f3f2015-10-13 16:27:25 -0700112 */
Sho SHIMIZU2d310222016-01-22 11:45:11 -0800113 // TODO: need to change the argument type to ResourceId or ResourceId.Discrete
Sho SHIMIZU83258ae2016-01-29 17:39:07 -0800114 Set<Resource> getChildResources(Resource parent);
Sho SHIMIZUe7f4f3f2015-10-13 16:27:25 -0700115
116 /**
Sho SHIMIZU1f5e5912015-08-10 17:00:00 -0700117 * Returns a collection of the resources which are children of the specified parent and
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -0700118 * whose type is the specified class.
119 *
Sho SHIMIZU1f5e5912015-08-10 17:00:00 -0700120 * @param parent parent of the resources to be returned
121 * @param cls class instance of the children
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -0700122 * @param <T> type of the resource
123 * @return a collection of the resources which belongs to the specified subject and
124 * whose type is the specified class.
125 */
Sho SHIMIZU2d310222016-01-22 11:45:11 -0800126 // TODO: need to change the argument type to ResourceId or ResourceId.Discrete
Sho SHIMIZU8fa670a2016-01-14 11:17:18 -0800127 <T> Collection<Resource> getAllocatedResources(Resource parent, Class<T> cls);
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -0700128}