1 package oic.simulator.serviceprovider.manager;
3 import java.util.ArrayList;
4 import java.util.Enumeration;
5 import java.util.HashMap;
6 import java.util.Iterator;
10 import java.util.Vector;
12 import oic.simulator.serviceprovider.listener.IResourceListChangedListener;
13 import oic.simulator.serviceprovider.resource.ResourceAttribute;
14 import oic.simulator.serviceprovider.resource.SimulatorResource;
15 import oic.simulator.serviceprovider.resource.StandardConfiguration;
17 import org.iotivity.simulator.SimulatorManager;
18 import org.iotivity.simulator.SimulatorResourceAttribute;
19 import org.iotivity.simulator.SimulatorResourceModel;
20 import org.iotivity.simulator.SimulatorResourceServer;
22 public class ResourceManager {
24 private Map<String, Map<String, SimulatorResource>> resourceMap;
26 private StandardConfiguration stdConfig;
28 private IResourceListChangedListener resourceListChangedListener;
31 System.loadLibrary("SimulatorManager");
34 public ResourceManager() {
35 resourceMap = new HashMap<String, Map<String, SimulatorResource>>();
36 stdConfig = new StandardConfiguration();
38 // Populate standard configuration file list
39 populateStandardConfigurationList();
42 public void populateStandardConfigurationList() {
43 // TODO: Add all the standard configuration files
44 // Ex: stdConfig.addResourceConfiguration(LIGHT, LIGHT_FILE);
47 public synchronized List<String> getResourceConfigurationList() {
48 List<String> resourceConfigurationList = new ArrayList<String>();
49 Map<String, String> configMap = stdConfig
50 .getStandardResourceConfigurationList();
51 if (null != configMap) {
52 Set<String> keySet = configMap.keySet();
54 Iterator<String> keyItr = keySet.iterator();
55 while (keyItr.hasNext()) {
56 resourceConfigurationList.add(keyItr.next());
60 return resourceConfigurationList;
63 public synchronized String getConfigFilePath(String resourceType) {
65 if (null != resourceType) {
66 path = stdConfig.getResourceConfigFilePath(resourceType);
71 private synchronized void addResourceToMap(
72 SimulatorResource simulatorResource) {
73 if (null != simulatorResource) {
74 Map<String, SimulatorResource> resourceTypeMap;
75 resourceTypeMap = resourceMap.get(simulatorResource
77 if (null == resourceTypeMap) {
78 resourceTypeMap = new HashMap<String, SimulatorResource>();
79 resourceMap.put(simulatorResource.getResourceType(),
82 resourceTypeMap.put(simulatorResource.getResourceURI(),
87 private synchronized void addResourceToMap(String resourceType,
88 Map<String, SimulatorResource> newResourceTypeMap) {
89 if (null != resourceType && null != newResourceTypeMap) {
90 Map<String, SimulatorResource> resourceTypeMap = resourceMap
92 if (null != resourceTypeMap) {
93 resourceTypeMap.putAll(newResourceTypeMap);
95 resourceMap.put(resourceType, newResourceTypeMap);
100 private synchronized void removeResourceFromMap(String resourceType,
101 String resourceURI) {
102 if (null != resourceURI && null != resourceType) {
103 Map<String, SimulatorResource> resourceTypeMap = resourceMap
105 if (null != resourceTypeMap) {
106 resourceTypeMap.remove(resourceURI);
107 if (resourceTypeMap.size() < 1) {
108 resourceMap.remove(resourceType);
114 public synchronized boolean isResourceExist(String resourceURI) {
115 boolean result = false;
116 if (null != resourceURI) {
117 SimulatorResource resource = getSimulatorResourceByURI(resourceURI);
118 if (null != resource) {
125 public synchronized void createResource(String configFilePath) {
126 SimulatorResourceServer resourceServerN;
127 resourceServerN = SimulatorManager.createResource(configFilePath);
129 SimulatorResource simulatorResource;
130 simulatorResource = fetchResourceData(resourceServerN);
131 if (null != simulatorResource) {
132 addResourceToMap(simulatorResource);
134 String resourceType = simulatorResource.getResourceType();
135 String resourceURI = simulatorResource.getResourceURI();
136 List<String> resourceURIList = new ArrayList<String>();
137 resourceURIList.add(resourceURI);
139 resourceCreatedNotification(resourceType, resourceURIList);
143 public synchronized void createResource(String configFilePath,
145 Map<String, SimulatorResource> resourceTypeMap;
146 List<String> resourceUriList;
147 Vector<SimulatorResourceServer> simulatorResourceServerVectorN = null;
148 simulatorResourceServerVectorN = SimulatorManager.createResource(
149 configFilePath, noOfInstances);
150 if (null != simulatorResourceServerVectorN) {
151 resourceTypeMap = new HashMap<String, SimulatorResource>();
152 resourceUriList = new ArrayList<String>();
153 Enumeration<SimulatorResourceServer> uriItr = simulatorResourceServerVectorN
155 SimulatorResourceServer resourceServerN;
156 SimulatorResource resource;
158 while (uriItr.hasMoreElements()) {
159 resourceServerN = uriItr.nextElement();
160 resource = fetchResourceData(resourceServerN);
161 if (null != resource) {
162 uri = resource.getResourceURI();
163 resourceUriList.add(uri);
164 resourceTypeMap.put(uri, resource);
168 // Find the resourceType and add it to the local data structure and
169 // notify UI Listeners
170 if (resourceTypeMap.size() > 0) {
172 Set<String> uriSet = resourceTypeMap.keySet();
173 if (null != uriSet) {
174 Iterator<String> itr = uriSet.iterator();
176 SimulatorResource simResource = resourceTypeMap.get(itr
178 if (null != simResource) {
179 resourceType = simResource.getResourceType();
181 addResourceToMap(resourceType, resourceTypeMap);
183 resourceCreatedNotification(resourceType,
193 private synchronized SimulatorResource fetchResourceData(
194 SimulatorResourceServer resourceServerN) {
195 SimulatorResource simulatorResource = null;
196 if (null != resourceServerN) {
197 Map<String, ResourceAttribute> resourceAttributeMap = null;
199 simulatorResource = new SimulatorResource();
200 simulatorResource.setResourceServer(resourceServerN);
201 simulatorResource.setResourceURI(resourceServerN.getURI());
203 .setResourceType(resourceServerN.getResourceType());
204 simulatorResource.setResourceName(resourceServerN.getName());
205 simulatorResource.setResourceInterface(resourceServerN
206 .getInterfaceType());
208 SimulatorResourceModel resourceModelN = resourceServerN.getModel();
209 if (null != resourceModelN) {
210 simulatorResource.setResourceModel(resourceModelN);
212 Map<String, SimulatorResourceAttribute> attributeMapN;
213 attributeMapN = resourceModelN.getAttributes();
214 if (null != attributeMapN) {
215 resourceAttributeMap = new HashMap<String, ResourceAttribute>();
217 Set<String> attNameSet = attributeMapN.keySet();
218 if (null != attNameSet) {
220 SimulatorResourceAttribute attributeN;
221 ResourceAttribute attribute;
222 Iterator<String> attNameItr = attNameSet.iterator();
223 while (attNameItr.hasNext()) {
224 attName = attNameItr.next();
225 attributeN = attributeMapN.get(attName);
226 if (null != attributeN) {
227 attribute = new ResourceAttribute();
228 attribute.setAttributeName(attName);
230 // Other attribute details such as value,
231 // allowed values and range are based on type
232 // Type implementation is yet to be done
233 resourceAttributeMap.put(attName, attribute);
237 .setResourceAttributesMap(resourceAttributeMap);
242 return simulatorResource;
245 private synchronized void resourceCreatedNotification(String resourceType,
246 List<String> resourceURIList) {
247 if (null != resourceType && null != resourceURIList
248 && null != resourceListChangedListener) {
249 resourceListChangedListener.onResourceCreation(resourceType,
254 public synchronized void deleteResourceByURI(String resourceURI) {
255 if (null != resourceURI) {
256 SimulatorResource resource = getSimulatorResourceByURI(resourceURI);
257 if (null != resource) {
258 String resourceType = resource.getResourceType();
260 // Unregister the resource from the platform
261 deleteResource(resource);
263 // Delete from the local data structure
264 deleteLocalResourceDetails(resourceType, resourceURI);
266 // Notify the UI listener for removing this resource from UI
267 resourceDeletedNotification(resourceType, resourceURI);
272 private synchronized SimulatorResource getSimulatorResourceByURI(
273 String resourceURI) {
274 SimulatorResource resource = null;
275 if (null != resourceURI) {
276 Set<String> typeSet = resourceMap.keySet();
277 if (null != typeSet) {
278 Iterator<String> typeItr = typeSet.iterator();
280 Map<String, SimulatorResource> resourceTypeMap;
281 while (typeItr.hasNext()) {
282 resourceType = typeItr.next();
283 resourceTypeMap = resourceMap.get(resourceType);
284 if (null != resourceTypeMap) {
285 resource = resourceTypeMap.get(resourceURI);
286 if (null != resource) {
296 private synchronized void deleteResource(SimulatorResource resource) {
297 if (null != resource) {
298 SimulatorResourceServer resourceServerN = resource
299 .getResourceServer();
300 if (null != resourceServerN) {
301 SimulatorManager.deleteResource(resourceServerN);
306 public synchronized void deleteResourceByType(String resourceType) {
307 if (null != resourceType) {
308 // Unregister the resources from the platform
309 deleteResource(resourceType);
311 // Delete from the local data structure
312 deleteLocalResourceDetails(resourceType, null);
314 // Notify the UI listener for removing this resource from UI
315 resourceTypeDeletedNotification(resourceType);
320 private synchronized void deleteResource(String resourceType) {
321 if (null != resourceType) {
322 SimulatorManager.deleteResources(resourceType);
326 public synchronized void deleteAllResources() {
327 // Unregister the resources from the platform
330 // Delete from the local data structure
331 deleteLocalResourceDetails(null, null);
333 // Notify the UI listener for removing this resource from UI
334 allResourcesDeletedNotification();
337 private synchronized void deleteResource() {
338 // SimulatorManager.deleteResources();
341 private synchronized void deleteLocalResourceDetails(String resourceType,
342 String resourceURI) {
343 if (null != resourceType && null != resourceURI) {
344 removeResourceFromMap(resourceType, resourceURI);
345 } else if (null != resourceType) {
346 resourceMap.remove(resourceType);
352 private synchronized void resourceDeletedNotification(String resourceType,
353 String resourceURI) {
354 if (null != resourceListChangedListener) {
355 resourceListChangedListener.onResourceDeletion(resourceType,
360 private synchronized void resourceTypeDeletedNotification(
361 String resourceType) {
362 if (null != resourceListChangedListener) {
363 resourceListChangedListener.onResourceDeletionByType(resourceType);
367 private synchronized void allResourcesDeletedNotification() {
368 if (null != resourceListChangedListener) {
369 resourceListChangedListener.onAllResourceDeletion();
373 public synchronized IResourceListChangedListener getResourceListChangedListener() {
374 return resourceListChangedListener;
377 public synchronized void setResourceListChangedListener(
378 IResourceListChangedListener resourceListChangedListener) {
379 this.resourceListChangedListener = resourceListChangedListener;
382 public synchronized List<String> getResourceTypeList() {
383 List<String> typeList = null;
384 if (null != resourceMap && resourceMap.size() > 0) {
385 typeList = new ArrayList<String>();
386 Set<String> typeSet = resourceMap.keySet();
387 Iterator<String> typeItr = typeSet.iterator();
388 while (typeItr.hasNext()) {
389 typeList.add(typeItr.next());