Imported Upstream version 0.9.2
[platform/upstream/iotivity.git] / android / examples / simpleclient / src / main / java / org / iotivity / base / examples / simpleclient / SimpleClient.java
index b747c5a..d20794e 100644 (file)
-/*\r
- * //******************************************************************\r
- * //\r
- * // Copyright 2015 Intel Corporation.\r
- * //\r
- * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
- * //\r
- * // Licensed under the Apache License, Version 2.0 (the "License");\r
- * // you may not use this file except in compliance with the License.\r
- * // You may obtain a copy of the License at\r
- * //\r
- * //      http://www.apache.org/licenses/LICENSE-2.0\r
- * //\r
- * // Unless required by applicable law or agreed to in writing, software\r
- * // distributed under the License is distributed on an "AS IS" BASIS,\r
- * // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * // See the License for the specific language governing permissions and\r
- * // limitations under the License.\r
- * //\r
- * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
- */\r
-\r
-package org.iotivity.base.examples.simpleclient;\r
-\r
-import android.app.Activity;\r
-import android.content.BroadcastReceiver;\r
-import android.content.Context;\r
-import android.content.Intent;\r
-import android.os.Bundle;\r
-import android.os.Message;\r
-import android.text.method.ScrollingMovementMethod;\r
-import android.util.Log;\r
-import android.widget.LinearLayout;\r
-import android.widget.TextView;\r
-\r
-import org.iotivity.base.ErrorCode;\r
-import org.iotivity.base.ModeType;\r
-import org.iotivity.base.ObserveType;\r
-import org.iotivity.base.OcConnectivityType;\r
-import org.iotivity.base.OcException;\r
-import org.iotivity.base.OcHeaderOption;\r
-import org.iotivity.base.OcPlatform;\r
-import org.iotivity.base.OcRepresentation;\r
-import org.iotivity.base.OcResource;\r
-import org.iotivity.base.PlatformConfig;\r
-import org.iotivity.base.QualityOfService;\r
-import org.iotivity.base.ServiceType;\r
-\r
-import java.util.HashMap;\r
-import java.util.List;\r
-\r
-import base.iotivity.org.examples.message.IMessageLogger;\r
-\r
-/**\r
- * SimpleClient\r
- * <p/>\r
- * SimpleClient is a sample client app which should be started after the simpleServer is started.\r
- * It finds resources advertised by the server and calls different operations on it (GET, PUT,\r
- * POST and OBSERVE).\r
- * This implements IMessageLogger to display messages on the screen\r
- */\r
-public class SimpleClient extends Activity implements OcPlatform.OnResourceFoundListener,\r
-        IMessageLogger {\r
-    private static final String TAG = "SimpleClient: ";\r
-\r
-    private Light myLight;\r
-    private OcResource curResource;\r
-\r
-    //for display\r
-    private TextView mEventsTextView;\r
-    private static boolean printOnce = true;\r
-\r
-    /**\r
-     * configure OIC platform and call findResource\r
-     */\r
-    private void initOICStack() {\r
-        //create platform config\r
-        PlatformConfig cfg = new PlatformConfig(\r
-                this,\r
-                ServiceType.IN_PROC,\r
-                ModeType.CLIENT,\r
-                "0.0.0.0", // bind to all available interfaces\r
-                0,\r
-                QualityOfService.LOW);\r
-        OcPlatform.Configure(cfg);\r
-        try {\r
-            /**\r
-             * find all resources\r
-             */\r
-            OcPlatform.findResource("", OcPlatform.WELL_KNOWN_QUERY + "?rt=" + "core.light",\r
-                    OcConnectivityType.WIFI, this);\r
-        } catch (OcException e) {\r
-            logMessage(TAG + "findResource error: " + e.getMessage());\r
-            Log.e(TAG, e.getMessage());\r
-        }\r
-    }\r
-\r
-    @Override\r
-    /**\r
-     *  callback when a resource is found. This method calls doGetLightRepresentation to get the\r
-     *  current values of myLight\r
-     */\r
-    synchronized public void onResourceFound(OcResource ocResource) {\r
-        /**\r
-         *  this may potentially be called by multiple threads at the same time\r
-         */\r
-        synchronized (this) {\r
-            String resourceUri;\r
-            String hostAddress;\r
-            resourceUri = ocResource.getUri();\r
-            hostAddress = ocResource.getHost();\r
-            logMessage(TAG + "Discovered Resource\nUri: " + resourceUri + " \n Host: " + hostAddress);\r
-            // get the resource types\r
-            if (resourceUri.equals(StringConstants.RESOURCE_URI0)) {\r
-                curResource = ocResource;\r
-                doGetLightRepresentation();\r
-            }\r
-        }\r
-    }\r
-\r
-    /**\r
-     * get myLight values after observe\r
-     */\r
-    private void doObserveLightRepresentation() {\r
-        // eventhandler for observe()\r
-        OcResource.OnObserveListener onObserveListener = new OcResource.OnObserveListener() {\r
-            @Override\r
-            public void onObserveCompleted(List<OcHeaderOption> ocHeaderOptions,\r
-                                           OcRepresentation ocRepresentation, int seqNum) {\r
-                if (printOnce) {\r
-                    logMessage(TAG + "OBSERVE request was successful");\r
-                    printOnce = false;\r
-                }\r
-                try {\r
-                    boolean state = ocRepresentation.getValue(StringConstants.STATE);\r
-                    int power = ocRepresentation.getValue(StringConstants.POWER);\r
-                    String name = ocRepresentation.getValue(StringConstants.NAME);\r
-                    myLight.setState(state);\r
-                    myLight.setPower(power);\r
-                    myLight.setName(name);\r
-                } catch (OcException e) {\r
-                    Log.e(TAG, e.getMessage());\r
-                }\r
-                logMessage(TAG + "onObserve: Power: " + myLight.getPower());\r
-                if (seqNum > 20) {\r
-                    try {\r
-                        curResource.cancelObserve();\r
-                        logMessage(TAG + "Successfully cancelled observe");\r
-                   } catch (OcException e) {\r
-                        logMessage(TAG + "cancelObserve error. " + e.getMessage());\r
-                        Log.e(TAG, e.getMessage());\r
-                    }\r
-                }\r
-\r
-            }\r
-\r
-            @Override\r
-            public void onObserveFailed(Throwable throwable) {\r
-                if (throwable instanceof OcException) {\r
-                    OcException ocEx = (OcException) throwable;\r
-                    ErrorCode errCode = ocEx.getErrorCode();\r
-                    //do something based on errorCode\r
-                }\r
-                Log.e(TAG, throwable.toString());\r
-            }\r
-        };\r
-        try {\r
-            curResource.observe(ObserveType.OBSERVE, new HashMap<String, String>(), onObserveListener);\r
-        } catch (OcException e) {\r
-            logMessage(TAG + e.getMessage());\r
-            Log.e(TAG, e.getMessage());\r
-        }\r
-    }\r
-\r
-    /**\r
-     * get the current value of myLight after POST and call doObserveLightRepresentation\r
-     *\r
-     * @param ocRepresentation needed to invoke post()\r
-     */\r
-    private void doOnPost2(OcRepresentation ocRepresentation) {\r
-        // eventhandler for post()\r
-        OcResource.OnPostListener onPostListener2 = new OcResource.OnPostListener() {\r
-            @Override\r
-            public void onPostCompleted(List<OcHeaderOption> ocHeaderOptions, OcRepresentation rep) {\r
-                logMessage(TAG + "POST request was successful");\r
-                String createdUri = rep.getUri();\r
-                if (createdUri.equals(StringConstants.RESOURCE_URI1)) {\r
-                    logMessage(TAG + "Uri of the created resource: " + createdUri);\r
-                } else {\r
-                    try {\r
-                        boolean state = rep.getValue(StringConstants.STATE);\r
-                        int power = rep.getValue(StringConstants.POWER);\r
-                        String name = rep.getValue(StringConstants.NAME);\r
-                        myLight.setState(state);\r
-                        myLight.setPower(power);\r
-                        myLight.setName(name);\r
-                    } catch (OcException e) {\r
-                        Log.e(TAG, e.getMessage());\r
-                    }\r
-                    logMessage(TAG + "onPost\nState: " + myLight.getState() + "\nPower: " +\r
-                            myLight.getPower() + "\nName: " + myLight.getName());\r
-                }\r
-                doObserveLightRepresentation();\r
-            }\r
-\r
-            @Override\r
-            public void onPostFailed(Throwable throwable) {\r
-                if (throwable instanceof OcException) {\r
-                    OcException ocEx = (OcException) throwable;\r
-                    ErrorCode errCode = ocEx.getErrorCode();\r
-                    //do something based on errorCode\r
-                }\r
-                Log.e(TAG, throwable.toString());\r
-            }\r
-        };\r
-        try {\r
-            curResource.post(ocRepresentation, new HashMap<String, String>(), onPostListener2);\r
-        } catch (OcException e) {\r
-            logMessage(TAG + e.getMessage());\r
-            Log.e(TAG, e.getMessage());\r
-        }\r
-    }\r
-\r
-    /**\r
-     * create a new resource and update its value.\r
-     */\r
-    private void doPostLightRepresentation() {\r
-        // eventhandler for post()\r
-        OcResource.OnPostListener onPostListener = new OcResource.OnPostListener() {\r
-            @Override\r
-            public void onPostCompleted(List<OcHeaderOption> ocHeaderOptions,\r
-                                        OcRepresentation ocRepresentation) {\r
-                String createdUri = "";\r
-                try {\r
-                    createdUri = ocRepresentation.getValue(StringConstants.CREATED_URI);\r
-                } catch (OcException e) {\r
-                    Log.e(TAG, e.getMessage());\r
-                }\r
-                if (createdUri.equals(StringConstants.RESOURCE_URI1)) {\r
-                    logMessage(TAG + "Uri of the created resource: " + createdUri);\r
-                } else {\r
-                    boolean state = false;\r
-                    try {\r
-                        state = ocRepresentation.getValue(StringConstants.STATE);\r
-                        int power = ocRepresentation.getValue(StringConstants.POWER);\r
-                        String name = ocRepresentation.getValue(StringConstants.NAME);\r
-                        myLight.setState(state);\r
-                        myLight.setPower(power);\r
-                        myLight.setName(name);\r
-                    } catch (OcException e) {\r
-                        Log.e(TAG, e.getMessage());\r
-                    }\r
-                }\r
-                OcRepresentation rep = new OcRepresentation();\r
-                myLight.setState(true);\r
-                myLight.setPower(55);\r
-                try {\r
-                    rep.setValue(StringConstants.POWER, myLight.getPower());\r
-                    rep.setValue(StringConstants.STATE, myLight.getState());\r
-                } catch (OcException e) {\r
-                    Log.e(TAG, e.getMessage());\r
-                }\r
-                doOnPost2(rep);\r
-            }\r
-\r
-            @Override\r
-            public void onPostFailed(Throwable throwable) {\r
-                if (throwable instanceof OcException) {\r
-                    OcException ocEx = (OcException) throwable;\r
-                    ErrorCode errCode = ocEx.getErrorCode();\r
-                    //do something based on errorCode\r
-                }\r
-                Log.e(TAG, throwable.toString());\r
-            }\r
-        };\r
-\r
-        OcRepresentation rep = new OcRepresentation();\r
-        myLight.setState(false);\r
-        myLight.setPower(105);\r
-        try {\r
-            rep.setValue(StringConstants.STATE, myLight.getState());\r
-            rep.setValue(StringConstants.POWER, myLight.getPower());\r
-        } catch (OcException e) {\r
-            Log.e(TAG, e.getMessage());\r
-        }\r
-        try {\r
-            curResource.post(rep, new HashMap<String, String>(), onPostListener);\r
-        } catch (OcException e) {\r
-            logMessage(TAG + e.getMessage());\r
-            Log.e(TAG, e.getMessage());\r
-        }\r
-    }\r
-\r
-    /**\r
-     * modify the current value of myLight and call doPostLightRepresentation\r
-     */\r
-    private void doPutLightRepresentation() {\r
-        // eventhandler for put()\r
-        OcResource.OnPutListener onPutListener = new OcResource.OnPutListener() {\r
-            @Override\r
-            public void onPutCompleted(List<OcHeaderOption> ocHeaderOptions,\r
-                                       OcRepresentation ocRepresentation) {\r
-                logMessage(TAG + "PUT resource was successful");\r
-                try {\r
-                    boolean state = ocRepresentation.getValue(StringConstants.STATE);\r
-                    int power = ocRepresentation.getValue(StringConstants.POWER);\r
-                    String name = ocRepresentation.getValue(StringConstants.NAME);\r
-                    myLight.setState(state);\r
-                    myLight.setPower(power);\r
-                    myLight.setName(name);\r
-                } catch (OcException e) {\r
-                    Log.e(TAG, e.getMessage());\r
-                }\r
-\r
-                logMessage(TAG + "onPutCompleted:\nState:" + myLight.getState() + "\nPower: " +\r
-                        myLight.getPower() + "\nName: " + myLight.getName());\r
-                doPostLightRepresentation();\r
-            }\r
-\r
-            @Override\r
-            public void onPutFailed(Throwable throwable) {\r
-\r
-                if (throwable instanceof OcException) {\r
-                    OcException ocEx = (OcException) throwable;\r
-                    ErrorCode errCode = ocEx.getErrorCode();\r
-                    //do something based on errorCode\r
-                }\r
-                Log.e(TAG, throwable.toString());\r
-            }\r
-        };\r
-\r
-        OcRepresentation rep = new OcRepresentation();\r
-        Log.d(TAG, "myLight settings: power = 15");\r
-        myLight.setState(true);\r
-        myLight.setPower(15);\r
-        try {\r
-            rep.setValue(StringConstants.STATE, myLight.getState());\r
-            rep.setValue(StringConstants.POWER, myLight.getPower());\r
-            rep.setValue(StringConstants.NAME, myLight.getName());\r
-        } catch (OcException e) {\r
-            Log.e(TAG, e.getMessage());\r
-        }\r
-        try {\r
-            Log.d(TAG, "before calling put");\r
-            curResource.put(rep, new HashMap<String, String>(), onPutListener);\r
-        } catch (OcException e) {\r
-            logMessage(TAG + e.getMessage());\r
-            Log.e(TAG, e.getMessage());\r
-        }\r
-        Log.d(TAG, "end of put call");\r
-    }\r
-\r
-    /**\r
-     * get the existing value of myLight and call doPutLightRepresentation() to modify the current values\r
-     */\r
-    private void doGetLightRepresentation() {\r
-        // eventhandler for get()\r
-        OcResource.OnGetListener onGetListener = new OcResource.OnGetListener() {\r
-            @Override\r
-            public void onGetCompleted(List<OcHeaderOption> headerOptionList,\r
-                                       OcRepresentation ocRepresentation) {\r
-                logMessage(TAG + "GET resource was successful " + StringConstants.STATE);\r
-                try {\r
-                    boolean state = ocRepresentation.getValue(StringConstants.STATE);\r
-                    int power = ocRepresentation.getValue(StringConstants.POWER);\r
-                    String name = ocRepresentation.getValue(StringConstants.NAME);\r
-                    myLight.setState(state);\r
-                    myLight.setPower(power);\r
-                    myLight.setName(name);\r
-                } catch (OcException e) {\r
-                    Log.e(TAG, e.getMessage());\r
-                }\r
-                logMessage(TAG + "onGetCompleted\nState: " + myLight.getState() + "\nPower: " +\r
-                        myLight.getPower() + "\nName: " + myLight.getName());\r
-                doPutLightRepresentation();\r
-            }\r
-\r
-            @Override\r
-            public void onGetFailed(Throwable throwable) {\r
-                if (throwable instanceof OcException) {\r
-                    OcException ocEx = (OcException) throwable;\r
-                    ErrorCode errCode = ocEx.getErrorCode();\r
-                    //do something based on errorCode\r
-                }\r
-                Log.e(TAG, throwable.toString());\r
-            }\r
-        };\r
-\r
-        try {\r
-            curResource.get(new HashMap<String, String>(), onGetListener);\r
-        } catch (OcException e) {\r
-            logMessage(TAG + e.getMessage());\r
-            Log.e(TAG, e.getMessage());\r
-        }\r
-    }\r
-\r
-    /**\r
-     * to display on SimpleClient screen\r
-     */\r
-    public class MessageReceiver extends BroadcastReceiver {\r
-        @Override\r
-        public void onReceive(Context context, Intent intent) {\r
-            final String message = intent.getStringExtra(StringConstants.MESSAGE);\r
-            logMessage(message);\r
-        }\r
-    }\r
-\r
-    @Override\r
-    protected void onCreate(Bundle savedInstanceState) {\r
-        super.onCreate(savedInstanceState);\r
-        setContentView(R.layout.activity_main);\r
-        mEventsTextView = new TextView(this);\r
-        mEventsTextView.setMovementMethod(new ScrollingMovementMethod());\r
-        LinearLayout layout = (LinearLayout) findViewById(R.id.linearLayout);\r
-        layout.addView(mEventsTextView, new LinearLayout.LayoutParams(\r
-                LinearLayout.LayoutParams.MATCH_PARENT, 0, 1f)\r
-        );\r
-        myLight = new Light();\r
-\r
-        initOICStack();\r
-    }\r
-\r
-    @Override\r
-    public void logMessage(String text) {\r
-        logMsg(text);\r
-    }\r
-\r
-    public void logMsg(final String text) {\r
-        runOnUiThread(new Runnable() {\r
-            public void run() {\r
-                Message msg = new Message();\r
-                msg.obj = text;\r
-                mEventsTextView.append("\n");\r
-                mEventsTextView.append(text);\r
-            }\r
-        });\r
-        Log.i(TAG, text);\r
-        //to print on SimpleServer screen\r
-        Intent intent = new Intent("org.iotivity.base.examples.simpleclient");\r
-        intent.putExtra(StringConstants.MESSAGE, text);\r
-        sendBroadcast(intent);\r
-    }\r
-}\r
+/*
+ * //******************************************************************
+ * //
+ * // Copyright 2015 Intel Corporation.
+ * //
+ * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+ * //
+ * // Licensed under the Apache License, Version 2.0 (the "License");
+ * // you may not use this file except in compliance with the License.
+ * // You may obtain a copy of the License at
+ * //
+ * //      http://www.apache.org/licenses/LICENSE-2.0
+ * //
+ * // Unless required by applicable law or agreed to in writing, software
+ * // distributed under the License is distributed on an "AS IS" BASIS,
+ * // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * // See the License for the specific language governing permissions and
+ * // limitations under the License.
+ * //
+ * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+ */
+
+package org.iotivity.base.examples.simpleclient;
+
+import android.app.Activity;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.res.AssetManager;
+import android.os.Bundle;
+import android.os.Message;
+import android.preference.PreferenceManager;
+import android.text.method.ScrollingMovementMethod;
+import android.util.Log;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import org.iotivity.base.ErrorCode;
+import org.iotivity.base.ModeType;
+import org.iotivity.base.ObserveType;
+import org.iotivity.base.OcConnectivityType;
+import org.iotivity.base.OcException;
+import org.iotivity.base.OcHeaderOption;
+import org.iotivity.base.OcPlatform;
+import org.iotivity.base.OcRepresentation;
+import org.iotivity.base.OcResource;
+import org.iotivity.base.PlatformConfig;
+import org.iotivity.base.QualityOfService;
+import org.iotivity.base.ServiceType;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.List;
+
+import base.iotivity.org.examples.message.IMessageLogger;
+
+/**
+ * SimpleClient
+ * <p/>
+ * SimpleClient is a sample client app which should be started after the simpleServer is started.
+ * It finds resources advertised by the server and calls different operations on it (GET, PUT,
+ * POST and OBSERVE).
+ * This implements IMessageLogger to display messages on the screen
+ */
+public class SimpleClient extends Activity implements OcPlatform.OnResourceFoundListener,
+        IMessageLogger {
+    private static final String TAG = "SimpleClient: ";
+
+    private static final int BUFFER_SIZE = 1024;
+    private String filePath = "";
+    private Light myLight;
+    private OcResource curResource;
+
+    //for display
+    private TextView mEventsTextView;
+    private static boolean printOnce = true;
+
+    /**
+     * configure OIC platform and call findResource
+     */
+    private void initOICStack() {
+        //create platform config
+        PlatformConfig cfg = new PlatformConfig(
+                this,
+                ServiceType.IN_PROC,
+                ModeType.CLIENT_SERVER,
+                "0.0.0.0", // bind to all available interfaces
+                0,
+                QualityOfService.LOW, filePath + StringConstants.OIC_CLIENT_JSON_DB_FILE);
+        OcPlatform.Configure(cfg);
+        try {
+            /**
+             * find all resources
+             */
+            OcPlatform.findResource("", OcPlatform.WELL_KNOWN_QUERY + "?rt=" + "core.light",
+                    EnumSet.of(OcConnectivityType.CT_DEFAULT), this);
+        } catch (OcException e) {
+            logMessage(TAG + "findResource error: " + e.getMessage());
+            Log.e(TAG, e.getMessage());
+        }
+    }
+
+    @Override
+    /**
+     *  callback when a resource is found. This method calls doGetLightRepresentation to get the
+     *  current values of myLight
+     */
+    synchronized public void onResourceFound(OcResource ocResource) {
+        /**
+         *  this may potentially be called by multiple threads at the same time
+         */
+        synchronized (this) {
+            String resourceUri;
+            String hostAddress;
+            resourceUri = ocResource.getUri();
+            hostAddress = ocResource.getHost();
+            logMessage(TAG + "Discovered Resource\nUri: " + resourceUri + " \n Host: " + hostAddress);
+            // get the resource types
+            if (resourceUri.contains("light")) {
+                curResource = ocResource;
+                doGetLightRepresentation();
+            }
+        }
+    }
+
+    /**
+     * get myLight values after observe
+     */
+    private void doObserveLightRepresentation() {
+        // eventhandler for observe()
+        OcResource.OnObserveListener onObserveListener = new OcResource.OnObserveListener() {
+            @Override
+            public void onObserveCompleted(List<OcHeaderOption> ocHeaderOptions,
+                                           OcRepresentation ocRepresentation, int seqNum) {
+                if (printOnce) {
+                    logMessage(TAG + "OBSERVE request was successful");
+                    printOnce = false;
+                }
+                try {
+                    boolean state = ocRepresentation.getValue(StringConstants.STATE);
+                    int power = ocRepresentation.getValue(StringConstants.POWER);
+                    String name = ocRepresentation.getValue(StringConstants.NAME);
+                    myLight.setState(state);
+                    myLight.setPower(power);
+                    myLight.setName(name);
+                } catch (OcException e) {
+                    Log.e(TAG, e.getMessage());
+                }
+                logMessage(TAG + "onObserve: Power: " + myLight.getPower());
+                if (seqNum > 20) {
+                    try {
+                        curResource.cancelObserve();
+                        logMessage(TAG + "Successfully cancelled observe");
+                   } catch (OcException e) {
+                        logMessage(TAG + "cancelObserve error. " + e.getMessage());
+                        Log.e(TAG, e.getMessage());
+                    }
+                }
+
+            }
+
+            @Override
+            public void onObserveFailed(Throwable throwable) {
+                if (throwable instanceof OcException) {
+                    OcException ocEx = (OcException) throwable;
+                    ErrorCode errCode = ocEx.getErrorCode();
+                    //do something based on errorCode
+                }
+                Log.e(TAG, throwable.toString());
+            }
+        };
+        try {
+            curResource.observe(ObserveType.OBSERVE, new HashMap<String, String>(), onObserveListener);
+        } catch (OcException e) {
+            logMessage(TAG + e.getMessage());
+            Log.e(TAG, e.getMessage());
+        }
+    }
+
+    /**
+     * get the current value of myLight after POST and call doObserveLightRepresentation
+     *
+     * @param ocRepresentation needed to invoke post()
+     */
+    private void doOnPost2(OcRepresentation ocRepresentation) {
+        // eventhandler for post()
+        OcResource.OnPostListener onPostListener2 = new OcResource.OnPostListener() {
+            @Override
+            public void onPostCompleted(List<OcHeaderOption> ocHeaderOptions, OcRepresentation rep) {
+                logMessage(TAG + "POST request was successful");
+                String createdUri = rep.getUri();
+                if (createdUri.equals(StringConstants.RESOURCE_URI1)) {
+                    logMessage(TAG + "Uri of the created resource: " + createdUri);
+                } else {
+                    try {
+                        boolean state = rep.getValue(StringConstants.STATE);
+                        int power = rep.getValue(StringConstants.POWER);
+                        String name = rep.getValue(StringConstants.NAME);
+                        myLight.setState(state);
+                        myLight.setPower(power);
+                        myLight.setName(name);
+                    } catch (OcException e) {
+                        Log.e(TAG, e.getMessage());
+                    }
+                    logMessage(TAG + "onPost\nState: " + myLight.getState() + "\nPower: " +
+                            myLight.getPower() + "\nName: " + myLight.getName());
+                }
+                doObserveLightRepresentation();
+            }
+
+            @Override
+            public void onPostFailed(Throwable throwable) {
+                if (throwable instanceof OcException) {
+                    OcException ocEx = (OcException) throwable;
+                    ErrorCode errCode = ocEx.getErrorCode();
+                    //do something based on errorCode
+                }
+                Log.e(TAG, throwable.toString());
+            }
+        };
+        try {
+            curResource.post(ocRepresentation, new HashMap<String, String>(), onPostListener2);
+        } catch (OcException e) {
+            logMessage(TAG + e.getMessage());
+            Log.e(TAG, e.getMessage());
+        }
+    }
+
+    /**
+     * create a new resource and update its value.
+     */
+    private void doPostLightRepresentation() {
+        // eventhandler for post()
+        OcResource.OnPostListener onPostListener = new OcResource.OnPostListener() {
+            @Override
+            public void onPostCompleted(List<OcHeaderOption> ocHeaderOptions,
+                                        OcRepresentation ocRepresentation) {
+                String createdUri = "";
+                try {
+                    createdUri = ocRepresentation.getValue(StringConstants.CREATED_URI);
+                } catch (OcException e) {
+                    Log.e(TAG, e.getMessage());
+                }
+                if (createdUri.equals(StringConstants.RESOURCE_URI1)) {
+                    logMessage(TAG + "Uri of the created resource: " + createdUri);
+                } else {
+                    boolean state = false;
+                    try {
+                        state = ocRepresentation.getValue(StringConstants.STATE);
+                        int power = ocRepresentation.getValue(StringConstants.POWER);
+                        String name = ocRepresentation.getValue(StringConstants.NAME);
+                        myLight.setState(state);
+                        myLight.setPower(power);
+                        myLight.setName(name);
+                    } catch (OcException e) {
+                        Log.e(TAG, e.getMessage());
+                    }
+                }
+                OcRepresentation rep = new OcRepresentation();
+                myLight.setState(true);
+                myLight.setPower(55);
+                try {
+                    rep.setValue(StringConstants.POWER, myLight.getPower());
+                    rep.setValue(StringConstants.STATE, myLight.getState());
+                } catch (OcException e) {
+                    Log.e(TAG, e.getMessage());
+                }
+                doOnPost2(rep);
+            }
+
+            @Override
+            public void onPostFailed(Throwable throwable) {
+                if (throwable instanceof OcException) {
+                    OcException ocEx = (OcException) throwable;
+                    ErrorCode errCode = ocEx.getErrorCode();
+                    //do something based on errorCode
+                }
+                Log.e(TAG, throwable.toString());
+            }
+        };
+
+        OcRepresentation rep = new OcRepresentation();
+        myLight.setState(false);
+        myLight.setPower(105);
+        try {
+            rep.setValue(StringConstants.STATE, myLight.getState());
+            rep.setValue(StringConstants.POWER, myLight.getPower());
+        } catch (OcException e) {
+            Log.e(TAG, e.getMessage());
+        }
+        try {
+            curResource.post(rep, new HashMap<String, String>(), onPostListener);
+        } catch (OcException e) {
+            logMessage(TAG + e.getMessage());
+            Log.e(TAG, e.getMessage());
+        }
+    }
+
+    /**
+     * modify the current value of myLight and call doPostLightRepresentation
+     */
+    private void doPutLightRepresentation() {
+        // eventhandler for put()
+        OcResource.OnPutListener onPutListener = new OcResource.OnPutListener() {
+            @Override
+            public void onPutCompleted(List<OcHeaderOption> ocHeaderOptions,
+                                       OcRepresentation ocRepresentation) {
+                logMessage(TAG + "PUT resource was successful");
+                try {
+                    boolean state = ocRepresentation.getValue(StringConstants.STATE);
+                    int power = ocRepresentation.getValue(StringConstants.POWER);
+                    String name = ocRepresentation.getValue(StringConstants.NAME);
+                    myLight.setState(state);
+                    myLight.setPower(power);
+                    myLight.setName(name);
+                } catch (OcException e) {
+                    Log.e(TAG, e.getMessage());
+                }
+
+                logMessage(TAG + "onPutCompleted:\nState:" + myLight.getState() + "\nPower: " +
+                        myLight.getPower() + "\nName: " + myLight.getName());
+                doPostLightRepresentation();
+            }
+
+            @Override
+            public void onPutFailed(Throwable throwable) {
+
+                if (throwable instanceof OcException) {
+                    OcException ocEx = (OcException) throwable;
+                    ErrorCode errCode = ocEx.getErrorCode();
+                    //do something based on errorCode
+                }
+                Log.e(TAG, throwable.toString());
+            }
+        };
+
+        OcRepresentation rep = new OcRepresentation();
+        Log.d(TAG, "myLight settings: power = 15");
+        myLight.setState(true);
+        myLight.setPower(15);
+        try {
+            rep.setValue(StringConstants.STATE, myLight.getState());
+            rep.setValue(StringConstants.POWER, myLight.getPower());
+            rep.setValue(StringConstants.NAME, myLight.getName());
+        } catch (OcException e) {
+            Log.e(TAG, e.getMessage());
+        }
+        try {
+            Log.d(TAG, "before calling put");
+            curResource.put(rep, new HashMap<String, String>(), onPutListener);
+        } catch (OcException e) {
+            logMessage(TAG + e.getMessage());
+            Log.e(TAG, e.getMessage());
+        }
+        Log.d(TAG, "end of put call");
+    }
+
+    /**
+     * get the existing value of myLight and call doPutLightRepresentation() to modify the current values
+     */
+    private void doGetLightRepresentation() {
+        // eventhandler for get()
+        OcResource.OnGetListener onGetListener = new OcResource.OnGetListener() {
+            @Override
+            public void onGetCompleted(List<OcHeaderOption> headerOptionList,
+                                       OcRepresentation ocRepresentation) {
+                logMessage(TAG + "GET resource was successful " + StringConstants.STATE);
+                try {
+                    boolean state = ocRepresentation.getValue(StringConstants.STATE);
+                    int power = ocRepresentation.getValue(StringConstants.POWER);
+                    String name = ocRepresentation.getValue(StringConstants.NAME);
+                    myLight.setState(state);
+                    myLight.setPower(power);
+                    myLight.setName(name);
+                } catch (OcException e) {
+                    Log.e(TAG, e.getMessage());
+                }
+                logMessage(TAG + "onGetCompleted\nState: " + myLight.getState() + "\nPower: " +
+                        myLight.getPower() + "\nName: " + myLight.getName());
+                doPutLightRepresentation();
+            }
+
+            @Override
+            public void onGetFailed(Throwable throwable) {
+                if (throwable instanceof OcException) {
+                    OcException ocEx = (OcException) throwable;
+                    ErrorCode errCode = ocEx.getErrorCode();
+                    //do something based on errorCode
+                }
+                Log.e(TAG, throwable.toString());
+            }
+        };
+
+        try {
+            curResource.get(new HashMap<String, String>(), onGetListener);
+        } catch (OcException e) {
+            logMessage(TAG + e.getMessage());
+            Log.e(TAG, e.getMessage());
+        }
+    }
+
+    /**
+     * to display on SimpleClient screen
+     */
+    public class MessageReceiver extends BroadcastReceiver {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            final String message = intent.getStringExtra(StringConstants.MESSAGE);
+            logMessage(message);
+        }
+    }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_main);
+        mEventsTextView = new TextView(this);
+        mEventsTextView.setMovementMethod(new ScrollingMovementMethod());
+        LinearLayout layout = (LinearLayout) findViewById(R.id.linearLayout);
+        layout.addView(mEventsTextView, new LinearLayout.LayoutParams(
+                LinearLayout.LayoutParams.MATCH_PARENT, 0, 1f)
+        );
+        myLight = new Light();
+        filePath = getFilesDir().getPath() + "/"; //  data/data/<package>/files/
+        //copy json when application runs first time
+        SharedPreferences wmbPreference = PreferenceManager.getDefaultSharedPreferences(this);
+        boolean isFirstRun = wmbPreference.getBoolean("FIRSTRUN", true);
+        if (isFirstRun) {
+            copyJsonFromAsset();
+            SharedPreferences.Editor editor = wmbPreference.edit();
+            editor.putBoolean("FIRSTRUN", false);
+            editor.commit();
+        }
+
+
+        initOICStack();
+    }
+/**
+     * Copy svr db json file from assets folder to app data files dir
+     */
+    private void copyJsonFromAsset() {
+        AssetManager assetManager = getAssets();
+        InputStream in = null;
+        OutputStream out = null;
+        try {
+            in = assetManager.open(StringConstants.OIC_CLIENT_JSON_DB_FILE);
+            File file = new File(filePath);
+            //check files directory exists
+            if (!(file.exists() && file.isDirectory())) {
+                file.mkdirs();
+            }
+            out = new FileOutputStream(filePath + StringConstants.OIC_CLIENT_JSON_DB_FILE);
+            copyFile(in, out);
+        } catch (NullPointerException e) {
+            logMessage(TAG + "Null pointer exception " + e.getMessage());
+            Log.e(TAG, e.getMessage());
+        } catch (FileNotFoundException e) {
+            logMessage(TAG + "Json svr db file not found " + e.getMessage());
+            Log.e(TAG, e.getMessage());
+        } catch (IOException e) {
+            logMessage(TAG + StringConstants.OIC_CLIENT_JSON_DB_FILE+ " file copy failed");
+            Log.e(TAG, e.getMessage());
+        } finally {
+            if (in != null) {
+                try {
+                    in.close();
+                } catch (IOException e) {
+                    Log.e(TAG, e.getMessage());
+                }
+            }
+            if (out != null) {
+                try {
+                    out.close();
+                } catch (IOException e) {
+                    Log.e(TAG, e.getMessage());
+                }
+            }
+        }
+    }
+
+    private void copyFile(InputStream in, OutputStream out) throws IOException {
+        byte[] buffer = new byte[BUFFER_SIZE];
+        int read;
+        while ((read = in.read(buffer)) != -1) {
+            out.write(buffer, 0, read);
+        }
+    }
+    @Override
+    public void logMessage(String text) {
+        logMsg(text);
+    }
+
+    public void logMsg(final String text) {
+        runOnUiThread(new Runnable() {
+            public void run() {
+                Message msg = new Message();
+                msg.obj = text;
+                mEventsTextView.append("\n");
+                mEventsTextView.append(text);
+            }
+        });
+        Log.i(TAG, text);
+        //to print on SimpleServer screen
+        Intent intent = new Intent("org.iotivity.base.examples.simpleclient");
+        intent.putExtra(StringConstants.MESSAGE, text);
+        sendBroadcast(intent);
+    }
+}