blob: ac30548a6582f3ce8543291319a8fd55449993f9 [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 SHIMIZU78ee25c2015-07-16 15:54:14 -070023
24/**
25 * Service for storing resource and consumer information.
26 */
27@Beta
Sho SHIMIZUfa62b472015-11-02 17:35:46 -080028public interface ResourceStore extends Store<ResourceEvent, ResourceStoreDelegate> {
Sho SHIMIZUba41fc12015-08-12 15:43:22 -070029
30 /**
Sho SHIMIZU83e17a02015-08-20 14:07:05 -070031 * Registers the resources in transactional way.
Sho SHIMIZUad619f52015-08-24 10:45:40 -070032 * Resource registration must be done before resource allocation. The state after completion
Sho SHIMIZU4568c412015-08-21 16:39:07 -070033 * of this method is all the resources are registered, or none of the given resources is registered.
Sho SHIMIZUba41fc12015-08-12 15:43:22 -070034 * The whole registration fails when any one of the resource can't be registered.
35 *
Sho SHIMIZU83e17a02015-08-20 14:07:05 -070036 * @param resources resources to be registered
Sho SHIMIZUba41fc12015-08-12 15:43:22 -070037 * @return true if the registration succeeds, false otherwise
38 */
Sho SHIMIZU8fa670a2016-01-14 11:17:18 -080039 boolean register(List<Resource> resources);
Sho SHIMIZUba41fc12015-08-12 15:43:22 -070040
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -070041 /**
Sho SHIMIZU83e17a02015-08-20 14:07:05 -070042 * Unregisters the resources in transactional way.
Sho SHIMIZU2d8a13a2015-08-18 22:37:41 -070043 * The state after completion of this method is all the resources are unregistered,
Sho SHIMIZU5618ee52015-08-21 17:19:44 -070044 * or none of the given resources is unregistered. The whole unregistration fails when any one of the
Sho SHIMIZU2d8a13a2015-08-18 22:37:41 -070045 * resource can't be unregistered.
46 *
Sho SHIMIZU83e17a02015-08-20 14:07:05 -070047 * @param resources resources to be unregistered
Sho SHIMIZU2d8a13a2015-08-18 22:37:41 -070048 * @return true if the registration succeeds, false otherwise
49 */
Sho SHIMIZU8fa670a2016-01-14 11:17:18 -080050 boolean unregister(List<Resource> resources);
Sho SHIMIZU2d8a13a2015-08-18 22:37:41 -070051
52 /**
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -070053 * Allocates the specified resources to the specified consumer in transactional way.
54 * The state after completion of this method is all the resources are allocated to the consumer,
55 * or no resource is allocated to the consumer. The whole allocation fails when any one of
56 * the resource can't be allocated.
57 *
58 * @param resources resources to be allocated
59 * @param consumer resource consumer which the resources are allocated to
60 * @return true if the allocation succeeds, false otherwise.
61 */
Sho SHIMIZU8fa670a2016-01-14 11:17:18 -080062 boolean allocate(List<Resource> resources, ResourceConsumer consumer);
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -070063
64 /**
65 * Releases the specified resources allocated to the specified corresponding consumers
66 * in transactional way. The state after completion of this method is all the resources
67 * are released from the consumer, or no resource is released. The whole release fails
68 * when any one of the resource can't be released. The size of the list of resources and
69 * that of consumers must be equal. The resource and consumer with the same position from
70 * the head of each list correspond to each other.
71 *
72 * @param resources resources to be released
73 * @param consumers resource consumers to whom the resource allocated to
74 * @return true if succeeds, otherwise false
75 */
Sho SHIMIZU8fa670a2016-01-14 11:17:18 -080076 boolean release(List<Resource> resources, List<ResourceConsumer> consumers);
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -070077
78 /**
Sho SHIMIZU6c9e33a2016-01-07 18:45:27 -080079 * Returns the resource consumers to whom the specified resource is allocated.
80 * The return value is a list having only one element when the given resource is discrete type.
81 * The return value may have multiple elements when the given resource is continuous type.
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -070082 *
83 * @param resource resource whose allocated consumer to be returned
Sho SHIMIZU6c9e33a2016-01-07 18:45:27 -080084 * @return resource consumers who are allocated the resource.
85 * Returns empty list if there is no such consumer.
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -070086 */
Sho SHIMIZU8fa670a2016-01-14 11:17:18 -080087 List<ResourceConsumer> getConsumers(Resource resource);
Sho SHIMIZU6c9e33a2016-01-07 18:45:27 -080088
89 /**
90 * Returns the availability of the specified resource.
91 *
92 * @param resource resource to check the availability
93 * @return true if available, otherwise false
94 */
Sho SHIMIZU8fa670a2016-01-14 11:17:18 -080095 boolean isAvailable(Resource resource);
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -070096
97 /**
98 * Returns a collection of the resources allocated to the specified consumer.
99 *
100 * @param consumer resource consumer whose allocated resource are searched for
101 * @return a collection of the resources allocated to the specified consumer
102 */
Sho SHIMIZU8fa670a2016-01-14 11:17:18 -0800103 Collection<Resource> getResources(ResourceConsumer consumer);
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -0700104
105 /**
Sho SHIMIZUe7f4f3f2015-10-13 16:27:25 -0700106 * Returns a collection of the child resources of the specified parent.
107 *
108 * @param parent parent of the resource to be returned
109 * @return a collection of the child resources of the specified resource
110 */
Sho SHIMIZU8fa670a2016-01-14 11:17:18 -0800111 Collection<Resource> getChildResources(Resource parent);
Sho SHIMIZUe7f4f3f2015-10-13 16:27:25 -0700112
113 /**
Sho SHIMIZU1f5e5912015-08-10 17:00:00 -0700114 * Returns a collection of the resources which are children of the specified parent and
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -0700115 * whose type is the specified class.
116 *
Sho SHIMIZU1f5e5912015-08-10 17:00:00 -0700117 * @param parent parent of the resources to be returned
118 * @param cls class instance of the children
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -0700119 * @param <T> type of the resource
120 * @return a collection of the resources which belongs to the specified subject and
121 * whose type is the specified class.
122 */
Sho SHIMIZU8fa670a2016-01-14 11:17:18 -0800123 <T> Collection<Resource> getAllocatedResources(Resource parent, Class<T> cls);
Sho SHIMIZU78ee25c2015-07-16 15:54:14 -0700124}