blob: 0aa482757dd356b5e1fb0b263630ee5b1cf363f3 [file] [log] [blame]
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -07001package org.onosproject.net.newresource;
2
3import com.google.common.annotations.Beta;
4
5import java.util.Collection;
6import java.util.List;
7import java.util.Optional;
8
9/**
10 * Service for storing resource and consumer information.
11 */
12@Beta
13public interface ResourceStore {
Sho SHIMIZUba41fc12015-08-12 15:43:22 -070014
15 /**
Sho SHIMIZU83e17a02015-08-20 14:07:05 -070016 * Registers the resources in transactional way.
Sho SHIMIZUad619f52015-08-24 10:45:40 -070017 * Resource registration must be done before resource allocation. The state after completion
Sho SHIMIZU4568c412015-08-21 16:39:07 -070018 * of this method is all the resources are registered, or none of the given resources is registered.
Sho SHIMIZUba41fc12015-08-12 15:43:22 -070019 * The whole registration fails when any one of the resource can't be registered.
20 *
Sho SHIMIZU83e17a02015-08-20 14:07:05 -070021 * @param resources resources to be registered
Sho SHIMIZUba41fc12015-08-12 15:43:22 -070022 * @return true if the registration succeeds, false otherwise
23 */
Sho SHIMIZU83e17a02015-08-20 14:07:05 -070024 boolean register(List<ResourcePath> resources);
Sho SHIMIZUba41fc12015-08-12 15:43:22 -070025
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -070026 /**
Sho SHIMIZU83e17a02015-08-20 14:07:05 -070027 * Unregisters the resources in transactional way.
Sho SHIMIZU2d8a13a2015-08-18 22:37:41 -070028 * The state after completion of this method is all the resources are unregistered,
29 * or no resource is unregistered. The whole unregistration fails when any one of the
30 * resource can't be unregistered.
31 *
Sho SHIMIZU83e17a02015-08-20 14:07:05 -070032 * @param resources resources to be unregistered
Sho SHIMIZU2d8a13a2015-08-18 22:37:41 -070033 * @return true if the registration succeeds, false otherwise
34 */
Sho SHIMIZU83e17a02015-08-20 14:07:05 -070035 boolean unregister(List<ResourcePath> resources);
Sho SHIMIZU2d8a13a2015-08-18 22:37:41 -070036
37 /**
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -070038 * Allocates the specified resources to the specified consumer in transactional way.
39 * The state after completion of this method is all the resources are allocated to the consumer,
40 * or no resource is allocated to the consumer. The whole allocation fails when any one of
41 * the resource can't be allocated.
42 *
43 * @param resources resources to be allocated
44 * @param consumer resource consumer which the resources are allocated to
45 * @return true if the allocation succeeds, false otherwise.
46 */
Sho SHIMIZU1f5e5912015-08-10 17:00:00 -070047 boolean allocate(List<ResourcePath> resources, ResourceConsumer consumer);
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -070048
49 /**
50 * Releases the specified resources allocated to the specified corresponding consumers
51 * in transactional way. The state after completion of this method is all the resources
52 * are released from the consumer, or no resource is released. The whole release fails
53 * when any one of the resource can't be released. The size of the list of resources and
54 * that of consumers must be equal. The resource and consumer with the same position from
55 * the head of each list correspond to each other.
56 *
57 * @param resources resources to be released
58 * @param consumers resource consumers to whom the resource allocated to
59 * @return true if succeeds, otherwise false
60 */
Sho SHIMIZU1f5e5912015-08-10 17:00:00 -070061 boolean release(List<ResourcePath> resources, List<ResourceConsumer> consumers);
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -070062
63 /**
64 * Returns the resource consumer to whom the specified resource is allocated.
65 *
66 * @param resource resource whose allocated consumer to be returned
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -070067 * @return resource consumer who are allocated the resource
68 */
Sho SHIMIZU1f5e5912015-08-10 17:00:00 -070069 Optional<ResourceConsumer> getConsumer(ResourcePath resource);
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -070070
71 /**
72 * Returns a collection of the resources allocated to the specified consumer.
73 *
74 * @param consumer resource consumer whose allocated resource are searched for
75 * @return a collection of the resources allocated to the specified consumer
76 */
Sho SHIMIZU1f5e5912015-08-10 17:00:00 -070077 Collection<ResourcePath> getResources(ResourceConsumer consumer);
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -070078
79 /**
Sho SHIMIZU1f5e5912015-08-10 17:00:00 -070080 * Returns a collection of the resources which are children of the specified parent and
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -070081 * whose type is the specified class.
82 *
Sho SHIMIZU1f5e5912015-08-10 17:00:00 -070083 * @param parent parent of the resources to be returned
84 * @param cls class instance of the children
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -070085 * @param <T> type of the resource
86 * @return a collection of the resources which belongs to the specified subject and
87 * whose type is the specified class.
88 */
Sho SHIMIZU1f5e5912015-08-10 17:00:00 -070089 <T> Collection<ResourcePath> getAllocatedResources(ResourcePath parent, Class<T> cls);
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -070090}