Imported Upstream version 0.9.1
[platform/upstream/iotivity.git] / android / examples / fridgeserver / src / main / java / org / iotivity / base / examples / fridgeserver / DoorResource.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.OcPlatform;\r
32 import org.iotivity.base.OcRepresentation;\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 \r
40 import base.iotivity.org.examples.message.IMessageLogger;\r
41 \r
42 /**\r
43  * DoorResource\r
44  * <p/>\r
45  * Creates a door resource and performs action based on client requests\r
46  */\r
47 public class DoorResource extends Resource implements IMessageLogger {\r
48     private Context mContext;\r
49 \r
50     private static String TAG = "DoorResource: ";\r
51     private String mSide = StringConstants.LEFT;\r
52     private boolean mOpen;\r
53     private String resourceURI;\r
54 \r
55     /**\r
56      * Constructor\r
57      *\r
58      * @param side    left or right side of the door\r
59      * @param context to enable sending of broadcast messages to be displayed on the user screen\r
60      */\r
61     DoorResource(String side, Context context) {\r
62         mContext = context;\r
63         mSide = side;\r
64 \r
65         resourceURI = StringConstants.DOOR_URI + mSide;\r
66 \r
67         // eventHandler for register doorResource\r
68         OcPlatform.EntityHandler eh = new OcPlatform.EntityHandler() {\r
69             @Override\r
70             public EntityHandlerResult handleEntity(OcResourceRequest ocResourceRequest) {\r
71                 // this is where the main logic of DoorResource is handled\r
72                 return entityHandler(ocResourceRequest);\r
73             }\r
74         };\r
75         try {\r
76             logMessage(TAG + "RegisterDoorResource " + resourceURI + " : " +\r
77                     StringConstants.RESOURCE_TYPEDOOR + " : " + StringConstants.RESOURCE_INTERFACE);\r
78             mResourceHandle = OcPlatform.registerResource(resourceURI,\r
79                     StringConstants.RESOURCE_TYPEDOOR, StringConstants.RESOURCE_INTERFACE,\r
80                     eh, EnumSet.of(ResourceProperty.DISCOVERABLE));\r
81         } catch (OcException e) {\r
82             logMessage(TAG + "DoorResource registerResource error: " + e.getMessage());\r
83             Log.e(TAG, e.getMessage());\r
84         }\r
85     }\r
86 \r
87     /**\r
88      * updates the current value of the door resource\r
89      *\r
90      * @return door representation\r
91      */\r
92     private void updateRepresentationValues() {\r
93         try {\r
94             mRepresentation.setValue(StringConstants.SIDE, mSide);\r
95             mRepresentation.setValue(StringConstants.OPEN, mOpen);\r
96             mRepresentation.setValue(StringConstants.DEVICE_NAME,\r
97                     "Intel Powered 2 door, 1 light refrigerator");\r
98         } catch (OcException e) {\r
99             Log.e(TAG, e.getMessage());\r
100         }\r
101     }\r
102 \r
103     /**\r
104      * update the OPEN value of doorResource (door is open/ closed)\r
105      *\r
106      * @param representation get current state of door\r
107      */\r
108     private void put(OcRepresentation representation) {\r
109         try {\r
110             mOpen = representation.getValue(StringConstants.OPEN);\r
111         } catch (OcException e) {\r
112             Log.e(TAG, e.getMessage());\r
113         }\r
114         // Note, we won't let the user change the door side!\r
115     }\r
116 \r
117     /**\r
118      * this is the main method which handles different incoming requests appropriately.\r
119      *\r
120      * @param request OcResourceRequest from the client\r
121      * @return EntityHandlerResult depending on whether the request was handled successfully or not\r
122      */\r
123     private EntityHandlerResult entityHandler(OcResourceRequest request) {\r
124         EntityHandlerResult result = EntityHandlerResult.ERROR;\r
125         if (null != request) {\r
126             try {\r
127                 if (request.getRequestHandlerFlagSet().contains(RequestHandlerFlag.REQUEST)) {\r
128                     OcResourceResponse response = new OcResourceResponse();\r
129                     response.setRequestHandle(request.getRequestHandle());\r
130                     response.setResourceHandle(request.getResourceHandle());\r
131 \r
132                     switch (request.getRequestType()) {\r
133                         case GET:\r
134                             response.setErrorCode(StringConstants.OK);\r
135                             updateRepresentationValues();\r
136                             response.setResourceRepresentation(mRepresentation);\r
137                             response.setResponseResult(EntityHandlerResult.OK);\r
138                             OcPlatform.sendResponse(response);\r
139                             break;\r
140                         case PUT:\r
141                             response.setErrorCode(StringConstants.OK);\r
142                             put(request.getResourceRepresentation());\r
143                             updateRepresentationValues();\r
144                             response.setResourceRepresentation(mRepresentation);\r
145                             response.setResponseResult(EntityHandlerResult.OK);\r
146                             OcPlatform.sendResponse(response);\r
147                             break;\r
148                         case DELETE:\r
149                             response.setResponseResult(EntityHandlerResult.RESOURCE_DELETED);\r
150                             response.setErrorCode(204);\r
151                             OcPlatform.sendResponse(response);\r
152                             break;\r
153                     }\r
154                     result = EntityHandlerResult.OK;\r
155                 }\r
156             } catch (OcException e) {\r
157                 logMessage(TAG + e.getMessage());\r
158                 Log.e(TAG, e.getMessage());\r
159                 return EntityHandlerResult.ERROR;\r
160             }\r
161         }\r
162         return result;\r
163     }\r
164 \r
165     @Override\r
166     public void logMessage(String msg) {\r
167         logMsg(msg);\r
168         if (StringConstants.ENABLE_PRINTING) {\r
169             Log.i(TAG, msg);\r
170         }\r
171     }\r
172 \r
173     public void logMsg(final String text) {\r
174         Intent intent = new Intent(StringConstants.INTENT);\r
175         intent.putExtra(StringConstants.MESSAGE, text);\r
176         mContext.sendBroadcast(intent);\r
177     }\r
178 }\r