Imported Upstream version 0.9.1
[platform/upstream/iotivity.git] / android / examples / fridgeserver / src / main / java / org / iotivity / base / examples / fridgeserver / DeviceResource.java
1 /*\r
2  * //******************************************************************\r
3  * //\r
4  * // Copyright 2015 Intel Corporation.\r
5  * //\r
6  * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
7  * //\r
8  * // Licensed under the Apache License, Version 2.0 (the "License");\r
9  * // you may not use this file except in compliance with the License.\r
10  * // You may obtain a copy of the License at\r
11  * //\r
12  * //      http://www.apache.org/licenses/LICENSE-2.0\r
13  * //\r
14  * // Unless required by applicable law or agreed to in writing, software\r
15  * // distributed under the License is distributed on an "AS IS" BASIS,\r
16  * // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
17  * // See the License for the specific language governing permissions and\r
18  * // limitations under the License.\r
19  * //\r
20  * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
21  */\r
22 \r
23 package org.iotivity.base.examples.fridgeserver;\r
24 \r
25 import android.content.Context;\r
26 import android.content.Intent;\r
27 import android.util.Log;\r
28 \r
29 import org.iotivity.base.EntityHandlerResult;\r
30 import org.iotivity.base.OcException;\r
31 import org.iotivity.base.OcHeaderOption;\r
32 import org.iotivity.base.OcPlatform;\r
33 import org.iotivity.base.OcResourceRequest;\r
34 import org.iotivity.base.OcResourceResponse;\r
35 import org.iotivity.base.RequestHandlerFlag;\r
36 import org.iotivity.base.ResourceProperty;\r
37 \r
38 import java.util.EnumSet;\r
39 import java.util.LinkedList;\r
40 import java.util.List;\r
41 \r
42 import base.iotivity.org.examples.message.IMessageLogger;\r
43 \r
44 /**\r
45  * DeviceResource\r
46  * <p/>\r
47  * Creates a device resource and performs action based on client requests\r
48  */\r
49 public class DeviceResource extends Resource implements IMessageLogger {\r
50     private Context mContext;\r
51 \r
52     private static String TAG = "DeviceResource: ";\r
53 \r
54     /**\r
55      * constructor\r
56      *\r
57      * @param context to enable sending of broadcast messages to be displayed on the user screen\r
58      */\r
59     DeviceResource(Context context) {\r
60         mContext = context;\r
61 \r
62         // eventHandler for register deviceResource\r
63         OcPlatform.EntityHandler eh = new OcPlatform.EntityHandler() {\r
64             @Override\r
65             public EntityHandlerResult handleEntity(OcResourceRequest ocResourceRequest) {\r
66                 // this is where the main logic of DeviceResource is handled\r
67                 return entityHandler(ocResourceRequest);\r
68             }\r
69         };\r
70 \r
71         try {\r
72             logMessage(TAG + "RegisterDeviceResource " + StringConstants.DEVICE_URI + " : " +\r
73                     StringConstants.RESOURCE_TYPENAME + " : " + StringConstants.RESOURCE_INTERFACE);\r
74             mResourceHandle = OcPlatform.registerResource(StringConstants.DEVICE_URI,\r
75                     StringConstants.RESOURCE_TYPENAME, StringConstants.RESOURCE_INTERFACE,\r
76                     eh, EnumSet.of(ResourceProperty.DISCOVERABLE));\r
77         } catch (OcException e) {\r
78             logMessage(TAG + "registerResource error: " + e.getMessage());\r
79             Log.e(TAG, e.getMessage());\r
80         }\r
81     }\r
82 \r
83     /**\r
84      * update current state of device\r
85      *\r
86      * @return device representation\r
87      */\r
88     private void updateRepresentationValues() {\r
89         try {\r
90             mRepresentation.setValue(StringConstants.DEVICE_NAME,\r
91                     "Intel Powered 2 door, 1 light refrigerator");\r
92         } catch (OcException e) {\r
93             Log.e(TAG, e.getMessage());\r
94         }\r
95     }\r
96 \r
97     /**\r
98      * unregister the resource\r
99      */\r
100     private void deleteDeviceResource() {\r
101         try {\r
102             OcPlatform.unregisterResource(mResourceHandle);\r
103             logMessage(TAG + "Unregister DeviceResource successful");\r
104         } catch (OcException e) {\r
105             logMessage(TAG + e.getMessage());\r
106             Log.e(TAG, e.getMessage());\r
107         }\r
108     }\r
109 \r
110     /**\r
111      * this is the main method which handles different incoming requests appropriately.\r
112      *\r
113      * @param request OcResourceRequest from the client\r
114      * @return EntityHandlerResult depending on whether the request was handled successfully or not\r
115      */\r
116     private EntityHandlerResult entityHandler(OcResourceRequest request) {\r
117         EntityHandlerResult result = EntityHandlerResult.ERROR;\r
118         if (null != request) {\r
119             List<OcHeaderOption> headerOptions = request.getHeaderOptions();\r
120             String clientAPIVersion = "";\r
121             String clientToken = "";\r
122 \r
123             // search for header options map and look for API version and client token\r
124             for (OcHeaderOption headerOption : headerOptions) {\r
125                 int optionId = headerOption.getOptionId();\r
126                 if (StringConstants.API_VERSION_KEY == optionId) {\r
127                     clientAPIVersion = headerOption.getOptionData();\r
128                     logMessage(TAG + " Client API Version: " + clientAPIVersion);\r
129                 } else if (StringConstants.CLIENT_VERSION_KEY == optionId) {\r
130                     clientToken = headerOption.getOptionData();\r
131                     logMessage(TAG + " Client Token: " + clientToken);\r
132                 }\r
133             }\r
134             if (clientAPIVersion.equals(StringConstants.API_VERSION) &&\r
135                     clientToken.equals(StringConstants.CLIENT_TOKEN)) {\r
136                 List<OcHeaderOption> serverHeaderOptions = new LinkedList<>();\r
137                 OcHeaderOption apiVersion = new OcHeaderOption(StringConstants.API_VERSION_KEY,\r
138                         StringConstants.API_VERSION);\r
139                 serverHeaderOptions.add(apiVersion);\r
140                 try {\r
141                     if (request.getRequestHandlerFlagSet().contains(RequestHandlerFlag.REQUEST)) {\r
142                         OcResourceResponse response = new OcResourceResponse();\r
143                         response.setRequestHandle(request.getRequestHandle());\r
144                         response.setResourceHandle(request.getResourceHandle());\r
145                         response.setHeaderOptions(serverHeaderOptions);\r
146 \r
147                         switch (request.getRequestType()) {\r
148                             case GET:\r
149                                 response.setErrorCode(StringConstants.OK);\r
150                                 response.setResponseResult(EntityHandlerResult.OK);\r
151                                 updateRepresentationValues();\r
152                                 response.setResourceRepresentation(mRepresentation);\r
153                                 OcPlatform.sendResponse(response);\r
154                                 break;\r
155                             case DELETE:\r
156                                 deleteDeviceResource();\r
157                                 response.setErrorCode(StringConstants.OK);\r
158                                 response.setResponseResult(EntityHandlerResult.OK);\r
159                                 break;\r
160                             case POST:\r
161                                 response.setResponseResult(EntityHandlerResult.ERROR);\r
162                                 OcPlatform.sendResponse(response);\r
163                                 break;\r
164                         }\r
165                         result = EntityHandlerResult.OK;\r
166                     }\r
167                 } catch (OcException e) {\r
168                     logMessage(TAG + e.getMessage());\r
169                     Log.e(TAG, e.getMessage());\r
170                 }\r
171             }\r
172         }\r
173         return result;\r
174     }\r
175 \r
176     @Override\r
177     public void logMessage(String msg) {\r
178         logMsg(msg);\r
179         if (StringConstants.ENABLE_PRINTING) {\r
180             Log.i(TAG, msg);\r
181         }\r
182     }\r
183 \r
184     public void logMsg(final String text) {\r
185         Intent intent = new Intent(StringConstants.INTENT);\r
186         intent.putExtra("message", text);\r
187         mContext.sendBroadcast(intent);\r
188     }\r
189 }\r