/* * ServiceConfig * Connect SDK * * Copyright (c) 2014 LG Electronics. * Created by Hyun Kook Khang on 19 Jan 2014 * * 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 com.connectsdk.service.config; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import org.json.JSONException; import org.json.JSONObject; import com.connectsdk.core.Util; public class ServiceConfig { public static final String KEY_CLASS = "class"; public static final String KEY_LAST_DETECT = "lastDetection"; public static final String KEY_UUID = "UUID"; private String serviceUUID; private long lastDetected = Long.MAX_VALUE; boolean connected; boolean wasConnected; public ServiceConfigListener listener; public ServiceConfig(String serviceUUID) { this.serviceUUID = serviceUUID; } public ServiceConfig(ServiceDescription desc) { this.serviceUUID = desc.getUUID(); this.connected = false; this.wasConnected = false; this.lastDetected = Util.getTime(); } public ServiceConfig(ServiceConfig config) { this.serviceUUID = config.serviceUUID; this.connected = config.connected; this.wasConnected = config.wasConnected; this.lastDetected = config.lastDetected; this.listener = config.listener; } public ServiceConfig(JSONObject json) { serviceUUID = json.optString(KEY_UUID); lastDetected = json.optLong(KEY_LAST_DETECT); } @SuppressWarnings("unchecked") public static ServiceConfig getConfig(JSONObject json) { Class<ServiceConfig> newServiceClass; try { newServiceClass = (Class<ServiceConfig>) Class.forName(ServiceConfig.class.getPackage().getName() + "." + json.optString(KEY_CLASS)); Constructor<ServiceConfig> constructor = newServiceClass.getConstructor(JSONObject.class); return constructor.newInstance(json); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } return null; } public String getServiceUUID() { return serviceUUID; } public void setServiceUUID(String serviceUUID) { this.serviceUUID = serviceUUID; notifyUpdate(); } public String toString() { return serviceUUID; } public long getLastDetected() { return lastDetected; } public void setLastDetected(long value) { lastDetected = value; notifyUpdate(); } public void detect() { setLastDetected(Util.getTime()); } public ServiceConfigListener getListener() { return listener; } public void setListener(ServiceConfigListener listener) { this.listener = listener; } public JSONObject toJSONObject() { JSONObject jsonObj = new JSONObject(); try { jsonObj.put(KEY_CLASS, this.getClass().getSimpleName()); jsonObj.put(KEY_LAST_DETECT, lastDetected); jsonObj.put(KEY_UUID, serviceUUID); } catch (JSONException e) { e.printStackTrace(); } return jsonObj; } protected void notifyUpdate() { if (listener != null) { listener.onServiceConfigUpdate(this); } } public static interface ServiceConfigListener { public void onServiceConfigUpdate(ServiceConfig serviceConfig); } }