From fa7bf5a839d2c0248030c08543536ba104073062 Mon Sep 17 00:00:00 2001 From: George Nash Date: Thu, 7 Sep 2017 12:34:22 -0700 Subject: [PATCH] generic-java: remove unbuilt samples All of the Android samples were copied over to the generic-java samples folder but only 3 of the samples were actually updated so they would build and run. Till there is time to actually work through the samples and make sure they build and run they should be removed so they are not referenced by developers. Change-Id: I64ef0f2d5d10e3aa66f85f4f34b9e0cd29d94542 Signed-off-by: George Nash Reviewed-on: https://gerrit.iotivity.org/gerrit/22377 Tested-by: jenkins-iotivity Reviewed-by: Larry Sachs Reviewed-by: Rick Bell --- .../examples-java/devicediscoveryclient/.gitignore | 1 - .../devicediscoveryclient/build.gradle | 37 -- .../base/examples/DeviceDiscoveryClient.java | 233 -------- .../examples-java/devicediscoveryserver/.gitignore | 1 - .../devicediscoveryserver/build.gradle | 37 -- .../base/examples/DeviceDiscoveryServer.java | 163 ------ java/examples-java/fridgeclient/.gitignore | 1 - java/examples-java/fridgeclient/build.gradle | 35 -- .../org/iotivity/base/examples/FridgeClient.java | 248 --------- java/examples-java/fridgegroupclient/.gitignore | 1 - java/examples-java/fridgegroupclient/build.gradle | 35 -- .../iotivity/base/examples/FridgeGroupClient.java | 258 --------- java/examples-java/fridgegroupserver/.gitignore | 1 - java/examples-java/fridgegroupserver/build.gradle | 35 -- .../org/iotivity/base/examples/DoorResource.java | 169 ------ .../iotivity/base/examples/FridgeGroupServer.java | 143 ----- .../org/iotivity/base/examples/FridgeResource.java | 82 --- .../org/iotivity/base/examples/LightResource.java | 159 ------ .../org/iotivity/base/examples/Refrigerator.java | 62 --- .../java/org/iotivity/base/examples/Resource.java | 59 -- java/examples-java/fridgeserver/.gitignore | 1 - java/examples-java/fridgeserver/build.gradle | 35 -- .../base/examples/fridgeserver/DeviceResource.java | 164 ------ .../base/examples/fridgeserver/DoorResource.java | 166 ------ .../base/examples/fridgeserver/FridgeServer.java | 132 ----- .../base/examples/fridgeserver/LightResource.java | 157 ------ .../base/examples/fridgeserver/Refrigerator.java | 62 --- .../base/examples/fridgeserver/Resource.java | 61 --- .../gradle/wrapper/gradle-wrapper.jar | Bin 49896 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 - java/examples-java/groupclient/.gitignore | 1 - java/examples-java/groupclient/build.gradle | 37 -- .../org/iotivity/base/examples/GroupClient.java | 295 ---------- java/examples-java/groupserver/.gitignore | 1 - java/examples-java/groupserver/build.gradle | 37 -- .../org/iotivity/base/examples/GroupServer.java | 333 ------------ java/examples-java/guiclient/.gitignore | 1 - java/examples-java/guiclient/build.gradle | 25 - .../guiclient/ExpandableResourceListAdapter.java | 382 ------------- .../java/org/iotivity/guiclient/MainActivity.java | 336 ------------ .../org/iotivity/guiclient/OcAttributeInfo.java | 176 ------ .../org/iotivity/guiclient/OcProtocolStrings.java | 50 -- .../org/iotivity/guiclient/OcResourceInfo.java | 375 ------------- .../main/java/org/iotivity/guiclient/OcWorker.java | 524 ------------------ .../org/iotivity/guiclient/OcWorkerListener.java | 56 -- java/examples-java/presenceclient/.gitignore | 1 - java/examples-java/presenceclient/build.gradle | 37 -- .../org/iotivity/base/examples/PresenceClient.java | 240 --------- java/examples-java/presenceserver/.gitignore | 1 - java/examples-java/presenceserver/build.gradle | 37 -- .../org/iotivity/base/examples/PresenceServer.java | 219 -------- java/examples-java/provisioningclient/build.gradle | 38 -- .../src/main/assets/oic_svr_db_client.json | 44 -- .../provisioningclient/ProvisioningClient.java | 593 --------------------- .../provisioningclient/StringConstants.java | 14 - 55 files changed, 6397 deletions(-) delete mode 100644 java/examples-java/devicediscoveryclient/.gitignore delete mode 100644 java/examples-java/devicediscoveryclient/build.gradle delete mode 100644 java/examples-java/devicediscoveryclient/src/main/java/org/iotivity/base/examples/DeviceDiscoveryClient.java delete mode 100644 java/examples-java/devicediscoveryserver/.gitignore delete mode 100644 java/examples-java/devicediscoveryserver/build.gradle delete mode 100644 java/examples-java/devicediscoveryserver/src/main/java/org/iotivity/base/examples/DeviceDiscoveryServer.java delete mode 100755 java/examples-java/fridgeclient/.gitignore delete mode 100755 java/examples-java/fridgeclient/build.gradle delete mode 100755 java/examples-java/fridgeclient/src/main/java/org/iotivity/base/examples/FridgeClient.java delete mode 100755 java/examples-java/fridgegroupclient/.gitignore delete mode 100755 java/examples-java/fridgegroupclient/build.gradle delete mode 100755 java/examples-java/fridgegroupclient/src/main/java/org/iotivity/base/examples/FridgeGroupClient.java delete mode 100755 java/examples-java/fridgegroupserver/.gitignore delete mode 100755 java/examples-java/fridgegroupserver/build.gradle delete mode 100755 java/examples-java/fridgegroupserver/src/main/java/org/iotivity/base/examples/DoorResource.java delete mode 100755 java/examples-java/fridgegroupserver/src/main/java/org/iotivity/base/examples/FridgeGroupServer.java delete mode 100755 java/examples-java/fridgegroupserver/src/main/java/org/iotivity/base/examples/FridgeResource.java delete mode 100755 java/examples-java/fridgegroupserver/src/main/java/org/iotivity/base/examples/LightResource.java delete mode 100755 java/examples-java/fridgegroupserver/src/main/java/org/iotivity/base/examples/Refrigerator.java delete mode 100755 java/examples-java/fridgegroupserver/src/main/java/org/iotivity/base/examples/Resource.java delete mode 100755 java/examples-java/fridgeserver/.gitignore delete mode 100755 java/examples-java/fridgeserver/build.gradle delete mode 100755 java/examples-java/fridgeserver/src/main/java/org/iotivity/base/examples/fridgeserver/DeviceResource.java delete mode 100755 java/examples-java/fridgeserver/src/main/java/org/iotivity/base/examples/fridgeserver/DoorResource.java delete mode 100755 java/examples-java/fridgeserver/src/main/java/org/iotivity/base/examples/fridgeserver/FridgeServer.java delete mode 100755 java/examples-java/fridgeserver/src/main/java/org/iotivity/base/examples/fridgeserver/LightResource.java delete mode 100755 java/examples-java/fridgeserver/src/main/java/org/iotivity/base/examples/fridgeserver/Refrigerator.java delete mode 100755 java/examples-java/fridgeserver/src/main/java/org/iotivity/base/examples/fridgeserver/Resource.java delete mode 100755 java/examples-java/gradle/wrapper/gradle-wrapper.jar delete mode 100755 java/examples-java/gradle/wrapper/gradle-wrapper.properties delete mode 100644 java/examples-java/groupclient/.gitignore delete mode 100644 java/examples-java/groupclient/build.gradle delete mode 100644 java/examples-java/groupclient/src/main/java/org/iotivity/base/examples/GroupClient.java delete mode 100644 java/examples-java/groupserver/.gitignore delete mode 100644 java/examples-java/groupserver/build.gradle delete mode 100644 java/examples-java/groupserver/src/main/java/org/iotivity/base/examples/GroupServer.java delete mode 100644 java/examples-java/guiclient/.gitignore delete mode 100644 java/examples-java/guiclient/build.gradle delete mode 100644 java/examples-java/guiclient/src/main/java/org/iotivity/guiclient/ExpandableResourceListAdapter.java delete mode 100644 java/examples-java/guiclient/src/main/java/org/iotivity/guiclient/MainActivity.java delete mode 100644 java/examples-java/guiclient/src/main/java/org/iotivity/guiclient/OcAttributeInfo.java delete mode 100644 java/examples-java/guiclient/src/main/java/org/iotivity/guiclient/OcProtocolStrings.java delete mode 100644 java/examples-java/guiclient/src/main/java/org/iotivity/guiclient/OcResourceInfo.java delete mode 100644 java/examples-java/guiclient/src/main/java/org/iotivity/guiclient/OcWorker.java delete mode 100644 java/examples-java/guiclient/src/main/java/org/iotivity/guiclient/OcWorkerListener.java delete mode 100644 java/examples-java/presenceclient/.gitignore delete mode 100644 java/examples-java/presenceclient/build.gradle delete mode 100644 java/examples-java/presenceclient/src/main/java/org/iotivity/base/examples/PresenceClient.java delete mode 100644 java/examples-java/presenceserver/.gitignore delete mode 100644 java/examples-java/presenceserver/build.gradle delete mode 100644 java/examples-java/presenceserver/src/main/java/org/iotivity/base/examples/PresenceServer.java delete mode 100644 java/examples-java/provisioningclient/build.gradle delete mode 100644 java/examples-java/provisioningclient/src/main/assets/oic_svr_db_client.json delete mode 100644 java/examples-java/provisioningclient/src/main/java/org/iotivity/base/examples/provisioningclient/ProvisioningClient.java delete mode 100644 java/examples-java/provisioningclient/src/main/java/org/iotivity/base/examples/provisioningclient/StringConstants.java diff --git a/java/examples-java/devicediscoveryclient/.gitignore b/java/examples-java/devicediscoveryclient/.gitignore deleted file mode 100644 index 796b96d..0000000 --- a/java/examples-java/devicediscoveryclient/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/java/examples-java/devicediscoveryclient/build.gradle b/java/examples-java/devicediscoveryclient/build.gradle deleted file mode 100644 index a7dd445..0000000 --- a/java/examples-java/devicediscoveryclient/build.gradle +++ /dev/null @@ -1,37 +0,0 @@ -apply plugin: 'com.android.application' - -android { - compileSdkVersion 21 - buildToolsVersion "20.0.0" - - defaultConfig { - applicationId "org.iotivity.base.examples.devicediscoveryclient" - minSdkVersion 21 - targetSdkVersion 21 - versionCode 1 - versionName "1.0" - } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } - lintOptions { - abortOnError false - } -} -repositories { - flatDir { - dirs "../../android_api/base/build/outputs/aar/" - } -} - -try { - dependencies { - compile ":iotivity-base-${TARGET_ARCH}-${RELEASE}@aar" - } -} catch (all) { - print "${ERROR_MSG}" - assert all -} diff --git a/java/examples-java/devicediscoveryclient/src/main/java/org/iotivity/base/examples/DeviceDiscoveryClient.java b/java/examples-java/devicediscoveryclient/src/main/java/org/iotivity/base/examples/DeviceDiscoveryClient.java deleted file mode 100644 index 6c2d317..0000000 --- a/java/examples-java/devicediscoveryclient/src/main/java/org/iotivity/base/examples/DeviceDiscoveryClient.java +++ /dev/null @@ -1,233 +0,0 @@ -/* - ******************************************************************* - * - * 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; - -import android.app.Activity; -import android.content.Context; -import android.os.Bundle; -import android.text.method.ScrollingMovementMethod; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.ScrollView; -import android.widget.TextView; - -import org.iotivity.base.ModeType; -import org.iotivity.base.OcConnectivityType; -import org.iotivity.base.OcException; -import org.iotivity.base.OcPlatform; -import org.iotivity.base.OcRepresentation; -import org.iotivity.base.PlatformConfig; -import org.iotivity.base.QualityOfService; -import org.iotivity.base.ServiceType; - -import java.util.EnumSet; -import java.util.HashMap; -import java.util.Map; - -/** - * This sample demonstrates the device discovery feature. - * The client queries for the device related information stored by the server. - */ -public class DeviceDiscoveryClient extends Activity implements - OcPlatform.OnDeviceFoundListener, - OcPlatform.OnPlatformFoundListener { - private void startDeviceDiscoveryClient() { - Context context = this; - - PlatformConfig platformConfig = new PlatformConfig( - context, - ServiceType.IN_PROC, - ModeType.CLIENT, - "0.0.0.0", // By setting to "0.0.0.0", it binds to all available interfaces - 0, // Uses randomly available port - QualityOfService.LOW - ); - - msg("Configuring platform."); - OcPlatform.Configure(platformConfig); - sleep(1); - - try { - msg("Querying for platform information..."); - OcPlatform.getPlatformInfo("", - OcPlatform.WELL_KNOWN_PLATFORM_QUERY, - EnumSet.of(OcConnectivityType.CT_DEFAULT), - this); - } catch (OcException e) { - Log.e(TAG, e.toString()); - msg("Failed to query for platform information"); - } - sleep(2); - - try { - msg("Querying for device information..."); - OcPlatform.getDeviceInfo("", - OcPlatform.WELL_KNOWN_DEVICE_QUERY, - EnumSet.of(OcConnectivityType.CT_DEFAULT), - this); - } catch (OcException e) { - Log.e(TAG, e.toString()); - msg("Failed to query for device information"); - } - sleep(2); - - enableStartButton(); - printLine(); - } - - private final static Map PLATFORM_INFO_KEYS = new HashMap() {{ - put("pi", "Platform ID: "); - put("mnmn", "Manufacturer name: "); - put("mnml", "Manufacturer url: "); - put("mnmo", "Manufacturer Model No: "); - put("mndt", "Manufactured Date: "); - put("mnpv", "Manufacturer Platform Version: "); - put("mnos", "Manufacturer OS version: "); - put("mnhw", "Manufacturer hardware version: "); - put("mnfv", "Manufacturer firmware version: "); - put("mnsl", "Manufacturer support url: "); - put("st", "Manufacturer system time: "); - }}; - - @Override - public synchronized void onPlatformFound(OcRepresentation ocRepresentation) { - msg("Platform Information received:"); - try { - for (String key : PLATFORM_INFO_KEYS.keySet()) { - msg("\t" + PLATFORM_INFO_KEYS.get(key) + ocRepresentation.getValue(key)); - } - } catch (OcException e) { - Log.e(TAG, e.toString()); - msg("Failed to read platform info values."); - } - - printLine(); - } - - private final static Map DEVICE_INFO_KEYS = new HashMap() {{ - put("di", "Device ID: "); - put("n", "Device name: "); - put("lcv", "Spec version url: "); - put("dmv", "Data Model: "); - }}; - - @Override - public synchronized void onDeviceFound(OcRepresentation ocRepresentation) { - msg("Device Information received:"); - try { - for (String key : DEVICE_INFO_KEYS.keySet()) { - msg("\t" + DEVICE_INFO_KEYS.get(key) + ocRepresentation.getValue(key)); - } - } catch (OcException e) { - Log.e(TAG, e.toString()); - msg("Failed to read device info values."); - } - - printLine(); - } - - //****************************************************************************** - // End of the OIC specific code - //****************************************************************************** - - private final static String TAG = DeviceDiscoveryClient.class.getSimpleName(); - private TextView mConsoleTextView; - private ScrollView mScrollView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_device_discovery_client); - - mConsoleTextView = (TextView) findViewById(R.id.consoleTextView); - mConsoleTextView.setMovementMethod(new ScrollingMovementMethod()); - mScrollView = (ScrollView) findViewById(R.id.scrollView); - mScrollView.fullScroll(View.FOCUS_DOWN); - final Button button = (Button) findViewById(R.id.button); - - if (null == savedInstanceState) { - button.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - button.setText("Re-start"); - button.setEnabled(false); - new Thread(new Runnable() { - public void run() { - startDeviceDiscoveryClient(); - } - }).start(); - } - }); - } else { - String consoleOutput = savedInstanceState.getString("consoleOutputString"); - mConsoleTextView.setText(consoleOutput); - } - } - - @Override - protected void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putString("consoleOutputString", mConsoleTextView.getText().toString()); - } - - @Override - protected void onRestoreInstanceState(Bundle savedInstanceState) { - super.onRestoreInstanceState(savedInstanceState); - - String consoleOutput = savedInstanceState.getString("consoleOutputString"); - mConsoleTextView.setText(consoleOutput); - } - - private void enableStartButton() { - runOnUiThread(new Runnable() { - public void run() { - Button button = (Button) findViewById(R.id.button); - button.setEnabled(true); - } - }); - } - - private void sleep(int seconds) { - try { - Thread.sleep(seconds * 1000); - } catch (InterruptedException e) { - e.printStackTrace(); - Log.e(TAG, e.toString()); - } - } - - private void msg(final String text) { - runOnUiThread(new Runnable() { - public void run() { - mConsoleTextView.append("\n"); - mConsoleTextView.append(text); - mScrollView.fullScroll(View.FOCUS_DOWN); - } - }); - Log.i(TAG, text); - } - - private void printLine() { - msg("------------------------------------------------------------------------"); - } -} diff --git a/java/examples-java/devicediscoveryserver/.gitignore b/java/examples-java/devicediscoveryserver/.gitignore deleted file mode 100644 index 796b96d..0000000 --- a/java/examples-java/devicediscoveryserver/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/java/examples-java/devicediscoveryserver/build.gradle b/java/examples-java/devicediscoveryserver/build.gradle deleted file mode 100644 index 788038d..0000000 --- a/java/examples-java/devicediscoveryserver/build.gradle +++ /dev/null @@ -1,37 +0,0 @@ -apply plugin: 'com.android.application' - -android { - compileSdkVersion 21 - buildToolsVersion "20.0.0" - - defaultConfig { - applicationId "org.iotivity.base.examples.devicediscoveryserver" - minSdkVersion 21 - targetSdkVersion 21 - versionCode 1 - versionName "1.0" - } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } - lintOptions { - abortOnError false - } -} -repositories { - flatDir { - dirs "../../android_api/base/build/outputs/aar/" - } -} - -try { - dependencies { - compile ":iotivity-base-${TARGET_ARCH}-${RELEASE}@aar" - } -} catch (all) { - print "${ERROR_MSG}" - assert all -} diff --git a/java/examples-java/devicediscoveryserver/src/main/java/org/iotivity/base/examples/DeviceDiscoveryServer.java b/java/examples-java/devicediscoveryserver/src/main/java/org/iotivity/base/examples/DeviceDiscoveryServer.java deleted file mode 100644 index a2920f4..0000000 --- a/java/examples-java/devicediscoveryserver/src/main/java/org/iotivity/base/examples/DeviceDiscoveryServer.java +++ /dev/null @@ -1,163 +0,0 @@ -/* - ******************************************************************* - * - * 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; - -import android.app.Activity; -import android.content.Context; -import android.os.Bundle; -import android.text.method.ScrollingMovementMethod; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.ScrollView; -import android.widget.TextView; - -import org.iotivity.base.ModeType; -import org.iotivity.base.OcDeviceInfo; -import org.iotivity.base.OcException; -import org.iotivity.base.OcPlatform; -import org.iotivity.base.OcPlatformInfo; -import org.iotivity.base.PlatformConfig; -import org.iotivity.base.QualityOfService; -import org.iotivity.base.ServiceType; - -/** - * This sample demonstrates platform and device discovery feature. - * The server sets the platform and device related info. which can be later retrieved by a client. - */ -public class DeviceDiscoveryServer extends Activity { - - private void startDeviceDiscoveryServer() { - Context context = this; - - PlatformConfig platformConfig = new PlatformConfig( - context, - ServiceType.IN_PROC, - ModeType.SERVER, - "0.0.0.0", // By setting to "0.0.0.0", it binds to all available interfaces - 0, // Uses randomly available port - QualityOfService.LOW - ); - - msg("Configuring platform."); - OcPlatform.Configure(platformConfig); - - OcDeviceInfo deviceInfo = new OcDeviceInfo("myDeviceName"); - try { - msg("Registering device info"); - OcPlatform.registerDeviceInfo(deviceInfo); - } catch (OcException e) { - Log.e(TAG, e.toString()); - msg("Failed to register device info."); - } - - OcPlatformInfo platformInfo = new OcPlatformInfo( - "myPlatformId", //Platform ID - "myManufactName", //Manufacturer Name - "www.myurl.com", //Manufacturer URL - "myModelNumber", //Model Number - "myDateOfManufacture", //Date of Manufacture - "myPlatformVersion", //Platform Version - "Manufacturer OS version", //Operating System Version - "myHardwareVersion", //Hardware Version - "myFirmwareVersion", //Firmware Version - "www.mysupporturl.com", //Support URL - String.valueOf(System.currentTimeMillis()) // System Time - ); - try { - msg("Registering platform info"); - OcPlatform.registerPlatformInfo(platformInfo); - } catch (OcException e) { - Log.e(TAG, e.toString()); - msg("Failed to register platform info."); - } - - msg("Waiting for the requests..."); - printLine(); - } - - //****************************************************************************** - // End of the OIC specific code - //****************************************************************************** - - private final static String TAG = DeviceDiscoveryServer.class.getSimpleName(); - private TextView mConsoleTextView; - private ScrollView mScrollView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_device_discovery_server); - - mConsoleTextView = (TextView) findViewById(R.id.consoleTextView); - mConsoleTextView.setMovementMethod(new ScrollingMovementMethod()); - mScrollView = (ScrollView) findViewById(R.id.scrollView); - mScrollView.fullScroll(View.FOCUS_DOWN); - final Button button = (Button) findViewById(R.id.button); - - if (null == savedInstanceState) { - button.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - button.setEnabled(false); - new Thread(new Runnable() { - public void run() { - startDeviceDiscoveryServer(); - } - }).start(); - } - }); - } else { - String consoleOutput = savedInstanceState.getString("consoleOutputString"); - mConsoleTextView.setText(consoleOutput); - } - } - - @Override - protected void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putString("consoleOutputString", mConsoleTextView.getText().toString()); - } - - @Override - protected void onRestoreInstanceState(Bundle savedInstanceState) { - super.onRestoreInstanceState(savedInstanceState); - - String consoleOutput = savedInstanceState.getString("consoleOutputString"); - mConsoleTextView.setText(consoleOutput); - } - - private void msg(final String text) { - runOnUiThread(new Runnable() { - public void run() { - mConsoleTextView.append("\n"); - mConsoleTextView.append(text); - mScrollView.fullScroll(View.FOCUS_DOWN); - } - }); - Log.i(TAG, text); - } - - private void printLine() { - msg("------------------------------------------------------------------------"); - } -} diff --git a/java/examples-java/fridgeclient/.gitignore b/java/examples-java/fridgeclient/.gitignore deleted file mode 100755 index 3543521..0000000 --- a/java/examples-java/fridgeclient/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/java/examples-java/fridgeclient/build.gradle b/java/examples-java/fridgeclient/build.gradle deleted file mode 100755 index fed8552..0000000 --- a/java/examples-java/fridgeclient/build.gradle +++ /dev/null @@ -1,35 +0,0 @@ -apply plugin: 'com.android.application' -android { - compileSdkVersion 21 - buildToolsVersion "20.0.0" - - defaultConfig { - applicationId "org.iotivity.base.examples.fridgeclient" - minSdkVersion 21 - targetSdkVersion 21 - versionCode 1 - versionName "1.0" - } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } - lintOptions { - abortOnError false - } -} -repositories { - flatDir { - dirs "../../android_api/base/build/outputs/aar/" - } -} -try { - dependencies { - compile ":iotivity-base-${TARGET_ARCH}-${RELEASE}@aar" - } -} catch (all) { - print "${ERROR_MSG}" - assert all -} diff --git a/java/examples-java/fridgeclient/src/main/java/org/iotivity/base/examples/FridgeClient.java b/java/examples-java/fridgeclient/src/main/java/org/iotivity/base/examples/FridgeClient.java deleted file mode 100755 index 20d692c..0000000 --- a/java/examples-java/fridgeclient/src/main/java/org/iotivity/base/examples/FridgeClient.java +++ /dev/null @@ -1,248 +0,0 @@ -/* - ******************************************************************* - * - * 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; - -import android.app.Activity; -import android.os.Bundle; -import android.os.Message; -import android.text.method.ScrollingMovementMethod; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import org.iotivity.base.ModeType; -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.util.EnumSet; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; - -/** - * FridgeClient - *

- * FridgeClient is a sample client app which should be started after the fridgeServer is started. - * It creates DeviceResource, DoorResources, LightResource and performs a GET operation on them. - */ -public class FridgeClient extends Activity implements - OcPlatform.OnResourceFoundListener, - OcResource.OnGetListener { - public static final String DEVICE_URI = "/device"; - public static final String LIGHT = "/light"; - public static final String LEFT_DOOR = "/door/left"; - public static final String RIGHT_DOOR = "/door/right"; - public static final String RANDOM_DOOR = "/door/random"; - public static final String API_VERSION = "v.1.0"; - public static final String CLIENT_TOKEN = "21ae43gf"; - public static final int API_VERSION_KEY = 2048; - public static final int CLIENT_TOKEN_KEY = 3000; - - private final List mResourceList = new LinkedList(); - private OcResource mFridgeResource; - - /** - * configure OIC platform and call findResource - */ - private void startFridgeClient() { - PlatformConfig cfg = new PlatformConfig( - this, // context - ServiceType.IN_PROC, - ModeType.CLIENT, - "0.0.0.0", // bind to all available interfaces - 0, - QualityOfService.LOW); - - logMessage("Configuring platform"); - OcPlatform.Configure(cfg); - logMessage("Initiating fridge discovery"); - try { - OcPlatform.findResource("", - OcPlatform.WELL_KNOWN_QUERY + "?rt=" + "intel.fridge", - EnumSet.of(OcConnectivityType.CT_DEFAULT), - this); - } catch (OcException e) { - logMessage(" Failed to discover resource"); - Log.e(TAG, e.getMessage()); - } - logMessage("-----------------------------------------------------"); - } - - /** - * An event handler to be executed whenever a "findResource" request completes successfully - * - * @param ocResource found resource - */ - @Override - public synchronized void onResourceFound(OcResource ocResource) { - if (null != mFridgeResource || !ocResource.getUri().equals(DEVICE_URI)) { - logMessage("Didn't find the correct fridge resource. Exiting"); - return; - } - mFridgeResource = ocResource; - logMessage("Discovered a fridge with \nHost: " + mFridgeResource.getHost()); - - List lightTypes = new LinkedList<>(); - lightTypes.add("intel.fridge.light"); - List doorTypes = new LinkedList<>(); - doorTypes.add("intel.fridge.door"); - List resourceInterfaces = new LinkedList<>(); - resourceInterfaces.add(OcPlatform.DEFAULT_INTERFACE); - logMessage("Creating child resource proxies for the previously known fridge components"); - OcResource light = null; - OcResource leftDoor = null; - OcResource rightDoor = null; - OcResource randomDoor = null; - try { - light = OcPlatform.constructResourceObject(mFridgeResource.getHost(), - LIGHT, - mFridgeResource.getConnectivityTypeSet(), - false, //isObservable - lightTypes, - resourceInterfaces); - mResourceList.add(light); - - leftDoor = OcPlatform.constructResourceObject(mFridgeResource.getHost(), - LEFT_DOOR, - mFridgeResource.getConnectivityTypeSet(), - false, //isObservable - doorTypes, - resourceInterfaces); - mResourceList.add(leftDoor); - - rightDoor = OcPlatform.constructResourceObject(mFridgeResource.getHost(), - RIGHT_DOOR, - mFridgeResource.getConnectivityTypeSet(), - false, //isObservable - doorTypes, - resourceInterfaces); - mResourceList.add(rightDoor); - - randomDoor = OcPlatform.constructResourceObject(mFridgeResource.getHost(), - RANDOM_DOOR, - mFridgeResource.getConnectivityTypeSet(), - false, //isObservable - doorTypes, - resourceInterfaces); - mResourceList.add(randomDoor); - } catch (OcException e) { - logMessage("Error in constructResourceObject"); - Log.e(TAG, e.getMessage()); - } - - List headerOptions = new LinkedList<>(); - OcHeaderOption apiVersion = new OcHeaderOption(API_VERSION_KEY, API_VERSION); - OcHeaderOption clientToken = new OcHeaderOption(CLIENT_TOKEN_KEY, CLIENT_TOKEN); - headerOptions.add(apiVersion); - headerOptions.add(clientToken); - mFridgeResource.setHeaderOptions(headerOptions); - - logMessage("Calling GET api on mFridgeResource and other component resources"); - try { - mFridgeResource.get(new HashMap(), this); - if (null != light) light.get(new HashMap(), this); - if (null != leftDoor) leftDoor.get(new HashMap(), this); - if (null != rightDoor) rightDoor.get(new HashMap(), this); - if (null != randomDoor) randomDoor.get(new HashMap(), this); - } catch (OcException e) { - logMessage("Error in GET calls"); - Log.e(TAG, e.getMessage()); - } - } - - /** - * An event handler to be executed whenever a "get" request completes successfully - * - * @param headerOptionList list of the header options - * @param ocRepresentation representation of a resource - */ - @Override - public synchronized void onGetCompleted(List headerOptionList, - OcRepresentation ocRepresentation) { - logMessage("Got a response from " + ocRepresentation.getUri()); - } - - /** - * An event handler to be executed whenever a "get" request fails - * - * @param throwable exception - */ - @Override - public synchronized void onGetFailed(Throwable throwable) { - logMessage("GET request has failed"); - Log.e(TAG, throwable.toString()); - } - - //****************************************************************************** - // End of the OIC specific code - //****************************************************************************** - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_fridge_client); - - mConsoleTextView = (TextView) findViewById(R.id.consoleTextView); - mConsoleTextView.setMovementMethod(new ScrollingMovementMethod()); - final Button button = (Button) findViewById(R.id.button); - - if (null == savedInstanceState) { - button.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - button.setEnabled(false); - new Thread(new Runnable() { - public void run() { - startFridgeClient(); - } - }).start(); - } - }); - } else { - String consoleOutput = savedInstanceState.getString("consoleOutputString"); - mConsoleTextView.setText(consoleOutput); - } - } - - private void logMessage(final String text) { - runOnUiThread(new Runnable() { - public void run() { - final Message msg = new Message(); - msg.obj = text; - mConsoleTextView.append("\n"); - mConsoleTextView.append(text); - } - }); - Log.i(TAG, text); - } - - private static String TAG = "FridgeClient: "; - private TextView mConsoleTextView; -} \ No newline at end of file diff --git a/java/examples-java/fridgegroupclient/.gitignore b/java/examples-java/fridgegroupclient/.gitignore deleted file mode 100755 index 3543521..0000000 --- a/java/examples-java/fridgegroupclient/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/java/examples-java/fridgegroupclient/build.gradle b/java/examples-java/fridgegroupclient/build.gradle deleted file mode 100755 index 333920c..0000000 --- a/java/examples-java/fridgegroupclient/build.gradle +++ /dev/null @@ -1,35 +0,0 @@ -apply plugin: 'com.android.application' -android { - compileSdkVersion 21 - buildToolsVersion "20.0.0" - - defaultConfig { - applicationId "org.iotivity.base.examples.fridgegroupclient" - minSdkVersion 21 - targetSdkVersion 21 - versionCode 1 - versionName "1.0" - } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } - lintOptions { - abortOnError false - } -} -repositories { - flatDir { - dirs "../../android_api/base/build/outputs/aar/" - } -} -try { - dependencies { - compile ":iotivity-base-${TARGET_ARCH}-${RELEASE}@aar" - } -} catch (all) { - print "${ERROR_MSG}" - assert all -} diff --git a/java/examples-java/fridgegroupclient/src/main/java/org/iotivity/base/examples/FridgeGroupClient.java b/java/examples-java/fridgegroupclient/src/main/java/org/iotivity/base/examples/FridgeGroupClient.java deleted file mode 100755 index 26b07dd..0000000 --- a/java/examples-java/fridgegroupclient/src/main/java/org/iotivity/base/examples/FridgeGroupClient.java +++ /dev/null @@ -1,258 +0,0 @@ -/* - ******************************************************************* - * - * 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; - -import android.app.Activity; -import android.os.Bundle; -import android.os.Message; -import android.text.method.ScrollingMovementMethod; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import org.iotivity.base.ModeType; -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.util.EnumSet; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; - -/** - * FridgeGroupClient - *

- * FridgeGroupClient is a sample client app which should be started after the fridgeGroupServer is - * started. It discovers a fridge resource and then creates the proxy resources for each one of its - * children (light and door) and performs a GET on them. - */ -public class FridgeGroupClient extends Activity implements - OcPlatform.OnResourceFoundListener, - OcResource.OnGetListener { - private static String TAG = "FridgeGroupClient: "; - - private final List childResourceList = new LinkedList<>(); - private OcResource fridgeResource; - - private void startFridgeClient() { - PlatformConfig cfg = new PlatformConfig( - this, // context - ServiceType.IN_PROC, - ModeType.CLIENT, - "0.0.0.0", // bind to all available interfaces - 0, - QualityOfService.LOW); - - logMessage("Configuring platform"); - OcPlatform.Configure(cfg); - String requestUri = OcPlatform.WELL_KNOWN_QUERY + "?rt=intel.fridge.group"; - logMessage("Initiating fridge discovery"); - try { - OcPlatform.findResource("", - requestUri, - EnumSet.of(OcConnectivityType.CT_DEFAULT), - this); - } catch (OcException e) { - logMessage("Failed to discover resource"); - Log.e(TAG, e.getMessage()); - } - logMessage("-----------------------------------------------------"); - } - - /** - * callback when a fridge resource is found. - */ - @Override - public synchronized void onResourceFound(OcResource ocResource) { - if ((null != fridgeResource) && !fridgeResource.getUri().equals("/fridge/group")) { - logMessage("Didn't find the correct fridge resource. Exiting"); - return; - } - fridgeResource = ocResource; - logMessage("Discovered a fridge with \nHost: " + fridgeResource.getHost()); - logMessage("Trying to call GET api on fridgeResource"); - try { - fridgeResource.get(new HashMap(), this); - } catch (OcException e) { - logMessage("Failed to call GET api"); - Log.e(TAG, e.getMessage()); - } - logMessage("-----------------------------------------------------"); - } - - /** - * once the fridge resource is discovered, create proxy child resources of the fridge - * and call GET on each of the child resource proxies. - * - * @param list - * @param ocRepresentation parent resource - */ - @Override - public synchronized void onGetCompleted(List list, - OcRepresentation ocRepresentation) { - logMessage("Got a response from " + ocRepresentation.getUri()); - for (OcRepresentation child : ocRepresentation.getChildren()) { - try { - logMessage("Creating child resource proxy from fridgeResource with uri " + - child.getUri()); - OcResource childResource = OcPlatform.constructResourceObject( - fridgeResource.getHost(), - child.getUri(), - fridgeResource.getConnectivityTypeSet(), - false, // isObservable set to false - child.getResourceTypes(), - child.getResourceInterfaces()); - childResourceList.add(childResource); - } catch (OcException e) { - logMessage("Error in creating child resource proxy"); - Log.e(TAG, e.getMessage()); - } - logMessage("-----------------------------------------------------"); - } - - OcResource.OnGetListener childOnGetListener = new OcResource.OnGetListener() { - public static final String DOOR_STATE_KEY = "state"; - public static final String DOOR_SIDE_KEY = "side"; - public static final String LIGHT_STATUS_KEY = "light"; - - @Override - public synchronized void onGetCompleted(List list, - OcRepresentation ocRepresentation) { - logMessage("Received a response from a child of the fridge with uri: " + - ocRepresentation.getUri()); - for (String resType : ocRepresentation.getResourceTypes()) { - if (resType.equals("intel.fridge.door")) { - try { - logMessage(ocRepresentation.getValue(DOOR_SIDE_KEY) + - " door is " + ((ocRepresentation.getValue(DOOR_STATE_KEY) - ) ? "open" : "close")); - } catch (OcException e) { - logMessage("Failed to get the door resource representation"); - Log.e(TAG, e.getMessage()); - } - } else if (resType.equals("intel.fridge.light")) { - try { - logMessage("Fridge light is " + - ((ocRepresentation.getValue(LIGHT_STATUS_KEY)) ? - "on" : "off")); - } catch (OcException e) { - logMessage("Failed to get the light resource representation"); - Log.e(TAG, e.getMessage()); - } - } - } - logMessage("-----------------------------------------------------"); - } - - @Override - public synchronized void onGetFailed(Throwable throwable) { - logMessage("OnGet failed for child of fridge"); - Log.e(TAG, throwable.getMessage()); - } - }; - - for (OcResource child : childResourceList) { - try { - logMessage("Trying to get a representation of " + child.getUri() + - " resource from server"); - child.get(new HashMap(), childOnGetListener); - } catch (OcException e) { - logMessage(e.getMessage()); - Log.e(TAG, e.getMessage()); - } - } - - } - - @Override - public synchronized void onGetFailed(Throwable throwable) { - logMessage("Failed to get representation of the fridge"); - Log.e(TAG, throwable.toString()); - } - - //****************************************************************************** - // End of the OIC specific code - //****************************************************************************** - private TextView mConsoleTextView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_fridge_client); - - mConsoleTextView = (TextView) findViewById(R.id.consoleTextView); - mConsoleTextView.setMovementMethod(new ScrollingMovementMethod()); - final Button button = (Button) findViewById(R.id.button); - - if (null == savedInstanceState) { - button.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - button.setEnabled(false); - new Thread(new Runnable() { - public void run() { - startFridgeClient(); - } - }).start(); - } - }); - } else { - String consoleOutput = savedInstanceState.getString("consoleOutputString"); - mConsoleTextView.setText(consoleOutput); - } - } - - @Override - protected void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putString("consoleOutputString", mConsoleTextView.getText().toString()); - } - - @Override - protected void onRestoreInstanceState(Bundle savedInstanceState) { - super.onRestoreInstanceState(savedInstanceState); - - String consoleOutput = savedInstanceState.getString("consoleOutputString"); - mConsoleTextView.setText(consoleOutput); - } - - private void logMessage(final String text) { - runOnUiThread(new Runnable() { - public void run() { - final Message msg = new Message(); - msg.obj = text; - mConsoleTextView.append("\n"); - mConsoleTextView.append(text); - } - }); - Log.i(TAG, text); - } -} \ No newline at end of file diff --git a/java/examples-java/fridgegroupserver/.gitignore b/java/examples-java/fridgegroupserver/.gitignore deleted file mode 100755 index 3543521..0000000 --- a/java/examples-java/fridgegroupserver/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/java/examples-java/fridgegroupserver/build.gradle b/java/examples-java/fridgegroupserver/build.gradle deleted file mode 100755 index 9bcce28..0000000 --- a/java/examples-java/fridgegroupserver/build.gradle +++ /dev/null @@ -1,35 +0,0 @@ -apply plugin: 'com.android.application' -android { - compileSdkVersion 21 - buildToolsVersion "20.0.0" - - defaultConfig { - applicationId "org.iotivity.base.examples.fridgegroupserver" - minSdkVersion 21 - targetSdkVersion 21 - versionCode 1 - versionName "1.0" - } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } - lintOptions { - abortOnError false - } -} -repositories { - flatDir { - dirs "../../android_api/base/build/outputs/aar/" - } -} -try { - dependencies { - compile ":iotivity-base-${TARGET_ARCH}-${RELEASE}@aar" - } -} catch (all) { - print "${ERROR_MSG}" - assert all -} diff --git a/java/examples-java/fridgegroupserver/src/main/java/org/iotivity/base/examples/DoorResource.java b/java/examples-java/fridgegroupserver/src/main/java/org/iotivity/base/examples/DoorResource.java deleted file mode 100755 index c708486..0000000 --- a/java/examples-java/fridgegroupserver/src/main/java/org/iotivity/base/examples/DoorResource.java +++ /dev/null @@ -1,169 +0,0 @@ -/* - ******************************************************************* - * - * 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; - -import android.content.Context; -import android.content.Intent; -import android.util.Log; - -import org.iotivity.base.EntityHandlerResult; -import org.iotivity.base.OcException; -import org.iotivity.base.OcPlatform; -import org.iotivity.base.OcRepresentation; -import org.iotivity.base.OcResourceHandle; -import org.iotivity.base.OcResourceRequest; -import org.iotivity.base.OcResourceResponse; -import org.iotivity.base.RequestHandlerFlag; -import org.iotivity.base.ResourceProperty; - -import java.util.EnumSet; - -/** - * DoorResource - *

- * DoorResource is a sample OIC server resource created by the refrigerator. - */ -public class DoorResource extends Resource implements OcPlatform.EntityHandler { - DoorResource(String side, Context context) { - mContext = context; - mSide = side; - - registerDoorResource(); - } - - private void registerDoorResource() { - String resourceURI = DOOR_URI + mSide; - logMessage(TAG + "RegisterDoorResource " + resourceURI + " : " + RESOURCE_TYPEDOOR); - try { - mResourceHandle = OcPlatform.registerResource( - resourceURI, - RESOURCE_TYPEDOOR, - OcPlatform.DEFAULT_INTERFACE, - this, - EnumSet.of(ResourceProperty.DISCOVERABLE)); - } catch (OcException e) { - logMessage(TAG + "Failed to register DoorResource"); - Log.e(TAG, e.getMessage()); - } - logMessage("-----------------------------------------------------"); - } - - /** - * sample implementation of eventHandler for doorResource - this can be implemented in many - * different ways - * - * @param ocResourceRequest OcResourceRequest from the client - * @return EntityHandlerResult indicates whether the request was handled successfully or not - */ - @Override - public synchronized EntityHandlerResult handleEntity(OcResourceRequest ocResourceRequest) { - EntityHandlerResult result = EntityHandlerResult.ERROR; - if (null != ocResourceRequest) { - try { - if (ocResourceRequest.getRequestHandlerFlagSet().contains( - RequestHandlerFlag.REQUEST)) { - OcResourceResponse response = new OcResourceResponse(); - response.setRequestHandle(ocResourceRequest.getRequestHandle()); - response.setResourceHandle(ocResourceRequest.getResourceHandle()); - - switch (ocResourceRequest.getRequestType()) { - case GET: - updateRepresentationValues(); - response.setResourceRepresentation(mRepresentation); - response.setResponseResult(EntityHandlerResult.OK); - OcPlatform.sendResponse(response); - break; - case PUT: - put(ocResourceRequest.getResourceRepresentation()); - updateRepresentationValues(); - response.setResourceRepresentation(mRepresentation); - response.setResponseResult(EntityHandlerResult.OK); - OcPlatform.sendResponse(response); - break; - case DELETE: - response.setResponseResult(EntityHandlerResult.RESOURCE_DELETED); - OcPlatform.sendResponse(response); - break; - } - result = EntityHandlerResult.OK; - } - } catch (OcException e) { - logMessage("Error in handleEntity of DoorResource"); - Log.e(TAG, e.getMessage()); - return EntityHandlerResult.ERROR; - } - } - logMessage("-----------------------------------------------------"); - return result; - } - - public OcResourceHandle getHandle() { - return mResourceHandle; - } - - /** - * helper function to update the current value of the door resource - */ - private void updateRepresentationValues() { - try { - mRepresentation.setValue(DOOR_STATE_KEY, mDoorState); - mRepresentation.setValue(DOOR_SIDE_KEY, mSide); - logMessage(TAG + "door state is " + ((mDoorState == true) ? "open" : "close") + - " and door side is " + mSide); - } catch (OcException e) { - Log.e(TAG, e.getMessage()); - } - } - - /** - * update the value of doorResource, depending on if door is open/ closed - * - * @param representation new state of a door - */ - private void put(OcRepresentation representation) { - try { - mDoorState = representation.getValue(DOOR_STATE_KEY); - } catch (OcException e) { - Log.e(TAG, e.getMessage()); - } - // Note, we won't let the user change the door side! - } - - //****************************************************************************** - // End of the OIC specific code - //****************************************************************************** - private Context mContext; - private String mSide; - private boolean mDoorState; - public static final String DOOR_URI = "/door/"; - public static final String RESOURCE_TYPEDOOR = "intel.fridge.door"; - private static String TAG = "DoorResource: "; - public static final String DOOR_STATE_KEY = "state"; - public static final String DOOR_SIDE_KEY = "side"; - - private void logMessage(String msg) { - Intent intent = new Intent(Resource.INTENT); - intent.putExtra(Resource.MESSAGE, msg); - mContext.sendBroadcast(intent); - } -} \ No newline at end of file diff --git a/java/examples-java/fridgegroupserver/src/main/java/org/iotivity/base/examples/FridgeGroupServer.java b/java/examples-java/fridgegroupserver/src/main/java/org/iotivity/base/examples/FridgeGroupServer.java deleted file mode 100755 index 4ee0aca..0000000 --- a/java/examples-java/fridgegroupserver/src/main/java/org/iotivity/base/examples/FridgeGroupServer.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - ******************************************************************* - * - * 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; - -import android.app.Activity; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.os.Bundle; -import android.os.Message; -import android.text.method.ScrollingMovementMethod; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.ScrollView; -import android.widget.TextView; - -import org.iotivity.base.ModeType; -import org.iotivity.base.OcPlatform; -import org.iotivity.base.PlatformConfig; -import org.iotivity.base.QualityOfService; -import org.iotivity.base.ServiceType; - -/** - * FridgeGroupServer - *

- * This is the main fridgeGroupServer class. This instantiates Refrigerator object - * which has different resources such as LightResource, DoorResource, etc. - */ -public class FridgeGroupServer extends Activity { - private Refrigerator refrigerator; - - /** - * configure OIC platform and call findResource - */ - private void startFridgeServer() { - logMessage("Configuring platform config"); - PlatformConfig cfg = new PlatformConfig( - this, // context - ServiceType.IN_PROC, - ModeType.SERVER, - "0.0.0.0", // bind to all available interfaces - 0, - QualityOfService.LOW); - OcPlatform.Configure(cfg); - - logMessage("Creating refrigerator resources"); - refrigerator = new Refrigerator(this); - logMessage("-----------------------------------------------------"); - } - - //****************************************************************************** - // End of the OIC specific code - //****************************************************************************** - private static String TAG = "FridgeServer: "; - private TextView mConsoleTextView; - private ScrollView mScrollView; - private BroadcastReceiver mMessageReceiver = new MessageReceiver(); - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_fridge_server); - registerReceiver(mMessageReceiver, new IntentFilter(Resource.INTENT)); - - mConsoleTextView = (TextView) findViewById(R.id.consoleTextView); - mConsoleTextView.setMovementMethod(new ScrollingMovementMethod()); - mScrollView = (ScrollView) findViewById(R.id.scrollView); - mScrollView.fullScroll(View.FOCUS_DOWN); - final Button button = (Button) findViewById(R.id.button); - - if (null == savedInstanceState) { - button.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - button.setEnabled(false); - new Thread(new Runnable() { - public void run() { - startFridgeServer(); - } - }).start(); - } - }); - } else { - String consoleOutput = savedInstanceState.getString("consoleOutputString"); - mConsoleTextView.setText(consoleOutput); - } - } - - @Override - protected void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putString("consoleOutputString", mConsoleTextView.getText().toString()); - } - - @Override - protected void onRestoreInstanceState(Bundle savedInstanceState) { - super.onRestoreInstanceState(savedInstanceState); - String consoleOutput = savedInstanceState.getString("consoleOutputString"); - mConsoleTextView.setText(consoleOutput); - } - - public class MessageReceiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - final String message = intent.getStringExtra(Resource.MESSAGE); - logMessage(message); - } - } - - private void logMessage(final String text) { - runOnUiThread(new Runnable() { - public void run() { - final Message msg = new Message(); - msg.obj = text; - mConsoleTextView.append("\n"); - mConsoleTextView.append(text); - } - }); - Log.i(TAG, text); - } -} diff --git a/java/examples-java/fridgegroupserver/src/main/java/org/iotivity/base/examples/FridgeResource.java b/java/examples-java/fridgegroupserver/src/main/java/org/iotivity/base/examples/FridgeResource.java deleted file mode 100755 index dc10327..0000000 --- a/java/examples-java/fridgegroupserver/src/main/java/org/iotivity/base/examples/FridgeResource.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - ******************************************************************* - * - * 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; - -import android.content.Context; -import android.content.Intent; -import android.util.Log; - -import org.iotivity.base.OcException; -import org.iotivity.base.OcPlatform; -import org.iotivity.base.OcResourceHandle; -import org.iotivity.base.ResourceProperty; - -import java.util.EnumSet; - - -/** - * FridgeResource - *

- * FridgeResource is a sample OIC server resource created by the refrigerator. - */ -public class FridgeResource extends Resource { - FridgeResource(Context context) { - mContext = context; - registerFridgeResource(); - } - - private void registerFridgeResource() { - try { - logMessage(TAG + "RegisterFridgeResource " + FRIDGE_URI + - " : " + FRIDGE_TYPENAME); - mResourceHandle = OcPlatform.registerResource( - FRIDGE_URI, - FRIDGE_TYPENAME, - OcPlatform.GROUP_INTERFACE, - null, - EnumSet.of(ResourceProperty.DISCOVERABLE)); - } catch (OcException e) { - logMessage(TAG + "FridgeResource register error: " + e.getMessage()); - Log.e(TAG, e.getMessage()); - } - logMessage("-----------------------------------------------------"); - } - - public OcResourceHandle getHandle() { - return mResourceHandle; - } - - //****************************************************************************** - // End of the OIC specific code - //****************************************************************************** - private Context mContext; - public static final String FRIDGE_URI = "/fridge/group"; - public static final String FRIDGE_TYPENAME = "intel.fridge.group"; - private static String TAG = "FridgeResource: "; - - private void logMessage(String msg) { - Intent intent = new Intent(Resource.INTENT); - intent.putExtra("message", msg); - mContext.sendBroadcast(intent); - } -} diff --git a/java/examples-java/fridgegroupserver/src/main/java/org/iotivity/base/examples/LightResource.java b/java/examples-java/fridgegroupserver/src/main/java/org/iotivity/base/examples/LightResource.java deleted file mode 100755 index 3cccd87..0000000 --- a/java/examples-java/fridgegroupserver/src/main/java/org/iotivity/base/examples/LightResource.java +++ /dev/null @@ -1,159 +0,0 @@ -/* - ******************************************************************* - * - * 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; - -import android.content.Context; -import android.content.Intent; -import android.util.Log; - -import org.iotivity.base.EntityHandlerResult; -import org.iotivity.base.OcException; -import org.iotivity.base.OcPlatform; -import org.iotivity.base.OcRepresentation; -import org.iotivity.base.OcResourceHandle; -import org.iotivity.base.OcResourceRequest; -import org.iotivity.base.OcResourceResponse; -import org.iotivity.base.RequestHandlerFlag; -import org.iotivity.base.ResourceProperty; - -import java.util.EnumSet; - - -/** - * LightResource - *

- * LightResource is a sample OIC server resource created by the refrigerator. - */ -public class LightResource extends Resource implements OcPlatform.EntityHandler { - LightResource(Context context) { - mContext = context; - - registerLightResource(); - } - - private void registerLightResource() { - try { - logMessage(TAG + "RegisterLightResource " + LIGHT_URI + " : " + RESOURCE_TYPELIGHT); - mResourceHandle = OcPlatform.registerResource( - LIGHT_URI, - RESOURCE_TYPELIGHT, - OcPlatform.DEFAULT_INTERFACE, - this, - EnumSet.of(ResourceProperty.DISCOVERABLE)); - } catch (OcException e) { - logMessage(TAG + "Failed to register LightResource"); - Log.e(TAG, e.getMessage()); - } - logMessage("-----------------------------------------------------"); - } - - /** - * sample implementation of eventHandler for lightResource - this can be implemented in many - * different ways - * - * @param ocResourceRequest OcResourceRequest from the client - * @return EntityHandlerResult indicates whether the request was handled successfully or not - */ - @Override - public synchronized EntityHandlerResult handleEntity(OcResourceRequest ocResourceRequest) { - EntityHandlerResult result = EntityHandlerResult.ERROR; - if (null != ocResourceRequest) { - try { - if (ocResourceRequest.getRequestHandlerFlagSet().contains( - RequestHandlerFlag.REQUEST)) { - OcResourceResponse response = new OcResourceResponse(); - response.setRequestHandle(ocResourceRequest.getRequestHandle()); - response.setResourceHandle(ocResourceRequest.getResourceHandle()); - switch (ocResourceRequest.getRequestType()) { - case GET: - updateRepresentationValues(); - response.setResourceRepresentation(mRepresentation); - response.setResponseResult(EntityHandlerResult.OK); - OcPlatform.sendResponse(response); - result = EntityHandlerResult.OK; - break; - case PUT: - put(ocResourceRequest.getResourceRepresentation()); - updateRepresentationValues(); - response.setResourceRepresentation(mRepresentation); - response.setResponseResult(EntityHandlerResult.OK); - OcPlatform.sendResponse(response); - result = EntityHandlerResult.OK; - break; - } - } - } catch (OcException e) { - logMessage("Error in handleEntity"); - Log.e(TAG, e.getMessage()); - return EntityHandlerResult.ERROR; - } - } - logMessage("-----------------------------------------------------"); - return result; - } - - public OcResourceHandle getHandle() { - return mResourceHandle; - } - - /** - * update the value of light (ON/ OFF) from the representation - * - * @param representation new state of light - */ - private void put(OcRepresentation representation) { - try { - mIsLightOn = representation.getValue(LIGHT_STATUS_KEY); - } catch (OcException e) { - Log.e(TAG, e.getMessage()); - } - } - - /** - * helper function to update the current state of the light - */ - private void updateRepresentationValues() { - try { - mRepresentation.setValue(LIGHT_STATUS_KEY, mIsLightOn); - } catch (OcException e) { - Log.e(TAG, e.getMessage()); - } - } - - //****************************************************************************** - // End of the OIC specific code - //****************************************************************************** - private Context mContext; - private boolean mIsLightOn = false; - - private static String TAG = "LightResource: "; - public static final String LIGHT_URI = "/light"; - public static final String RESOURCE_TYPELIGHT = "intel.fridge.light"; - public static final String LIGHT_STATUS_KEY = "light"; - - private void logMessage(String msg) { - Intent intent = new Intent(Resource.INTENT); - intent.putExtra(Resource.MESSAGE, msg); - mContext.sendBroadcast(intent); - } -} diff --git a/java/examples-java/fridgegroupserver/src/main/java/org/iotivity/base/examples/Refrigerator.java b/java/examples-java/fridgegroupserver/src/main/java/org/iotivity/base/examples/Refrigerator.java deleted file mode 100755 index 3a48b36..0000000 --- a/java/examples-java/fridgegroupserver/src/main/java/org/iotivity/base/examples/Refrigerator.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - ******************************************************************* - * - * 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; - -import android.content.Context; - -/** - * Refrigerator - *

- * Refrigerator class has different objects (resources) which are instantiated when a - * Refrigerator object is created. Operations are performed on each of the individual resources. - */ -public class Refrigerator { - public static final String LEFT_SIDE = "left"; - public static final String RIGHT_SIDE = "right"; - public static final String RANDOM_SIDE = "random"; - - private FridgeResource mFridge; - private LightResource mLight; - private DoorResource mLeftDoor; - private DoorResource mRightDoor; - private DoorResource mRandomDoor; - - /** - * constructor - creates resources of light and doors - * - * @param context needed by individual resources to be able to send broadcast - * messages to be displayed on the user screen - */ - Refrigerator(Context context) { - mFridge = new FridgeResource(context); - mLight = new LightResource(context); - mLeftDoor = new DoorResource(LEFT_SIDE, context); - mRightDoor = new DoorResource(RIGHT_SIDE, context); - mRandomDoor = new DoorResource(RANDOM_SIDE, context); - - mLight.bindTo(mFridge.getHandle()); - mLeftDoor.bindTo(mFridge.getHandle()); - mRightDoor.bindTo(mFridge.getHandle()); - mRandomDoor.bindTo(mFridge.getHandle()); - } -} \ No newline at end of file diff --git a/java/examples-java/fridgegroupserver/src/main/java/org/iotivity/base/examples/Resource.java b/java/examples-java/fridgegroupserver/src/main/java/org/iotivity/base/examples/Resource.java deleted file mode 100755 index 6934546..0000000 --- a/java/examples-java/fridgegroupserver/src/main/java/org/iotivity/base/examples/Resource.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - ******************************************************************* - * - * 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; - -import android.util.Log; - -import org.iotivity.base.OcException; -import org.iotivity.base.OcPlatform; -import org.iotivity.base.OcRepresentation; -import org.iotivity.base.OcResourceHandle; - -/** - * Resource - *

- * Each of the other resource classes (DeviceResource, DoorResource and LightResource extend Resource - */ -public abstract class Resource { - protected OcResourceHandle mResourceHandle; - protected OcRepresentation mRepresentation; - - Resource() { - mResourceHandle = null; - mRepresentation = new OcRepresentation(); - } - - public void bindTo(OcResourceHandle collectionResourceHandle) { - try { - if (null != mResourceHandle && null != collectionResourceHandle) { - OcPlatform.bindResource(collectionResourceHandle, mResourceHandle); - } - } catch (OcException e) { - Log.e("Resource", e.getMessage()); - } - } - - public static final int SUCCESS = 200; - public static final String INTENT = "org.iotivity.base.examples.fridgegroupserver"; - public static final String MESSAGE = "message"; -} \ No newline at end of file diff --git a/java/examples-java/fridgeserver/.gitignore b/java/examples-java/fridgeserver/.gitignore deleted file mode 100755 index 3543521..0000000 --- a/java/examples-java/fridgeserver/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/java/examples-java/fridgeserver/build.gradle b/java/examples-java/fridgeserver/build.gradle deleted file mode 100755 index 2afacf0..0000000 --- a/java/examples-java/fridgeserver/build.gradle +++ /dev/null @@ -1,35 +0,0 @@ -apply plugin: 'com.android.application' -android { - compileSdkVersion 21 - buildToolsVersion "20.0.0" - - defaultConfig { - applicationId "org.iotivity.base.examples.fridgeserver" - minSdkVersion 21 - targetSdkVersion 21 - versionCode 1 - versionName "1.0" - } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } - lintOptions { - abortOnError false - } -} -repositories { - flatDir { - dirs "../../android_api/base/build/outputs/aar/" - } -} -try { - dependencies { - compile ":iotivity-base-${TARGET_ARCH}-${RELEASE}@aar" - } -} catch (all) { - print "${ERROR_MSG}" - assert all -} diff --git a/java/examples-java/fridgeserver/src/main/java/org/iotivity/base/examples/fridgeserver/DeviceResource.java b/java/examples-java/fridgeserver/src/main/java/org/iotivity/base/examples/fridgeserver/DeviceResource.java deleted file mode 100755 index 46acda4..0000000 --- a/java/examples-java/fridgeserver/src/main/java/org/iotivity/base/examples/fridgeserver/DeviceResource.java +++ /dev/null @@ -1,164 +0,0 @@ -/* - ******************************************************************* - * - * 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.fridgeserver; - -import android.content.Context; -import android.content.Intent; -import android.util.Log; - -import org.iotivity.base.EntityHandlerResult; -import org.iotivity.base.OcException; -import org.iotivity.base.OcHeaderOption; -import org.iotivity.base.OcPlatform; -import org.iotivity.base.OcResourceRequest; -import org.iotivity.base.OcResourceResponse; -import org.iotivity.base.RequestHandlerFlag; -import org.iotivity.base.ResourceProperty; - -import java.util.EnumSet; -import java.util.LinkedList; -import java.util.List; - -/** - * DeviceResource - *

- * Creates a device resource and performs action based on client requests - */ -public class DeviceResource extends Resource implements OcPlatform.EntityHandler { - public static final String DEVICE_URI = "/device"; - public static final String RESOURCE_TYPENAME = "intel.fridge"; - public static final String API_VERSION = "v.1.0"; - public static final String CLIENT_TOKEN = "21ae43gf"; - public static final String DEVICE_NAME = "device_name"; - private static String TAG = "DeviceResource: "; - public static final int SUCCESS = 200; - public static final int API_VERSION_KEY = 2048; - public static final int CLIENT_VERSION_KEY = 3000; - - private Context mContext; - - /** - * constructor - * - * @param context to enable sending of broadcast messages to be displayed on the user screen - */ - DeviceResource(Context context) { - mContext = context; - registerDeviceResource(); - } - - private void registerDeviceResource() { - try { - logMessage("RegisterDeviceResource " + DEVICE_URI + " : " + RESOURCE_TYPENAME); - mResourceHandle = OcPlatform.registerResource( - DEVICE_URI, - RESOURCE_TYPENAME, - OcPlatform.DEFAULT_INTERFACE, - this, - EnumSet.of(ResourceProperty.DISCOVERABLE)); - } catch (OcException e) { - logMessage(TAG + "Failed to register DeviceResource"); - Log.e(TAG, e.getMessage()); - } - } - - /** - * this is the main method which handles different incoming requests appropriately. - * - * @param ocResourceRequest OcResourceRequest from the client - * @return EntityHandlerResult indicates whether the request was handled successfully or not - */ - @Override - public synchronized EntityHandlerResult handleEntity(OcResourceRequest ocResourceRequest) { - EntityHandlerResult result = EntityHandlerResult.ERROR; - if (null != ocResourceRequest) { - List headerOptions = ocResourceRequest.getHeaderOptions(); - String clientAPIVersion = ""; - String clientToken = ""; - // search for header options map and look for API version and client token - for (OcHeaderOption headerOption : headerOptions) { - int optionId = headerOption.getOptionId(); - if (API_VERSION_KEY == optionId) { - clientAPIVersion = headerOption.getOptionData(); - logMessage(TAG + " Client API Version: " + clientAPIVersion); - } else if (CLIENT_VERSION_KEY == optionId) { - clientToken = headerOption.getOptionData(); - logMessage(TAG + " Client Token: " + clientToken); - } - } - if (clientAPIVersion.equals(API_VERSION) && - clientToken.equals(CLIENT_TOKEN)) { - List serverHeaderOptions = new LinkedList<>(); - OcHeaderOption apiVersion = new OcHeaderOption(API_VERSION_KEY, - API_VERSION); - serverHeaderOptions.add(apiVersion); - try { - if (ocResourceRequest.getRequestHandlerFlagSet().contains(RequestHandlerFlag.REQUEST)) { - OcResourceResponse response = new OcResourceResponse(); - response.setRequestHandle(ocResourceRequest.getRequestHandle()); - response.setResourceHandle(ocResourceRequest.getResourceHandle()); - response.setHeaderOptions(serverHeaderOptions); - - switch (ocResourceRequest.getRequestType()) { - case GET: - response.setResponseResult(EntityHandlerResult.OK); - updateRepresentationValues(); - response.setResourceRepresentation(mRepresentation); - OcPlatform.sendResponse(response); - break; - } - result = EntityHandlerResult.OK; - } - } catch (OcException e) { - logMessage("Error in handleEntity of DeviceResource"); - Log.e(TAG, e.getMessage()); - } - } - } - logMessage("-----------------------------------------------------"); - return result; - } - - /** - * update state of device - * - * @return device representation - */ - private void updateRepresentationValues() { - try { - mRepresentation.setValue(DEVICE_NAME, - "Intel Powered 3 door, 1 light refrigerator"); - } catch (OcException e) { - Log.e(TAG, e.getMessage()); - } - } - - //****************************************************************************** - // End of the OIC specific code - //****************************************************************************** - public void logMessage(String msg) { - Intent intent = new Intent(FridgeServer.INTENT); - intent.putExtra("message", msg); - mContext.sendBroadcast(intent); - } -} diff --git a/java/examples-java/fridgeserver/src/main/java/org/iotivity/base/examples/fridgeserver/DoorResource.java b/java/examples-java/fridgeserver/src/main/java/org/iotivity/base/examples/fridgeserver/DoorResource.java deleted file mode 100755 index 1ab45d2..0000000 --- a/java/examples-java/fridgeserver/src/main/java/org/iotivity/base/examples/fridgeserver/DoorResource.java +++ /dev/null @@ -1,166 +0,0 @@ -/* - ******************************************************************* - * - * 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.fridgeserver; - -import android.content.Context; -import android.content.Intent; -import android.util.Log; - -import org.iotivity.base.EntityHandlerResult; -import org.iotivity.base.OcException; -import org.iotivity.base.OcPlatform; -import org.iotivity.base.OcRepresentation; -import org.iotivity.base.OcResourceRequest; -import org.iotivity.base.OcResourceResponse; -import org.iotivity.base.RequestHandlerFlag; -import org.iotivity.base.ResourceProperty; - -import java.util.EnumSet; - -/** - * DoorResource - *

- * Creates a door resource and performs actions based on the client requests - */ -public class DoorResource extends Resource implements OcPlatform.EntityHandler { - public static final String DOOR_URI = "/door/"; - public static final String RESOURCE_TYPEDOOR = "intel.fridge.door"; - public static final String DOOR_STATE_KEY = "state"; - public static final String DOOR_SIDE_KEY = "side"; - private boolean mDoorState; - private String mSide; - - /** - * Constructor - * - * @param side side of the door - * @param context to enable sending of broadcast messages to be displayed on the user screen - */ - DoorResource(String side, Context context) { - mContext = context; - mSide = side; - registerDoorResource(); - } - - private void registerDoorResource() { - String resourceURI = DOOR_URI + mSide; - logMessage(TAG + "RegisterDoorResource " + resourceURI + " : " + RESOURCE_TYPEDOOR); - try { - mResourceHandle = OcPlatform.registerResource(resourceURI, - RESOURCE_TYPEDOOR, - OcPlatform.DEFAULT_INTERFACE, - this, - EnumSet.of(ResourceProperty.DISCOVERABLE)); - } catch (OcException e) { - logMessage(TAG + "Failed to register DoorResource"); - Log.e(TAG, e.getMessage()); - } - } - - /** - * this is the main method which handles different incoming requests appropriately. - * - * @param ocResourceRequest OcResourceRequest from the client - * @return EntityHandlerResult indicates whether the request was handled successfully or not - */ - @Override - public synchronized EntityHandlerResult handleEntity(OcResourceRequest ocResourceRequest) { - EntityHandlerResult result = EntityHandlerResult.ERROR; - if (null != ocResourceRequest) { - try { - if (ocResourceRequest.getRequestHandlerFlagSet().contains(RequestHandlerFlag.REQUEST)) { - OcResourceResponse response = new OcResourceResponse(); - response.setRequestHandle(ocResourceRequest.getRequestHandle()); - response.setResourceHandle(ocResourceRequest.getResourceHandle()); - - switch (ocResourceRequest.getRequestType()) { - case GET: - updateRepresentationValues(); - response.setResourceRepresentation(mRepresentation); - response.setResponseResult(EntityHandlerResult.OK); - OcPlatform.sendResponse(response); - break; - case PUT: - put(ocResourceRequest.getResourceRepresentation()); - updateRepresentationValues(); - response.setResourceRepresentation(mRepresentation); - response.setResponseResult(EntityHandlerResult.OK); - OcPlatform.sendResponse(response); - break; - case DELETE: - response.setResponseResult(EntityHandlerResult.RESOURCE_DELETED); - OcPlatform.sendResponse(response); - break; - } - result = EntityHandlerResult.OK; - } - } catch (OcException e) { - logMessage("Error in handleEntity of DoorResource"); - Log.e(TAG, e.getMessage()); - return EntityHandlerResult.ERROR; - } - } - logMessage("-----------------------------------------------------"); - return result; - } - - /** - * helper function to update the current value of the door resource - */ - private void updateRepresentationValues() { - try { - mRepresentation.setValue(DOOR_STATE_KEY, mDoorState); - mRepresentation.setValue(DOOR_SIDE_KEY, mSide); - logMessage(TAG + "door state is " + ((mDoorState == true) ? "open" : "close") + - " and door side is " + mSide); - } catch (OcException e) { - Log.e(TAG, e.getMessage()); - } - } - - /** - * update the value of doorResource, depending on if door is open/ closed - * - * @param representation new state of a door - */ - private void put(OcRepresentation representation) { - try { - mDoorState = representation.getValue(DOOR_STATE_KEY); - } catch (OcException e) { - Log.e(TAG, e.getMessage()); - } - // Note, we won't let the user change the door side! - } - - //****************************************************************************** - // End of the OIC specific code - //****************************************************************************** - private Context mContext; - private static String TAG = "DoorResource: "; - - public void logMessage(String msg) { - Intent intent = new Intent(FridgeServer.INTENT); - intent.putExtra(FridgeServer.MESSAGE, msg); - mContext.sendBroadcast(intent); - } -} \ No newline at end of file diff --git a/java/examples-java/fridgeserver/src/main/java/org/iotivity/base/examples/fridgeserver/FridgeServer.java b/java/examples-java/fridgeserver/src/main/java/org/iotivity/base/examples/fridgeserver/FridgeServer.java deleted file mode 100755 index 5f0c962..0000000 --- a/java/examples-java/fridgeserver/src/main/java/org/iotivity/base/examples/fridgeserver/FridgeServer.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - ******************************************************************* - * - * 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.fridgeserver; - -import android.app.Activity; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.os.Bundle; -import android.os.Message; -import android.text.method.ScrollingMovementMethod; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.ScrollView; -import android.widget.TextView; - -import org.iotivity.base.ModeType; -import org.iotivity.base.OcPlatform; -import org.iotivity.base.PlatformConfig; -import org.iotivity.base.QualityOfService; -import org.iotivity.base.ServiceType; - -/** - * FridgeServer - *

- * This is the main fridgeServer class. This instantiates Refrigerator object - * which has different resources (DeviceResource, LightResource, DoorResources). - */ -public class FridgeServer extends Activity { - private Refrigerator refrigerator; - - /** - * configure OIC platform and call findResource - */ - private void startFridgeServer() { - //create platform config - PlatformConfig cfg = new PlatformConfig( - this, //context - ServiceType.IN_PROC, - ModeType.SERVER, - "0.0.0.0", // bind to all available interfaces - 0, - QualityOfService.LOW); - logMessage("Configuring platform"); - OcPlatform.Configure(cfg); - logMessage("Creating refrigerator resources"); - refrigerator = new Refrigerator(this); - logMessage("-----------------------------------------------------"); - } - - //****************************************************************************** - // End of the OIC specific code - //****************************************************************************** - private static String TAG = "FridgeServer: "; - public static final String MESSAGE = "message"; - public static final String INTENT = "org.iotivity.base.examples.fridgeserver"; - private TextView mConsoleTextView; - private ScrollView mScrollView; - private MessageReceiver mMessageReceiver = new MessageReceiver(); - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_fridge_server); - registerReceiver(mMessageReceiver, new IntentFilter(INTENT)); - - mConsoleTextView = (TextView) findViewById(R.id.consoleTextView); - mConsoleTextView.setMovementMethod(new ScrollingMovementMethod()); - mScrollView = (ScrollView) findViewById(R.id.scrollView); - mScrollView.fullScroll(View.FOCUS_DOWN); - final Button button = (Button) findViewById(R.id.button); - - if (null == savedInstanceState) { - button.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - button.setEnabled(false); - new Thread(new Runnable() { - public void run() { - startFridgeServer(); - } - }).start(); - } - }); - } else { - String consoleOutput = savedInstanceState.getString("consoleOutputString"); - mConsoleTextView.setText(consoleOutput); - } - } - - public class MessageReceiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - final String message = intent.getStringExtra(MESSAGE); - logMessage(message); - } - } - - public void logMessage(final String text) { - runOnUiThread(new Runnable() { - public void run() { - final Message msg = new Message(); - msg.obj = text; - mConsoleTextView.append("\n"); - mConsoleTextView.append(text); - } - }); - Log.i(TAG, text); - } -} diff --git a/java/examples-java/fridgeserver/src/main/java/org/iotivity/base/examples/fridgeserver/LightResource.java b/java/examples-java/fridgeserver/src/main/java/org/iotivity/base/examples/fridgeserver/LightResource.java deleted file mode 100755 index 40dc55a..0000000 --- a/java/examples-java/fridgeserver/src/main/java/org/iotivity/base/examples/fridgeserver/LightResource.java +++ /dev/null @@ -1,157 +0,0 @@ -/* - ******************************************************************* - * - * 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.fridgeserver; - -import android.content.Context; -import android.content.Intent; -import android.util.Log; - -import org.iotivity.base.EntityHandlerResult; -import org.iotivity.base.OcException; -import org.iotivity.base.OcPlatform; -import org.iotivity.base.OcRepresentation; -import org.iotivity.base.OcResourceRequest; -import org.iotivity.base.OcResourceResponse; -import org.iotivity.base.RequestHandlerFlag; -import org.iotivity.base.ResourceProperty; - -import java.util.EnumSet; - -/** - * LightResource - *

- * Creates a light resource and performs actions based on the client requests - */ -public class LightResource extends Resource implements OcPlatform.EntityHandler { - public static final String LIGHT_STATUS_KEY = "light"; - public static final String LIGHT_URI = "/light"; - public static final String RESOURCE_TYPELIGHT = "intel.fridge.light"; - private boolean mIsLightOn = false; - - /** - * constructor - * - * @param context to enable sending of broadcast messages to be displayed on the user screen - */ - LightResource(Context context) { - mContext = context; - registerLightResource(); - } - - private void registerLightResource() { - try { - logMessage(TAG + "RegisterLightResource " + LIGHT_URI + " : " + RESOURCE_TYPELIGHT); - mResourceHandle = OcPlatform.registerResource(LIGHT_URI, - RESOURCE_TYPELIGHT, - OcPlatform.DEFAULT_INTERFACE, - this, - EnumSet.of(ResourceProperty.DISCOVERABLE)); - } catch (OcException e) { - logMessage(TAG + "Failed to register LightResource"); - Log.e(TAG, e.getMessage()); - } - logMessage("-----------------------------------------------------"); - } - - /** - * this is the main method which handles different incoming requests appropriately. - * - * @param ocResourceRequest OcResourceRequest from the client - * @return EntityHandlerResult indicates whether the request was handled successfully or not - */ - @Override - public synchronized EntityHandlerResult handleEntity(OcResourceRequest ocResourceRequest) { - EntityHandlerResult result = EntityHandlerResult.ERROR; - if (null != ocResourceRequest) { - try { - if (ocResourceRequest.getRequestHandlerFlagSet().contains(RequestHandlerFlag.REQUEST)) { - OcResourceResponse response = new OcResourceResponse(); - response.setRequestHandle(ocResourceRequest.getRequestHandle()); - response.setResourceHandle(ocResourceRequest.getResourceHandle()); - - switch (ocResourceRequest.getRequestType()) { - case GET: - updateRepresentationValues(); - response.setResourceRepresentation(mRepresentation); - response.setResponseResult(EntityHandlerResult.OK); - OcPlatform.sendResponse(response); - result = EntityHandlerResult.OK; - break; - case PUT: - put(ocResourceRequest.getResourceRepresentation()); - updateRepresentationValues(); - response.setResourceRepresentation(mRepresentation); - response.setResponseResult(EntityHandlerResult.OK); - OcPlatform.sendResponse(response); - result = EntityHandlerResult.OK; - break; - } - } - } catch (OcException e) { - logMessage("Error in handleEntity of LightResource"); - Log.e(TAG, e.getMessage()); - return EntityHandlerResult.ERROR; - } - } - logMessage("-----------------------------------------------------"); - return result; - } - - /** - * updates the current state of the light (on/ off) - * - * @return light is on or off - */ - private void updateRepresentationValues() { - try { - mRepresentation.setValue(LIGHT_STATUS_KEY, mIsLightOn); - } catch (OcException e) { - Log.e(TAG, e.getMessage()); - } - } - - /** - * update the value of mIsOn from the representation - * - * @param representation get current state of light - */ - private void put(OcRepresentation representation) { - try { - mIsLightOn = representation.getValue(LIGHT_STATUS_KEY); - } catch (OcException e) { - Log.e(TAG, e.getMessage()); - } - } - - //****************************************************************************** - // End of the OIC specific code - //****************************************************************************** - private Context mContext; - private static String TAG = "LightResource: "; - - public void logMessage(String msg) { - Intent intent = new Intent(FridgeServer.INTENT); - intent.putExtra(FridgeServer.MESSAGE, msg); - mContext.sendBroadcast(intent); - } -} diff --git a/java/examples-java/fridgeserver/src/main/java/org/iotivity/base/examples/fridgeserver/Refrigerator.java b/java/examples-java/fridgeserver/src/main/java/org/iotivity/base/examples/fridgeserver/Refrigerator.java deleted file mode 100755 index 6717650..0000000 --- a/java/examples-java/fridgeserver/src/main/java/org/iotivity/base/examples/fridgeserver/Refrigerator.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - ******************************************************************* - * - * 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.fridgeserver; - -import android.content.Context; - -/** - * Refrigerator - *

- * Refrigerator class has different objects (resources) which are instantiated when a - * Refrigerator object is created. - */ -public class Refrigerator { - public static final String LEFT_SIDE = "left"; - public static final String RIGHT_SIDE = "right"; - public static final String RANDOM_SIDE = "random"; - - private LightResource mLight; - private DeviceResource mDevice; - private DoorResource mLeftDoor; - private DoorResource mRightDoor; - private DoorResource mRandomDoor; - - /** - * constructor - * - * @param context needed by individual resources to be able to send broadcast - * messages to be displayed on the user screen - */ - Refrigerator(Context context) { - mLight = new LightResource(context); - mDevice = new DeviceResource(context); - mLeftDoor = new DoorResource(LEFT_SIDE, context); - mRightDoor = new DoorResource(RIGHT_SIDE, context); - mRandomDoor = new DoorResource(RANDOM_SIDE, context); - - mLight.bindTo(mDevice.getHandle()); - mLeftDoor.bindTo(mDevice.getHandle()); - mRightDoor.bindTo(mDevice.getHandle()); - mRandomDoor.bindTo(mDevice.getHandle()); - } -} diff --git a/java/examples-java/fridgeserver/src/main/java/org/iotivity/base/examples/fridgeserver/Resource.java b/java/examples-java/fridgeserver/src/main/java/org/iotivity/base/examples/fridgeserver/Resource.java deleted file mode 100755 index 987c414..0000000 --- a/java/examples-java/fridgeserver/src/main/java/org/iotivity/base/examples/fridgeserver/Resource.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - ******************************************************************* - * - * 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.fridgeserver; - -import android.util.Log; - -import org.iotivity.base.OcException; -import org.iotivity.base.OcPlatform; -import org.iotivity.base.OcRepresentation; -import org.iotivity.base.OcResourceHandle; - -/** - * Resource - *

- * Each of the other resource classes (DeviceResource, DoorResource and LightResource extend Resource - */ -public class Resource { - protected OcResourceHandle mResourceHandle; - protected OcRepresentation mRepresentation; - - Resource() { - mResourceHandle = null; - mRepresentation = new OcRepresentation(); - } - - public void bindTo(OcResourceHandle collectionResourceHandle) { - try { - if (null != mResourceHandle && null != collectionResourceHandle) { - OcPlatform.bindResource(collectionResourceHandle, mResourceHandle); - } - } catch (OcException e) { - Log.e("Resource", e.getMessage()); - } - } - - public OcResourceHandle getHandle() { - return mResourceHandle; - } - - public static final int SUCCESS = 200; -} \ No newline at end of file diff --git a/java/examples-java/gradle/wrapper/gradle-wrapper.jar b/java/examples-java/gradle/wrapper/gradle-wrapper.jar deleted file mode 100755 index 8c0fb64a8698b08ecc4158d828ca593c4928e9dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49896 zcmagFb986H(k`5d^NVfUwr$(C?M#x1ZQHiZiEVpg+jrjgoQrerx!>1o_ul)D>ebz~ zs=Mmxr&>W81QY-S1PKWQ%N-;H^tS;2*XwVA`dej1RRn1z<;3VgfE4~kaG`A%QSPsR z#ovnZe+tS9%1MfeDyz`RirvdjPRK~p(#^q2(^5@O&NM19EHdvN-A&StN>0g6QA^VN z0Gx%Gq#PD$QMRFzmK+utjS^Y1F0e8&u&^=w5K<;4Rz|i3A=o|IKLY+g`iK6vfr9?+ z-`>gmU&i?FGSL5&F?TXFu`&Js6h;15QFkXp2M1H9|Eq~bpov-GU(uz%mH0n55wUl- zv#~ccAz`F5wlQ>e_KlJS3@{)B?^v*EQM=IxLa&76^y51a((wq|2-`qON>+4dLc{Oo z51}}o^Zen(oAjxDK7b++9_Yg`67p$bPo3~BCpGM7uAWmvIhWc5Gi+gQZ|Pwa-Gll@<1xmcPy z|NZmu6m)g5Ftu~BG&Xdxclw7Cij{xbBMBn-LMII#Slp`AElb&2^Hw+w>(3crLH!;I zN+Vk$D+wP1#^!MDCiad@vM>H#6+`Ct#~6VHL4lzmy;lSdk>`z6)=>Wh15Q2)dQtGqvn0vJU@+(B5{MUc*qs4!T+V=q=wy)<6$~ z!G>e_4dN@lGeF_$q9`Ju6Ncb*x?O7=l{anm7Eahuj_6lA{*#Gv*TaJclevPVbbVYu z(NY?5q+xxbO6%g1xF0r@Ix8fJ~u)VRUp`S%&rN$&e!Od`~s+64J z5*)*WSi*i{k%JjMSIN#X;jC{HG$-^iX+5f5BGOIHWAl*%15Z#!xntpk($-EGKCzKa zT7{siZ9;4TICsWQ$pu&wKZQTCvpI$Xvzwxoi+XkkpeE&&kFb!B?h2hi%^YlXt|-@5 zHJ~%AN!g_^tmn1?HSm^|gCE#!GRtK2(L{9pL#hp0xh zME}|DB>(5)`iE7CM)&_+S}-Bslc#@B5W4_+k4Cp$l>iVyg$KP>CN?SVGZ(&02>iZK zB<^HP$g$Lq*L$BWd?2(F?-MUbNWTJVQdW7$#8a|k_30#vHAD1Z{c#p;bETk0VnU5A zBgLe2HFJ3032$G<`m*OB!KM$*sdM20jm)It5OSru@tXpK5LT>#8)N!*skNu1$TpIw zufjjdp#lyH5bZ%|Iuo|iu9vG1HrIVWLH>278xo>aVBkPN3V$~!=KnlXQ4eDqS7%E% zQ!z^$Q$b^6Q)g#cLpwur(|<0gWHo6A6jc;n`t(V9T;LzTAU{IAu*uEQ%Ort1k+Kn+f_N`9|bxYC+~Z1 zCC1UCWv*Orx$_@ydv9mIe(liLfOr7mhbV@tKw{6)q^1DH1nmvZ0cj215R<~&I<4S| zgnr;9Cdjqpz#o8i0CQjtl`}{c*P)aSdH|abxGdrR)-3z+02-eX(k*B)Uqv6~^nh** z zGh0A%o~bd$iYvP!egRY{hObDIvy_vXAOkeTgl5o!33m!l4VLm@<-FwT0+k|yl~vUh z@RFcL4=b(QQQmwQ;>FS_e96dyIU`jmR%&&Amxcb8^&?wvpK{_V_IbmqHh);$hBa~S z;^ph!k~noKv{`Ix7Hi&;Hq%y3wpqUsYO%HhI3Oe~HPmjnSTEasoU;Q_UfYbzd?Vv@ zD6ztDG|W|%xq)xqSx%bU1f>fF#;p9g=Hnjph>Pp$ZHaHS@-DkHw#H&vb1gARf4A*zm3Z75QQ6l( z=-MPMjish$J$0I49EEg^Ykw8IqSY`XkCP&TC?!7zmO`ILgJ9R{56s-ZY$f> zU9GwXt`(^0LGOD9@WoNFK0owGKDC1)QACY_r#@IuE2<`tep4B#I^(PRQ_-Fw(5nws zpkX=rVeVXzR;+%UzoNa;jjx<&@ABmU5X926KsQsz40o*{@47S2 z)p9z@lt=9?A2~!G*QqJWYT5z^CTeckRwhSWiC3h8PQ0M9R}_#QC+lz>`?kgy2DZio zz&2Ozo=yTXVf-?&E;_t`qY{Oy>?+7+I= zWl!tZM_YCLmGXY1nKbIHc;*Mag{Nzx-#yA{ zTATrWj;Nn;NWm6_1#0zy9SQiQV=38f(`DRgD|RxwggL(!^`}lcDTuL4RtLB2F5)lt z=mNMJN|1gcui=?#{NfL{r^nQY+_|N|6Gp5L^vRgt5&tZjSRIk{_*y<3^NrX6PTkze zD|*8!08ZVN)-72TA4Wo3B=+Rg1sc>SX9*X>a!rR~ntLVYeWF5MrLl zA&1L8oli@9ERY|geFokJq^O$2hEpVpIW8G>PPH0;=|7|#AQChL2Hz)4XtpAk zNrN2@Ju^8y&42HCvGddK3)r8FM?oM!3oeQ??bjoYjl$2^3|T7~s}_^835Q(&b>~3} z2kybqM_%CIKk1KSOuXDo@Y=OG2o!SL{Eb4H0-QCc+BwE8x6{rq9j$6EQUYK5a7JL! z`#NqLkDC^u0$R1Wh@%&;yj?39HRipTeiy6#+?5OF%pWyN{0+dVIf*7@T&}{v%_aC8 zCCD1xJ+^*uRsDT%lLxEUuiFqSnBZu`0yIFSv*ajhO^DNoi35o1**16bg1JB z{jl8@msjlAn3`qW{1^SIklxN^q#w|#gqFgkAZ4xtaoJN*u z{YUf|`W)RJfq)@6F&LfUxoMQz%@3SuEJHU;-YXb7a$%W=2RWu5;j44cMjC0oYy|1! zed@H>VQ!7=f~DVYkWT0nfQfAp*<@FZh{^;wmhr|K(D)i?fq9r2FEIatP=^0(s{f8GBn<8T zVz_@sKhbLE&d91L-?o`13zv6PNeK}O5dv>f{-`!ms#4U+JtPV=fgQ5;iNPl9Hf&9( zsJSm5iXIqN7|;I5M08MjUJ{J2@M3 zYN9ft?xIjx&{$K_>S%;Wfwf9N>#|ArVF^shFb9vS)v9Gm00m_%^wcLxe;gIx$7^xR zz$-JDB|>2tnGG@Rrt@R>O40AreXSU|kB3Bm)NILHlrcQ&jak^+~b`)2;otjI(n8A_X~kvp4N$+4|{8IIIv zw*(i}tt+)Kife9&xo-TyoPffGYe;D0a%!Uk(Nd^m?SvaF-gdAz4~-DTm3|Qzf%Pfd zC&tA;D2b4F@d23KV)Csxg6fyOD2>pLy#n+rU&KaQU*txfUj&D3aryVj!Lnz*;xHvl zzo}=X>kl0mBeSRXoZ^SeF94hlCU*cg+b}8p#>JZvWj8gh#66A0ODJ`AX>rubFqbBw z-WR3Z5`33S;7D5J8nq%Z^JqvZj^l)wZUX#7^q&*R+XVPln{wtnJ~;_WQzO{BIFV55 zLRuAKXu+A|7*2L*<_P${>0VdVjlC|n^@lRi}r?wnzQQm z3&h~C3!4C`w<92{?Dpea@5nLP2RJrxvCCBh%Tjobl2FupWZfayq_U$Q@L%$uEB6#X zrm_1TZA8FEtkd`tg)a_jaqnv3BC_O*AUq-*RNLOT)$>2D!r>FZdH&$x5G_FiAPaw4 zgK*7>(qd6R?+M3s@h>Z|H%7eGPxJWn_U$w`fb(Mp+_IK2Kj37YT#Xe5e6KS-_~mW} z`NXEovDJh7n!#q4b+=ne<7uB7Y2(TAR<3@PS&o3P$h#cZ-xF$~JiH6_gsv9v(#ehK zhSB_#AI%lF#+!MB5DMUN+Zhf}=t~{B|Fn{rGM?dOaSvX!D{oGXfS*%~g`W84JJAy4 zMdS?9Bb$vx?`91$J`pD-MGCTHNxU+SxLg&QY+*b_pk0R=A`F}jw$pN*BNM8`6Y=cm zgRh#vab$N$0=XjH6vMyTHQg*+1~gwOO9yhnzZx#e!1H#|Mr<`jJGetsM;$TnciSPJ z5I-R0)$)0r8ABy-2y&`2$33xx#%1mp+@1Vr|q_e=#t7YjjWXH#3F|Fu<G#+-tE2K7 zOJkYxNa74@UT_K4CyJ%mR9Yfa$l=z}lB(6)tZ1Ksp2bv$^OUn3Oed@=Q0M}imYTwX zQoO^_H7SKzf_#kPgKcs%r4BFUyAK9MzfYReHCd=l)YJEgPKq-^z3C%4lq%{&8c{2CGQ3jo!iD|wSEhZ# zjJoH87Rt{4*M_1GdBnBU3trC*hn@KCFABd=Zu`hK;@!TW`hp~;4Aac@24m|GI)Ula z4y%}ClnEu;AL4XVQ6^*!()W#P>BYC@K5mw7c4X|Hk^(mS9ZtfMsVLoPIiwI?w_X0- z#vyiV5q9(xq~fS`_FiUZw->8Awktga>2SrWyvZ|h@LVFtnY#T z%OX30{yiSov4!43kFd(8)cPRMyrN z={af_ONd;m=`^wc7lL|b7V!;zmCI}&8qz=?-6t=uOV;X>G{8pAwf9UJ`Hm=ubIbgR zs6bw3pFeQHL`1P1m5fP~fL*s?rX_|8%tB`Phrij^Nkj{o0oCo*g|ELexQU+2gt66=7}w5A+Qr}mHXC%)(ODT# zK#XTuzqOmMsO~*wgoYjDcy)P7G`5x7mYVB?DOXV^D3nN89P#?cp?A~c%c$#;+|10O z8z(C>mwk#A*LDlpv2~JXY_y_OLZ*Mt)>@gqKf-Ym+cZ{8d%+!1xNm3_xMygTp-!A5 zUTpYFd=!lz&4IFq)Ni7kxLYWhd0o2)ngenV-QP@VCu;147_Lo9f~=+=Nw$6=xyZzp zn7zAe41Sac>O60(dgwPd5a^umFVSH;<7vN>o;}YlMYhBZFZ}-sz`P^3oAI>SCZy&zUtwKSewH;CYysPQN7H>&m215&e2J? zY}>5N-LhaDeRF~C0cB>M z7@y&xh9q??*EIKnh*;1)n-WuSl6HkrI?OUiS^lx$Sr2C-jUm6zhd{nd(>#O8k9*kF zPom7-%w1NjFpj7WP=^!>Vx^6SG^r`r+M&s7V(uh~!T7aE;_ubqNSy)<5(Vi)-^Mp9 zEH@8Vs-+FEeJK%M0z3FzqjkXz$n~BzrtjQv`LagAMo>=?dO8-(af?k@UpL5J#;18~ zHCnWuB(m6G6a2gDq2s`^^5km@A3Rqg-oHZ68v5NqVc zHX_Iw!OOMhzS=gfR7k;K1gkEwuFs|MYTeNhc0js>Wo#^=wX4T<`p zR2$8p6%A9ZTac;OvA4u#Oe3(OUep%&QgqpR8-&{0gjRE()!Ikc?ClygFmGa(7Z^9X zWzmV0$<8Uh)#qaH1`2YCV4Zu6@~*c*bhtHXw~1I6q4I>{92Eq+ZS@_nSQU43bZyidk@hd$j-_iL=^^2CwPcaXnBP;s;b zA4C!k+~rg4U)}=bZ2q*)c4BZ#a&o!uJo*6hK3JRBhOOUQ6fQI;dU#3v>_#yi62&Sp z-%9JJxwIfQ`@w(_qH0J0z~(lbh`P zHoyp2?Oppx^WXwD<~20v!lYm~n53G1w*Ej z9^B*j@lrd>XGW43ff)F;5k|HnGGRu=wmZG9c~#%vDWQHlOIA9(;&TBr#yza{(?k0> zcGF&nOI}JhuPl`kLViBEd)~p2nY9QLdX42u9C~EUWsl-@CE;05y@^V1^wM$ z&zemD1oZd$Z))kEw9)_Mf+X#nT?}n({(+aXHK2S@j$MDsdrw-iLb?#r{?Vud?I5+I zVQ8U?LXsQ}8-)JBGaoawyOsTTK_f8~gFFJ&lhDLs8@Rw$ey-wr&eqSEU^~1jtHmz6 z!D2g4Yh?3VE*W8=*r&G`?u?M~AdO;uTRPfE(@=Gkg z7gh=EGu!6VJJ?S_>|5ZwY?dGFBp3B9m4J1=7u=HcGjsCW+y6`W?OWxfH?S#X8&Zk& zvz6tWcnaS1@~3FTH}q_*$)AjYA_j;yl0H0{I(CW7Rq|;5Q2>Ngd(tmJDp+~qHe_8y zPU_fiCrn!SJ3x&>o6;WDnjUVEt`2fhc9+uLI>99(l$(>Tzwpbh>O775OA5i`jaBdp zXnCwUgomyF3K$0tXzgQhSAc!6nhyRh_$fP}Rd$|*Y7?ah(JrN=I7+)+Hp4BLJJ2P~ zFD!)H^uR2*m7GQZpLUVS#R3^?2wCd}(gcFcz!u5KN9ldNJdh@%onf06z9m~T0n;dqg6@?>G@S|rPO*Kj>{su+R|7bH>osA&uD4eqxtr**k($ii`uO? z7-&VkiL4Rp3S&e+T}2Z#;NtWHZco(v8O3QMvN0g7l8GV|U2>x-DbamkZo5)bjaSFR zr~Y9(EvF9{o*@|nBPj+e5o$_K`%TH1hD=|its}|qS^o6EQu_gOuDUH=Dtzik;P7G$ zq%_T<>9O}bGIB?;IQ*H`BJ5NWF6+XLv@G7aZwcy(&BoepG~u`aIcG>y+;J7+L=wTZ zB=%n@O}=+mjBO%1lMo6C0@1*+mhBqqY((%QMUBhyeC~r*5WVqzisOXFncr*5Lr0q6 zyPU&NOV}Vt2jl>&yig4I6j93?D>Ft=keRh=Y;3*^Z-I26nkZ#Jj5OJ89_?@#9lNjp z#gfAO6i937)~I|98P%xAWxwmk(F&@lTMx63*FZ~2b{NHU+}EV8+kMAB0bM*Zn#&7ubt98!PT^ZcMOfwMgkYz6+;?CKbvV zQ}Z@s_3JcMPhF&y1?}9uZFIBiPR3g7lf=+XEr9Bl%zRfGcaKb*ZQq5b35ZkR@=JEw zP#iqgh2^#@VA-h)>r`7R-$1_ddGr&oWWV$rx;pkG0Yohp9p@In_p)hKvMo@qIv zcN2t{23&^Nj=Y&gX;*vJ;kjM zHE2`jtjVRRn;=WqVAY&m$z=IoKa{>DgJ;To@OPqNbh=#jiS$WE+O4TZIOv?niWs47 zQfRBG&WGmU~>2O{}h17wXGEnigSIhCkg%N~|e?hG8a- zG!Wv&NMu5z!*80>;c^G9h3n#e>SBt5JpCm0o-03o2u=@v^n+#6Q^r#96J5Q=Dd=>s z(n0{v%yj)=j_Je2`DoyT#yykulwTB+@ejCB{dA7VUnG>4`oE?GFV4sx$5;%9&}yxfz<-wWk|IlA|g&! zN_Emw#w*2GT=f95(%Y1#Viop;Yro3SqUrW~2`Fl?Ten{jAt==a>hx$0$zXN`^7>V_ zG*o7iqeZV)txtHUU2#SDTyU#@paP;_yxp!SAG##cB= zr@LoQg4f~Uy5QM++W`WlbNrDa*U;54`3$T;^YVNSHX4?%z|`B~i7W+kl0wBB`8|(l zAyI6dXL&-Sei0=f#P^m`z=JJ`=W;PPX18HF;5AaB%Zlze`#pz;t#7Bzq0;k8IyvdK=R zBW+4GhjOv+oNq^~#!5(+pDz)Ku{u60bVjyym8Or8L;iqR|qTcxEKTRm^Y%QjFYU=ab+^a|!{!hYc+= z%Qc02=prKpzD+jiiOwzyb(dELO|-iyWzizeLugO!<1(j|3cbR!8Ty1$C|l@cWoi?v zLe<5+(Z-eH++=fX**O-I8^ceYZgiA!!dH+7zfoP-Q+@$>;ab&~cLFg!uOUX7h0r== z`@*QP9tnV1cu1!9pHc43C!{3?-GUBJEzI(&#~vY9MEUcRNR*61)mo!RG>_Yb^rNN7 zR9^bI45V?3Lq`^^BMD!GONuO4NH#v9OP3@s%6*Ha3#S*;f z6JEi)qW#Iq#5BtIXT9Gby|H?NJG}DN#Li82kZ_Rt1=T0Z@U6OAdyf}4OD|Sk^2%-1 zzgvqZ@b6~kL!^sZLO$r{s!3fQ5bHW}8r$uTVS*iw1u8^9{YlPp_^Xm5IN zF|@)ZOReX zB*#tEbWEX~@f)ST|s$oUKS@drycE1tYtdJ9b*(uFTxNZ{n3BI*kF7wXgT6+@PI@vwH7iQS{1T!Nauk>fm8gOLe`->Pi~ z8)3=UL_$OLl2n7QZlHt846nkYFu4V};3LpYA%5VaF#a2#d2g0&ZO~3WA%1XlerVpg zCAlM;(9OqH@`(>Tha{*@R%twB!}1ng4V=^+R`Q{#fkRk)C|suozf-uCXrkIH2SC^C z6wlxR`yS;-U#uu#`OnD%U<41%C4mp>LYLPIbgVO~WsT1if)Y)T*8nUB`2*(B;U_ha1NWv2`GqrZ z3MWWpT3tZ!*N@d*!j3=@K4>X*gX4A^@QPAz24?7u90AXaLiFq=Z$|5p$Ok2|YCX_Z zFgNPiY2r_Bg2BQE!0z=_N*G?%0cNITmAru*!Mws=F+F&Qw!&1?DBN{vSy%IvGRV@1 zS->PARgL^XS!-aZj zi@`~LhWfD!H-L0kNv=Jil9zR0>jZLqu)cLq?$yXVyk%EteKcWbe^qh#spHJPa#?92 za(N(Kw0se^$7nQUQZBet;C_Dj5(2_?TdrXFYwmebq}YGQbN5Ex7M zGSCX~Ey;5AqAzEDNr%p^!cuG?&wIeY&Bm5guVg>8F=!nT%7QZTGR(uGM&IZuMw0V_ zhPiIFWm?H?aw*(v6#uVT@NEzi2h5I$cZ-n0~m$tmwdMTjG*of^Y%1 zW?Y%o*-_iMqEJhXo^!Qo?tGFUn1Mb|urN4_;a)9bila2}5rBS#hZ5wV+t1xbyF1TW zj+~cdjbcMgY$zTOq6;ODaxzNA@PZIXX(-=cT8DBd;9ihfqqtbDr9#gXGtK24BPxjZ z9+Xp>W1(s)->-}VX~BoQv$I|-CBdO`gULrvNL>;@*HvTdh@wyNf}~IB5mFnTitX2i z;>W>tlQyc2)T4Mq+f!(i3#KuK-I8Kj3Wm(UYx?KWWt8DEPR_Jdb9CE~Fjc7Rkh#gh zowNv()KRO@##-C+ig0l!^*ol!Bj%d32_N*~d!|&>{t!k3lc?6VrdlCCb1?qyoR42m zv;4KdwCgvMT*{?tJKa(T?cl|b;k4P>c&O@~g71K5@}ys$)?}WSxD;<5%4wEz7h=+q ztLumn6>leWdDk#*@{=v9p)MsvuJMyf_VEs;pJh?i3z7_W@Q|3p$a}P@MQ-NpMtDUBgH!h4Ia#L&POr4Qw0Tqdw^}gCmQAB z8Dgkzn?V!_@04(cx0~-pqJOpeP1_}@Ml3pCb45EJoghLows9ET13J8kt0;m$6-jO( z4F|p+JFD1NT%4bpn4?&)d+~<360$z5on`eS6{H`S>t`VS$>(D`#mC*XK6zULj1Da# zpV$gw$2Ui{07NiYJQQNK;rOepRxA>soNK~B2;>z;{Ovx`k}(dlOHHuNHfeR}7tmIp zcM}q4*Fq8vSNJYi@4-;}`@bC?nrUy`3jR%HXhs79qWI5;hyTpH5%n-NcKu&j(aGwT z1~{geeq?Jd>>HL+?2`0K8dB2pvTS=LO~tb~vx_<=iN8^rW!y@~lBTAaxHmvVQJSeJ z!cb9ffMdP1lgI=>QJN{XpM4{reRrdIt|v|0-8!p}M*Qw^uV1@Ho-YsNd0!a(os$F* zT0tGHA#0%u0j*%S>kL*73@~7|iP;;!JbWSTA@`#VHv_l_%Z7CgX@>dhg_ zgn0|U)SY~U-E5{QiT@(uPp#1jaz!(_3^Cbz2 z4ZgWWz=PdGCiGznk{^4TBfx_;ZjAHQ>dB4YI}zfEnTbf60lR%=@VWt0yc=fd38Ig* z)Q38#e9^+tA7K}IDG5Z~>JE?J+n%0_-|i2{E*$jb4h?|_^$HRHjVkiyX6@Y+)0C2a zA+eegpT1dUpqQFIwx;!ayQcWQBQTj1n5&h<%Lggt@&tE19Rm~Rijtqw6nmYip_xg0 zO_IYpU304embcWP+**H|Z5~%R*mqq+y{KbTVqugkb)JFSgjVljsR{-c>u+{?moCCl zTL)?85;LXk0HIDC3v*|bB-r_z%zvL6Dp__L*A~Z*o?$rm>cYux&)W=6#+Cb}TF&Kd zdCgz3(ZrNA>-V>$C{a^Y^2F!l_%3lFe$s(IOfLBLEJ4Mcd!y&Ah9r)7q?oc z5L(+S8{AhZ)@3bw0*8(}Xw{94Vmz6FrK&VFrJN;xB96QmqYEibFz|yHgUluA-=+yS}I-+#_Pk zN67-#8W(R^e7f!;i0tXbJgMmJZH%yEwn*-}5ew13D<_FYWnt?{Mv1+MI~u;FN~?~m z{hUnlD1|RkN}c1HQ6l@^WYbHAXPJ^m0te1woe;LDJ}XEJqh1tPf=sD0%b+OuR1aCoP>I>GBn4C24Zu$D)qg=gq;D??5 zUSj%;-Hvk_ffj-+SI{ZCp`gZcNu=L@_N}kCcs?TyMr-37fhy$?a<7lt1`fZw<%$8@B6(Wgo!#!z9z{ab|x`+&;kP!(gfdY}A-GP&4Cbh-S< z1(kmgnMyB2z3ipEj5;4<{(=&<7a>A_Jl`ujUKYV@%k(oD=cD7W@8~5O=R*zdjM_y; zXwme~0wo0aDa~9rDnjF=B}Bbj|DHRQjN|?@(F^=bVFdr!#mwr|c0843k>%~5J|7|v zSY=T)iPU6rEAwrM(xTZwPio%D4y9Z4kL0bMLKvu4yd)0ZJA3<;>a2q~rEfcREn}~1 zCJ~3c?Afvx?3^@+!lnf(kB6YwfsJ*u^y7kZA?VmM%nBmaMspWu?WXq4)jQsq`9EbT zlF2zJ)wXuAF*2u|yd5hNrG>~|i}R&ZyeetTQ!?Hz6xGZZb3W6|vR>Hq=}*m=V=Lsp zUOMxh;ZfP4za~C{Ppn^%rhitvpnu^G{Z#o-r?TdEgSbtK_+~_iD49xM;$}X*mJF02|WBL{SDqK9}p4N!G$3m=x#@T+4QcapM{4j|Q zwO!(hldpuSW#by!zHEP@tzIC|KdD z%BJzQ7Ho1(HemWm`Z8m_D#*`PZ-(R%sZmPrS$aHS#WPjH3EDitxN|DY+ zYC|3S?PQ3NNYau$Qk8f>{w}~xCX;;CE=7;Kp4^xXR8#&^L+y-jep7oO^wnQ840tg1 zuN17QKsfdqZPlB8OzwF+)q#IsmenEmIbRAJHJ$JjxzawKpk8^sBm3iy=*kB%LppNb zhSdk`^n?01FKQ;=iU+McN7Mk0^`KE>mMe1CQ2a_R26_}^$bogFm=2vqJake7x)KN( zYz;gRPL+r4*KD>1U+DU+1jh{mT8#P#(z9^(aDljpeN{mRmx{AZX&hXKXNuxj3x*RrpjvOaZ#`1EqK!$+8=0yv8}=;>f=E?5tGbRUd4%?QL zy$kq6mZeF%k6E1&8nwAYMd!-lRkhQTob$7s`*XqcHs;l~mHV}fx&0I&i!CHaPVSM{ zHdRh7a>hP)t@YTrWm9y zl-ENWSVzlKVvTdWK>)enmGCEw(WYS=FtY{srdE{Z(3~4svwd)ct;`6Y{^qiW+9E@A ztzd?lj5F#k`=E1U-n*1JJc0{x{0q!_tkD<_S6bGsW)^RxGu%Rj^Mvw|R0WP1SqvAI zs(MiAd@Y5x!UKu376&|quQNxir;{Iz(+}3k-GNb29HaQh?K30u=6sXpIc?j0hF{VY zM$Do*>pN)eRljAOgpx7fMfSrnZ7>fi@@>Jh;qxj1#-Vj}JC3E^GCbC(r55_AG>6cq z4ru34FtVuBt)bkX4>ZFWjToyu)VA>IE6hXc+^(3ruUaKRqHnx3z)(GXetm;^0D95s zQ&drwfjhM4*|q=;i5Io0eDf?I{p}qo@7i7abHX5qLu~VDwYf4bmV~-^M_U?DL(+cG z{AyE^a|*73Ft)o5k-p)+GLXj#q01VlJ9#ZJkf|+c%6qfRgVp&6NsU3~F?!uh}HJm73xq>v$h zYoW3wJE6n9P|;{8U<^%UE2wjR4x^G_Nc$J(i)!>;g4`CCh2z^Dth#ah#<`#axDR?F z4>~hnN2%B2ZUuU6j>m1Qjj~5jQSdA&Q#7hOky#=Ue)}7LPJ!8nbZO_0Sw{G>>M7&E zb1dy|0Zi$(ubk`4^XkVI%4WIpe?Bh!D~IjvZs14yHw=aQ8-`N-=P*?Kzi&eRGZ_6Z zT>eis`!Dy3eT3=vt#Lbc+;}i5XJf7zM3QneL{t?w=U<1rk7+z2Cu^|~=~54tAeSYF zsXHsU;nM0dpK>+71yo(NFLV-^Lf7%U?Q$*q{^j04Gl71ya2)^j`nmJ$cmI9eFMjp+ z#)jKmi4lZc<;l>!={@jTm%?!5jS;6;c*Ml55~r6Y?22B^K3bPhKQ(ICc&z%w<4W1= zjTTtz_}IA$%kCqU)h#$!Yq>>2mVG}qYL}!avmCWYV}x4!YEeq)pgTp| zR;+skHuc7YXRLrcbYXt>?@pa{l^2pL>RrZ!22zMmi1ZR?nkaWF*`@XFK4jGh&Em3vn(l z3~^Q9&tM^eV=f^lccCUc9v02z%^n5VV6s$~k0uq5B#Ipd6`M1Kptg^v<2jiNdlAWQ z_MmtNEaeYIHaiuaFQdG&df7miiB5lZkSbg&kxY*Eh|KTW`Tk~VwKC~+-GoYE+pvwc{+nIEizq6!xP>7ZQ(S2%48l$Y98L zvs7s<&0ArXqOb*GdLH0>Yq-f!{I~e~Z@FUIPm?jzqFZvz9VeZLYNGO}>Vh<=!Er7W zS!X6RF^et7)IM1pq57z*^hP5w7HKSDd8jHX!*gkKrGc-GssrNu5H%7-cNE{h$!aEQK3g*qy;= z)}pxO8;}nLVYm_24@iEs8)R7i;Th0n4->&$8m6(LKCRd(yn7KY%QHu_f=*#e`H^U( z{u!`9JaRD?Z?23fEXrjx>A@+a!y-_oaDB)o@2s{2%A97-ctFfrN0cXQ@6aGH`X~Nr z144?qk;MzDU-cgQOLfT3-ZR#hKmYtKG*iGf4ZJ`|`9!^SkBDUUSJCba)>mM!)k~(z zdjUqB`)~!UObMHB1b$UItM$<0kwlqHH;c z=)+~bkOcIT7vI0Iy(wD)vsg9|oi##%Rgrq`Ek;pN)}lbpz`iv{F4K*{ZZ?Zjixxxr zY|SPl2NsXH+5pimj+MvbZ_+HrfvdC13|9Zs)Y=nW$z<0mhl}%irBSm5T3ZrN#2AhY z_ZrTmS(L`U#y}VZ@~QL9wUS6AnU*7LWS02Xyz`b>%rTml#Wb0yr>@c(Ym*40g;P{V zjV1XSHdU>oY!&Jh7MzhzUV8(9E+yl5UJYga>=0Ldjwtc`5!1>LxaB-kVW;IlSPs+0 zUBx=m8OKVp<`frNvMK>WMO(iKY%PuvqD+PK*vP6f?_o!O)MCW5Ic zv(%f5PLHyOJ2h@Yn_to@54Yq;fdoy40&sbe3A$4uUXHsHP_~K}h#)p&TyOx(~JE?y(IBAQKl}~VQjVC-c6oZwmESL;`Xth?2)-b6ImNcJi z;w|`Q*k?`L(+Dp}t(FocvzWB(%~9$EAB6_J6CrA}hMj-Vy*6iA$FdV}!lvk%6}M)4 zTf<)EbXr9^hveAav1yA?>O0aNEpv0&rju{(Gt|dP=AP%)uQm~OE7@+wEhILrRLt&E zoEsF^nz>4yK1|EOU*kM+9317S;+bb7?TJM2UUpc!%sDp}7!<`i=W!ot8*C&fpj>mk#qt~GCeqcy)?W6sl>eUnR%yCBR&Ow-rc|q;lhnI+f-%`6Xf)% zIYZru;27%vA{Qi2=J`PQC<28;tFx(V^sgXf>)8WNxxQwT14M9I6- z+V0@tiCiDkv`7r-06sJS8@s|Lf>mV+8h}SPT4ZGPSMaFK7_SMXH$3KN7b2V?iV-jA zh1!Z>2tv^HVbHnNUAf-wQW#zMV(h8=3x2Swd|-%AczEIWLcm~EAu7rc3s%56b;7ME zj}$pe#fc^314Mb9i)xH^_#({)tTD4hsoz!7XcHUh9*G|}?k=D?9LBkTm2?fgaIG(%%$DL#}a-_990rQBU+M;jrf zCcvgM`+oyZmsUqc?lly9axZfO)02l$TMS#I+jHYY`Uk!gtDv|@GBQ||uaG^n*QR3Q z@tV?D;R;KmkxSDQh<2DkDC1?m?jTvf2i^T;+}aYhzL?ymNZmdns2e)}2V>tDCRw{= zTV3q3ZQDkdZQHi3?y{@8Y@1!SZQHi(y7|qSx$~Vl=iX<2`@y3eSYpsBV zI`Q-6;)B=p(ZbX55C*pu1C&yqS|@Pytis3$VDux0kxKK}2tO&GC;cH~759o?W2V)2 z)`;U(nCHBE!-maQz%z#zoRNpJR+GmJ!3N^@cA>0EGg?OtgM_h|j1X=!4N%!`g~%hdI3%yz&wq4rYChPIGnSg{H%i>96! z-(@qsCOfnz7ozXoUXzfzDmr>gg$5Z1DK$z#;wn9nnfJhy6T5-oi9fT^_CY%VrL?l} zGvnrMZP_P|XC$*}{V}b^|Hc38YaZQESOWqA1|tiXKtIxxiQ%Zthz?_wfx@<8I{XUW z+LH%eO9RxR_)8gia6-1>ZjZB2(=`?uuX|MkX082Dz*=ep%hMwK$TVTyr2*|gDy&QOWu zorR#*(SDS{S|DzOU$<-I#JTKxj#@0(__e&GRz4NuZZLUS8}$w+$QBgWMMaKge*2-) zrm62RUyB?YSUCWTiP_j-thgG>#(ZEN+~bMuqT~i3;Ri`l${s0OCvCM>sqtIX?Cy`8 zm)MRz-s^YOw>9`aR#J^tJz6$S-et%elmR2iuSqMd(gr6a#gA_+=N(I6%Cc+-mg$?_1>PlK zbgD2`hLZ?z4S~uhJf=rraLBL?H#c$cXyqt{u^?#2vX2sFb z^EU-9jmp{IZ~^ii@+7ogf!n_QawvItcLiC}w^$~vgEi(mX79UwDdBg`IlF42E5lWE zbSibqoIx*0>WWMT{Z_NadHkSg8{YW4*mZ@6!>VP>ey}2PuGwo%>W7FwVv7R!OD32n zW6ArEJX8g_aIxkbBl^YeTy5mhl1kFGI#n>%3hI>b(^`1uh}2+>kKJh0NUC|1&(l)D zh3Barl&yHRG+Le2#~u>KoY-#GSF>v)>xsEp%zgpq4;V6upzm3>V&yk^AD}uIF{vIn zRN-^d4(Sk6ioqcK@EObsAi#Z-u&Hh#kZdv1rjm4u=$2QF<6$mgJ4BE0yefFI zT7HWn?f668n!;x>!CrbdA~lDfjX?)315k1fMR~lG)|X_o()w|NX&iYUTKxI2TLl|r z{&TWcBxP>*;|XSZ1GkL&lSg?XL9rR4Ub&4&03kf};+6$F)%2rsI%9W_i_P|P%Z^b@ zDHH2LV*jB@Izq0~E4F^j04+C|SFiV8{!bth%bz(KfCg42^ zGz5P7xor$)I4VX}Cf6|DqZ$-hG7(}91tg#AknfMLFozF1-R~KS3&5I0GNb`P1+hIB z?OPmW8md3RB6v#N{4S5jm@$WTT{Sg{rVEs*)vA^CQLx?XrMKM@*gcB3mk@j#l0(~2 z9I=(Xh8)bcR(@8=&9sl1C?1}w(z+FA2`Z^NXw1t(!rpYH3(gf7&m=mm3+-sls8vRq z#E(Os4ZNSDdxRo&`NiRpo)Ai|7^GziBL6s@;1DZqlN@P_rfv4Ce1={V2BI~@(;N`A zMqjHDayBZ);7{j>)-eo~ZwBHz0eMGRu`43F`@I0g!%s~ANs>Vum~RicKT1sUXnL=gOG zDR`d=#>s?m+Af1fiaxYxSx{c5@u%@gvoHf#s6g>u57#@#a2~fNvb%uTYPfBoT_$~a^w96(}#d;-wELAoaiZCbM zxY4fKlS6-l1!b1!yra|`LOQoJB))=CxUAYqFcTDThhA?d}6FD$gYlk**!# zD=!KW>>tg1EtmSejwz{usaTPgyQm~o+NDg`MvNo)*2eWX*qAQ)4_I?Pl__?+UL>zU zvoT(dQ)pe9z1y}qa^fi-NawtuXXM>*o6Al~8~$6e>l*vX)3pB_2NFKR#2f&zqbDp7 z5aGX%gMYRH3R1Q3LS91k6-#2tzadzwbwGd{Z~z+fBD5iJ6bz4o1Rj#7cBL|x8k%jO z{cW0%iYUcCODdCIB(++gAsK(^OkY5tbWY;)>IeTp{{d~Y#hpaDa-5r#&Ha?+G{tn~ zb(#A1=WG1~q1*ReXb4CcR7gFcFK*I6Lr8bXLt9>9IybMR&%ZK15Pg4p_(v5Sya_70 ziuUYG@EBKKbKYLWbDZ)|jXpJJZ&bB|>%8bcJ7>l2>hXuf-h5Bm+ zHZ55e9(Sg>G@8a`P@3e2(YWbpKayoLQ}ar?bOh2hs89=v+ifONL~;q(d^X$7qfw=; zENCt`J*+G;dV_85dL3Tm5qz2K4m$dvUXh>H*6A@*)DSZ2og!!0GMoCPTbcd!h z@fRl3f;{F%##~e|?vw6>4VLOJXrgF2O{)k7={TiDIE=(Dq*Qy@oTM*zDr{&ElSiYM zp<=R4r36J69aTWU+R9Hfd$H5gWmJ?V){KU3!FGyE(^@i!wFjeZHzi@5dLM387u=ld zDuI1Y9aR$wW>s#I{2!yLDaVkbP0&*0Rw%6bi(LtieJQ4(1V!z!ec zxPd)Ro0iU%RP#L|_l?KE=8&DRHK>jyVOYvhGeH+Dg_E%lgA(HtS6e$v%D7I;JSA2x zJyAuin-tvpN9g7>R_VAk2y;z??3BAp?u`h-AVDA;hP#m+Ie`7qbROGh%_UTW#R8yfGp<`u zT0}L)#f%(XEE)^iXVkO8^cvjflS zqgCxM310)JQde*o>fUl#>ZVeKsgO|j#uKGi)nF_ur&_f+8#C0&TfHnfsLOL|l(2qn zzdv^wdTi|o>$q(G;+tkTKrC4rE)BY?U`NHrct*gVx&Fq2&`!3htkZEOfODxftr4Te zoseFuag=IL1Nmq45nu|G#!^@0vYG5IueVyabw#q#aMxI9byjs99WGL*y)AKSaV(zx z_`(}GNM*1y<}4H9wYYSFJyg9J)H?v((!TfFaWx(sU*fU823wPgN}sS|an>&UvI;9B(IW(V)zPBm!iHD} z#^w74Lpmu7Q-GzlVS%*T-z*?q9;ZE1rs0ART4jnba~>D}G#opcQ=0H)af6HcoRn+b z<2rB{evcd1C9+1D2J<8wZ*NxIgjZtv5GLmCgt?t)h#_#ke{c+R6mv6))J@*}Y25ef z&~LoA&qL-#o=tcfhjH{wqDJ;~-TG^?2bCf~s0k4Rr!xwz%Aef_LeAklxE=Yzv|3jf zgD0G~)e9wr@)BCjlY84wz?$NS8KC9I$wf(T&+79JjF#n?BTI)Oub%4wiOcqw+R`R_q<`dcuoF z%~hKeL&tDFFYqCY)LkC&5y(k7TTrD>35rIAx}tH4k!g9bwYVJ>Vdir4F$T*wC@$08 z9Vo*Q0>*RcvK##h>MGUhA9xix+?c1wc6xJhn)^9;@BE6i*Rl8VQdstnLOP1mq$2;!bfASHmiW7|=fA{k$rs^-8n{D6_ z!O0=_K}HvcZJLSOC6z-L^pl3Gg>8-rU#Sp1VHMqgXPE@9x&IHe;K3;!^SQLDP1Gk&szPtk| z!gP;D7|#y~yVQ?sOFiT*V(Z-}5w1H6Q_U5JM#iW16yZiFRP1Re z6d4#47#NzEm};1qRP9}1;S?AECZC5?6r)p;GIW%UGW3$tBN7WTlOy|7R1?%A<1!8Z zWcm5P6(|@=;*K&3_$9aiP>2C|H*~SEHl}qnF*32RcmCVYu#s!C?PGvhf1vgQ({MEQ z0-#j>--RMe{&5&$0wkE87$5Ic5_O3gm&0wuE-r3wCp?G1zA70H{;-u#8CM~=RwB~( zn~C`<6feUh$bdO1%&N3!qbu6nGRd5`MM1E_qrbKh-8UYp5Bn)+3H>W^BhAn;{BMii zQ6h=TvFrK)^wKK>Ii6gKj}shWFYof%+9iCj?ME4sR7F+EI)n8FL{{PKEFvB65==*@ ztYjjVTJCuAFf8I~yB-pN_PJtqH&j$`#<<`CruB zL=_u3WB~-;t3q)iNn0eU(mFTih<4nOAb>1#WtBpLi(I)^zeYIHtkMGXCMx+I zxn4BT0V=+JPzPeY=!gAL9H~Iu%!rH0-S@IcG%~=tB#6 z3?WE7GAfJ{>GE{?Cn3T!QE}GK9b*EdSJ02&x@t|}JrL{^wrM@w^&})o;&q816M5`} zv)GB;AU7`haa1_vGQ}a$!m-zkV(+M>q!vI0Swo18{;<>GYZw7-V-`G#FZ z;+`vsBihuCk1RFz1IPbPX8$W|nDk6yiU8Si40!zy{^nmv_P1=2H*j<^as01|W>BQS zU)H`NU*-*((5?rqp;kgu@+hDpJ;?p8CA1d65)bxtJikJal(bvzdGGk}O*hXz+<}J? zLcR+L2OeA7Hg4Ngrc@8htV!xzT1}8!;I6q4U&S$O9SdTrot<`XEF=(`1{T&NmQ>K7 zMhGtK9(g1p@`t)<)=eZjN8=Kn#0pC2gzXjXcadjHMc_pfV(@^3541)LC1fY~k2zn&2PdaW`RPEHoKW^(p_b=LxpW&kF?v&nzb z1`@60=JZj9zNXk(E6D5D}(@k4Oi@$e2^M%grhlEuRwVGjDDay$Qpj z`_X-Y_!4e-Y*GVgF==F0ow5MlTTAsnKR;h#b0TF>AyJe`6r|%==oiwd6xDy5ky6qQ z)}Rd0f)8xoNo)1jj59p;ChIv4Eo7z*{m2yXq6)lJrnziw9jn%Ez|A-2Xg4@1)ET2u zIX8`u5M4m=+-6?`S;?VDFJkEMf+=q?0D7?rRv)mH=gptBFJGuQo21rlIyP>%ymGWk z=PsJ>>q~i>EN~{zO0TklBIe(8i>xkd=+U@;C{SdQ`E03*KXmWm4v#DEJi_-F+3lrR z;0al0yXA&axWr)U%1VZ@(83WozZbaogIoGYpl!5vz@Tz5?u36m;N=*f0UY$ssXR!q zWj~U)qW9Q9Fg9UW?|XPnelikeqa9R^Gk77PgEyEqW$1j=P@L z*ndO!fwPeq_7J_H1Sx>#L$EO_;MfYj{lKuD8ZrUtgQLUUEhvaXA$)-<61v`C=qUhI zioV&KR#l50fn!-2VT`aMv|LycLOFPT{rRSRGTBMc)A`Cl%K&4KIgMf}G%Qpb2@cB* zw8obt-BI3q8Lab!O<#zeaz{P-lI2l`2@qrjD+Qy)^VKks5&SeT(I)i?&Kf59{F`Rw zuh7Q>SQNwqLO%cu2lzcJ7eR*3!g}U)9=EQ}js-q{d%h!wl6X3%H0Z2^8f&^H;yqti4z6TNWc& zDUU8YV(ZHA*34HHaj#C43PFZq7a>=PMmj4+?C4&l=Y-W1D#1VYvJ1~K%$&g-o*-heAgLXXIGRhU zufonwl1R<@Kc8dPKkb`i5P9VFT_NOiRA=#tM0WX2Zut)_ zLjAlJS1&nnrL8x8!o$G+*z|kmgv4DMjvfnvH)7s$X=-nQC3(eU!ioQwIkaXrl+58 z@v)uj$7>i`^#+Xu%21!F#AuX|6lD-uelN9ggShOX&ZIN+G#y5T0q+RL*(T(EP)(nP744-ML= z+Rs3|2`L4I;b=WHwvKX_AD56GU+z92_Q9D*P|HjPYa$yW0o|NO{>4B1Uvq!T;g_N- zAbNf%J0QBo1cL@iahigvWJ9~A4-glDJEK?>9*+GI6)I~UIWi>7ybj#%Po}yT6d6Li z^AGh(W{NJwz#a~Qs!IvGKjqYir%cY1+8(5lFgGvl(nhFHc7H2^A(P}yeOa_;%+bh` zcql{#E$kdu?yhRNS$iE@F8!9E5NISAlyeuOhRD)&xMf0gz^J927u5aK|P- z>B%*9vSHy?L_q)OD>4+P;^tz4T>d(rqGI7Qp@@@EQ-v9w-;n;7N05{)V4c7}&Y^!`kH3}Q z4RtMV6gAARY~y$hG7uSbU|4hRMn97Dv0$Le@1jDIq&DKy{D$FOjqw{NruxivljBGw zP4iM(4Nrz^^~;{QBD7TVrb6PB=B$<-e9!0QeE8lcZLdDeb?Gv$ePllO2jgy&FSbW* zSDjDUV^=`S(Oo0;k(Idvzh}aXkfO)F6AqB?wWqYJw-1wOn5!{-ghaHb^v|B^92LmQ9QZj zHA&X)fd%B$^+TQaM@FPXM$$DdW|Vl)4bM-#?Slb^qUX1`$Yh6Lhc4>9J$I4ba->f3 z9CeGO>T!W3w(){M{OJ+?9!MK68KovK#k9TSX#R?++W4A+N>W8nnk**6AB)e;rev=$ zN_+(?(YEX;vsZ{EkEGw%J#iJYgR8A}p+iW;c@V>Z1&K->wI>!x-+!0*pn|{f=XA7J zfjw88LeeJgs4YI?&dHkBL|PRX`ULOIZlnniTUgo-k`2O2RXx4FC76;K^|ZC6WOAEw zz~V0bZ29xe=!#Xk?*b{sjw+^8l0Koy+e7HjWXgmPa4sITz+$VP!YlJ$eyfi3^6gGx6jZLpbUzX;!Z6K}aoc!1CRi zB6Lhwt%-GMcUW;Yiy6Y7hX(2oksbsi;Z6k*=;y;1!taBcCNBXkhuVPTi+1N*z*}bf z`R=&hH*Ck5oWz>FR~>MO$3dbDSJ!y|wrff-H$y(5KadrA_PR|rR>jS=*9&J*ykWLr z-1Z^QOxE=!6I z%Bozo)mW7#2Hd$-`hzg=F@6*cNz^$#BbGlIf${ZV1ADc}sNl=B72g`41|F7JtZ^BT z+y}nqn3Ug`2scS_{MjykPW2~*k$i6PhvvxJCW;n!SK5B8Rpm41fCEdy=ea-4F`rN5 zF>ClKp#4?}pI7eR#6U|}t`DA!GQJB7nT$HVV*{qPjIRU1Ou3W;I^pCt54o|ZHvWaH zooFx9L%#yv)!P;^er5LCU$5@qXMhJ-*T5Ah8|}byGNU5oMp3V)yR;hWJKojJEregX z<1UPt%&~=5OuP(|B{ty);vLdoe7o^?`tkQa7zoXKAW6D@lc+FTzucotaOfJ!(Bm zHE8f8j@6||lH`y2<&hP}Q1wr(=6ze0D6NRL{7QaE1=nTAzqjIeD}Be&@#_d*dyurz z&L7xo-D9!dS`i>^GaIPArR@r=N#-ppIh!UBcb!N*?nLUO+*%C>_dCF1IH)q>5oT(t zjQo{AoDB;mWL;3&;vTt?;bvJSj>^Gq4Jrh}S}D>G)+b!>oRDWI?c_d77$kF5ms{Gx zak*>~*5AvaB-Xl)IgdZ^Cupv6HxQ0 zM(KPaDpPsPOd)e)aFw}|=tfzg@J1P8oJx2ZBY=g4>_G(Hkgld(u&~jN((eJ}5@b1} zI(P7j443AZj*I@%q!$JQ2?DZV47U!|Tt6_;tlb`mSP3 z74DE4#|1FMDqwYbT4P6#wSI%s?*wDc>)MR$4z9ZtJg04+CTUds>1JSDwI}=vpRoRR zLqx(Tvf34CvkTMOPkoH~$CG~fSZb;(2S4Q6Vpe9G83V={hwQ>acu+MCX)@0i>Vd`% z4I8Ye+7&Kcbh(*bN1etKmrpN)v|=eI+$oD=zzii6nP&w|kn2Y-f!(v<aE zKmOz#{6PZB(8zD={il`RO6D}v(@mN_66KXUAEefgg|;VmBfP?UrfB$&zaRw7oanna zkNmVGz4Vhd!vZSnp1(&_5^t;eSv6O771BloJAHi=Pnn+aa6y(e2iiE97uZ{evzQ^8 z*lN@ZYx<-hLXP^IuYLGf<01O*>nDp0fo;;Iyt`JADrxt7-jEF(vv_btyp6CT8=@5t zm`I0lW+2+_xj2CRL|40kcYysuyYeiGihGe&a)yilqP}5h+^)m8$=mzrUe`$(?BIY> zfF7-V10Gu0CkWF)wz04&hhI>es0NS7d`cnT`4y8K!wUAKv$H09fa>KeNQvwUNDT1zn}_*RHykC$CD%*h7vRCQ&Z z4&N-!L>(@8i?K$l5)13n0%VPPV`iG7Q$2{1T3JypLSvN%1kX73goBIOEmg=Uf$9e? zm}g>JFu}EQKH>|K!)m9teoCmTc`y2Ll}msZYyy0Pkqjeid66>DP_?C{KCw94lHvLW z-+X!2YSm70s833lH0o+|A%Xwsw`@8lE3ia0n_Dve;LC7@I+i~@%$lD|3fNf&R6ob6 z@iGfx^OC4s`$|vO!0jTWwVpX;X^EqJF{i324I>N=f@u+rTN+xJGGR0LsCQc;iFD=F zbZJrgOpS;04o^wP7HF5QBaJ$KJgS2V4u02ViWD=6+7rcu`uc&MOoyf%ZBU|gQZkUg z<}ax>*Fo?d*77Ia)+{(`X45{a8>Bi$u-0BWSteyp#GJnTs?&k&<0NeHA$Qb3;SAJK zl}H*~eyD-0qHI3SEcn`_7d zq@YRsFdBig+k490BZSQwW)j}~GvM7x>2ymO4zakaHZ!q6C2{fz^NvvD8+e%7?BQBH z-}%B{oROo2+|6g%#+XmyyIJrK_(uEbg%MHlBn3^!&hWi+9c0iqM69enep#5FvV_^r z?Yr(k*5FbG{==#CGI1zU0Wk{V?UGhBBfv9HP9A-AmcJmL^f4S zY3E2$WQa&n#WRQ5DOqty_Pu z-NWQGCR^Hnu^Vo2rm`-M>zzf|uMCUd1X0{wISJL2Pp=AO5 zF@(50!g|SYw3n<_VP0T~`WUjtY**6Npphr5bD%i3#*p7h8$#;XTLJAt5J-x~O1~`z z`2C~P4%XSI(JbrEmVMEwqdsa^aqXWg;A6KBn^jDxTl!}Q!^WhprL$kb(Iqq zUS`i$tIPs#hdE-zAaMGoxcG?Z;RO2L0Y|gcjV_)FFo|e)MtTl`msLTwq>po$`H6_U zhdWK97~M>idl9GE_WgobQkK_P85H_0jN?s3O)+m&68B`_;FnbZ3W*Qm++ghSs7|T4b7m~VVV%j0gl`Iw!?+-9#Lsb!j3O%fSTVuK z37V>qM81D+Atl};23`TqEAfEkQDpz$-1$e__>X2jN>xh@Sq)I6sj@< ziJ^66GSmW9c%F7eu6&_t$UaLXF4KweZecS1ZiHPWy-$e_7`jVk74OS*!z=l#(CQ^K zW-ke|g^&0o=hn+4uh-8lUh0>!VIXXnQXwKr>`94+2~<;+`k z$|}QZ>#pm2g}8k*;)`@EnM~ZQtci%_$ink9t6`HP{gn}P1==;WDAld3JX?k%^GcTU za>m|CH|UsyFhyJBwG5=`6562hkVRMQ=_ron-Vlm$4bG^GFz|Jh5mM{J1`!!hAr~8F^w> z^YhQ=c|bFn_6~9X$v(30v$5IX;#Nl-XXRPgs{g_~RS*znH^6Vhe}8>T?aMA|qfnWO zQpf(wr^PfygfM+m2u!9}F|frrZPBQ!dh(varsYo!tCV)WA(Wn^_t=WR_G7cQU`AGx zrK^B6<}9+$w;$vra)QWMKf_Tnqg93AMVZ6Qd=q6rdB{;ZhsoT zWy9QhnpEnc@Dauz4!8gq zqDanAX#$^vf-4~ZqUJtSe?SO+Hmb?)l2#}v(8}2+P{ZZuhlib0$3G0|a5?JR>QgUUP$HTE5hb`h>imq#7P+Y*-UVLm@9km|V# zoigziFt$bxgQMwqKKhd!c--&ciywIED>faY3zHLrA{V#IA)!mq!FXxf?1coGK~N(b zjwu*@2B1^(bzFVBJO`4EJ$=it!a0kbgUvPL;Er(0io{W4G7Bkqh)=g)uS|l0YfD}f zaCJwY7vR-D=P9M68`cmtmQ^!F-$lt@0S|9G7cHgT13A0xMv)HmH#Z<4{~iYo_VOD{ z5!kU+>mUOvHouw+-y?*cNlUlDwD#;6ZvAIc$YcwG&qKZFh>EtM(Eda+w)E$HcfZyB zG*$<*ae_ApE%gxWx%O^~XMnRSNLv!y`g99F(J_m)spJAc95P|_joOIoru%atbw z9PYgkcE*8x#)-W{>96KDl&74iW<#wrK)1s zxzU{`rW5af+dT6Z@_1dG<}CtDMT`EGVEXSL_5D9)Z;6UJe-TW7)M?bY%E;8G?Yc!$ zic;F5=#dba^P~7f#qvC}Nd#XEo2r_UlgfR_`B2^W0QjXU?RAi$>f&{G_Lu8Fp0qDp z?vAdm%z#3kcZmaJ@afooB=A@>8_N~O9Yzu=ZCEikM>UgU+{%>pPvmSNzGk@*jnc5~ z(Z#H4OL^gw>)gqZ!9X|3i4LAdp9vo)?F9QCR3##{BHoZ73Uk^Ha={2rc*TBijfKH- z=$cZQdc<5%*$kVo|{+bL3 zEoU&tq*YPR)^y-SISeQNQ)YZ9v>Hm4O=J)lf(y=Yu1ao&zj#5GVGxyj%V%vl9}dw< zO;@NRd4qe@Et}E@Q;SChBR2QPKll1{*5*jT*<$$5TywvC77vt=1=0xZ46>_17YzbiBoDffH(1_qFP7v2SVhZmA_7JDB50t#C39 z8V<9(E?bVWI<7d6MzcS^w!XmZ**{AO!~DZNU)pgr=yY1 zT@!AapE;yg&hmj*g{I3vd## zx+d%^O?d%%?Dba|l~X6ZOW|>FPsrjPjn-h4swysH!RNJUWofC?K(^0uHrBPrH5#W> zMn8^@USzjUucqo%+5&))Dnnw`5l1mp>roaA99Nkk4keZl2wAF7oa(!x?@8uGWzc5Q zM}g`}zf-D@B6lVFYWmmJ8a+_%z8g$C7Ww~PD9&jki08NY!b!fK288R;E?e3Z+Pk{is%HxQU`xu9+y5 zq?DWJD7kKp(B2J$t5Ij8-)?g!T9_n<&0L8F5-D0dp>9!Qnl#E{eDtkNo#lw6rMJG$ z9Gz_Z&a_6ie?;F1Y^6I$Mg9_sml@-z6t!YLr=ml<6{^U~UIbZUUa_zy>fBtR3Rpig zc1kLSJj!rEJILzL^uE1mQ}hjMCkA|ZlWVC9T-#=~ip%McP%6QscEGlYLuUxDUC=aX zCK@}@!_@~@z;70I+Hp5#Tq4h#d4r!$Np1KhXkAGlY$ap7IZ9DY})&(xoTyle8^dBXbQUhPE6ehWHrfMh&0=d<)E2+pxvWo=@`^ zIk@;-$}a4zJmK;rnaC)^a1_a_ie7OE*|hYEq1<6EG>r}!XI9+(j>oe!fVBG%7d}?U z#ja?T@`XO(;q~fe2CfFm-g8FbVD;O7y9c;J)k0>#q7z-%oMy4l+ zW>V~Y?s`NoXkBeHlXg&u*8B7)B%alfYcCriYwFQWeZ6Qre!4timF`d$=YN~_fPM5Kc8P;B-WIDrg^-j=|{Szq6(TC)oa!V7y zLmMFN1&0lM`+TC$7}on;!51{d^&M`UW ztI$U4S&}_R?G;2sI)g4)uS-t}sbnRoXVwM!&vi3GfYsU?fSI5Hn2GCOJ5IpPZ%Y#+ z=l@;;{XiY_r#^RJSr?s1) z4b@ve?p5(@YTD-<%79-%w)Iv@!Nf+6F4F1`&t~S{b4!B3fl-!~58a~Uj~d4-xRt`k zsmGHs$D~Wr&+DWK$cy07NH@_z(Ku8gdSN989efXqpreBSw$I%17RdxoE<5C^N&9sk!s2b9*#}#v@O@Hgm z2|U7Gs*@hu1JO$H(Mk)%buh~*>paY&Z|_AKf-?cz6jlT-v6 zF>l9?C6EBRpV2&c1~{1$VeSA|G7T(VqyzZr&G>vm87oBq2S%H0D+RbZm}Z`t5Hf$C zFn7X*;R_D^ z#Ug0tYczRP$s!6w<27;5Mw0QT3uNO5xY($|*-DoR1cq8H9l}_^O(=g5jLnbU5*SLx zGpjfy(NPyjL`^Oln_$uI6(aEh(iS4G=$%0;n39C(iw79RlXG>W&8;R1h;oVaODw2nw^v{~`j(1K8$ z5pHKrj2wJhMfw0Sos}kyOS48Dw_~=ka$0ZPb!9=_FhfOx9NpMxd80!a-$dKOmOGDW zi$G74Sd(-u8c!%35lL|GkyxZdlYUCML{V-Ovq{g}SXea9t`pYM^ioot&1_(85oVZ6 zUhCw#HkfCg7mRT3|>99{swr3FlA@_$RnE?714^o;vps4j4}u=PfUAd zMmV3j;Rogci^f!ms$Z;gqiy7>soQwo7clLNJ4=JAyrz;=*Yhe8q7*$Du970BXW89Xyq92M4GSkNS-6uVN~Y4r7iG>{OyW=R?@DmRoi9GS^QtbP zFy2DB`|uZTv8|ow|Jcz6?C=10U$*_l2oWiacRwyoLafS!EO%Lv8N-*U8V+2<_~eEA zgPG-klSM19k%(%;3YM|>F||hE4>7GMA(GaOvZBrE{$t|Hvg(C2^PEsi4+)w#P4jE2XDi2SBm1?6NiSkOp-IT<|r}L9)4tLI_KJ*GKhv16IV}An+Jyx z=Mk`vCXkt-qg|ah5=GD;g5gZQugsv!#)$@ zkE=6=6W9u9VWiGjr|MgyF<&XcKX&S3oN{c{jt-*1HHaQgY({yjZiWW97rha^TxZy< z2%-5X;0EBP>(Y9|x*603*Pz-eMF5*#4M;F`QjTBH>rrO$r3iz5 z?_nHysyjnizhZQMXo1gz7b{p`yZ8Q78^ zFJ3&CzM9fzAqb6ac}@00d*zjW`)TBzL=s$M`X*0{z8$pkd2@#4CGyKEhzqQR!7*Lo@mhw`yNEE6~+nF3p;Qp;x#-C)N5qQD)z#rmZ#)g*~Nk z)#HPdF_V$0wlJ4f3HFy&fTB#7Iq|HwGdd#P3k=p3dcpfCfn$O)C7;y;;J4Za_;+DEH%|8nKwnWcD zBgHX)JrDRqtn(hC+?fV5QVpv1^3=t2!q~AVwMBXohuW@6p`!h>>C58%sth4+Baw|u zh&>N1`t(FHKv(P+@nT$Mvcl){&d%Y5dx|&jkUxjpUO3ii1*^l$zCE*>59`AvAja%`Bfry-`?(Oo?5wY|b4YM0lC?*o7_G$QC~QwKslQTWac z#;%`sWIt8-mVa1|2KH=u!^ukn-3xyQcm4@|+Ra&~nNBi0F81BZT$XgH@$2h2wk2W% znpo1OZuQ1N>bX52II+lsnQ`WVUxmZ?4fR_f0243_m`mbc3`?iy*HBJI)p2 z`GQ{`uS;@;e1COn-vgE2D!>EheLBCF-+ok-x5X8Cu>4H}98dH^O(VlqQwE>jlLcs> zNG`aSgDNHnH8zWw?h!tye^aN|%>@k;h`Z_H6*py3hHO^6PE1-GSbkhG%wg;+vVo&dc)3~9&` zPtZtJyCqCdrFUIEt%Gs_?J``ycD16pKm^bZn>4xq3i>9{b`Ri6yH|K>kfC; zI5l&P)4NHPR)*R0DUcyB4!|2cir(Y1&Bsn3X8v4D(#QW8Dtv@D)CCO zadQC85Zy=Rkrhm9&csynbm>B_nwMTFah9ETdNcLU@J{haekA|9*DA2pY&A|FS*L!*O+>@Q$00FeL+2lg2NWLITxH5 z0l;yj=vQWI@q~jVn~+5MG!mV@Y`gE958tV#UcO#56hn>b69 zM;lq+P@MW=cIvIXkQmKS$*7l|}AW%6zETA2b`qD*cL z(=k4-4=t6FzQo#uMXVwF{4HvE%%tGbiOlO)Q3Y6D<5W$ z9pm>%TBUI99MC`N9S$crpOCr4sWJHP)$Zg#NXa~j?WeVo03P3}_w%##A@F|Bjo-nNxJZX%lbcyQtG8sO zWKHes>38e-!hu1$6VvY+W-z?<942r=i&i<88UGWdQHuMQjWC-rs$7xE<_-PNgC z_aIqBfG^4puRkogKc%I-rLIVF=M8jCh?C4!M|Q=_kO&3gwwjv$ay{FUDs?k7xr%jD zHreor1+#e1_;6|2wGPtz$``x}nzWQFj8V&Wm8Tu#oaqM<$BLh+Xis=Tt+bzEpC}w) z_c&qJ6u&eWHDb<>p;%F_>|`0p6kXYpw0B_3sIT@!=fWHH`M{FYdkF}*CxT|`v%pvx z#F#^4tdS0|O9M1#db%MF(5Opy;i( zL(Pc2aM4*f_Bme@o{xMrsO=)&>YKQw+)P-`FwEHR4vjU>#9~X7ElQ#sRMjR^Cd)wl zg^67Bgn9CK=WP%Ar>T4J!}DcLDe z=ehSmTp##KyQ78cmArL=IjOD6+n@jHCbOatm)#4l$t5YV?q-J86T&;>lEyK&9(XLh zr{kPuX+P8LN%rd%8&&Ia)iKX_%=j`Mr*)c)cO1`-B$XBvoT3yQCDKA>8F0KL$GpHL zPe?6dkE&T+VX=uJOjXyrq$BQ`a8H@wN1%0nw4qBI$2zBx)ID^6;Ux+? zu{?X$_1hoz9d^jkDJpT-N6+HDNo%^MQ2~yqsSBJj4@5;|1@w+BE04#@Jo4I63<~?O?ok%g%vQakTJKpMsk&oeVES1>cnaF7ZkFpqN6lx` zzD+YhR%wq2DP0fJCNC}CXK`g{AA6*}!O}%#0!Tdho4ooh&a5&{xtcFmjO4%Kj$f(1 zTk||{u|*?tAT{{<)?PmD_$JVA;dw;UF+x~|!q-EE*Oy?gFIlB*^``@ob2VL?rogtP z0M34@?2$;}n;^OAV2?o|zHg`+@Adk+&@Syd!rS zWvW$e5w{onua4sp+jHuJ&olMz#V53Z5y-FkcJDz>Wk%_J>COk5<0ya*aZLZl9LH}A zJhJ`Q-n9K+c8=0`FWE^x^xn4Fa7PDUc;v2+us(dSaoIUR4D#QQh91R!${|j{)=Zy1 zG;hqgdhSklM-VKL6HNC3&B(p1B)2Nshe7)F=-HBe=8o%OhK1MN*Gq6dBuPvqDRVJ{ z;zVNY?wSB%W0s^OMR_HL(Ws)va7eWGF*MWx<1wG7hZ}o=B62D?i|&0b14_7UG287YDr%?aYMMpeCkY1i`b+H!J9sqrvKc#Y6c8At@QiLSwj)@ifz~Z|c$lOMA@?cPqFRmZ%_>bz2X4(B=`^3;MDjsEeAO=? zSoD&+L>A|fGt7+6kF2@LqhL06sD%|~YsIe=EcWqy{e_61N_D(*CacnMvyXMjP87HI z4PT6!$fzxx{}=>jeqzkkoN+!r9e|@lZUN4pn(T28v`k=_vIhTn^i9O3qTqd)-%!QQ zYB6*6B@&b(!#X4C~59SLZuorNU_wWZA36{>O%iX)VS5NNZh49C_ppI>?)wwml}_0MLzOXT>lmo#&Ew6d?mu8~~I_^4VGBQtCAke;RQa5DL` z1PFDPsKb3CS$v;RhlQ1J@AHa1VRuuxp}NOIvrC>4$$A0Ix0VpAc0lfG%8{mR{TRQ( zbXM#1Tci3H*Wt>cVuMta^6^z`=^B@j+YhJqq9?>zZPxyg2U(wvod=uwJs{8gtpyab zXHQX<0FOGW6+dw&%c_qMUOI^+Rnb?&HB7Fee|33p4#8i>%_ev(aTm7N1f#6lV%28O zQ`tQh$VDjy8x(Lh#$rg1Kco$Bw%gULq+lc4$&HFGvLMO30QBSDvZ#*~hEHVZ`5=Kw z3y^9D512@P%d~s{x!lrHeL4!TzL`9(ITC97`Cwnn8PSdxPG@0_v{No|kfu3DbtF}K zuoP+88j4dP+Bn7hlGwU$BJy+LN6g&d3HJWMAd1P9xCXG-_P)raipYg5R{KQO$j;I9 z1y1cw#13K|&kfsRZ@qQC<>j=|OC?*v1|VrY$s=2!{}e33aQcZghqc@YsHKq^)kpkg z>B;CWNX+K=u|y#N)O>n5YuyvPl5cO6B^scmG?J zC8ix)E1PlhNaw8FpD+b|D$z`Id^4)rJe78MNiBga?Z- z0$L&MRTieSB1_E#KaN*H#Ns1}?zOA%Ybr{G+Sn3moXTVZj=L`nt?D&-MjOMz-Yq&@ z$P3h23d_F8Dcf*?txX7}p>nM*s+65t z1il8bHHsBynUK|aEXSjzY6sz1nZ%|%XeWTcGLRyRl@q4YAR)JovbdTTY&7u>@}28A zgV^Npp?}I!?3K7IXu9ml-Lw;w@9m zBYTeU+Seh8uJ-w?4e_6byq0f7>O3xm(hO}Y=fgU5^vW|>0yQ^0+?}LT55ei$i zzlU-iRbd8TRX9Ept%h%ariV=%u%F@@FA>U*XdAalcH%>#5_a&w)g`uW%3}m?vP- zc5}DkuF6ruKDwEYj+2YTSQ9=rkp19U5P@(zRm(nLod(sG9{~nw1BUoS2OFDXa{xfw zZ~UaZLFUZxfQ*9?_X?*~`d;nn-BbaefLJ`DT13KF6?T5Mnt;v5d>H}s)aAIzJcs#B z|CuXPJKww}hWBKsUfks#Kh$)ptp?5U1b@ttXFRbe_BZ&_R9XC6CA4WhWhMUE9Y2H4 z{w#CBCR<)Fd1M;mx*m?Z=L-^1kv1WKtqG(BjMiR4M^5yN4rlFM6oGUS2Wf~7Z@e*- ze84Vr`Bmi!(a1y}-m^HHMpbAiKPVEv|(7=|}D#Ihfk+-S5Hlkfch02z&$(zS3vrYz2g*ic{xBy~*gIp(eG}^gMc7 zPu2Eivnp@BH3SOgx!aJXttx*()!=2)%Bf$Gs^4cCs@)=(PJNxhH5lVY&qSZYaa?A^LhZW`B9(N?fx<^gCb(VE%3QpA*_Pohgp6vCB36iVaq zc1TI%L2Le?kuv?6Dq`H+W>AqnjyEzUBK948|DB|)U0_4DzWF#7L{agwo%y$hC>->r z4|_g_6ZC!n2=GF4RqVh6$$reQ(bG0K)i9(oC1t6kY)R@DNxicxGxejwL2sB<>l#w4 zE$QkyFI^(kZ#eE5srv*JDRIqRp2Totc8I%{jWhC$GrPWVc&gE1(8#?k!xDEQ)Tu~e zdU@aD8enALmN@%1FmWUz;4p}41)@c>Fg}1vv~q>xD}KC#sF|L&FU);^Ye|Q;1#^ps z)WmmdQI2;%?S%6i86-GD88>r|(nJackvJ#50vG6fm$1GWf*f6>oBiDKG0Kkwb17KPnS%7CKb zB7$V58cTd8x*NXg=uEX8Man_cDu;)4+P}BuCvYH6P|`x-#CMOp;%u$e z&BZNHgXz-KlbLp;j)si^~BI{!yNLWs5fK+!##G;yVWq|<>7TlosfaWN-;C@oag~V`3rZM_HN`kpF`u1p# ztNTl4`j*Lf>>3NIoiu{ZrM9&E5H~ozq-Qz@Lkbp-xdm>FbHQ2KCc8WD7kt?=R*kG# z!rQ178&ZoU(~U<;lsg@n216Ze3rB2FwqjbZ=u|J?nN%<4J9(Bl(90xevE|7ejUYm9 zg@E_xX}u2d%O1mpA2XzjRwWinvSeg)gHABeMH(2!A^g@~4l%8e0WWAkBvv60Cr>TR zQB1%EQ zUoZeUdqjh+1gFo6h~C~z#A57mf5ibmq$y_uVtA_kWv8X)CzfVEooDaY!#P?5$Y zGPKXbE<75nc%D-|w4OrP#;87oL@2^4+sxKah;a-5&z_&SUf~-z(1}bP=tM^GYtR3a z!x4zjSa^)KWG6jxfUI#{<26g$iAI;o_+B{LXY@WfWEdEl6%#8s3@b`?&Tm#aSK!~| z^%DdrXnijW`d!ajWuKApw&{L+WCPpFialo&^dZ9jC7A%BO`2ZF&YUDe;Yu|zFuv`2 z)BE*7Lkay)M7uohJ)446X``0x0%PzPTWY92`1Oq4a2D_7V0wypPnXFR)WM0IlFgg@ zqz#hv2xJEQL8eu}O;e(w4rSA?5|eZHbS6jENytJBq59?bOf>Wrl8ySZH36H(6fGR#vHM6q zn}!7!I@4$*+LFXs{x?|=q2*QtYT%Lw3+5(8uc0j8o3}TrG(zSV#>4wo6~)u|R+Yx# z?0$AspZDjv{dfv417~C17Oy%Fal{%+B6H(NX`$Bl>II-L3N3 zZc+sKZbqewU*&_Xt;9k=%4*aVYBvE1n&JZS7Uqjd%n8nOQmzh^x#vWK{;In~=QO)g zT-n3OU(1@3QfL|$g1d2xeBb@O15Rl01+hmpup2De7p%Yrd$E7(In!*R+;IJZh}v!svi z;7N~pq8KZDXXap0qd_D=Y^B)rz4S0^SF=&v6YYTAV$ad43#x!+n~-6< zK{8*vWoAdW(gGGt&URD}@g6tMoY(+Lw=vvxhfIIK9AjvNF_(W}1Rxn(mp;tJfDV<0 zbJN0t(@Xb8UeO{&T{$$uDrs7)j$}=?WsuDl+T2N5Y<4TMHGOMcocPr$%~(yvtKv(n z`U96d!D0cb9>Dx2zz$m&lAhazs%UeR^K*gb>d8CPs+?qlpfA;t{InXa)^2ryC(FU(Zc6Xbnnh`lg`K&g^JeS>}^c0MJKUCfV+~ zV(EN0Z5ztoN;hqcj!8V+VRbSltJ<~|y`U+9#wv|~H zNE!j9uXa=dec@JQSgJ6N6@Il&tzCBJv9#ldR`Lm*<)YwH4tdlAlG0Fl8Nfa(J~c%DQ2AA-}x8D=p(l#n1+hgx;N;1Aq?lq@{Lt9FKu89CjnnHD1G_@p;%Lp`+b@ttb33!E_Xt;QUD9~nRQl&xAro9-{+&6^ljK2f-d>&qy&d#0xwH z@slNv@ULKp!Cf*JHuS@#4c?F->WjPc)yiuSargAIEg>muRxzY?Hzdq@G5CS)U1*Et zE2SLh=@DI1J(guiy2Igq(?(xI9WL%g^f@{5Hmr|!Qz4`vn|LjrtO=b~I6~5EU5Fxy z;-#<)6w#w=DkpSthAu+E;OL?!?6C9Mwt*o(@68(Jhvs-eX4V z=d=>HI|`3J%H5X|gSrC8KH^IL?h5=3ID6svwHH@(wRbSG`Zsor^q4`3PCn#-(YX?< z_q8+T)51$E0xyKR{L!LN(G=+9K6$3#PDT^IAe|Igkx=!4#rqKWoXiZdh`&ocjp=Ok zemJe6*{it~>;sr(B0fSmp(S#*y5I0)OOz~Oe6Im+($S}e3tyx7Y6pA8vKCBmSEQDa zLfkm*;uMbTLpcR0)tF_v-lbK%`5>POyI2E(!)2=Rj0p;WKi=|UNt6HsQv0xR3QIK9 zsew(AFyzH!7Azxum{%VC^`cqhGdGbABGQ4cYdNBPTx+XpJ=NUEDeP^e^w^AOE1pQI zP{Us-sk!v$gj}@684E!uWjzvpoF|%v-6hwnitN1sCSg@(>RDCVgU8Ile_-xX`hL6u zzI4*Q)AVu(-ef8{#~P9STQ5t|qIMRoh&S?7Oq+cL6vxG?{NUr@k(~7^%w)P6nPbDa~4Jw}*p-|cT4p1?)!c0FoB(^DNJ+FDg+LoP6=RgB7Or673WD5MG&C!4< zerd6q$ODkBvFoy*%cpHGKSt z3uDC6Sc=xvv@kDzRD)aIO`x}BaWLycA%(w-D`Pd+uL*rL|etagQ;U&xt_9?7#}=}5HI)cU-0 z%pMA`>Xb7s)|Y)4HKSZOu;{lg=KjeIyXb0{@EM`FTDkLRH`!W%z*lQJ74P%Ka76)H zblrSIzf+dMWbO`g;=(b@{pS)zUcO&GrIFe%&?YeX4r8B2bBArB%-5ZrQ+vonr%AYy z1+u0*K{UVUmV>h5vD!F;6}a%KdMZQLs04oGkpiaC)zI( zT2U9qta5o|6Y+It1)sE8>u&0)W~l$NX@ZQ8UZfB=`($EW6?FT%{EoRhOrb9)z@3r8y?Z99FNLDE;7V=Q zotj&igu*Rh^VQn3MQKBq!T{yTwGhn1YL6k*?j?{_ek5xe8#i#GG4S-a_Re2lssG!} z`Y-d0BcOdB@!m?4y&hMN68}#0-IIlm_xO)d#}ugX{q^OZe{-@LeJyv`cY&ze4t2~! zKb{qX-j;kt{?gC(vW%}X4pm@1F?~LH{^Q8d@X$dy@5ff~p!J3zmA>H`A)y+6RB_h* zZfIO+bd=*LiymRw{asW%xxaVl33_xtdVrrqIPn zc@y8oMJvNtgcO~4i0`f)GCFkWY8EF?4duLVjHTdb6oYLnO9}Q-pe{CKQJL)hV8)JI z$mVA0Dq&7Z1TbYdSC(WbJ+IBjXngZTu&I+vHF|>Zo$757{8lL;8Zr-Exkf?3jzN5k z_d9I>{>^J?!l)< zNd$7E9FVrta}3qy3L7Ys$^fRWNuu^hs^{*eXvazd&+Q*?lTfc>2+EdP(o0P_Z05HX zVKsfFAQ{t^CRu~Dw(CuJ>tvx*p$5@flA>QRl455b&{*U?xU8`)nF2T$uu_(l8VNtq z?pBiRQIckGzk8W&SFSB=g6eG`ZC;6v9w`?eF*S}3E@N`2ropeHP)E}o?qJkyVEI;K$!)bWY zt9>4WmDVJh7U~m$|K`T#hF!v|znj^=M;69uXrFys#51XT;DbMr4H)>7UQ1e2(cuQf z4kr~Tt1tpBB2GaJ(|j~lHgW40EgMMVqR6eJoJig1SBg|2=$~4I3P0eP$q%_`sS&4~ z26=&a&tLjQbch1`cVXa-2fTl1y8}->|Nqu?uVrNTov!=VKh)g89wUPTgAzkSKZ57_ zr=B^mcldE3K04t4{;RaG53&9yovq;@aR#VHx+R1^^*kr-vEEd!uea68Z<{R%_DD6fn&T4 zu;fDj07L-(_fLSJGdkeh&c&7A(ZLj`7iwnkAcqUexU;WjUkqeg1m1-IUZTIZA(4dtr2Gr`e{BIejlCgS<33MB=1!8?a74!F%=Uo7N`F@k} ze+1C_eU4Y_$mvdjci zwEtCIphA2PBzBhng5=M#e4r%)RW5rVD|_`PvY$7BK`}w~d>%0O9sY#*LUAq=^OjMF^PY5m<7!=s5jyRfosCQAo#hL`h5vN-M}6Q z0Li}){5?wi8)GVHNkF|U9*8V5ej)nhb^TLw1KqiPK(@{P1^L&P=`ZNt?_+}&0(8Uh zfyyZFPgMV7ECt;Jdw|`|{}b$w4&x77VxR>8wUs|GQ5FBf1UlvasqX$qfk5rI4>Wfr zztH>y`=daAef**C12yJ7;LDf&3;h3X+5@dGPy@vS(RSs3CWimbTp=g queryParams = new HashMap<>(); - try { - mFoundCollectionResource.get( - "", - OcPlatform.DEFAULT_INTERFACE, - queryParams, - this - ); - } catch (OcException e) { - Log.e(TAG, e.toString()); - msg("Error occurred while invoking \"get\" API"); - } - } - - printLine(); - enableStartStopButton(); - } - - /** - * An event handler to be executed whenever a "get" request completes successfully - * - * @param list list of the header options - * @param representation representation of a resource - */ - @Override - public void onGetCompleted(List list, OcRepresentation representation) { - msg("Representation of a light collection resource:"); - for (OcRepresentation childRepresentation : representation.getChildren()) { - msg("\t\tURI: " + childRepresentation.getUri()); - } - } - - /** - * An event handler to be executed whenever a "get" request fails - * - * @param throwable exception - */ - @Override - public synchronized void onGetFailed(Throwable throwable) { - if (throwable instanceof OcException) { - OcException ocEx = (OcException) throwable; - Log.e(TAG, ocEx.toString()); - ErrorCode errCode = ocEx.getErrorCode(); - //do something based on errorCode - msg("Error code: " + errCode); - } - msg("Failed to get representation of a found collection resource"); - } - - /** - * A local method to reset group client - */ - private synchronized void stopGroupClient() { - mFoundCollectionResource = null; - - msg("Group Client is reset."); - printLine(); - - enableStartStopButton(); - } - - //****************************************************************************** - // End of the OIC specific code - //****************************************************************************** - - private final static String TAG = GroupClient.class.getSimpleName(); - private TextView mConsoleTextView; - private ScrollView mScrollView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_group_client); - - mConsoleTextView = (TextView) findViewById(R.id.consoleTextView); - mConsoleTextView.setMovementMethod(new ScrollingMovementMethod()); - mScrollView = (ScrollView) findViewById(R.id.scrollView); - mScrollView.fullScroll(View.FOCUS_DOWN); - final ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggleButton); - - if (null == savedInstanceState) { - toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - toggleButton.setEnabled(false); - if (isChecked) { - new Thread(new Runnable() { - public void run() { - startGroupClient(); - } - }).start(); - } else { - new Thread(new Runnable() { - public void run() { - stopGroupClient(); - } - }).start(); - } - } - }); - } else { - String consoleOutput = savedInstanceState.getString("consoleOutputString"); - mConsoleTextView.setText(consoleOutput); - boolean buttonCheked = savedInstanceState.getBoolean("toggleButtonChecked"); - toggleButton.setChecked(buttonCheked); - } - } - - @Override - protected void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putString("consoleOutputString", mConsoleTextView.getText().toString()); - ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggleButton); - outState.putBoolean("toggleButtonChecked", toggleButton.isChecked()); - } - - @Override - protected void onRestoreInstanceState(Bundle savedInstanceState) { - super.onRestoreInstanceState(savedInstanceState); - - String consoleOutput = savedInstanceState.getString("consoleOutputString"); - mConsoleTextView.setText(consoleOutput); - - final ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggleButton); - boolean buttonCheked = savedInstanceState.getBoolean("toggleButtonChecked"); - toggleButton.setChecked(buttonCheked); - } - - private void msg(final String text) { - runOnUiThread(new Runnable() { - public void run() { - mConsoleTextView.append("\n"); - mConsoleTextView.append(text); - mScrollView.fullScroll(View.FOCUS_DOWN); - } - }); - Log.i(TAG, text); - } - - private void printLine() { - msg("------------------------------------------------------------------------"); - } - - private void sleep(int seconds) { - try { - Thread.sleep(seconds * 1000); - } catch (InterruptedException e) { - e.printStackTrace(); - Log.e(TAG, e.toString()); - } - } - - private void enableStartStopButton() { - runOnUiThread(new Runnable() { - public void run() { - ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggleButton); - toggleButton.setEnabled(true); - } - }); - } -} diff --git a/java/examples-java/groupserver/.gitignore b/java/examples-java/groupserver/.gitignore deleted file mode 100644 index 796b96d..0000000 --- a/java/examples-java/groupserver/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/java/examples-java/groupserver/build.gradle b/java/examples-java/groupserver/build.gradle deleted file mode 100644 index 0e83140..0000000 --- a/java/examples-java/groupserver/build.gradle +++ /dev/null @@ -1,37 +0,0 @@ -apply plugin: 'com.android.application' - -android { - compileSdkVersion 21 - buildToolsVersion "20.0.0" - - defaultConfig { - applicationId "org.iotivity.base.examples.groupserver" - minSdkVersion 21 - targetSdkVersion 21 - versionCode 1 - versionName "1.0" - } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } - lintOptions { - abortOnError false - } -} -repositories { - flatDir { - dirs "../../android_api/base/build/outputs/aar/" - } -} - -try { - dependencies { - compile ":iotivity-base-${TARGET_ARCH}-${RELEASE}@aar" - } -} catch (all) { - print "${ERROR_MSG}" - assert all -} diff --git a/java/examples-java/groupserver/src/main/java/org/iotivity/base/examples/GroupServer.java b/java/examples-java/groupserver/src/main/java/org/iotivity/base/examples/GroupServer.java deleted file mode 100644 index 3aab27a..0000000 --- a/java/examples-java/groupserver/src/main/java/org/iotivity/base/examples/GroupServer.java +++ /dev/null @@ -1,333 +0,0 @@ -/* - ******************************************************************* - * - * 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; - -import android.app.Activity; -import android.content.Context; -import android.os.Bundle; -import android.text.method.ScrollingMovementMethod; -import android.util.Log; -import android.view.View; -import android.widget.CompoundButton; -import android.widget.ScrollView; -import android.widget.TextView; -import android.widget.ToggleButton; - -import org.iotivity.base.ModeType; -import org.iotivity.base.OcConnectivityType; -import org.iotivity.base.OcException; -import org.iotivity.base.OcPlatform; -import org.iotivity.base.OcResource; -import org.iotivity.base.OcResourceHandle; -import org.iotivity.base.PlatformConfig; -import org.iotivity.base.QualityOfService; -import org.iotivity.base.ResourceProperty; -import org.iotivity.base.ServiceType; - -import java.util.EnumSet; -import java.util.LinkedList; -import java.util.List; - -/** - * GroupServer - */ -public class GroupServer extends Activity implements OcPlatform.OnResourceFoundListener { - - private OcResourceHandle mCollectionResourceHandle; - private List mProxyResourceHandleList = new LinkedList<>(); - - /** - * A local method to configure and initialize platform, register a collection resource - * and then search for the light resources.In addition it creates a local light resource and - * adds it to the collection. - */ - private synchronized void startGroupServer() { - Context context = this; - - PlatformConfig platformConfig = new PlatformConfig( - context, - ServiceType.IN_PROC, - ModeType.CLIENT_SERVER, - "0.0.0.0", 0, - QualityOfService.LOW - ); - - msg("Configuring platform."); - OcPlatform.Configure(platformConfig); - - String resourceUri = "/core/a/collection"; - String resourceTypeName = "a.collection"; - msg("Registering a collection resource."); - try { - mCollectionResourceHandle = OcPlatform.registerResource( - resourceUri, //resource URI - resourceTypeName, //resource type name - OcPlatform.BATCH_INTERFACE, //using batch interface - null, //use default entity handler - EnumSet.of(ResourceProperty.DISCOVERABLE) - ); - } catch (OcException e) { - Log.e(TAG, e.toString()); - msg("Failed to register a collection resource"); - } - - if (null != mCollectionResourceHandle) { - try { - OcPlatform.bindInterfaceToResource( - mCollectionResourceHandle, - OcPlatform.GROUP_INTERFACE); - - OcPlatform.bindInterfaceToResource( - mCollectionResourceHandle, - OcPlatform.DEFAULT_INTERFACE); - } catch (OcException e) { - e.printStackTrace(); - } - - } - - msg("Sending request to find all resources with \"core.light\" type name"); - try { - OcPlatform.findResource( - "", - OcPlatform.WELL_KNOWN_QUERY + "?rt=core.light", - EnumSet.of(OcConnectivityType.CT_DEFAULT), - this); - - } catch (OcException e) { - Log.e(TAG, e.toString()); - msg("Failed to invoke find resource API"); - } - - OcResourceHandle localLightResourceHandle = null; - msg("Registering a local light resource"); - try { - localLightResourceHandle = OcPlatform.registerResource( - "/a/light/local", //resource URI - "core.light", //resource type name - OcPlatform.DEFAULT_INTERFACE, //using default interface - null, //use default entity handler - EnumSet.of(ResourceProperty.DISCOVERABLE) - ); - } catch (OcException e) { - Log.e(TAG, e.toString()); - msg("Failed to register a local ligh resource"); - } - - if (null != localLightResourceHandle) { - msg("Binding a found resource proxy handle to the collection resource"); - try { - OcPlatform.bindResource(mCollectionResourceHandle, localLightResourceHandle); - } catch (OcException e) { - Log.e(TAG, e.toString()); - msg("Failed to bind found resource proxy handle to the collection resource"); - } - mProxyResourceHandleList.add(localLightResourceHandle); - } - - printLine(); - } - - /** - * An event handler to be executed whenever a "findResource" request completes successfully - * - * @param foundResource found resource - */ - @Override - public synchronized void onResourceFound(OcResource foundResource) { - if (null == foundResource) { - msg("Found resource is invalid"); - return; - } - msg("Found resource with \"core.light\" type name\"."); - // Get the resource host address - String hostAddress = foundResource.getHost(); - // Get the resource URI - String resourceUri = foundResource.getUri(); - msg("\tHost address of the resource: " + hostAddress); - msg("\tURI of the resource: " + resourceUri); - // Get the resource types - msg("\tList of resource types: "); - for (String resourceType : foundResource.getResourceTypes()) { - msg("\t\t" + resourceType); - } - msg("\tList of resource interfaces:"); - for (String resourceInterface : foundResource.getResourceInterfaces()) { - msg("\t\t" + resourceInterface); - } - msg("\tList of resource connectivity types:"); - for (OcConnectivityType connectivityType : foundResource.getConnectivityTypeSet()) { - msg("\t\t" + connectivityType); - } - - //In this example we are only interested in the light resources - if (resourceUri.equals("/a/light")) { - msg("Registering a found resource as a local proxy resource"); - OcResourceHandle proxyResourceHandle = null; - try { - proxyResourceHandle = OcPlatform.registerResource(foundResource); - } catch (OcException e) { - Log.e(TAG, e.toString()); - msg("Failed to register a found resource as a local proxy resource"); - } - - if (null != proxyResourceHandle) { - msg("Binding a found resource proxy handle to the collection resource"); - try { - OcPlatform.bindResource(mCollectionResourceHandle, proxyResourceHandle); - } catch (OcException e) { - Log.e(TAG, e.toString()); - msg("Failed to bind found resource proxy handle to the collection resource"); - } - mProxyResourceHandleList.add(proxyResourceHandle); - } - } - - printLine(); - enableStartStopButton(); - } - - /** - * A local method to reset group server - */ - private synchronized void stopGroupServer() { - msg("Unregistering resources"); - for (OcResourceHandle proxyResourceHandle : mProxyResourceHandleList) { - try { - OcPlatform.unbindResource(mCollectionResourceHandle, proxyResourceHandle); - } catch (OcException e) { - Log.e(TAG, e.toString()); - msg("Failed to unbind a proxy resource"); - } - try { - OcPlatform.unregisterResource(proxyResourceHandle); - } catch (OcException e) { - Log.e(TAG, e.toString()); - msg("Failed to unregister a proxy resource"); - } - } - mProxyResourceHandleList.clear(); - - if (null != mCollectionResourceHandle) { - try { - OcPlatform.unregisterResource(mCollectionResourceHandle); - } catch (OcException e) { - Log.e(TAG, e.toString()); - msg("Failed to unregister a collection resource"); - } - } - msg("Group Server is reset."); - - printLine(); - enableStartStopButton(); - } - - //****************************************************************************** - // End of the OIC specific code - //****************************************************************************** - - private final static String TAG = GroupServer.class.getSimpleName(); - private TextView mConsoleTextView; - private ScrollView mScrollView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_group_server); - - mConsoleTextView = (TextView) findViewById(R.id.consoleTextView); - mConsoleTextView.setMovementMethod(new ScrollingMovementMethod()); - mScrollView = (ScrollView) findViewById(R.id.scrollView); - mScrollView.fullScroll(View.FOCUS_DOWN); - final ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggleButton); - - if (null == savedInstanceState) { - toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - toggleButton.setEnabled(false); - if (isChecked) { - new Thread(new Runnable() { - public void run() { - startGroupServer(); - } - }).start(); - } else { - new Thread(new Runnable() { - public void run() { - stopGroupServer(); - } - }).start(); - } - } - }); - } else { - String consoleOutput = savedInstanceState.getString("consoleOutputString"); - mConsoleTextView.setText(consoleOutput); - boolean buttonCheked = savedInstanceState.getBoolean("toggleButtonChecked"); - toggleButton.setChecked(buttonCheked); - } - } - - @Override - protected void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putString("consoleOutputString", mConsoleTextView.getText().toString()); - ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggleButton); - outState.putBoolean("toggleButtonChecked", toggleButton.isChecked()); - } - - @Override - protected void onRestoreInstanceState(Bundle savedInstanceState) { - super.onRestoreInstanceState(savedInstanceState); - - String consoleOutput = savedInstanceState.getString("consoleOutputString"); - mConsoleTextView.setText(consoleOutput); - - final ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggleButton); - boolean buttonCheked = savedInstanceState.getBoolean("toggleButtonChecked"); - toggleButton.setChecked(buttonCheked); - } - - private void msg(final String text) { - runOnUiThread(new Runnable() { - public void run() { - mConsoleTextView.append("\n"); - mConsoleTextView.append(text); - mScrollView.fullScroll(View.FOCUS_DOWN); - } - }); - Log.i(TAG, text); - } - - private void printLine() { - msg("------------------------------------------------------------------------"); - } - - private void enableStartStopButton() { - runOnUiThread(new Runnable() { - public void run() { - ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggleButton); - toggleButton.setEnabled(true); - } - }); - } -} \ No newline at end of file diff --git a/java/examples-java/guiclient/.gitignore b/java/examples-java/guiclient/.gitignore deleted file mode 100644 index c795b05..0000000 --- a/java/examples-java/guiclient/.gitignore +++ /dev/null @@ -1 +0,0 @@ -build \ No newline at end of file diff --git a/java/examples-java/guiclient/build.gradle b/java/examples-java/guiclient/build.gradle deleted file mode 100644 index 9aec23e..0000000 --- a/java/examples-java/guiclient/build.gradle +++ /dev/null @@ -1,25 +0,0 @@ -//apply plugin: 'com.android.application' -// -//android { -// compileSdkVersion 21 -// buildToolsVersion "21.1.1" -// -// defaultConfig { -// applicationId "org.iotivity.guiclient" -// minSdkVersion 19 -// targetSdkVersion 21 -// versionCode 1 -// versionName "1.0" -// } -// buildTypes { -// release { -// minifyEnabled false -// proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' -// } -// } -//} -// -//dependencies { -// compile fileTree(dir: 'libs', include: ['*.jar']) -// compile 'com.android.support:appcompat-v7:21.0.2' -//} diff --git a/java/examples-java/guiclient/src/main/java/org/iotivity/guiclient/ExpandableResourceListAdapter.java b/java/examples-java/guiclient/src/main/java/org/iotivity/guiclient/ExpandableResourceListAdapter.java deleted file mode 100644 index 000913d..0000000 --- a/java/examples-java/guiclient/src/main/java/org/iotivity/guiclient/ExpandableResourceListAdapter.java +++ /dev/null @@ -1,382 +0,0 @@ -//****************************************************************** -// -// Copyright 2014 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.guiclient; - -import android.content.Context; -import android.media.Image; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.BaseExpandableListAdapter; -import android.widget.CompoundButton; -import android.widget.ImageView; -import android.widget.ProgressBar; -import android.widget.SeekBar; -import android.widget.Switch; -import android.widget.TextView; - -import java.util.List; - -import static org.iotivity.guiclient.OcAttributeInfo.OC_ATTRIBUTE_TYPE; -import static org.iotivity.guiclient.OcProtocolStrings.AMBIENT_LIGHT_RESOURCE_URI; -import static org.iotivity.guiclient.OcProtocolStrings.LIGHT_RESOURCE_URI; -import static org.iotivity.guiclient.OcProtocolStrings.PLATFORM_LED_RESOURCE_URI; -import static org.iotivity.guiclient.OcProtocolStrings.ROOM_TEMPERATURE_RESOURCE_URI; - -/** - * ExpandableResourceListAdapter knows how to render an ExpandableListView, using a - * List of OcResourceInfo objects as the parents of the ExpandableListView, - * and OcAttributeInfo objects as the children. - * - * @see org.iotivity.guiclient.OcAttributeInfo - */ -public class ExpandableResourceListAdapter extends BaseExpandableListAdapter { - /** - * Hardcoded TAG... if project never uses proguard then - * MyOcClient.class.getName() is the better way. - */ - private static final String TAG = "ExpandableResourceListAdapter"; - - private static final boolean LOCAL_LOGV = true; // set to false to compile out verbose logging - - private List resourceList; - private Context ctx; - - public ExpandableResourceListAdapter(List resourceList, Context ctx) { - this.resourceList = resourceList; - this.ctx = ctx; - } - - @Override - public Object getChild(int groupPosition, int childPosition) { - return resourceList.get(groupPosition).getAttributes().get(childPosition); - } - - @Override - public int getChildrenCount(int groupPosition) { - return resourceList.get(groupPosition).getAttributes().size(); - } - - @Override - public long getChildId(int groupPosition, int childPosition) { - return resourceList.get(groupPosition).getAttributes().get(childPosition).hashCode(); - } - - @Override - public int getChildType(int groupPosition, int childPosition) { - return this.resourceList.get(groupPosition).getAttributes().get(childPosition) - .getType().ordinal(); - } - - @Override - public int getChildTypeCount() { - return OC_ATTRIBUTE_TYPE.values().length; - } - - @Override - public View getChildView(final int groupPosition, int childPosition, - boolean isLastChild, View convertView, ViewGroup parent) { - View v = convertView; - if (v == null) { - LayoutInflater inflater = (LayoutInflater)ctx.getSystemService - (Context.LAYOUT_INFLATER_SERVICE); - switch(OC_ATTRIBUTE_TYPE.fromInt(getChildType(groupPosition, childPosition))) { - case AMBIENT_LIGHT_SENSOR_READING: - case ROOM_TEMPERATURE_SENSOR_READING: - v = inflater.inflate(R.layout.attribute_layout_progress_bar, parent, false); - break; - case LIGHT_DIMMER: - v = inflater.inflate(R.layout.attribute_layout_slider, parent, false); - break; - case LIGHT_SWITCH: - case PLATFORM_LED_SWITCH: - v = inflater.inflate(R.layout.attribute_layout_on_off_switch, parent, false); - break; - } - } - - OcAttributeInfo attribute = - resourceList.get(groupPosition).getAttributes().get(childPosition); - - // All attribute icons and names are currently treated the same so we handle them outside - // the type-specific inflater functions - ImageView attributeIcon = (ImageView) v.findViewById(R.id.attribute_icon_id); - attributeIcon.setVisibility(View.VISIBLE); - TextView attributeName = (TextView) v.findViewById(R.id.attribute_name_id); - attributeName.setText(getAttributeLabelFromType(attribute.getType())); - attributeName.setVisibility(View.VISIBLE); - - // Now inflate the rest of the layout in a type-specific way - switch(attribute.getType()){ - case AMBIENT_LIGHT_SENSOR_READING: - this.renderAmbientLightSensorReading(v, groupPosition, attribute); - break; - case LIGHT_DIMMER: - this.renderLightDimmer(v, groupPosition, attribute); - break; - case LIGHT_SWITCH: - this.renderLightSwitch(v, groupPosition, attribute); - break; - case PLATFORM_LED_SWITCH: - this.renderPlatformLedSwitch(v, groupPosition, attribute); - break; - case ROOM_TEMPERATURE_SENSOR_READING: - this.renderRoomTemperatureSensorReading(v, groupPosition, attribute); - break; - } - - return v; - } - - @Override - public Object getGroup(int groupPosition) { - return resourceList.get(groupPosition); - } - - @Override - public int getGroupCount() { - return resourceList.size(); - } - - @Override - public long getGroupId(int groupPosition) { - return resourceList.get(groupPosition).hashCode(); - } - - @Override - public View getGroupView(int groupPosition, boolean isExpanded, - View convertView, ViewGroup parent) { - - View v = convertView; - - if (v == null) { - LayoutInflater inflater = (LayoutInflater)ctx.getSystemService - (Context.LAYOUT_INFLATER_SERVICE); - v = inflater.inflate(R.layout.resource_list_item_layout, parent, false); - } - - TextView resourceName = (TextView) v.findViewById(R.id.resource_name_id); - TextView resourceDescription = (TextView) v.findViewById(R.id.resource_description_id); - ImageView resourceIcon = (ImageView) v.findViewById(R.id.resource_icon_id); - - OcResourceInfo resource = resourceList.get(groupPosition); - - resourceName.setText(this.getResourceLabelFromType(resource.getType())); - resourceDescription.setText(resource.getHost()+resource.getUri()); - switch (resource.getType()) { - case AMBIENT_LIGHT_SENSOR: - resourceIcon.setImageResource(R.drawable.iotivity_hex_icon); - break; - case LIGHT: - resourceIcon.setImageResource(R.drawable.light_icon); - break; - case PLATFORM_LED: - resourceIcon.setImageResource(R.drawable.led_icon); - break; - case ROOM_TEMPERATURE_SENSOR: - resourceIcon.setImageResource(R.drawable.thermometer_icon); - break; - default: - resourceIcon.setImageResource(R.drawable.iotivity_hex_icon); - break; - } - - return v; - } - - @Override - public boolean hasStableIds() { - return true; - } - - @Override - public boolean isChildSelectable(int groupPosition, int childPosition) { - return true; - } - - /** - * Type-specific layout render for Ambient Light Sensor reading attribute. - */ - private void renderAmbientLightSensorReading(final View view, - final int groupPosition, - final OcAttributeInfo attribute) { - // Render attributeValue - TextView attributeValue = (TextView) view.findViewById(R.id.attribute_value_id); - attributeValue.setText(String.valueOf(attribute.getValueInt())); - attributeValue.setVisibility(View.VISIBLE); - - // Render progressBar - ProgressBar progressBar = (ProgressBar) view.findViewById(R.id.attribute_progress_bar); - progressBar.setMax(100); // display as percent from 0-100 - progressBar.setProgress(attribute.getValueAsPercentOfMax()); - progressBar.setVisibility(View.VISIBLE); - } - - /** - * Type-specific layout render for Light Dimmer attribute. - */ - private void renderLightDimmer(final View view, - final int groupPosition, - final OcAttributeInfo attribute) { - // Render attributeValue - TextView attributeValue = (TextView) view.findViewById(R.id.attribute_value_id); - attributeValue.setText(String.valueOf(attribute.getValueInt())); - attributeValue.setVisibility(View.VISIBLE); - - // Render SeekBar - SeekBar slider = (SeekBar) view.findViewById(R.id.attribute_slider); - slider.setMax(attribute.getValueMax()); - slider.setProgress(attribute.getValueInt()); - slider.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { - private int mSliderVal; - @Override - public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { - if (LOCAL_LOGV) Log.v(TAG, String.format("onProgressChanged(%s)", progress)); - this.mSliderVal = progress; - } - @Override - public void onStartTrackingTouch(SeekBar seekBar) {} - @Override - public void onStopTrackingTouch(SeekBar seekBar) { - if (LOCAL_LOGV) Log.v(TAG, "onStopTrackingTouch()"); - if(ctx instanceof MainActivity) { - // call MainActivity - ((MainActivity) ctx).setLightDimmerLevel(resourceList.get(groupPosition), - this.mSliderVal); - } - } - }); - slider.setVisibility(View.VISIBLE); - } - - /** - * Type-specific layout render for Light Switch attribute. - */ - private void renderLightSwitch(final View view, - final int groupPosition, - final OcAttributeInfo attribute) { - // Render attributeValue - TextView attributeValue = (TextView) view.findViewById(R.id.attribute_value_id); - if(false == attribute.getValueBool()) { - attributeValue.setText("off"); - } else { - attributeValue.setText("on"); - } - attributeValue.setVisibility(View.VISIBLE); - - // Render Switch - Switch toggleSwitch = (Switch) view.findViewById(R.id.attribute_switch); - toggleSwitch.setText(this.ctx.getString(R.string.oc_light_switch_toggle_text)); - toggleSwitch.setChecked(attribute.getValueBool()); - toggleSwitch.setOnCheckedChangeListener(new Switch.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - if (LOCAL_LOGV) Log.v(TAG, String.format("onCheckedChanged(%s)", isChecked)); - if(ctx instanceof MainActivity) { - // call MainActivity - ((MainActivity) ctx).toggleLightSwitch(resourceList.get(groupPosition), - isChecked); - } - } - }); - toggleSwitch.setVisibility(View.VISIBLE); - } - - /** - * Type-specific layout render for LED Switch attribute. - */ - private void renderPlatformLedSwitch(final View view, - final int groupPosition, - final OcAttributeInfo attribute) { - // Render attributeValue - TextView attributeValue = (TextView) view.findViewById(R.id.attribute_value_id); - if(1 == attribute.getValueInt()) { - attributeValue.setText("on"); - } else { - attributeValue.setText("off"); - } - attributeValue.setVisibility(View.VISIBLE); - - // Render Switch - Switch toggleSwitch = (Switch) view.findViewById(R.id.attribute_switch); - toggleSwitch.setText(this.ctx.getString(R.string.oc_led_switch_toggle_text)); - toggleSwitch.setChecked(1 == attribute.getValueInt()); - toggleSwitch.setOnCheckedChangeListener( new Switch.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - if (LOCAL_LOGV) Log.v(TAG, String.format("onCheckedChanged(%s)", isChecked)); - if(ctx instanceof MainActivity) { - // call MainActivity - ((MainActivity) ctx).toggleLedSwitch(resourceList.get(groupPosition), - isChecked); - } - } - }); - toggleSwitch.setVisibility(View.VISIBLE); - } - - /** - * Type-specific layout render for Room Temperature Sensor Reading attribute. - */ - private void renderRoomTemperatureSensorReading(final View view, - final int groupPosition, - final OcAttributeInfo attribute) { - // this happens to have the same behavior as ambient light sensor, so just re-use - this.renderAmbientLightSensorReading(view, groupPosition, attribute); - } - - private String getAttributeLabelFromType(OC_ATTRIBUTE_TYPE type) { - switch (type) { - case AMBIENT_LIGHT_SENSOR_READING: - return ctx.getString(R.string.ui_attribute_label_ambient_light_sensor_reading); - case LIGHT_DIMMER: - return ctx.getString(R.string.ui_attribute_label_light_dimmer); - case LIGHT_SWITCH: - return ctx.getString(R.string.ui_attribute_label_light_switch); - case PLATFORM_LED_SWITCH: - return ctx.getString(R.string.ui_attribute_label_led_switch); - case ROOM_TEMPERATURE_SENSOR_READING: - return ctx.getString(R.string.ui_attribute_label_room_temperature_sensor_reading); - default: - Log.w(TAG, "getAttributeLabelFromType(): unrecognized attribute type."); - return "Attribute:"; - } - } - - private String getResourceLabelFromType(OcResourceInfo.OC_RESOURCE_TYPE type) { - if (LOCAL_LOGV) Log.v(TAG, "getResourceLabelFromType()"); - - switch(type) { - case AMBIENT_LIGHT_SENSOR: - return ctx.getString(R.string.ui_resource_label_ambient_light_sensor); - case LIGHT: - return ctx.getString(R.string.ui_resource_label_light); - case PLATFORM_LED: - return ctx.getString(R.string.ui_resource_label_platform_led); - case ROOM_TEMPERATURE_SENSOR: - return ctx.getString(R.string.ui_resource_label_room_temperature_sensor); - default: - Log.w(TAG, "getResourceLabelFromType(): unrecognized resource type."); - return "Resource:"; - } - } -} diff --git a/java/examples-java/guiclient/src/main/java/org/iotivity/guiclient/MainActivity.java b/java/examples-java/guiclient/src/main/java/org/iotivity/guiclient/MainActivity.java deleted file mode 100644 index 375b158..0000000 --- a/java/examples-java/guiclient/src/main/java/org/iotivity/guiclient/MainActivity.java +++ /dev/null @@ -1,336 +0,0 @@ -//****************************************************************** -// -// Copyright 2014 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.guiclient; - -import android.app.AlertDialog; -import android.content.DialogInterface; -import android.support.v7.app.ActionBarActivity; -import android.os.Bundle; -import android.util.Log; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.widget.ExpandableListView; -import android.widget.ProgressBar; - -import java.util.ArrayList; -import java.util.List; - -import static org.iotivity.guiclient.OcAttributeInfo.OC_ATTRIBUTE_TYPE.LIGHT_DIMMER; -import static org.iotivity.guiclient.OcAttributeInfo.OC_ATTRIBUTE_TYPE.LIGHT_SWITCH; -import static org.iotivity.guiclient.OcAttributeInfo.OC_ATTRIBUTE_TYPE.PLATFORM_LED_SWITCH; -import static org.iotivity.guiclient.R.id.expandableResourceListView; - -/** - * MainActivity instantiates a ExpandableListView of type ExpandableResourceListView, and - * also creates and starts a OcWorker object to handle the IoTivity specific work. - * - * @see org.iotivity.guiclient.OcWorker - * @see org.iotivity.guiclient.OcWorkerListener - * @see org.iotivity.guiclient.ExpandableResourceListAdapter - */ -public class MainActivity - extends ActionBarActivity - implements OcWorkerListener, View.OnClickListener, ExpandableListView.OnChildClickListener { - /** - * Hardcoded TAG... if project never uses proguard then - * MyOcClient.class.getName() is the better way. - */ - private static final String TAG = "MainActivity"; - - private static final boolean LOCAL_LOGV = true; // set to false to compile out verbose logging - - /** - * The data structure behind the displayed List of resources and attributes. - */ - private List mResourceList; - - /** - * The custom adapter for displaying the ResourceListItem List - */ - private ExpandableResourceListAdapter mResourceListAdapter; - - /** - * The OIC-aware worker class which does all the OIC API interaction - * and handles the results, notifying MainActivity whenever an event - * requires a UI update. - */ - private OcWorker mOcWorker; - - /** - * Preserve a ref to Action Bar Menu for changing progress icon - */ - private Menu optionsMenu; - - @Override - protected void onCreate(Bundle savedInstanceState) { - if (LOCAL_LOGV) Log.v(TAG, "onCreate()"); - - super.onCreate(savedInstanceState); - - setContentView(R.layout.activity_main); - - // start the OcWorker thread and register as a listener - if(null == this.mOcWorker) { - this.mOcWorker = new OcWorker(this); - this.mOcWorker.start(); // configures the OIC platform and wait for further calls - this.mOcWorker.registerListener(this); - } - - // init the Resource display list - if(null == this.mResourceList) { - this.mResourceList = new ArrayList<>(); - } - - // init the ListView Adapter - if(null == this.mResourceListAdapter) { - this.mResourceListAdapter = new ExpandableResourceListAdapter(this.mResourceList, - this); - } - - // init the Expandable List View - ExpandableListView exListView = - (ExpandableListView) findViewById(expandableResourceListView); - exListView.setIndicatorBounds(5, 5); - exListView.setIndicatorBounds(0, 20); - exListView.setAdapter(this.mResourceListAdapter); - exListView.setOnChildClickListener(this); - } - - @Override - public void onRestoreInstanceState(Bundle savedInstanceState) { - if (LOCAL_LOGV) Log.v(TAG, "onRestoreInstanceState()"); - } - - @Override - public void onSaveInstanceState(Bundle outState) { - if (LOCAL_LOGV) Log.v(TAG, "onSaveInstanceState()"); - } - - @Override - public void onClick(View v) { - if (LOCAL_LOGV) Log.v(TAG, "onClick()"); - - this.setRefreshActionButtonState(false); - } - - @Override - public boolean onChildClick(ExpandableListView parent, - View v, - int groupPosition, - int childPosition, - long id) { - if (LOCAL_LOGV) Log.v(TAG, "onChildClick()"); - - this.mOcWorker.doGetResource(mResourceList.get(groupPosition)); - - return false; - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - if (LOCAL_LOGV) Log.v(TAG, "onCreateOptionsMenu()"); - - // save a reference for use in controlling refresh icon later - this.optionsMenu = menu; - - // Inflate the menu; this adds items to the action bar if it is present. - getMenuInflater().inflate(R.menu.menu_main, menu); - - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - if (LOCAL_LOGV) Log.v(TAG, String.format("onOptionsItemSelected(%s)", item.toString())); - // Handle action bar item clicks here. The action bar will - // automatically handle clicks on the Home/Up button, so long - // as you specify a parent activity in AndroidManifest.xml. - int id = item.getItemId(); - - // Handle the "settings" icon/text click - if (id == R.id.action_settings) { - return true; - } - - // Handle the "developer test" icon/text click - if (id == R.id.action_test) { - return true; - } - - // Handle the trash can "discard" icon click - if (id == R.id.action_discard) { - AlertDialog diaBox = confirmDiscard(); - diaBox.show(); - } - - // Handle the refresh/progress icon click - if (id == R.id.action_refresh) { - // show the indeterminate progress bar - this.setRefreshActionButtonState(true); - // use OcWorker to discover resources - this.mOcWorker.doDiscoverResources(); - } - - return super.onOptionsItemSelected(item); - } - - /** - * Handle a resource changed callback from OcWorker by posting a runnable to our - * own UI-safe looper/handler - */ - @Override - public void onResourceChanged(final OcResourceInfo resourceInfo) { - if (LOCAL_LOGV) Log.v(TAG, "onResourceChanged()"); - - runOnUiThread(new Runnable() { - @Override - public void run() { - // in case we were waiting for a refresh, hide the indeterminate progress bar - setRefreshActionButtonState(false); - - mResourceListAdapter.notifyDataSetChanged(); - } - }); - } - - /** - * Handle a new resource found callback from OcWorker by posting a runnable to our - * own UI-safe looper/handler - */ - @Override - public void onResourceFound(final OcResourceInfo resourceInfo) { - if (LOCAL_LOGV) Log.v(TAG, "onResourceFound()"); - - runOnUiThread(new Runnable() { - @Override - public void run() { - // in case we were waiting for a refresh, hide the indeterminate progress bar - setRefreshActionButtonState(false); - - // if resource not already in list, add it - if(!mResourceList.contains(resourceInfo)) { - mResourceList.add(resourceInfo); - } - - mResourceListAdapter.notifyDataSetChanged(); - } - }); - } - - public void toggleLedSwitch(OcResourceInfo resourceInfo, boolean onOff) { - if (LOCAL_LOGV) Log.d(TAG, String.format("toggleLedSwitch(%s, %s)", - resourceInfo.getHost() + resourceInfo.getUri(), String.valueOf(onOff))); - - // send a msg to OcWorker to put the switch value - for(OcAttributeInfo ai : resourceInfo.getAttributes()) { - if(ai.getType() == PLATFORM_LED_SWITCH) { - if(onOff) { - ai.setValueInt(1); - } else { - ai.setValueInt(0); - } - } - } - this.mOcWorker.doPutResource(resourceInfo); - } - - public void toggleLightSwitch(OcResourceInfo resourceInfo, boolean onOff) { - if (LOCAL_LOGV) Log.d(TAG, String.format("toggleLightSwitch(%s, %s)", - resourceInfo.getHost() + resourceInfo.getUri(), String.valueOf(onOff))); - - // send a msg to OcWorker to put the switch value - for(OcAttributeInfo ai : resourceInfo.getAttributes()) { - if(ai.getType() == LIGHT_SWITCH) { - ai.setValueBool(onOff); - } - } - this.mOcWorker.doPutResource(resourceInfo); - } - - public void setLightDimmerLevel(OcResourceInfo resourceInfo, int value) { - if (LOCAL_LOGV) Log.d(TAG, String.format("setLightDimmerLevel(%s, %s)", - resourceInfo.getHost() + resourceInfo.getUri(), String.valueOf(value))); - - // send a msg to OcWorker to put the switch value - for(OcAttributeInfo ai : resourceInfo.getAttributes()) { - if(ai.getType() == LIGHT_DIMMER) { - ai.setValueInt(value); - } - } - this.mOcWorker.doPutResource(resourceInfo); - } - - /** - * Sets the Action Bar icon to "progress" (spinning circle), or returns it to refresh icon - * - * @param refreshing true sets icon to animated "progress" spinner; false to static - * refresh icon - */ - private void setRefreshActionButtonState(final boolean refreshing) { - if (this.optionsMenu != null) { - final MenuItem refreshItem - = this.optionsMenu - .findItem(R.id.action_refresh); - if (refreshItem != null) { - if (refreshing) { - refreshItem.setActionView(R.layout.actionbar_indeterminate_progress); - ProgressBar progressBar = - (ProgressBar) findViewById(R.id.find_resource_progress_bar); - progressBar.setOnClickListener(this); - - } else { - refreshItem.setActionView(null); - } - } - } - } - - private AlertDialog confirmDiscard() - { - if (LOCAL_LOGV) Log.v(TAG, "confirmDiscard()"); - - return new AlertDialog.Builder(this) - .setTitle("Clear Resource List?") - .setIcon(R.drawable.ic_action_discard_dark) - .setPositiveButton("Yes", new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int whichButton) { - // clear OcWorker's list - mOcWorker.doClearResources(); - // in case its running, hide the indeterminate progress bar - setRefreshActionButtonState(false); - // clear our local data model list - mResourceList.clear(); - mResourceListAdapter.notifyDataSetChanged(); - dialog.dismiss(); - } - }) - - .setNegativeButton("No", new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - } - }) - - .create(); - } - -} diff --git a/java/examples-java/guiclient/src/main/java/org/iotivity/guiclient/OcAttributeInfo.java b/java/examples-java/guiclient/src/main/java/org/iotivity/guiclient/OcAttributeInfo.java deleted file mode 100644 index d3ad18e..0000000 --- a/java/examples-java/guiclient/src/main/java/org/iotivity/guiclient/OcAttributeInfo.java +++ /dev/null @@ -1,176 +0,0 @@ -//****************************************************************** -// -// Copyright 2014 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.guiclient; - -import android.util.Log; - -import java.io.Serializable; - -/** - * Created by nathanhs on 12/28/15. - */ -public class OcAttributeInfo implements Serializable { - /** - * Hardcoded TAG... if project never uses proguard then - * MyOcClient.class.getName() is the better way. - */ - private static final String TAG = "OcAttributeInfo"; - - private static final boolean LOCAL_LOGV = true; // set to false to compile out verbose logging - - private static final int AMBIENT_LIGHT_SENSOR_READING_MAX = 4096; - private static final int LIGHT_DIMMER_MAX = 100; - private static final int LIGHT_SWITCH_MAX = 1; - private static final int PLATFORM_LED_SWITCH_MAX = 1; - // TODO: once the temp getValueInt works, figure out how to scale this properly - private static final int ROOM_TEMPERATURE_SENSOR_READING_MAX = 4096; - - /** - * These are the resource types supported by OcResourceInfo. - */ - public enum OC_ATTRIBUTE_TYPE { - AMBIENT_LIGHT_SENSOR_READING, - LIGHT_DIMMER, - LIGHT_SWITCH, - PLATFORM_LED_SWITCH, - ROOM_TEMPERATURE_SENSOR_READING; - - private static final OC_ATTRIBUTE_TYPE[] values = OC_ATTRIBUTE_TYPE.values(); - - public static OC_ATTRIBUTE_TYPE fromInt(int i) { - return values[i]; - } - } - - private boolean mCurrentlyObserved; - private final int mId; - private static int mIdInitializer = 0; - private final boolean mObservable = true; //TODO BROKEN fix when implementing observe - private final OcResourceInfo mParentResource; - private final boolean mReadOnly; - private final OC_ATTRIBUTE_TYPE mType; - private boolean mValueBool; // used if attribute has a boolean value - private int mValueInt; // used if attribute has an int value - private String mValueString; // used if attribute has a String value - private final int mValueMax; - - public OcAttributeInfo(OC_ATTRIBUTE_TYPE type, OcResourceInfo parent) { - if (LOCAL_LOGV) Log.v(TAG, "OcAttributeInfo() constructor"); - - this.mId = OcAttributeInfo.mIdInitializer++; // give a unique Id from other OcResourceInfos - this.mParentResource = parent; - this.mReadOnly = this.getReadOnlyBasedOnType(type); - this.mType = type; - this.mValueBool = false; - this.mValueInt = 0; - this.mValueString = "error"; - this.mValueMax = this.getMaxAttributeValueBasedOnType(type); - } - - public int getId() { - return mId; - } - - public OC_ATTRIBUTE_TYPE getType() { - return mType; - } - - public boolean getValueBool() { - return this.mValueBool; - } - - public int getValueInt() { - return this.mValueInt; - } - - public int getValueMax() { - return mValueMax; - } - - public String getValueString() { - return this.mValueString; - } - - public int getValueAsPercentOfMax() { - return (this.mValueInt*100)/this.mValueMax; - } - - public boolean isCurrentlyObserved() { - return this.mCurrentlyObserved; - } - - public boolean isObservable() { - return this.mObservable; - } - - public boolean isReadOnly() { - return mReadOnly; - } - - public void setCurrentlyObserved(boolean currentlyObserved) { - this.mCurrentlyObserved = currentlyObserved; - } - - public void setValueBool(boolean value) { - this.mValueBool = value; - } - - public void setValueInt(int value) { - this.mValueInt = value; - } - - public void setValueString(String value) { - this.mValueString = value; - } - - private int getMaxAttributeValueBasedOnType(OC_ATTRIBUTE_TYPE type) { - switch(type) { - case AMBIENT_LIGHT_SENSOR_READING: - return AMBIENT_LIGHT_SENSOR_READING_MAX; - case LIGHT_DIMMER: - return LIGHT_DIMMER_MAX; - case LIGHT_SWITCH: - return LIGHT_SWITCH_MAX; - case PLATFORM_LED_SWITCH: - return PLATFORM_LED_SWITCH_MAX; - case ROOM_TEMPERATURE_SENSOR_READING: - return ROOM_TEMPERATURE_SENSOR_READING_MAX; - default: - Log.w(TAG, "getMaxAttributeValueBasedOnType(): unrecognized attribute type."); - return 0; - } - } - - private boolean getReadOnlyBasedOnType(OC_ATTRIBUTE_TYPE type) { - switch(type) { - case AMBIENT_LIGHT_SENSOR_READING: - case ROOM_TEMPERATURE_SENSOR_READING: - return true; - case LIGHT_DIMMER: - case LIGHT_SWITCH: - case PLATFORM_LED_SWITCH: - return false; - default: - Log.w(TAG, "getReadOnlyBasedOnType(): unrecognized attribute type."); - return false; - } - } -} diff --git a/java/examples-java/guiclient/src/main/java/org/iotivity/guiclient/OcProtocolStrings.java b/java/examples-java/guiclient/src/main/java/org/iotivity/guiclient/OcProtocolStrings.java deleted file mode 100644 index 5afc2f7..0000000 --- a/java/examples-java/guiclient/src/main/java/org/iotivity/guiclient/OcProtocolStrings.java +++ /dev/null @@ -1,50 +0,0 @@ -//****************************************************************** -// -// Copyright 2014 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.guiclient; - -/** - * OcProtocolStrings contains the IoTivity-specific constant values. To add another supported - * Resource or Interface type to this app, begin by adding the new strings here, and then - * find the places throughout the app where Resource-specific case switches occur, and add - * the newly-supported type there. - */ -public interface OcProtocolStrings { - // OIC core protocol strings - public static final String COAP_CORE = "coap://224.0.1.187/oic/res"; - public static final String RESOURCE_TYPE_QUERY = "?rt="; - public static final String INTERFACE_QUERY = "?if="; - // find resource queries - public static final String CORE_LIGHT = "core.light"; - public static final String CORE_EDISON_RESOURCES = "core.edison.resources"; - // resource URIs - public static final String LIGHT_RESOURCE_URI = "/a/light"; - public static final String LIGHT_RESOURCE_URI2 = "/light0"; - public static final String LIGHT_RESOURCE_URI3 = "/a/light1"; - public static final String ROOM_TEMPERATURE_RESOURCE_URI = "/temperature"; - public static final String AMBIENT_LIGHT_RESOURCE_URI = "/ambientlight"; - public static final String PLATFORM_LED_RESOURCE_URI = "/led"; - // attribute keys for set() calls - public static final String LIGHT_SWITCH_RESOURCE_KEY = "state"; - public static final String LIGHT_DIMMER_RESOURCE_KEY = "power"; - public static final String ROOM_TEMPERATURE_RESOURCE_KEY = "temperature"; - public static final String AMBIENT_LIGHT_RESOURCE_KEY = "ambientlight"; - public static final String PLATFORM_LED_RESOURCE_KEY = "switch"; -} diff --git a/java/examples-java/guiclient/src/main/java/org/iotivity/guiclient/OcResourceInfo.java b/java/examples-java/guiclient/src/main/java/org/iotivity/guiclient/OcResourceInfo.java deleted file mode 100644 index c603e2f..0000000 --- a/java/examples-java/guiclient/src/main/java/org/iotivity/guiclient/OcResourceInfo.java +++ /dev/null @@ -1,375 +0,0 @@ -//****************************************************************** -// -// Copyright 2014 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.guiclient; - -import android.util.Log; - -import org.iotivity.base.ErrorCode; -import org.iotivity.base.OcException; -import org.iotivity.base.OcHeaderOption; -import org.iotivity.base.OcRepresentation; -import org.iotivity.base.OcResource; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -import static org.iotivity.guiclient.OcAttributeInfo.OC_ATTRIBUTE_TYPE.AMBIENT_LIGHT_SENSOR_READING; -import static org.iotivity.guiclient.OcAttributeInfo.OC_ATTRIBUTE_TYPE.LIGHT_DIMMER; -import static org.iotivity.guiclient.OcAttributeInfo.OC_ATTRIBUTE_TYPE.LIGHT_SWITCH; -import static org.iotivity.guiclient.OcProtocolStrings.AMBIENT_LIGHT_RESOURCE_KEY; -import static org.iotivity.guiclient.OcProtocolStrings.AMBIENT_LIGHT_RESOURCE_URI; -import static org.iotivity.guiclient.OcProtocolStrings.LIGHT_DIMMER_RESOURCE_KEY; -import static org.iotivity.guiclient.OcProtocolStrings.LIGHT_RESOURCE_URI; -import static org.iotivity.guiclient.OcProtocolStrings.LIGHT_RESOURCE_URI2; -import static org.iotivity.guiclient.OcProtocolStrings.LIGHT_RESOURCE_URI3; -import static org.iotivity.guiclient.OcProtocolStrings.LIGHT_SWITCH_RESOURCE_KEY; -import static org.iotivity.guiclient.OcProtocolStrings.PLATFORM_LED_RESOURCE_KEY; -import static org.iotivity.guiclient.OcProtocolStrings.PLATFORM_LED_RESOURCE_URI; -import static org.iotivity.guiclient.OcProtocolStrings.ROOM_TEMPERATURE_RESOURCE_URI; - -/** - * OcResourceInfo is a wrapper object for the OcResource object. It implements the Resource- - * specific callbacks, and abstracts the IoTivity implementation details from the application. - * - * In order to use OcResourceInfo, an application should implement the OcResourceInfoListener - * interface, which is called when the OcResourceInfo changes in any meaningful way. - */ -public class OcResourceInfo - implements OcResource.OnGetListener, OcResource.OnPutListener, Serializable { - /** - * Hardcoded TAG... if project never uses proguard then - * MyOcClient.class.getName() is the better way. - */ - private static final String TAG = "OcResourceInfo"; - - private static final boolean LOCAL_LOGV = true; // set to false to compile out verbose logging - - /** - * These are the resource types supported by OcResourceInfo. They should have corresponding - * URI strings in the OcProtocolStrings interface. - */ - public enum OC_RESOURCE_TYPE { - AMBIENT_LIGHT_SENSOR, - LIGHT, - PLATFORM_LED, - ROOM_TEMPERATURE_SENSOR; - - private static final OC_RESOURCE_TYPE[] values = OC_RESOURCE_TYPE.values(); - - public static OC_RESOURCE_TYPE fromInt(int i) { - return values[i]; - } - } - - private List mAttributes; - private final String mHost; - private final int mId; - private static int mIdInitializer = 0; - private List mListeners; - private final OcResource mResource; - private final OC_RESOURCE_TYPE mType; - private final String mUri; - - public interface OcResourceInfoListener { - public void onResourceInfoChanged(OcResourceInfo resourceInfo); - } - - - public OcResourceInfo(OcResource resource, OcResourceInfoListener changeListener) { - if (LOCAL_LOGV) Log.v(TAG, "OcResourceInfo() constructor"); - - this.mAttributes = new ArrayList<>(); - this.mHost = resource.getHost(); - this.mId = OcResourceInfo.mIdInitializer++; // give a unique Id from other OcResourceInfos - this.mListeners = new ArrayList<>(); - this.mListeners.add(changeListener); - this.mResource = resource; - this.mType = this.getResourceTypeFromUri(resource.getUri()); - this.mUri = resource.getUri(); - - } - - public void registerListener(OcResourceInfoListener changeListener) { - if(null == this.mListeners) { - Log.e(TAG, "registerListener(): null mListeners List"); - } else { - boolean alreadyRegistered = false; - for(OcResourceInfoListener rl : this.mListeners) { - if(changeListener == rl) { - alreadyRegistered = true; - } - } - if(!alreadyRegistered) { - this.mListeners.add(changeListener); - } - } - } - - public OC_RESOURCE_TYPE getType() { - return this.mType; - } - - public String getHost() { - return this.mHost; - } - - public String getUri() { - return this.mUri; - } - - @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()); - } - - @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()); - } - - public List getAttributes() { - return this.mAttributes; - } - - public void doOcGet() { - if(null != this.mResource) { - try { - this.mResource.get(new HashMap(), this); - } catch (OcException e) { - e.printStackTrace(); - Log.e(TAG, e.getMessage()); - } - } else { - Log.e(TAG, "doOcGet(): null mResource"); - } - } - - public void doOcPut(OcAttributeInfo attribute) { - if (LOCAL_LOGV) Log.v(TAG, "doOcPut()"); - - if(attribute.isReadOnly()) { - Log.w(TAG, String.format("doOcPut(): %s attribute is read only; skipping put!", - attribute.getType())); - } else { - if (null != this.mResource) { - try { - OcRepresentation representation = new OcRepresentation(); - switch (attribute.getType()) { - case AMBIENT_LIGHT_SENSOR_READING: - break; - case LIGHT_DIMMER: - representation.setValueInt(LIGHT_DIMMER_RESOURCE_KEY, - attribute.getValueInt()); - // This 'sw' logic is here because the current IoTivity Light forces - // the switch to "false" if the switch val is not specified. - boolean sw = true; - for(OcAttributeInfo ai : this.mAttributes) { - if(ai.getType() == LIGHT_SWITCH) { - sw = ai.getValueBool(); - } - } - representation.setValueBool(LIGHT_SWITCH_RESOURCE_KEY, sw); - break; - case LIGHT_SWITCH: - representation.setValueBool(LIGHT_SWITCH_RESOURCE_KEY, - attribute.getValueBool()); - break; - case PLATFORM_LED_SWITCH: - representation.setValueInt(PLATFORM_LED_RESOURCE_KEY, - attribute.getValueInt()); - break; - case ROOM_TEMPERATURE_SENSOR_READING: - break; - default: - break; - } - this.mResource.put(representation, new HashMap(), this); - } catch (OcException e) { - e.printStackTrace(); - Log.e(TAG, e.getMessage()); - } - } else { - Log.e(TAG, "doOcGet(): null mResource"); - } - } - } - - private static Object onGetCompletedLock = new Object(); - @Override -// public void onGetCompleted(HeaderOptions headerOptions, OcRepresentation ocRepresentation) { - public void onGetCompleted(List headerOptionList, - OcRepresentation ocRepresentation) { - synchronized (onGetCompletedLock) { - if (LOCAL_LOGV) Log.v(TAG, "enter -> onGetCompleted()"); - if (LOCAL_LOGV) Log.v(TAG, String.format("\tthis = %s", this.toString())); - if (LOCAL_LOGV) Log.v(TAG, String.format("\tthis.mType = %s", this.mType)); - - this.mAttributes.clear(); - switch(this.mType) { - case AMBIENT_LIGHT_SENSOR: - int ambientLightVal = ocRepresentation.getValueInt(AMBIENT_LIGHT_RESOURCE_KEY); - if (LOCAL_LOGV) Log.v(TAG, - String.format("%s int value of %s attribute = %d", - mType, AMBIENT_LIGHT_RESOURCE_KEY, ambientLightVal)); - OcAttributeInfo ambientAttribute = new OcAttributeInfo( - AMBIENT_LIGHT_SENSOR_READING, this); - ambientAttribute.setValueInt(ambientLightVal); - this.mAttributes.add(ambientAttribute); - break; - case LIGHT: - // do switch first - boolean lightSwitchVal = ocRepresentation.getValueBool(LIGHT_SWITCH_RESOURCE_KEY); - OcAttributeInfo lightSwitchAttribute = new OcAttributeInfo( - LIGHT_SWITCH, this); - lightSwitchAttribute.setValueBool(lightSwitchVal); - this.mAttributes.add(lightSwitchAttribute); - // then dimmer - int dimmerVal = ocRepresentation.getValueInt(LIGHT_DIMMER_RESOURCE_KEY); - OcAttributeInfo dimmerAttribute = new OcAttributeInfo( - LIGHT_DIMMER, this); - dimmerAttribute.setValueInt(dimmerVal); - this.mAttributes.add(dimmerAttribute); - break; - case PLATFORM_LED: - int ledVal = ocRepresentation.getValueInt(PLATFORM_LED_RESOURCE_KEY); - if (LOCAL_LOGV) Log.v(TAG, - String.format("%s int value of %s attribute = %d", - mType, PLATFORM_LED_RESOURCE_KEY, ledVal)); - OcAttributeInfo ledAttribute = new OcAttributeInfo( - OcAttributeInfo.OC_ATTRIBUTE_TYPE.PLATFORM_LED_SWITCH, this); - ledAttribute.setValueInt(ledVal); - this.mAttributes.add(ledAttribute); - break; - case ROOM_TEMPERATURE_SENSOR: - int temperatureVal = 98; - Log.w(TAG, "getting 'temperature' value is causing crash;" + - " skipping and using 98."); - // TODO This call crashes in the native JNI code. The example .cpp - // app receives a double for the Room Temp key, but the Java API - // doesn't support getValueDouble yet. - // Debug crash when API fixed? -// temperatureVal = ocRepresentation.getValueInt(ROOM_TEMPERATURE_RESOURCE_KEY); - if (LOCAL_LOGV) Log.v(TAG, - String.format("%s int value of 'temperature' attribute = %d", - mType, temperatureVal)); - OcAttributeInfo temperatureAttribute = new OcAttributeInfo( - OcAttributeInfo.OC_ATTRIBUTE_TYPE.ROOM_TEMPERATURE_SENSOR_READING, - this); - temperatureAttribute.setValueInt(temperatureVal); - this.mAttributes.add(temperatureAttribute); - break; - } - this.notifyListeners(); - if (LOCAL_LOGV) Log.v(TAG, "exit <- onGetCompleted()"); - } - } - - /** - * Should be called whenever any Resource or Attribute values change on this object. - */ - private void notifyListeners() { - if (LOCAL_LOGV) Log.v(TAG, "notifyListeners()"); - - for(OcResourceInfoListener l : this.mListeners) { - l.onResourceInfoChanged(this); - } - } - - private Object onPutCompletedLock = new Object(); - @Override - public void onPutCompleted(List headerOptionList, - OcRepresentation ocRepresentation) { - synchronized (onPutCompletedLock) { - if (LOCAL_LOGV) Log.v(TAG, "enter -> onPutCompleted()"); - if (LOCAL_LOGV) Log.v(TAG, String.format("\tthis = %s", this.toString())); - if (LOCAL_LOGV) Log.v(TAG, String.format("\tthis.mType = %s", this.mType)); - - switch(this.mType) { - case AMBIENT_LIGHT_SENSOR: - Log.w(TAG, String.format("onPutCompleted(): %s is a readonly attribute type.", - this.mType)); - break; - case LIGHT: - // do switch first - boolean lightSwitchVal = ocRepresentation.getValueBool(LIGHT_SWITCH_RESOURCE_KEY); - for(OcAttributeInfo ai : this.mAttributes) { - if (ai.getType() == OcAttributeInfo.OC_ATTRIBUTE_TYPE.LIGHT_SWITCH) { - ai.setValueBool(lightSwitchVal); - } - } - // then dimmer - int dimmerVal = ocRepresentation.getValueInt(LIGHT_DIMMER_RESOURCE_KEY); - for(OcAttributeInfo ai : this.mAttributes) { - if (ai.getType() == OcAttributeInfo.OC_ATTRIBUTE_TYPE.LIGHT_DIMMER) { - ai.setValueInt(dimmerVal); - } - } - break; - case PLATFORM_LED: - int value = ocRepresentation.getValueInt(PLATFORM_LED_RESOURCE_KEY); - for(OcAttributeInfo ai : this.mAttributes) { - if (ai.getType() == OcAttributeInfo.OC_ATTRIBUTE_TYPE.PLATFORM_LED_SWITCH) { - ai.setValueInt(value); - } - } - break; - case ROOM_TEMPERATURE_SENSOR: - Log.w(TAG, String.format("onPutCompleted(): %s is a readonly attribute type.", - this.mType)); - break; - } - this.notifyListeners(); - if (LOCAL_LOGV) Log.v(TAG, "exit <- onPutCompleted()"); - } - } - - private OC_RESOURCE_TYPE getResourceTypeFromUri(String uri) { - if (LOCAL_LOGV) Log.v(TAG, "getResourceTypeFromUri()"); - - switch(uri) { - case LIGHT_RESOURCE_URI: - case LIGHT_RESOURCE_URI2: - case LIGHT_RESOURCE_URI3: - return OC_RESOURCE_TYPE.LIGHT; - case AMBIENT_LIGHT_RESOURCE_URI: - return OC_RESOURCE_TYPE.AMBIENT_LIGHT_SENSOR; - case PLATFORM_LED_RESOURCE_URI: - return OC_RESOURCE_TYPE.PLATFORM_LED; - case ROOM_TEMPERATURE_RESOURCE_URI: - return OC_RESOURCE_TYPE.ROOM_TEMPERATURE_SENSOR; - default: - Log.w(TAG, "getResourceTypeFromUri(): unsupported resource '" + uri + "'" ); - } - return null; - } -} diff --git a/java/examples-java/guiclient/src/main/java/org/iotivity/guiclient/OcWorker.java b/java/examples-java/guiclient/src/main/java/org/iotivity/guiclient/OcWorker.java deleted file mode 100644 index cb049a6..0000000 --- a/java/examples-java/guiclient/src/main/java/org/iotivity/guiclient/OcWorker.java +++ /dev/null @@ -1,524 +0,0 @@ -// -// Copyright 2014 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.guiclient; - -import android.content.Context; -import android.os.Handler; -import android.os.Looper; -import android.os.Message; -import android.util.Log; - -import org.iotivity.base.ModeType; -import org.iotivity.base.OcConnectivityType; -import org.iotivity.base.OcException; -import org.iotivity.base.OcPlatform; -import org.iotivity.base.OcResource; -import org.iotivity.base.PlatformConfig; -import org.iotivity.base.QualityOfService; -import org.iotivity.base.ServiceType; - -import java.util.ArrayList; -import java.util.EnumSet; -import java.util.List; - -import static org.iotivity.guiclient.OcProtocolStrings.COAP_CORE; -import static org.iotivity.guiclient.OcProtocolStrings.CORE_EDISON_RESOURCES; -import static org.iotivity.guiclient.OcProtocolStrings.CORE_LIGHT; -import static org.iotivity.guiclient.OcProtocolStrings.INTERFACE_QUERY; -import static org.iotivity.guiclient.OcProtocolStrings.RESOURCE_TYPE_QUERY; -import static org.iotivity.guiclient.OcWorker.OCW_IN_MSG.DO_CLEAR_RESOURCES; -import static org.iotivity.guiclient.OcWorker.OCW_IN_MSG.DO_DISCOVER_RESOURCES; -import static org.iotivity.guiclient.OcWorker.OCW_IN_MSG.DO_GET_RESOURCE; -import static org.iotivity.guiclient.OcWorker.OCW_IN_MSG.DO_PUT_RESOURCE; -import static org.iotivity.guiclient.OcWorker.OCW_IN_MSG.fromInt; - -/** - * OcWorker - * - * A class designed to encapsulate the OIC API functionality. OcWorker has its own - * thread which is used to call all OIC APIs. To get results back from OcWorker, - * implement the interface OcWorkerListener, and call registerListener(). - * - * @see org.iotivity.guiclient.OcWorkerListener - * - * Created by nathanhs on 12/22/15. - */ -public class OcWorker extends Thread - implements OcPlatform.OnResourceFoundListener, OcResourceInfo.OcResourceInfoListener { - /** - * Hardcoded TAG... if project never uses proguard then - * MyOcClient.class.getName() is the better way. - */ - private static final String TAG = "OcWorker"; - private Context mContext; - - private static final boolean LOCAL_LOGV = true; // set to false to compile out verbose logging - - /** - * NOTE: DO NOT assign non-default values to these enums! - * The correctness of "fromInt()" depends on the enum values not being - * overridden. For example DO_TEST = 100, RESULT_TEST = 101.. would BREAK the - * fromInt() function. There are designs which can account for arbitrary enum - * values, but they are less desirable for other reasons and since we do not - * need to use any specific value, this design is the best for this case. - */ - - /** - * These "IN" message types are for posting API-generated request actions - * to our OcWorker queue. - */ - public enum OCW_IN_MSG { - DO_TEST, // developer testing only - DO_DISCOVER_RESOURCES, - DO_CLEAR_RESOURCES, - DO_GET_RESOURCE, - DO_PUT_RESOURCE, - DO_OBSERVE_RESOURCE, - DO_STOP_OBSERVING_RESOURCE; - - private static final OCW_IN_MSG[] values = values(); - - public static OCW_IN_MSG fromInt(int i) { - return values[i]; - } - } - - /** - * These events are for internally putting work on our thread's looper - * queue, usually in a callback where we don't want to do work on the - * callback thread. - */ - private enum OC_EVENT { - OIC_RESOURCE_FOUND, - OIC_RESOURCE_CHANGED; - - private static final OC_EVENT[] values = OC_EVENT.values(); - - public static OC_EVENT fromInt(int i) { - return values[i]; - } - } - - private Handler mDoMsgHandler; - - private Handler mOcEventHandler; - - /** - * The OcResourceInfo List - */ - private ArrayList mOcResourceInfoList; - - /** - * The types of OIC Resources included in "FindResource" calls by this object. - */ - private final String[] mOcFindQueries = { - COAP_CORE + RESOURCE_TYPE_QUERY + CORE_LIGHT, - COAP_CORE + INTERFACE_QUERY + CORE_EDISON_RESOURCES - }; - - private List mListeners; - - public OcWorker(Context context) { - if (LOCAL_LOGV) Log.v(TAG, "OcWorker() constructor"); - - mContext = context; - this.mListeners = new ArrayList<>(); - } - - /** - * Set up our Handler and Looper, then initialize the OIC platform and - * start processing messages as they arrive. - */ - public void run() { - if (LOCAL_LOGV) Log.v(TAG, "run()"); - - Looper.prepare(); - this.initHandlers(); // set up our message handler - this.ocInit(); // init the OIC layer including calling ConfigurePlatform - Looper.loop(); - } - - /** - * Registers a listener for OcWorker events. - * - * @see org.iotivity.guiclient.OcWorkerListener - */ - public void registerListener(OcWorkerListener listener) { - if (LOCAL_LOGV) Log.v(TAG, "registerListener()"); - - if(null != this.mListeners) { - this.mListeners.add(listener); - } else { - Log.e(TAG, "registerListener(): null mListeners list; not adding listener!"); - Log.e(TAG, "OcWorker.run() must be called before using public methods."); - } - } - - /** - * The Resource discovery external API - */ - public void doDiscoverResources() { - if (LOCAL_LOGV) Log.v(TAG, "doDiscoverResources()"); - - if(null != this.mDoMsgHandler) { - this.mDoMsgHandler.obtainMessage( - DO_DISCOVER_RESOURCES.ordinal()).sendToTarget(); - } else { - Log.e(TAG, "doDiscoverResources(): null mDoMsgHandler; not discovering resources!"); - Log.e(TAG, "OcWorker.run() must be called before using public methods."); - } - } - - /** - * The GetResource external API - */ - public void doGetResource(OcResourceInfo resourceInfo) { - if (LOCAL_LOGV) Log.v(TAG, "doGetResource()"); - - if(null != this.mDoMsgHandler) { - this.mDoMsgHandler.obtainMessage( - DO_GET_RESOURCE.ordinal(), resourceInfo).sendToTarget(); - } else { - Log.e(TAG, "doPutResource(): null mDoMsgHandler; not putting resource!"); - Log.e(TAG, "OcWorker.run() must be called before using public methods."); - } - } - - /** - * The PutResource external API - */ - public void doPutResource(OcResourceInfo resourceInfo) { - if (LOCAL_LOGV) Log.v(TAG, "doPutResource()"); - - if(null != this.mDoMsgHandler) { - this.mDoMsgHandler.obtainMessage( - DO_PUT_RESOURCE.ordinal(), resourceInfo).sendToTarget(); - } else { - Log.e(TAG, "doPutResource(): null mDoMsgHandler; not putting resource!"); - Log.e(TAG, "OcWorker.run() must be called before using public methods."); - } - } - - /** - * The Clear Resources external API - */ - public void doClearResources() { - if (LOCAL_LOGV) Log.v(TAG, "doClearResources()"); - - if(null != this.mDoMsgHandler) { - this.mDoMsgHandler.obtainMessage( - DO_CLEAR_RESOURCES.ordinal()).sendToTarget(); - } else { - Log.e(TAG, "doClearResources(): null mDoMsgHandler; not clearing resources!"); - Log.e(TAG, "OcWorker.run() must be called before using public methods."); - } - } - - /** - * Set up handlers - */ - private void initHandlers() { - if (LOCAL_LOGV) Log.v(TAG, "initHandler()"); - - this.mDoMsgHandler = new Handler() { - public void handleMessage(Message msg) { - Log.d(TAG, String.format("mDoMsgHandler.handleMessage(%s)", msg.toString())); - // process incoming messages here - OCW_IN_MSG type = fromInt(msg.what); - switch(type) { - case DO_TEST: - break; - case DO_DISCOVER_RESOURCES: - discoverResources(); - break; - case DO_CLEAR_RESOURCES: - clearResourceInfoList(); - break; - case DO_GET_RESOURCE: - getResourceAttributes((OcResourceInfo)msg.obj); - break; - case DO_PUT_RESOURCE: - putResourceAttributes((OcResourceInfo)msg.obj); - break; - case DO_OBSERVE_RESOURCE: - break; - case DO_STOP_OBSERVING_RESOURCE: - break; - default: - Log.e(TAG, "unknown msg.what in handler"); - break; - } - } - }; - - this.mOcEventHandler = new Handler() { - public void handleMessage(Message msg) { - Log.d(TAG, String.format("mOcEventHandler.handleMessage(%s)", msg.toString())); - // process incoming messages here - OC_EVENT type = OC_EVENT.fromInt(msg.what); - switch(type) { - case OIC_RESOURCE_FOUND: - handleNewResourceFound((OcResource)msg.obj); - break; - case OIC_RESOURCE_CHANGED: - handleResourceInfoChange((OcResourceInfo)msg.obj); - break; - } - } - }; - } - - /** - * Get the attributes on resourceInfo. - * - * @param resourceInfo - */ - private void getResourceAttributes(OcResourceInfo resourceInfo) { - if (LOCAL_LOGV) Log.v(TAG, "getResourceAttributes()"); - - // find the matching resource in our resourceList - OcResourceInfo existingResource = this.selectResourceInfoByHostAndUri( - resourceInfo.getHost() + resourceInfo.getUri()); - if(null != existingResource) { - existingResource.doOcGet(); - } else { - Log.e(TAG, "getResourceAttributes(): could not find target resource."); - } - // Done. Later, the onGet listener in the OcResourceInfo object will notify us of a change - // via our onResourceChanged() method - } - - /** - * For each attribute in the resourceInfo.mAttributes, put the attribute value to the - * Resource. - * - * @param resourceInfo - */ - private void putResourceAttributes(OcResourceInfo resourceInfo) { - if (LOCAL_LOGV) Log.v(TAG, "putResourceAttributes()"); - - // find the matching resource in our resourceList - OcResourceInfo existingResource = this.selectResourceInfoByHostAndUri( - resourceInfo.getHost() + resourceInfo.getUri()); - if(null != existingResource) { - // for each attribute in resourceInfo, put that attribute to the resource - for(OcAttributeInfo attribute : resourceInfo.getAttributes()) { - if(false == attribute.isReadOnly()) { - existingResource.doOcPut(attribute); - } - } - } else { - Log.e(TAG, "putResourceAttributes(): could not find target resource."); - } - // Done. later, the onPut listener in the OcResourceInfo object will notify us of a change - // via our onResourceChanged() method - } - - /** - * Because this callback is called on a JNI layer thread, don't do work here. - * Instead, create a "found resource" message and send to OcWorker's message queue, - * Our looper/handler then calls handleNewResource on our own worker thread. - * - * Also note that this method must be thread safe because it can be called by - * multiple concurrent native threads. - * - * @param resource - */ - private Object onResourceFoundLock = new Object(); // not strictly necessary with this impl., - // but clears up Log message readability. - @Override - public void onResourceFound(OcResource resource) { - synchronized (onResourceFoundLock) { - if (LOCAL_LOGV) Log.v(TAG, "onResourceFound()"); - if (LOCAL_LOGV) Log.v(TAG, "host: " + resource.getHost()); - if (LOCAL_LOGV) Log.v(TAG, "uri: " + resource.getUri()); - if (LOCAL_LOGV) Log.v(TAG, "is observable: " + resource.isObservable()); - - this.mOcEventHandler.obtainMessage(OC_EVENT.OIC_RESOURCE_FOUND.ordinal(), - resource).sendToTarget(); - } - } - - /** - * Handles the internal NEW_RESOURCE_FOUND event, typically engueued on "onResourceFound". - * Creates a new OcResourceInfo object to wrap the new OcResource and store other info. - * - * @param resource the OcResource object - */ - private void handleNewResourceFound(OcResource resource) { - if (LOCAL_LOGV) Log.v(TAG, String.format("handleNewResourceFound(%s)", - resource.toString())); - - OcResourceInfo ri = - this.selectResourceInfoByHostAndUri(resource.getHost() + resource.getUri()); - - // before notifying listeners, update our own internal OcResourceInfo list - if(null != mOcResourceInfoList) { - // check for pre-existing duplicate before adding - if(null == ri) { - if (LOCAL_LOGV) Log.v(TAG, "handleNewResourceFound(): ri is new; adding."); - // if not found, create new info object - ri = new OcResourceInfo(resource, this); - // register as a listener to the newly created OcResourceInfo - ri.registerListener(this); - // kick off a get to fill in attributes - ri.doOcGet(); - // add the info object to our list - mOcResourceInfoList.add(ri); - } - } - // notify listeners - for(OcWorkerListener l : this.mListeners) { - l.onResourceFound(ri); - } - } - - /** - * The "listener" callback from the OcResourceInfo class. - * Called by the OcResourceInfo object using the native callback thread. - * We use this callback to post an event to our queue so that the work - * is serialized with other incoming events, and executed on our worker thread. - * - * Also note that this method must be thread safe because it could be called by - * one of many OcResourceInfo objects on separate native threads. - * - * @param resourceInfo - */ - private Object onResourceInfoChangedLock = new Object(); - @Override - public void onResourceInfoChanged(OcResourceInfo resourceInfo) { - - synchronized (onResourceInfoChangedLock) { - if (LOCAL_LOGV) Log.v(TAG, String.format("resourceInfoChanged(%s)", - resourceInfo.toString())); - - // this is a result of a callback (i.e. onGetCompleted, onPut, onObserve) - // so we post a message to our queue to transfer the work to our own thread - this.mOcEventHandler.obtainMessage(OC_EVENT.OIC_RESOURCE_CHANGED.ordinal(), - resourceInfo).sendToTarget(); - } - } - - /** - * Handle our internal event that is enqueued when a resource is found. - * - * @param resourceInfo - */ - private void handleResourceInfoChange(OcResourceInfo resourceInfo) { - if (LOCAL_LOGV) Log.v(TAG, "handleResourceInfoChange()"); - - // notify listeners - for(OcWorkerListener l : this.mListeners) { - l.onResourceChanged(resourceInfo); - } - } - - /** - * Complete OIC-related initialization, including configuring the platform - */ - private void ocInit() { - if (LOCAL_LOGV) Log.v(TAG, "ocInit()"); - - // OIC initialization - mOcResourceInfoList = new ArrayList<>(); - - this.configurePlatform(); - } - - /** - * Configures the OIC platform. - */ - private void configurePlatform() { - if (LOCAL_LOGV) Log.v(TAG, "configurePlatform()"); - - PlatformConfig cfg = new PlatformConfig( - mContext, - ServiceType.IN_PROC, - ModeType.CLIENT_SERVER, - "0.0.0.0", // bind to all available interfaces - 0, - QualityOfService.LOW); - - Log.d(TAG, "configurePlatform(): calling OcPlatform.Configure()"); - OcPlatform.Configure(cfg); - } - - /** - * Search mOcResourceInfo list for a resource whose Host and Uri concatenated - * matches the param passed, and return it. - * - * @param resourceHostAndUri - * @return OcResourceInfo with Host and Uri matching resourceHostAndUri, or null if - * no such OcResourceInfo exists in mOcResourceInfoList - */ - private OcResourceInfo selectResourceInfoByHostAndUri(String resourceHostAndUri) { - if (LOCAL_LOGV) Log.v(TAG, "selectResourceByHostAndUri()"); - - boolean found = false; - OcResourceInfo retVal = null; - - for(OcResourceInfo ri : mOcResourceInfoList) { - if(!found) { - String s = ri.getHost() + ri.getUri(); - if (resourceHostAndUri.equalsIgnoreCase(s)) { - retVal = ri; - found = true; - } - } - } - if(!found) { - Log.v(TAG, "selectResourceByHostAndUri(): no resource found matching HostAndUri " - + resourceHostAndUri); - } - - return retVal; - } - - /** - * Finds OIC Resources matching known patterns. - * - * @see org.iotivity.guiclient.OcProtocolStrings - */ - private void discoverResources() { - if (LOCAL_LOGV) Log.v(TAG, "discoverResources()"); - - try { - for (String s : mOcFindQueries) { - Log.d(TAG, String.format("discoverResources(): Calling OcPlatform.findResource(%s)", s)); - OcPlatform.findResource("", - OcPlatform.WELL_KNOWN_QUERY + "?rt=" + s, - EnumSet.of(OcConnectivityType.CT_DEFAULT), - this); - } - } catch (OcException e) { - e.printStackTrace(); - Log.e(TAG, e.getMessage()); - } - } - - /** - * Clear the ResourceInfoList - */ - private void clearResourceInfoList() { - if (LOCAL_LOGV) Log.v(TAG, "clearResourceInfoList()"); - - this.mOcResourceInfoList.clear(); - } -} diff --git a/java/examples-java/guiclient/src/main/java/org/iotivity/guiclient/OcWorkerListener.java b/java/examples-java/guiclient/src/main/java/org/iotivity/guiclient/OcWorkerListener.java deleted file mode 100644 index d78949b..0000000 --- a/java/examples-java/guiclient/src/main/java/org/iotivity/guiclient/OcWorkerListener.java +++ /dev/null @@ -1,56 +0,0 @@ -//****************************************************************** -// -// Copyright 2014 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.guiclient; - -import android.os.Handler; - -import java.util.List; - -/** - * Applications wishing to use the OcWorker object must implement this interface to - * receive notification of OcWorker's ResourceFound and ResourceChanged events. - * - * @see org.iotivity.guiclient.OcWorker - */ -public interface OcWorkerListener { - - /** - * Called whenever a new Resource is discovered. - * - * Note that the calling thread for this callback is not a UI thread. OcWorkerListeners - * with UI functionality should post a message to their own UI thread, or similar action. - * - * @param resourceInfo - */ - public void onResourceFound(final OcResourceInfo resourceInfo); - - /** - * Called whenever a previously-discovered Resource changes, e.g. as a result of Put, - * or Observe callbacks. - * - * Note that the calling thread for this callback is not a UI thread. OcWorkerListeners - * with UI functionality should post a message to their own UI thread, or similar action. - * - * @param resourceInfo - */ - public void onResourceChanged(final OcResourceInfo resourceInfo); - -} diff --git a/java/examples-java/presenceclient/.gitignore b/java/examples-java/presenceclient/.gitignore deleted file mode 100644 index 796b96d..0000000 --- a/java/examples-java/presenceclient/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/java/examples-java/presenceclient/build.gradle b/java/examples-java/presenceclient/build.gradle deleted file mode 100644 index dc6b0d5..0000000 --- a/java/examples-java/presenceclient/build.gradle +++ /dev/null @@ -1,37 +0,0 @@ -apply plugin: 'com.android.application' - -android { - compileSdkVersion 21 - buildToolsVersion "20.0.0" - - defaultConfig { - applicationId "org.iotivity.base.examples.presenceclient" - minSdkVersion 21 - targetSdkVersion 21 - versionCode 1 - versionName "1.0" - } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } - lintOptions { - abortOnError false - } -} -repositories { - flatDir { - dirs "../../android_api/base/build/outputs/aar/" - } -} - -try { - dependencies { - compile ":iotivity-base-${TARGET_ARCH}-${RELEASE}@aar" - } -} catch (all) { - print "${ERROR_MSG}" - assert all -} diff --git a/java/examples-java/presenceclient/src/main/java/org/iotivity/base/examples/PresenceClient.java b/java/examples-java/presenceclient/src/main/java/org/iotivity/base/examples/PresenceClient.java deleted file mode 100644 index dae5a2b..0000000 --- a/java/examples-java/presenceclient/src/main/java/org/iotivity/base/examples/PresenceClient.java +++ /dev/null @@ -1,240 +0,0 @@ -/* - ******************************************************************* - * - * 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; - -import android.app.Activity; -import android.content.Context; -import android.os.Bundle; -import android.text.method.ScrollingMovementMethod; -import android.util.Log; -import android.view.View; -import android.widget.CompoundButton; -import android.widget.ScrollView; -import android.widget.TextView; -import android.widget.ToggleButton; - -import org.iotivity.base.ModeType; -import org.iotivity.base.OcConnectivityType; -import org.iotivity.base.OcException; -import org.iotivity.base.OcPlatform; -import org.iotivity.base.OcPresenceHandle; -import org.iotivity.base.OcPresenceStatus; -import org.iotivity.base.OcResource; -import org.iotivity.base.PlatformConfig; -import org.iotivity.base.QualityOfService; -import org.iotivity.base.ServiceType; - -import java.util.EnumSet; - -/** - * A client example for presence notification - */ -public class PresenceClient extends Activity implements - OcPlatform.OnResourceFoundListener, - OcPlatform.OnPresenceListener { - private final static String TAG = PresenceClient.class.getSimpleName(); - private OcResource mResource; - private OcPresenceHandle mPresenceHandle; - private TextView mConsoleTextView; - private ScrollView mScrollView; - - private void startPresenceClient() { - Context context = this; - - PlatformConfig platformConfig = new PlatformConfig( - context, - ServiceType.IN_PROC, - ModeType.CLIENT, - "0.0.0.0", // By setting to "0.0.0.0", it binds to all available interfaces - 0, // Uses randomly available port - QualityOfService.LOW - ); - - msg("Configuring platform."); - OcPlatform.Configure(platformConfig); - - try { - msg("Finding Resource..."); - OcPlatform.findResource("", OcPlatform.WELL_KNOWN_QUERY, - EnumSet.of(OcConnectivityType.CT_DEFAULT), this); - } catch (OcException e) { - Log.e(TAG, e.toString()); - msg("Failed to find resource(s). "); - } - printLine(); - enableStartStopButton(); - } - - //****************************************************************************** - // End of the OIC specific code - //****************************************************************************** - - @Override - public synchronized void onResourceFound(OcResource foundResource) { - String resourceUri = foundResource.getUri(); - if (null != mResource || !resourceUri.equals("/a/light")) { - msg("Found resource, ignoring"); - return; - } - - msg("Found Resource"); - String hostAddress = foundResource.getHost(); - msg("\tResource URI : " + resourceUri); - msg("\tResource Host : " + hostAddress); - msg("\tResource Interfaces : "); - for (String resInterface : foundResource.getResourceInterfaces()) { - msg("\t\t" + resInterface); - } - msg("\tResource Type : "); - for (String resTypes : foundResource.getResourceTypes()) { - msg("\t\t" + resTypes); - } - - try { - msg("Subscribing to unicast address:" + hostAddress); - OcPlatform.subscribePresence(hostAddress, - EnumSet.of(OcConnectivityType.CT_DEFAULT), this); - } catch (OcException e) { - Log.e(TAG, e.toString()); - msg("Failed to subscribe to unicast address:" + hostAddress); - } - mResource = foundResource; - printLine(); - } - - @Override - public void onPresence(OcPresenceStatus ocPresenceStatus, int nonce, String hostAddress) { - msg("Received presence notification from : " + hostAddress); - switch (ocPresenceStatus) { - case OK: - msg("Nonce# " + nonce); - break; - case STOPPED: - msg("Presence Stopped"); - break; - case TIMEOUT: - msg("Presence Timeout"); - break; - case DO_NOT_HANDLE: - msg("Presence Do Not Handle"); - break; - } - } - - private void stopPresenceClient() { - if (null != mPresenceHandle) { - try { - msg("Unsubscribing from the presence notifications."); - OcPlatform.unsubscribePresence(mPresenceHandle); - mPresenceHandle = null; - } catch (OcException e) { - Log.e(TAG, e.toString()); - msg("Failed to unsubscribe from the presence notifications" + e.toString()); - } - } - mResource = null; - printLine(); - enableStartStopButton(); - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_presence_client); - - mConsoleTextView = (TextView) findViewById(R.id.consoleTextView); - mConsoleTextView.setMovementMethod(new ScrollingMovementMethod()); - mScrollView = (ScrollView) findViewById(R.id.scrollView); - mScrollView.fullScroll(View.FOCUS_DOWN); - final ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggleButton); - - if (null == savedInstanceState) { - toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - toggleButton.setEnabled(false); - if (isChecked) { - new Thread(new Runnable() { - public void run() { - startPresenceClient(); - } - }).start(); - } else { - new Thread(new Runnable() { - public void run() { - stopPresenceClient(); - } - }).start(); - } - } - }); - } else { - String consoleOutput = savedInstanceState.getString("consoleOutputString"); - mConsoleTextView.setText(consoleOutput); - boolean buttonCheked = savedInstanceState.getBoolean("toggleButtonChecked"); - toggleButton.setChecked(buttonCheked); - } - } - - @Override - protected void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putString("consoleOutputString", mConsoleTextView.getText().toString()); - ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggleButton); - outState.putBoolean("toggleButtonChecked", toggleButton.isChecked()); - } - - @Override - protected void onRestoreInstanceState(Bundle savedInstanceState) { - super.onRestoreInstanceState(savedInstanceState); - - String consoleOutput = savedInstanceState.getString("consoleOutputString"); - mConsoleTextView.setText(consoleOutput); - - final ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggleButton); - boolean buttonCheked = savedInstanceState.getBoolean("toggleButtonChecked"); - toggleButton.setChecked(buttonCheked); - } - - private void msg(final String text) { - runOnUiThread(new Runnable() { - public void run() { - mConsoleTextView.append("\n"); - mConsoleTextView.append(text); - mScrollView.fullScroll(View.FOCUS_DOWN); - } - }); - Log.i(TAG, text); - } - - private void printLine() { - msg("------------------------------------------------------------------------"); - } - - private void enableStartStopButton() { - runOnUiThread(new Runnable() { - public void run() { - ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggleButton); - toggleButton.setEnabled(true); - } - }); - } -} \ No newline at end of file diff --git a/java/examples-java/presenceserver/.gitignore b/java/examples-java/presenceserver/.gitignore deleted file mode 100644 index 796b96d..0000000 --- a/java/examples-java/presenceserver/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/java/examples-java/presenceserver/build.gradle b/java/examples-java/presenceserver/build.gradle deleted file mode 100644 index fdee272..0000000 --- a/java/examples-java/presenceserver/build.gradle +++ /dev/null @@ -1,37 +0,0 @@ -apply plugin: 'com.android.application' - -android { - compileSdkVersion 21 - buildToolsVersion "20.0.0" - - defaultConfig { - applicationId "org.iotivity.base.examples.presenceserver" - minSdkVersion 21 - targetSdkVersion 21 - versionCode 1 - versionName "1.0" - } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } - lintOptions { - abortOnError false - } -} -repositories { - flatDir { - dirs "../../android_api/base/build/outputs/aar/" - } -} - -try { - dependencies { - compile ":iotivity-base-${TARGET_ARCH}-${RELEASE}@aar" - } -} catch (all) { - print "${ERROR_MSG}" - assert all -} diff --git a/java/examples-java/presenceserver/src/main/java/org/iotivity/base/examples/PresenceServer.java b/java/examples-java/presenceserver/src/main/java/org/iotivity/base/examples/PresenceServer.java deleted file mode 100644 index fcd612b..0000000 --- a/java/examples-java/presenceserver/src/main/java/org/iotivity/base/examples/PresenceServer.java +++ /dev/null @@ -1,219 +0,0 @@ -/* - ******************************************************************* - * - * 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; - -import android.app.Activity; -import android.content.Context; -import android.os.Bundle; -import android.text.method.ScrollingMovementMethod; -import android.util.Log; -import android.view.View; -import android.widget.CompoundButton; -import android.widget.ScrollView; -import android.widget.TextView; -import android.widget.ToggleButton; - -import org.iotivity.base.ModeType; -import org.iotivity.base.OcException; -import org.iotivity.base.OcPlatform; -import org.iotivity.base.OcResourceHandle; -import org.iotivity.base.PlatformConfig; -import org.iotivity.base.QualityOfService; -import org.iotivity.base.ResourceProperty; -import org.iotivity.base.ServiceType; - -import java.util.EnumSet; - -/** - * A server example for presence notification - */ -public class PresenceServer extends Activity { - private OcResourceHandle mResourceHandle; - - private void startPresenceServer() { - Context context = this; - - PlatformConfig platformConfig = new PlatformConfig( - context, - ServiceType.IN_PROC, - ModeType.SERVER, - "0.0.0.0", // By setting to "0.0.0.0", it binds to all available interfaces - 0, // Uses randomly available port - QualityOfService.LOW - ); - - msg("Configuring platform."); - OcPlatform.Configure(platformConfig); - - try { - msg("Creating resource of type \"core.light\"."); - createResource(); - sleep(1); - - msg("Starting presence notifications."); - OcPlatform.startPresence(OcPlatform.DEFAULT_PRESENCE_TTL); - sleep(1); - } catch (OcException e) { - Log.e(TAG, e.toString()); - msg("Error: " + e.toString()); - } - printLine(); - enableStartStopButton(); - } - - /** - * This function internally calls registerResource API. - */ - private void createResource() { - String resourceUri = "/a/light"; // URI of the resource - String resourceTypeName = "core.light"; // resource type name. - String resourceInterface = OcPlatform.DEFAULT_INTERFACE; // resource interface. - - try { - // This will internally create and register the resource. - mResourceHandle = OcPlatform.registerResource( - resourceUri, - resourceTypeName, - resourceInterface, - null, //Use default entity handler - EnumSet.of(ResourceProperty.DISCOVERABLE)); - } catch (OcException e) { - msg("Resource creation was unsuccessful."); - Log.e(TAG, e.toString()); - } - } - - private void stopPresenceServer() { - try { - msg("Stopping presence notifications."); - OcPlatform.stopPresence(); - - msg("Unregister resource."); - if (null != mResourceHandle) OcPlatform.unregisterResource(mResourceHandle); - } catch (OcException e) { - Log.e(TAG, e.toString()); - msg("Error: " + e.toString()); - } - - printLine(); - enableStartStopButton(); - } - - //****************************************************************************** - // End of the OIC specific code - //****************************************************************************** - - private final static String TAG = PresenceServer.class.getSimpleName(); - private TextView mConsoleTextView; - private ScrollView mScrollView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_presence_server); - - mConsoleTextView = (TextView) findViewById(R.id.consoleTextView); - mConsoleTextView.setMovementMethod(new ScrollingMovementMethod()); - mScrollView = (ScrollView) findViewById(R.id.scrollView); - mScrollView.fullScroll(View.FOCUS_DOWN); - final ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggleButton); - - if (null == savedInstanceState) { - toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - toggleButton.setEnabled(false); - if (isChecked) { - new Thread(new Runnable() { - public void run() { - startPresenceServer(); - } - }).start(); - } else { - new Thread(new Runnable() { - public void run() { - stopPresenceServer(); - } - }).start(); - } - } - }); - } else { - String consoleOutput = savedInstanceState.getString("consoleOutputString"); - mConsoleTextView.setText(consoleOutput); - boolean buttonCheked = savedInstanceState.getBoolean("toggleButtonChecked"); - toggleButton.setChecked(buttonCheked); - } - } - - @Override - protected void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putString("consoleOutputString", mConsoleTextView.getText().toString()); - ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggleButton); - outState.putBoolean("toggleButtonChecked", toggleButton.isChecked()); - } - - @Override - protected void onRestoreInstanceState(Bundle savedInstanceState) { - super.onRestoreInstanceState(savedInstanceState); - - String consoleOutput = savedInstanceState.getString("consoleOutputString"); - mConsoleTextView.setText(consoleOutput); - - final ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggleButton); - boolean buttonCheked = savedInstanceState.getBoolean("toggleButtonChecked"); - toggleButton.setChecked(buttonCheked); - } - - private void msg(final String text) { - runOnUiThread(new Runnable() { - public void run() { - mConsoleTextView.append("\n"); - mConsoleTextView.append(text); - mScrollView.fullScroll(View.FOCUS_DOWN); - } - }); - Log.i(TAG, text); - } - - private void printLine() { - msg("------------------------------------------------------------------------"); - } - - private void sleep(int seconds) { - try { - Thread.sleep(seconds * 1000); - } catch (InterruptedException e) { - e.printStackTrace(); - Log.e(TAG, e.toString()); - } - } - - private void enableStartStopButton() { - runOnUiThread(new Runnable() { - public void run() { - ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggleButton); - toggleButton.setEnabled(true); - } - }); - } -} \ No newline at end of file diff --git a/java/examples-java/provisioningclient/build.gradle b/java/examples-java/provisioningclient/build.gradle deleted file mode 100644 index 6517346..0000000 --- a/java/examples-java/provisioningclient/build.gradle +++ /dev/null @@ -1,38 +0,0 @@ -apply plugin: 'com.android.application' - -android { - compileSdkVersion 21 - buildToolsVersion "20.0.0" - - defaultConfig { - applicationId "org.iotivity.base.examples.provisioningclient" - minSdkVersion 21 - targetSdkVersion 21 - versionCode 1 - versionName "1.0" - } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } - lintOptions { - abortOnError false - } -} -repositories { - flatDir { - dirs "../../android_api/base/build/outputs/aar/" - } -} - -try { - dependencies { - compile ":iotivity-base-${TARGET_ARCH}-${RELEASE}@aar" - } -} catch (all) { - print "${ERROR_MSG}" - assert all -} - diff --git a/java/examples-java/provisioningclient/src/main/assets/oic_svr_db_client.json b/java/examples-java/provisioningclient/src/main/assets/oic_svr_db_client.json deleted file mode 100644 index ce2e2c8..0000000 --- a/java/examples-java/provisioningclient/src/main/assets/oic_svr_db_client.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "acl": [ - { - "sub": "Kg==", - "rsrc": [ - "/oic/res", - "/oic/d", - "/oic/p", - "/oic/res/types/d", - "/oic/ad", - "/oic/sec/amacl" - ], - "perms": 2, - "ownrs" : ["YWRtaW5EZXZpY2VVVUlEMA=="] - }, - { - "sub": "Kg==", - "rsrc": [ - "/oic/sec/doxm", - "/oic/sec/pstat" - ], - "perms": 2, - "ownrs" : ["YWRtaW5EZXZpY2VVVUlEMA=="] - } - ], - "pstat": { - "dos": {"s": 3, "p": false}, - "isop": true, - "deviceid": "YWRtaW5EZXZpY2VVVUlEMA==", - "ch": 0, - "cm": 0, - "tm": 0, - "om": 3, - "sm": [3] - }, - "doxm": { - "oxm": [0], - "oxmsel": 0, - "sct": 9, - "owned": true, - "deviceid": "YWRtaW5EZXZpY2VVVUlEMA==", - "ownr": "YWRtaW5EZXZpY2VVVUlEMA==" - } -} diff --git a/java/examples-java/provisioningclient/src/main/java/org/iotivity/base/examples/provisioningclient/ProvisioningClient.java b/java/examples-java/provisioningclient/src/main/java/org/iotivity/base/examples/provisioningclient/ProvisioningClient.java deleted file mode 100644 index df92e2f..0000000 --- a/java/examples-java/provisioningclient/src/main/java/org/iotivity/base/examples/provisioningclient/ProvisioningClient.java +++ /dev/null @@ -1,593 +0,0 @@ -package org.iotivity.base.examples.provisioningclient; - -import android.app.Activity; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.SharedPreferences; -import android.os.AsyncTask; -import android.os.Bundle; -import android.os.Message; -import android.preference.PreferenceManager; -import android.text.method.ScrollingMovementMethod; -import android.util.Log; -import android.view.Gravity; -import android.widget.LinearLayout; -import android.widget.TextView; -import org.iotivity.base.ModeType; -import org.iotivity.base.OcException; -import org.iotivity.base.OcPlatform; -import org.iotivity.base.PlatformConfig; -import org.iotivity.base.QualityOfService; -import org.iotivity.base.ServiceType; -import org.iotivity.base.OcProvisioning; -import org.iotivity.base.OcSecureResource; -import org.iotivity.base.ProvisionResult; -import org.iotivity.base.OxmType; -import org.iotivity.base.OicSecAcl; -import org.iotivity.base.CredType; -import org.iotivity.base.KeySize; -import org.iotivity.base.DeviceStatus; -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.ArrayList; -import java.util.EnumSet; -import java.util.List; - -public class ProvisioningClient extends Activity implements - OcSecureResource.DoOwnershipTransferListener,OcSecureResource.ProvisionPairwiseDevicesListener { - - private static final String TAG = "Provisioning Client: "; - private static final int BUFFER_SIZE = 1024; - int unownedDevCount = StringConstants.NUMBER_ZERO; - private String filePath = ""; - private OcSecureResource newSecureResource; - private List deviceList; - private List ownedDeviceList; - private TextView mEventsTextView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_secure_provision_client); - mEventsTextView = new TextView(this); - mEventsTextView.setGravity(Gravity.BOTTOM); - mEventsTextView.setMovementMethod(new ScrollingMovementMethod()); - LinearLayout layout = (LinearLayout) findViewById(R.id.linearLayout); - layout.addView(mEventsTextView, new LinearLayout.LayoutParams( - LinearLayout.LayoutParams.MATCH_PARENT, 0, 1f) - ); - filePath = getFilesDir().getPath() + "/"; // data/data//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(); - } - - OcProvisioning.PinCallbackListener pinCallbackListener = - new OcProvisioning.PinCallbackListener() { - @Override - public String pinCallbackListener() { - Log.d(TAG, "Inside Pin Callback "); - return ""; - } - }; - - OcSecureResource.ProvisionAclListener provisionAclListener = - new OcSecureResource.ProvisionAclListener() { - @Override - public void provisionAclListener(List provisionResults, - int hasError) { - Log.d(TAG, "Inside ProvisionAclListener "); - if (hasError == StringConstants.ERROR_CODE) { - logMessage("Error: ACL Provision failed !!"); - } else { - logMessage("ACL Provision Done !!"); - new DeviceRevocationAsyncTask().execute(); - } - } - }; - - OcSecureResource.ProvisionCredentialsListener provisionCredentialsListener = - new OcSecureResource.ProvisionCredentialsListener() { - @Override - public void provisionCredentialsListener(List provisionResults, - int hasError) { - Log.d(TAG, "Inside ProvisionCredentialsListener "); - if (hasError == StringConstants.ERROR_CODE) { - logMessage("Error: Provision Credentials failed !!"); - } else { - logMessage("Provision Credentials Done !!"); - new ProvisionACLAsyncTask().execute(); - } - } - }; - - OcSecureResource.UnlinkDevicesListener unlinkDevicesListener = - new OcSecureResource.UnlinkDevicesListener() { - @Override - public void unlinkDevicesListener(List provisionResults, - int hasError) { - Log.d(TAG, "Inside unlinkDevicesListener "); - if (hasError == StringConstants.ERROR_CODE) { - logMessage("Error: UnLinking device !!"); - } else { - logMessage("Unlink Done !!"); - new ProvisionCredentialAsyncTask().execute(); - } - } - }; - - OcSecureResource.RemoveDeviceListener removeDeviceListener = - new OcSecureResource.RemoveDeviceListener() { - @Override - public void removeDeviceListener(List provisionResults, - int hasError) { - if (hasError == StringConstants.ERROR_CODE) { - logMessage("Error: Remove Fail !!"); - } else { - logMessage("Remove Device done !!"); - } - } - }; - - /** - * 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 { - /* - * Initialize DataBase - */ - String sqlDbPath = getFilesDir().getAbsolutePath().replace("files", "databases") + - File.separator; - File file = new File(sqlDbPath); - //check files directory exists - if (!(file.isDirectory())) { - file.mkdirs(); - Log.d(TAG, "Sql db directory created at " + sqlDbPath); - } - Log.d(TAG, "Sql db directory exists at " + sqlDbPath); - OcProvisioning.provisionInit(sqlDbPath + StringConstants.OIC_SQL_DB_FILE); - } catch (OcException e) { - logMessage(TAG + "provisionInit error: " + e.getMessage()); - Log.e(TAG, e.getMessage()); - } - new DiscoveryOTTransferAsyncTask().execute(); - } - - @Override - synchronized public void doOwnershipTransferListener(List ProvisionResultList, - int hasError) { - ProvisionResult pResult = ProvisionResultList.get(0); - if (hasError == StringConstants.ERROR_CODE) { - logMessage(TAG + "Ownership Transfer Failed for " + pResult.getDevId()); - } else { - logMessage(TAG + "Ownership Transfer Successful for " - + pResult.getDevId()); - unownedDevCount--; - } - if (unownedDevCount == 0) { //When done with Ownership Transfer - new OwnedDiscoveryAsyncTask().execute(); - } - } - - private void doPairwiseProvisioning() { - try { - logMessage(TAG + "Pairwise Provisioning b/w " + ownedDeviceList.get(0).getDeviceID() - + " and " + ownedDeviceList.get(1).getDeviceID()); - newSecureResource = ownedDeviceList.get(0); - OcSecureResource newSecureResource2 = ownedDeviceList.get(1); - List resources = new ArrayList(); - List owners = new ArrayList(); - List periods = new ArrayList(); - List recurrences = new ArrayList(); - recurrences.add("Daily"); - resources.add("*"); - owners.add("adminDeviceUUID0"); - periods.add("01-01-15"); - OicSecAcl acl1 = new OicSecAcl(newSecureResource.getDeviceID(), recurrences, periods, - 31, resources, owners); - OicSecAcl acl2 = new OicSecAcl(newSecureResource2.getDeviceID(), recurrences, periods, - 31, resources, owners); - newSecureResource.provisionPairwiseDevices(EnumSet.of(CredType.SYMMETRIC_PAIR_WISE_KEY), - KeySize.OWNER_PSK_LENGTH_128, acl1, newSecureResource2, acl2, this); - } catch (Exception e) { - logMessage(TAG + "Pairwise Provisioning error: " + e.getMessage()); - Log.e(TAG, e.getMessage()); - } - } - - @Override - public void provisionPairwiseDevicesListener(List ProvisionResultList, - int hasError) { - if (hasError == StringConstants.ERROR_CODE) { - logMessage(TAG + "provisionPairwiseDevices Failed"); - } else { - for (int i = 0; i < ProvisionResultList.size(); i++) { - ProvisionResult pResult = ProvisionResultList.get(i); - logMessage(TAG + "provisionPairwiseDevices Result for " - + pResult.getDevId() + "is " + pResult.getResult()); - } - new GetLinkedDevicesAsyncTask().execute(); - } - } - - /** - * Copy svr db json file from assets folder to app data files dir - */ - private void copyJsonFromAsset() { - InputStream inputStream = null; - OutputStream outputStream = null; - int length; - byte[] buffer = new byte[BUFFER_SIZE]; - try { - inputStream = getAssets().open(StringConstants.OIC_CLIENT_JSON_DB_FILE); - File file = new File(filePath); - //check files directory exists - if (!(file.exists() && file.isDirectory())) { - file.mkdirs(); - } - outputStream = new FileOutputStream(filePath + StringConstants.OIC_CLIENT_JSON_DB_FILE); - while ((length = inputStream.read(buffer)) != -1) { - outputStream.write(buffer, 0, length); - } - } 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 (inputStream != null) { - try { - inputStream.close(); - } catch (IOException e) { - Log.e(TAG, e.getMessage()); - } - } - if (outputStream != null) { - try { - outputStream.close(); - } catch (IOException e) { - Log.e(TAG, e.getMessage()); - } - } - } - } - - 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(text); - mEventsTextView.append("\n\n"); - } - }); - Log.i(TAG, text); - Intent intent = new Intent(getPackageName()); - intent.putExtra(StringConstants.MESSAGE, text); - sendBroadcast(intent); - } - - private class DiscoveryOTTransferAsyncTask extends AsyncTask { - - @Override - protected void onPreExecute() { - super.onPreExecute(); - } - - @Override - protected String doInBackground(Void... params) { - try { - /** - * Discover Un-owned devices - */ - publishProgress(TAG + "Discovering Unowned Devices"); - deviceList = new ArrayList(OcProvisioning.discoverUnownedDevices - (StringConstants.DISCOVERY_TIMEOUT_10)); - if (deviceList.size() > 0) { - unownedDevCount = deviceList.size(); - for (int i = 0; i < deviceList.size(); i++) { - publishProgress(TAG + "Un-owned Discovered Device " + (i + 1) + "= " + - deviceList.get(i).getDeviceID()); - } - try { - OcProvisioning.SetownershipTransferCBdata(OxmType.OIC_JUST_WORKS, - pinCallbackListener); - for (int i = 0; i < deviceList.size(); i++) { - publishProgress(TAG + "Doing Ownership Transfer for " + - deviceList.get(i).getDeviceID()); - deviceList.get(i).doOwnershipTransfer(ProvisioningClient.this); - } - } catch (OcException e) { - publishProgress(TAG + "Ownership Transfer error: " + e.getMessage()); - return "Ownership Transfer error: " + e.getMessage(); - - } - } else { - publishProgress(TAG + "No un-owned devices present"); - new OwnedDiscoveryAsyncTask().execute(); - } - } catch (OcException e) { - publishProgress(TAG + "Un-owned discovery error: " + e.getMessage()); - return "Un-owned discovery error: " + e.getMessage(); - } - return "success"; - } - - @Override - protected void onProgressUpdate(String... values) { - logMessage(values[0]); - } - - @Override - protected void onPostExecute(String s) { - super.onPostExecute(s); - } - } - - private class ProvisionACLAsyncTask extends AsyncTask { - - @Override - protected void onPreExecute() { - super.onPreExecute(); - } - - @Override - protected Void doInBackground(Void... params) { - try { - if (ownedDeviceList.size() > 1) { - OcSecureResource ocSecureResource = ownedDeviceList.get(0); - OcSecureResource ocSecureResourceDest = ownedDeviceList.get(1); - publishProgress(TAG + "ACL Provision for " + ocSecureResource.getDeviceID()); - List resources = new ArrayList(); - List owners = new ArrayList(); - List periods = new ArrayList(); - List recurrences = new ArrayList(); - recurrences.add("Daily"); - resources.add("*"); - owners.add("adminDeviceUUID0"); - periods.add("01-01-15"); - OicSecAcl aclObject = new OicSecAcl(ocSecureResourceDest.getDeviceID(), - recurrences, periods, 31, resources, owners); - ocSecureResource.provisionACL(aclObject, provisionAclListener); - } else { - publishProgress(TAG + "No Owned devices present"); - } - } catch (Exception e) { - publishProgress(TAG + "ProvisionACL error: " + e.getMessage()); - } - return null; - } - - @Override - protected void onProgressUpdate(String... values) { - logMessage(values[0]); - } - } - - private class ProvisionCredentialAsyncTask extends AsyncTask { - - @Override - protected void onPreExecute() { - super.onPreExecute(); - } - - @Override - protected Void doInBackground(Void... params) { - try { - if (ownedDeviceList.size() > 1) { - OcSecureResource ocSecureResource = ownedDeviceList.get(0); - OcSecureResource ocSecureResourceDest = ownedDeviceList.get(1); - publishProgress(TAG + "ProvisionCredential for " + - ocSecureResource.getDeviceID() + " with " + - ocSecureResourceDest.getDeviceID()); - ocSecureResource.provisionCredentials(EnumSet.of(CredType.SYMMETRIC_PAIR_WISE_KEY), - KeySize.OWNER_PSK_LENGTH_128, - ocSecureResourceDest, provisionCredentialsListener); - } else { - publishProgress(TAG + "Cannot perform credentials between devices"); - } - } catch (Exception e) { - publishProgress(TAG + "Provision credentials error: " + e.getMessage()); - } - return null; - } - - @Override - protected void onProgressUpdate(String... values) { - logMessage(values[0]); - } - } - - private class GetLinkedDevicesAsyncTask extends AsyncTask { - - @Override - protected void onPreExecute() { - super.onPreExecute(); - } - - @Override - protected String doInBackground(Void... params) { - try { - if (ownedDeviceList.size() > 1) { - OcSecureResource ocSecureResource = ownedDeviceList.get(0); - publishProgress(TAG + "Get linked devices of " + ocSecureResource.getDeviceID()); - List linkedDevices = ocSecureResource.getLinkedDevices(); - if (linkedDevices.size() > 0) { - for (int i = 0; i < linkedDevices.size(); i++) { - publishProgress(TAG + "Linked Devices "+ - (i + 1) + "= " + linkedDevices.get(i)); - } - } else { - publishProgress(TAG + "No linked Devices found"); - } - } else { - publishProgress(TAG + "Cannot perform linked devices"); - } - } catch (Exception e) { - publishProgress(TAG + "getLinked device error: " + e.getMessage()); - return "failed"; - } - return "success"; - } - - @Override - protected void onProgressUpdate(String... values) { - logMessage(values[0]); - } - - @Override - protected void onPostExecute(String s) { - if ("success".equals(s)) { - new ProvisionUnlinkAsyncTask().execute(); - } - } - } - - private class ProvisionUnlinkAsyncTask extends AsyncTask { - - @Override - protected void onPreExecute() { - super.onPreExecute(); - } - - @Override - protected Void doInBackground(Void... params) { - try { - if (ownedDeviceList.size() > 1) { - OcSecureResource ocSecureResource = ownedDeviceList.get(0); - OcSecureResource ocSecureResourceDest = ownedDeviceList.get(1); - publishProgress(TAG + "Un linking " + ocSecureResource.getDeviceID() + - " with " + ocSecureResourceDest.getDeviceID()); - ocSecureResource.unlinkDevices(ocSecureResourceDest, unlinkDevicesListener); - } else { - publishProgress(TAG + "Cannot perform unlink devices"); - } - } catch (Exception e) { - publishProgress(TAG + "Unlink error: " + e.getMessage()); - } - return null; - } - - @Override - protected void onProgressUpdate(String... values) { - logMessage(values[0]); - } - } - - private class DeviceRevocationAsyncTask extends AsyncTask { - - @Override - protected void onPreExecute() { - super.onPreExecute(); - } - - @Override - protected Void doInBackground(Void... params) { - try { - if (ownedDeviceList.size() > 0) { - OcSecureResource ocSecureResource = ownedDeviceList.get(0); - publishProgress(TAG + "Removing " + ocSecureResource.getDeviceID()); - ocSecureResource.removeDevice(StringConstants.DISCOVERY_TIMEOUT_20, - removeDeviceListener); - } else { - publishProgress(TAG + "Cannot remove"); - } - } catch (Exception e) { - publishProgress(TAG + "Remove Device error: " + e.getMessage()); - } - return null; - } - - @Override - protected void onProgressUpdate(String... values) { - logMessage(values[0]); - } - } - - private class OwnedDiscoveryAsyncTask extends AsyncTask { - - @Override - protected void onPreExecute() { - super.onPreExecute(); - } - - @Override - protected String doInBackground(Void... params) { - try { - publishProgress(TAG + "Initiate Owned device Discovery"); - ownedDeviceList = OcProvisioning.discoverOwnedDevices - (StringConstants.DISCOVERY_TIMEOUT_10); - if (ownedDeviceList.size() > 0) { - for (int i = 0; i < ownedDeviceList.size(); i++) { - publishProgress(TAG + "Owned Discovered Device " + (i + 1) + "= " + - ownedDeviceList.get(i).getDeviceID() - + "\nIP Address= " + ownedDeviceList.get(i).getIpAddr() - + "\nOwned Status= " + ownedDeviceList.get(i).getOwnedStatus() - + "\nDevice Status= " + ((ownedDeviceList.get(i). - getDeviceStatus() == DeviceStatus.ON) ? "ON" : "OFF") - ); - } - } else { - publishProgress(TAG + "No Owned devices present"); - } - } catch (OcException e) { - publishProgress(TAG + "Owned device Discovery error: " + e.getMessage()); - return "Owned device Discovery error: " + e.getMessage(); - } - return "success"; - } - - @Override - protected void onProgressUpdate(String... values) { - logMessage(values[0]); - } - - @Override - protected void onPostExecute(String s) { - if (ownedDeviceList.size() > 1 && "success".equals(s)) { - doPairwiseProvisioning(); - } - } - } - - /** - * to display on Server Message on Client screen - */ - public class MessageReceiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - final String message = intent.getStringExtra(StringConstants.MESSAGE); - logMessage(message); - } - } -} diff --git a/java/examples-java/provisioningclient/src/main/java/org/iotivity/base/examples/provisioningclient/StringConstants.java b/java/examples-java/provisioningclient/src/main/java/org/iotivity/base/examples/provisioningclient/StringConstants.java deleted file mode 100644 index 9c9baed..0000000 --- a/java/examples-java/provisioningclient/src/main/java/org/iotivity/base/examples/provisioningclient/StringConstants.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.iotivity.base.examples.provisioningclient; - -public interface StringConstants { - - public static final int NUMBER_ZERO = 0; - public static final int DISCOVERY_TIMEOUT_10 = 10; - public static final int DISCOVERY_TIMEOUT_20 = 20; - public static final int ERROR_CODE = 1; - public static final String OIC_CLIENT_JSON_DB_FILE = "oic_svr_db_client.json"; - public static final String MESSAGE = "message"; - public static final String OIC_SQL_DB_FILE = "Pdm.db"; - public static final int CREDENTIAL_TYPE=1; - public static final int OWNER_PSK_LENGTH_128=128/8; -} -- 2.7.4