From e8d013d7b871b0a2aa7c7f58b64601c99100ed98 Mon Sep 17 00:00:00 2001 From: "jihye424.kim" Date: Mon, 14 Dec 2015 16:19:02 +0900 Subject: [PATCH] sdk update: dynamic load SDKManager class - remove SDKManager class reference -- can not use sdk-manager.jar in build time - find class, method in run time -- need sdk-manager.jar in run time Change-Id: I515d282642eedf7199afd01d16cf0785ce8b26e6 Signed-off-by: jihye424.kim --- .../emulator/manager/tool/SDKUpdateManager.java | 79 ++++++++++++++++++++-- 1 file changed, 74 insertions(+), 5 deletions(-) diff --git a/src/org/tizen/emulator/manager/tool/SDKUpdateManager.java b/src/org/tizen/emulator/manager/tool/SDKUpdateManager.java index a04a889..4474763 100644 --- a/src/org/tizen/emulator/manager/tool/SDKUpdateManager.java +++ b/src/org/tizen/emulator/manager/tool/SDKUpdateManager.java @@ -29,8 +29,12 @@ package org.tizen.emulator.manager.tool; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + import org.tizen.emulator.manager.logging.EMLogger; -import org.tizen.library.sdkmanager.SDKManager; + + public class SDKUpdateManager { public static void checkUpdate() { @@ -40,12 +44,77 @@ public class SDKUpdateManager { class UpdateChecker implements Runnable { + @SuppressWarnings("unchecked") @Override public void run() { - SDKManager sdkManager = new SDKManager(); - boolean isUpdatable = sdkManager.isUpdatable(SDKManager.RequestComponent.EMULATOR); - EMLogger.getLogger().info("Check SDK update : " - + (isUpdatable ? "update available" : "no update")); + @SuppressWarnings("rawtypes") + Class managerClass = null; + @SuppressWarnings("rawtypes") + Class componentEnum = null; + try { + managerClass = Class.forName("org.tizen.library.sdkmanager.SDKManager"); + componentEnum = Class.forName("org.tizen.library.sdkmanager.SDKManager$RequestComponent"); + } catch (ClassNotFoundException e) { + EMLogger.getLogger().warning("Can not find class: " + e.getMessage()); + EMLogger.getLogger().warning("Can not check update available or not"); + return; + } + + if (managerClass == null) { + EMLogger.getLogger().warning("Can not find class 'SDKManager' class"); + EMLogger.getLogger().warning("Can not check update available or not"); + return; + } + if (componentEnum == null) { + EMLogger.getLogger().warning("Can not find class 'RequestComponent' class"); + EMLogger.getLogger().warning("Can not check update available or not"); + return; + } + + Method isUpdatableMethod = null; + try { + // boolean isUpdatable( RequestComponent ); + isUpdatableMethod = managerClass.getMethod("isUpdatable", new Class[] {componentEnum}); + } catch (NoSuchMethodException | SecurityException e) { + EMLogger.getLogger().warning("Can not get 'isUpdatable' method " + e.getMessage()); + } + if (isUpdatableMethod != null) { + Object sdkManager = null; + @SuppressWarnings("rawtypes") + Enum emulatorComponent = null; + try { + sdkManager = managerClass.newInstance(); + } catch (InstantiationException | IllegalAccessException e) { + EMLogger.getLogger().warning(e.getMessage()); + return; + } + if (sdkManager != null) { + EMLogger.getLogger().info("Success to create 'SDKManager' instance"); + } else { + EMLogger.getLogger().info("Fail to create 'SDKManager' instance"); + return; + } + + emulatorComponent = Enum.valueOf(componentEnum, "EMULATOR"); + if (emulatorComponent != null) { + EMLogger.getLogger().info("Success to create 'RequestComponent.EMULATOR' enum"); + } else { + EMLogger.getLogger().info("Fail to create 'RequestComponent.EMULATOR' enum"); + return; + } + + try { + boolean isUpdatable = false; + isUpdatable = (boolean) isUpdatableMethod.invoke(sdkManager, new Object[]{emulatorComponent}); + EMLogger.getLogger().info("Check SDK update : " + + (isUpdatable ? "update available" : "no update")); + } catch (IllegalAccessException + | IllegalArgumentException + | InvocationTargetException e1) { + EMLogger.getLogger().warning(e1.getMessage()); + return; + } + } } } -- 2.7.4