Imported Upstream version 1.0.0
[platform/upstream/iotivity.git] / service / resource-container / bundle-java-api / src / main / java / org / iotivity / resourcecontainer / bundle / api / BaseActivator.java
1 //******************************************************************
2 //
3 // Copyright 2015 Samsung Electronics All Rights Reserved.
4 //
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6 //
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
10 //
11 //      http://www.apache.org/licenses/LICENSE-2.0
12 //
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
18 //
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
20
21 package org.iotivity.resourcecontainer.bundle.api;
22
23 import java.util.List;
24 import java.util.Vector;
25
26 /**
27  * The BaseActivator implements the native interface to the resource container.
28  * It loads the resource container library and provies native methods that can
29  * be used to register and unregister resources.
30  */
31 public class BaseActivator implements BundleActivator {
32         private String bundleId;
33         private Vector<BundleResource> bundleResources = new Vector<BundleResource>();
34
35         /**
36          * Creates an instance of the BaseActivator
37          * 
38          * @param bundleId
39          *            unique bundle identifier (e.g., oic.bundle.hue)
40          */
41         public BaseActivator(String bundleId) {
42                 this.bundleId = bundleId;
43         }
44
45         static {
46                 try {
47                         System.loadLibrary("rcs_container");
48                 } catch (Exception e) {
49                         e.printStackTrace();
50                 }
51         }
52
53         /**
54          * Bundle activation needs to be provided by the subclass.
55          */
56         public void activateBundle() {
57
58         }
59
60         /**
61          * Deactivates the bundle and unregisters its resources.
62          */
63         public void deactivateBundle() {
64                 System.out.println("Deactivating bundle (Base Activator).");
65                 for (BundleResource bundleResource : bundleResources) {
66                         unregisterResource(bundleResource);
67                 }
68         }
69
70         /**
71          * Registers a bundle resource at the resource container.
72          * 
73          * @param resource
74          *            bundle resource instance that should be made available as OIC
75          *            resource
76          */
77         public void registerResource(BundleResource resource) {
78                 bundleResources.add(resource);
79                 registerJavaResource(resource, resource.getAttributeKeys(), bundleId,
80                                 resource.getURI(), resource.getResourceType(),
81                                 resource.getName());
82         }
83
84         /**
85          * Wrapper to retrieve the resource configuration of the bundle resources.
86          * 
87          * @return List of resource configurations.
88          */
89         public List<ResourceConfig> getConfiguredBundleResources() {
90                 int configuredResources = getNumberOfConfiguredResources(bundleId);
91
92                 Vector<ResourceConfig> configs = new Vector<ResourceConfig>();
93
94                 for (int i = 0; i < configuredResources; i++) {
95                         String[] resourceParams = getConfiguredResourceParams(bundleId, i);
96                         ResourceConfig config = new ResourceConfig(resourceParams);
97                         configs.add(config);
98
99                 }
100                 return configs;
101         }
102
103         /**
104          * Unregisters a resource from the resource container.
105          */
106         public void unregisterResource(BundleResource resource) {
107                 bundleResources.remove(resource);
108                 unregisterJavaResource(resource, resource.getURI());
109         }
110
111         /**
112          * Native method that calls to the resource container.
113          * 
114          * @param attributes
115          *            String array of attribute names
116          * @param bundleId
117          *            unique bundle identifier
118          * @param uri
119          *            Uri that should be used to register the resource
120          */
121         private native void registerJavaResource(BundleResource resource,
122                         String[] attributes, String bundleId, String uri,
123                         String resourceType, String name);
124
125         /**
126          * Native method that calls to the resource container.
127          * 
128          * @param resource
129          * @param uri
130          */
131         private native void unregisterJavaResource(BundleResource resource,
132                         String uri);
133
134         /**
135          * Native method to retrieve the number of configured resources.
136          * 
137          * @param bundleId
138          *            unique bundle identifier
139          */
140         private native int getNumberOfConfiguredResources(String bundleId);
141
142         /**
143          * Native method to retrieve the configured resource parameters.
144          * 
145          * @param bundleId
146          *            unique bundle identifier
147          * @param resId
148          *            get the resource params for a certain resource
149          */
150         private native String[] getConfiguredResourceParams(String bundleId,
151                         int resId);
152
153 }