From db64744c0684155b60db78d5121a4cd0c28a2122 Mon Sep 17 00:00:00 2001 From: jooyoul_lee Date: Thu, 21 Nov 2013 14:04:19 +0900 Subject: [PATCH] [Title] binary setting page disigin changed [Desc.] [Issue] --- .../org/tizen/dynamicanalyzer/project/AppInfo.java | 19 +- .../tizen/dynamicanalyzer/project/PackageInfo.java | 6 +- .../swap/channel/data/ProcessInfo.java | 10 +- .../swap/communicator/Communicator30.java | 98 +---- .../swap/logparser/MessageParser.java | 6 +- .../swap/logparser/SWAPLogParser.java | 1 + .../dynamicanalyzer/swap/model/ByteUtils.java | 12 +- .../swap/model/data/ProfileData.java | 3 +- .../swap/platform/BinarySettingManager.java | 36 +- .../swap/platform/ui/BinaryAddDialog.java | 2 +- .../swap/platform/ui/BinarySettingProcessor.java | 154 ++++++++ .../platform/ui/BinarySettingProgressManager.java | 53 +++ .../ui/DeviceExplorer/DADeviceExplorer.java | 89 +++++ .../platform/ui/DeviceExplorer/DeviceExplorer.java | 98 +++-- .../ui/DeviceExplorer/DeviceExplorerDilaog.java | 25 +- .../platform/ui/FileExplorer/DAFileExplorer.java | 87 ++-- .../ui/FileExplorer/FileExplorerDialog.java | 21 +- .../dynamicanalyzer/swap/platform/ui/InputRow.java | 210 ++++++---- .../swap/platform/ui/SaveSettingDialog.java | 3 - .../toolbar/configuration/BinarySettingsPage.java | 439 +++++++++------------ .../tizen/dynamicanalyzer/utils/AnalyzerUtil.java | 124 ++++-- 21 files changed, 913 insertions(+), 583 deletions(-) create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/BinarySettingProcessor.java create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/BinarySettingProgressManager.java create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DeviceExplorer/DADeviceExplorer.java diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/AppInfo.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/AppInfo.java index 58e223f..a775c4e 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/AppInfo.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/AppInfo.java @@ -36,6 +36,7 @@ import org.tizen.dynamicanalyzer.communicator.DACommunicator; import org.tizen.dynamicanalyzer.model.AddrSymbolPair; import org.tizen.dynamicanalyzer.swap.channel.control.ApplicationInfo; import org.tizen.dynamicanalyzer.swap.channel.control.BinaryInfo; +import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; public class AppInfo { @@ -58,8 +59,10 @@ public class AppInfo { public static final String FLAG_ZERO = "0";//$NON-NLS-1$ public static final String FLAG_ONE = "1";//$NON-NLS-1$ - // private BinaryInfo binInfo = null; -// private String mainTargetKey = null; + /** + * String : target binary key - AnalyzerUtil.getTargetBinaryKey(targetPath) + * BinaryInfo : target binary info + */ private HashMap binaryInfoMap = new HashMap(); private String installTime = null; @@ -128,20 +131,20 @@ public class AppInfo { } public BinaryInfo getBinaryInfo(String targetBinPath) { - PackageInfo pkgInfo = DACommunicator.getSelectedDevice().getPackageInfoHash().get(getPackageId()); -// BinaryInfo ret = binaryInfoMap.get(targetBinPath); + PackageInfo pkgInfo = DACommunicator.getSelectedDevice() + .getPackageInfoHash().get(getPackageId()); BinaryInfo ret = pkgInfo.getBinaryInfo(targetBinPath); return ret; } public BinaryInfo getMainBinaryInfo() { - return binaryInfoMap.get(getExecPath()); + String key = AnalyzerUtil.getTargetPathKey(getExecPath()); + return binaryInfoMap.get(key); } public void setMainBinaryInfo(BinaryInfo binInfo) { -// mainTargetKey = AnalyzerUtil.getTargetPathKey(binInfo -// .getTargetBinaryPath()); - binaryInfoMap.put(getExecPath(), binInfo); + String key = AnalyzerUtil.getTargetPathKey(getExecPath()); + binaryInfoMap.put(key, binInfo); } public String getAppId() { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/PackageInfo.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/PackageInfo.java index d6b69f0..0fba682 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/PackageInfo.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/PackageInfo.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import org.tizen.dynamicanalyzer.swap.channel.control.BinaryInfo; +import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; public class PackageInfo { @@ -42,9 +43,10 @@ public class PackageInfo { } public BinaryInfo getBinaryInfo(String path) { + String key = AnalyzerUtil.getTargetPathKey(path); for (AppInfo app : appInfos) { - if (null != app.getBinaryInfoMap().get(path)) { - return app.getBinaryInfoMap().get(path); + if (null != app.getBinaryInfoMap().get(key)) { + return app.getBinaryInfoMap().get(key); } } return null; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/channel/data/ProcessInfo.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/channel/data/ProcessInfo.java index 22dff9a..09d9250 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/channel/data/ProcessInfo.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/channel/data/ProcessInfo.java @@ -37,6 +37,7 @@ import org.tizen.dynamicanalyzer.project.PackageInfo; import org.tizen.dynamicanalyzer.swap.channel.control.BinaryInfo; import org.tizen.dynamicanalyzer.swap.model.DATime; import org.tizen.dynamicanalyzer.swap.platform.BinarySettingManager; +import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; public class ProcessInfo { private int pid = -1; // save key - libOnjects @@ -97,13 +98,16 @@ public class ProcessInfo { BinaryInfo binInfo = null; if (pcAddr >= getLowestAddress() && pcAddr <= getHighestAddress()) { - String pkgId = DACommunicator.getSelectedApp().getInfo( - AppInfo.PACKAGE_INDEX); + String pkgId = DACommunicator.getSelectedApp().getPackageId(); DeviceInfo devInfo = DACommunicator.getSelectedDevice(); PackageInfo pkgInfo = devInfo.getSelectedPackage(pkgId); List apps = pkgInfo.getAppInfos(); for (AppInfo app : apps) { - if (targetBinaryPath.equals(app.getExecPath())) { + String targetBinaryKey = AnalyzerUtil + .getTargetPathKey(targetBinaryPath); + String appExecKey = AnalyzerUtil.getTargetPathKey(app + .getExecPath()); + if (targetBinaryKey.equals(appExecKey)) { binInfo = app.getMainBinaryInfo(); break; } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/communicator/Communicator30.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/communicator/Communicator30.java index 851f7de..04a363e 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/communicator/Communicator30.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/communicator/Communicator30.java @@ -156,33 +156,7 @@ public class Communicator30 extends BaseCommunicator { @Override public HostResult startTrace() { DACommunicator.setRunning(true); - // AppInfo selectedApp = DACommunicator.getSelectedApp(); - // - // PackageInfo pkgInfo = DACommunicator.getSelectedDevice() - // .getPackageInfoHash() - // .get(selectedApp.getInfo(AppInfo.PACKAGE_INDEX)); - // List apps = pkgInfo.getAppInfos(); - // byte[] appInstByte = new byte[0]; - // List appInfos = new ArrayList(); - // for (AppInfo app : apps) { - // ApplicationInfo appInfo = new ApplicationInfo(); - // String appType = app.getInfo(AppInfo.APPTYPE_INDEX); - // if (appType.contains(AppInfo.APPTYPE_CPP) - // || appType.contains(AppInfo.APPTYPE_WEB)) { - // appInfo.setAppType(ApplicationInfo.APPTYPE_TIZEN); - // } else { - // appInfo.setAppType(ApplicationInfo.APPTYPE_COMMON_EXEC); - // } - // appInfo.setAppId(app.getInfo(AppInfo.APPID_INDEX)); - // // appInfo.setExecPath(app.getInfo(AppInfo.EXEC_INDEX) - // // + ".exe"); - // appInfo.setExecPath(app.getExecPath()); - // appInfos.add(appInfo); - // } UserSpaceInst userSpaceInst = getUserSpaceInst(); - // appInstByte = ByteUtils.getByte(appInstByte, - // userSpaceInst.getByteValue()); - byte[] replayData = AnalyzerManager.getProject().getReplayEvent(); byte[] rear = ByteUtils.getByte(userSpaceInst.getByteValue(), replayData); @@ -301,46 +275,6 @@ public class Communicator30 extends BaseCommunicator { output.getAppInstList().add(appInst); } - // for (ApplicationInfo appInfo : appInfos) { - // ApplicationInst appInst = new ApplicationInst(); - // appInst.setApplicationType(appInfo.getAppType()); - // AppInfo selectedApp = DACommunicator.getSelectedApp(); - // appInst.setApplicationId(appInfo.getAppId()); - // appInst.setExecutablePath(appInfo.getExecPath()); - // BinaryInfo mainInfo = DACommunicator.getSelectedApp() - // .getBinaryInfo(appInfo.getExecPath()); - // List symbols = selectedApp.getSymbols(mainInfo - // .getTempBinaryPath()); - // List functionInstList = appInst.getFunctionInstList(); - // - // int size = (symbols == null) ? 0 : symbols.size(); - // int exSize = 0; - // for (int i = 0; i < size; i++) { - // AddrSymbolPair addrSymbol = symbols.get(i); - // String symbol = addrSymbol.getSymbol(); - // // FIXME: black list hard coded. - // if (symbol.contains("__i686.get_pc_thunk")) { - // exSize++; - // continue; - // } - // FunctionInst functionInst = new FunctionInst(); - // functionInst.setAddr(addrSymbol.getAddr()); - // functionInst.setArgs(getFunctionArgs(addrSymbol.getSymbol())); - // functionInstList.add(functionInst); - // - // // for debug - // System.out.print("DEBUG : addr "); - // AnalyzerUtil.printHexdecimal(addrSymbol.getAddr()); - // System.out.print(" symbol " + addrSymbol.getSymbol() - // + " args "); - // ByteUtils.printByteArray(functionInst.getArgs()); - // System.out.println(); - // } - // appInst.setFunctionCount(size - exSize); - // // appInst.setFunctionCount(0); - // output.getAppInstList().add(appInst); - // } - // output.setCount(output.getAppInstList().size()); return output; } @@ -361,15 +295,9 @@ public class Communicator30 extends BaseCommunicator { byte[] preMsg = ByteUtils.getByte(binCount); for (AppInfo app : apps) { - // String targetPath = app.getInfo(AppInfo.EXEC_INDEX); String targetPath = app.getExecPath(); - // String type = app.getInfo(AppInfo.APPTYPE_INDEX); - // if (type.contains(AppInfo.APPTYPE_CPP)) { - // targetPath += CommonConstants.EXTENSION_EXEC_FILE; - // } preMsg = ByteUtils.getByte(preMsg, targetPath); } - // byte[] preMsg = ByteUtils.getByte(binCount, targetPath); int length = preMsg.length; byte[] msg = ByteUtils.getByte(msgBinInfo, length, preMsg); @@ -405,8 +333,8 @@ public class Communicator30 extends BaseCommunicator { binInfo.setLocalBinaryPath(localBinaryPath); // init source binary path binInfo.setTempBinaryPath(localBinaryPath); - if (null == splitLocalBinaryPath[0] - || splitLocalBinaryPath[0].isEmpty()) { + if (splitLocalBinaryPath.length == 0 + || splitLocalBinaryPath.length < 3) { localBinaryPath = AnalyzerPaths.TEMP_FOLDER_PATH + File.separator + getFileName(targetPath); result = pullTheFile(targetPath, localBinaryPath); @@ -470,7 +398,7 @@ public class Communicator30 extends BaseCommunicator { } String targetHashCode = binInfo.getMd5sumValue(); - if (!targetHashCode.equals(localHashCode)) { + if (0 != targetHashCode.compareTo(localHashCode)) { localBinaryPath = AnalyzerPaths.TEMP_FOLDER_PATH + File.separator + getFileName(targetPath); result = pullTheFile(targetPath, localBinaryPath); @@ -1013,9 +941,6 @@ public class Communicator30 extends BaseCommunicator { public HostResult sendBinaryInfoMessageForLib( List binaryData) { - // List binaryData = - // BinarySettingManager.getInstance() - // .getBinarySettings(); List binPaths = new ArrayList(); List binInfoList = new ArrayList(); @@ -1024,10 +949,10 @@ public class Communicator30 extends BaseCommunicator { BinaryInfo binInfo = new BinaryInfo(); binInfo.setTargetBinaryPath(data.getBinaryPath()); - // String key = AnalyzerUtil.getTargetPathKey(binInfo - // .getTargetBinaryPath()); + String key = AnalyzerUtil.getTargetPathKey(binInfo + .getTargetBinaryPath()); DACommunicator.getSelectedApp().getBinaryInfoMap() - .put(binInfo.getTargetBinaryPath(), binInfo); + .put(key, binInfo); binInfoList.add(binInfo); } @@ -1064,32 +989,29 @@ public class Communicator30 extends BaseCommunicator { int binaryType = ByteUtils.toInt(payload, index); index += INT_SIZE; localBinaryPath = ByteUtils.getString(payload, index).trim(); + index += ByteUtils.getStringLength(payload, index); binInfo.setLocalBinaryPath(localBinaryPath); binInfo.setTempBinaryPath(localBinaryPath); String[] splitLocalBinaryPath = localBinaryPath .split(CommonConstants.SLASH); - if (splitLocalBinaryPath.length <= 0 - || null == splitLocalBinaryPath[0] - || splitLocalBinaryPath[0].isEmpty()) { + if (splitLocalBinaryPath.length <= 0) { localBinaryPath = AnalyzerPaths.TEMP_FOLDER_PATH + File.separator + getFileName(binPaths.get(i)); result = pullTheFile(binPaths.get(i), localBinaryPath); if (result.isSuccess()) { - index += ByteUtils.getStringLength(payload, index); String md5sum = ByteUtils.getString(payload, index); + index += ByteUtils.getStringLength(payload, index); binInfo.setType(binaryType); binInfo.setTempBinaryPath(localBinaryPath); binInfo.setMd5sumValue(md5sum); - index += ByteUtils.getStringLength(payload, index); } continue; } else { - index += ByteUtils.getStringLength(payload, index); String md5sum = ByteUtils.getString(payload, index); + index += ByteUtils.getStringLength(payload, index); binInfo.setType(binaryType); binInfo.setTempBinaryPath(localBinaryPath); binInfo.setMd5sumValue(md5sum); - index += ByteUtils.getStringLength(payload, index); } // host has no binary file - pull binary file from target diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/MessageParser.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/MessageParser.java index 64fe73b..706a7b3 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/MessageParser.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/MessageParser.java @@ -199,7 +199,7 @@ public class MessageParser { index += LONG_SIZE; String libPath = ByteUtils.getString(data, index); // remove \0 char - libPath = libPath.substring(0, libPath.length() - 1); +// libPath = libPath.substring(0, libPath.length() - 1); index += ByteUtils.getStringLength(data, index); libObj.setLowestAddress(lowestAddr); libObj.setHighestAddress(highestAddr); @@ -234,8 +234,8 @@ public class MessageParser { pInfo.setStartTime(startTime); pInfo.setLowestAddress(lowAddr); pInfo.setHighestAddress(highAddr); - targetBinaryPath = new String(targetBinaryPath.substring(0, - targetBinaryPath.length() - 1)); +// targetBinaryPath = new String(targetBinaryPath.substring(0, +// targetBinaryPath.length() - 1)); pInfo.setMainTargetBinaryPath(targetBinaryPath); pInfo.setDepLibCount(dependantLibCount); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/SWAPLogParser.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/SWAPLogParser.java index 9637b70..fbf1f0b 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/SWAPLogParser.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/SWAPLogParser.java @@ -203,6 +203,7 @@ public class SWAPLogParser implements Runnable { // + AnalyzerUtil.toHexdecimal(processInfo // .getLowestAddress())); + System.out.println("profile " + pData.getLibName()); pushLog(log, logPack); if (pcAddr >= processInfo.getLowestAddress() diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/ByteUtils.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/ByteUtils.java index 77c6b51..aab7692 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/ByteUtils.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/ByteUtils.java @@ -379,7 +379,9 @@ public class ByteUtils { int length = getStringLength(data, start); byte[] temp = new byte[length]; System.arraycopy(data, start, temp, 0, length); - return new String(temp); + String str = new String(temp); + str = str.substring(0, str.length() - 1); + return str; } public static int getStringLength(byte[] data, int start) { @@ -393,7 +395,7 @@ public class ByteUtils { } public static void printByteArray(byte[] input) { -// System.out.println(" ====---- print byte array start----===="); + // System.out.println(" ====---- print byte array start----===="); int line = 0; for (int i = 0; i < input.length; i++, line++) { String b = String.format("%2x", input[i]); @@ -402,13 +404,13 @@ public class ByteUtils { System.out.print(" "); } if (line == 19) { - // System.out.println(); + // System.out.println(); line = -1; } } -// System.out.println(" ====---- print byte array end----===="); + // System.out.println(" ====---- print byte array end----===="); } - + public static void printByteArrayForStart(byte[] input) { System.out.println(" ====---- print byte array start----===="); int line = 0; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProfileData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProfileData.java index a2d0a57..7373375 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProfileData.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProfileData.java @@ -139,7 +139,6 @@ public class ProfileData extends LogData { ProcessInfoPackage processInfoPkg = AnalyzerManager.getProject() .getProcessInfo(pid); if (time > 0) { - ProcessInfo processInfo = processInfoPkg.getProcessInfo(time); BinaryInfo binInfo = processInfo.getTargetBinary(pcAddr); if (null == binInfo) { @@ -147,7 +146,7 @@ public class ProfileData extends LogData { } else { libName = binInfo.getTargetBinaryPath(); } - // System.out.println("plib name : " + libName); +// System.out.println("plib name : " + libName); } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/BinarySettingManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/BinarySettingManager.java index 209347a..9ac80c9 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/BinarySettingManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/BinarySettingManager.java @@ -53,8 +53,6 @@ public class BinarySettingManager { private List inputRowList = new ArrayList(); private List realBinarySettings = new ArrayList(); - private List addBinarySettings = new ArrayList(); - private List removeBinarySettings = new ArrayList(); public static synchronized BinarySettingManager getInstance() { if (null == instance) { @@ -267,10 +265,6 @@ public class BinarySettingManager { return inputRowList; } - // public List getTempBinarySettings() { - // return tempBinarySettings; - // } - public void removeInputRow(String path) { InputRow inputRow = inputRowHash.get(path); InputRow nextInputRow = null; @@ -292,31 +286,12 @@ public class BinarySettingManager { } inputRowHash.remove(path); inputRowList.remove(index); - // removeBinarySettingData(path); - } - - public void removeAddBinarySettingData(String binPath) { - for (int i = 0; i < addBinarySettings.size(); i++) { - if (binPath.equals(addBinarySettings.get(i).getBinaryPath())) { - addBinarySettings.remove(i); - break; - } - } - } - - public void removeRemoveBinarySettingData(String binPath) { - for (int i = 0; i < removeBinarySettings.size(); i++) { - if (binPath.equals(removeBinarySettings.get(i).getBinaryPath())) { - removeBinarySettings.remove(i); - break; - } - } } public void addBinaryInfos(List input) { for (int i = 0; i < input.size(); i++) { String localPath = input.get(i).getLocalBinaryPath(); - BinaryInfo binInfo = targetBinInfoMap.get(localPath); + BinaryInfo binInfo = localBinInfoMap.get(localPath); if (null != binInfo) { String targetPath = binInfo.getTargetBinaryPath(); targetBinInfoMap.remove(targetPath); @@ -364,13 +339,4 @@ public class BinarySettingManager { public List getRealBinarySettings() { return realBinarySettings; } - - public List getAddBinarySettings() { - return addBinarySettings; - } - - public List getRemoveBinarySettings() { - return removeBinarySettings; - } - } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/BinaryAddDialog.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/BinaryAddDialog.java index 37554fb..5fcd8cb 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/BinaryAddDialog.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/BinaryAddDialog.java @@ -143,7 +143,7 @@ public class BinaryAddDialog extends DAMessageBox { @Override public void handleClickEvent(DACustomButton button) { FileExplorerDialog dialog = new FileExplorerDialog(shell); - dialog.getExplorer().setReturnDirectory(true); +// dialog.getExplorer().setReturnDirectory(true); dialog.getExplorer().setRoot("/home/"); if (!sourceText.getText().isEmpty()) { dialog.getExplorer().setCurrent(sourceText.getText()); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/BinarySettingProcessor.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/BinarySettingProcessor.java new file mode 100644 index 0000000..04118d0 --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/BinarySettingProcessor.java @@ -0,0 +1,154 @@ +package org.tizen.dynamicanalyzer.swap.platform.ui; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.swt.widgets.Display; +import org.tizen.dynamicanalyzer.common.AnalyzerConstants; +import org.tizen.dynamicanalyzer.communicator.DACommunicator; +import org.tizen.dynamicanalyzer.swap.platform.BinarySettingData; +import org.tizen.dynamicanalyzer.swap.platform.BinarySettingManager; +import org.tizen.dynamicanalyzer.ui.toolbar.configuration.BinarySettingsPage; +import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; +import org.tizen.sdblib.service.FileEntry; + +public class BinarySettingProcessor implements Runnable { + private static final int TYPE_ADD = 1; + private static final int TYPE_LOAD = 2; + private static final int TYPE_UPDATE = 3; + + private static Thread binaryThread = null; + + private static Object result = null; + private static BinarySettingsPage page = null; + + private static int type = TYPE_ADD; + + public static void runAddThread(Object input, BinarySettingsPage inputPage) { + page = inputPage; + result = input; + type = TYPE_ADD; + binaryThread = new Thread(null, new BinarySettingProcessor(), + "Binary add thread"); + binaryThread.start(); + } + + public static void runLoadingThread(BinarySettingsPage inputPage) { + page = inputPage; + type = TYPE_LOAD; + binaryThread = new Thread(null, new BinarySettingProcessor(), + "Binary loading thread"); + binaryThread.start(); + } + + public static void runUpdateDebugRoot(BinarySettingsPage inputPage) { + page = inputPage; + type = TYPE_UPDATE; + binaryThread = new Thread(null, new BinarySettingProcessor(), + "update debug root thread"); + binaryThread.start(); + } + + public static void stopThread() { + if (null != binaryThread && binaryThread.isAlive()) { + binaryThread.interrupt(); + } + } + + public static void clear() { + stopThread(); + result = null; + } + + @Override + public void run() { + if (type == TYPE_ADD) { + @SuppressWarnings("unchecked") + List entries = (List) result; + + // get binary info & send swap_add message + List addBinData = new ArrayList(); + for (FileEntry entry : entries) { + if (entry.isDirectory() || entry.isRoot()) { + continue; + } + + BinarySettingData binaryData = new BinarySettingData(); + binaryData.setBinaryPath(entry.getFullPath()); + binaryData.setDebugPath(AnalyzerUtil.getDebugInfoPath( + entry.getFullPath(), page.getDebugRootPath())); + addBinData.add(binaryData); + if (addBinData.size() < 40) { + BinarySettingProgressManager.getInstance().setValue( + addBinData.size()); + } + } + BinarySettingProgressManager.getInstance().setValue(40); + + if (addBinData.size() > 0) { + BinarySettingManager.getInstance().putRealBinarySettingData( + addBinData); + BinarySettingProgressManager.getInstance().setValue(50); + + BinarySettingManager.getInstance().checkSourcePath(addBinData); + BinarySettingProgressManager.getInstance().setValue(60); + + DACommunicator.sendBinaryInfoMessageForLib(addBinData); + BinarySettingProgressManager.getInstance().setValue(80); + + DACommunicator.sendSWAPMessage( + AnalyzerConstants.MSG_SWAP_INST_ADD, addBinData); + BinarySettingProgressManager.getInstance().setValue(90); + Display.getDefault().syncExec(new Runnable() { + @Override + public void run() { + page.initInputRows(); + } + }); + + BinarySettingProgressManager.getInstance().setValue(95); + } + } else if (type == TYPE_LOAD) { + BinarySettingProgressManager.getInstance().setValue(30); + List binarySettings = BinarySettingManager + .getInstance().getRealBinarySettings(); + BinarySettingProgressManager.getInstance().setValue(50); + DACommunicator.sendBinaryInfoMessageForLib(binarySettings); + BinarySettingProgressManager.getInstance().setValue(80); + DACommunicator.sendSWAPMessage(AnalyzerConstants.MSG_SWAP_INST_ADD, + binarySettings); + BinarySettingProgressManager.getInstance().setValue(95); + Display.getDefault().syncExec(new Runnable() { + @Override + public void run() { + page.updateLayout(); + } + }); + } else { + BinarySettingProgressManager.getInstance().setValue(30); + List binarySettings = BinarySettingManager + .getInstance().getRealBinarySettings(); + BinarySettingProgressManager.getInstance().setValue(40); + int count = 41; + for (BinarySettingData binData : binarySettings) { + if (count < 90) { + BinarySettingProgressManager.getInstance() + .setValue(count++); + } + if (null == binData.getDebugPath() || binData.getDebugPath().isEmpty()) { + String debugPath = AnalyzerUtil.getDebugInfoPath( + binData.getBinaryPath(), page.getDebugRootPath()); + binData.setDebugPath(debugPath); + } + } + Display.getDefault().syncExec(new Runnable() { + @Override + public void run() { + page.initInputRows(); + } + }); + BinarySettingProgressManager.getInstance().setValue(95); + } + BinarySettingProgressManager.getInstance().stopProgress(); + } +} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/BinarySettingProgressManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/BinarySettingProgressManager.java new file mode 100644 index 0000000..5907b33 --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/BinarySettingProgressManager.java @@ -0,0 +1,53 @@ +package org.tizen.dynamicanalyzer.swap.platform.ui; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Shell; +import org.tizen.dynamicanalyzer.nl.AnalyzerLabels; +import org.tizen.dynamicanalyzer.ui.widgets.ProgressDialog; +import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; + +public class BinarySettingProgressManager { + private static ProgressDialog dialog = null; + + private static BinarySettingProgressManager instance = new BinarySettingProgressManager(); + + public static BinarySettingProgressManager getInstance() { + return instance; + } + + public void startProcessStart(String waitMessage) { + Shell shell = AnalyzerUtil.getWorkbenchWindow().getShell(); + dialog = new ProgressDialog(shell, SWT.ON_TOP); + if (null != dialog) { + dialog.open(); + dialog.setProgressMessage(waitMessage); + dialog.setProgressInfo(AnalyzerLabels.STOP_PROCESS_DLG_PLEASE_WAIT); + } + } + + public void setValue(final int nSelect) { + + if (null != dialog) { + Display.getDefault().syncExec(new Runnable() { + @Override + public void run() { + dialog.setValue(nSelect); + } + }); + } + } + + public void stopProgress() { + if (null != dialog) { + Display.getDefault().syncExec(new Runnable() { + @Override + public void run() { + dialog.setValue(100); + dialog.close(); + } + }); + } + } + +} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DeviceExplorer/DADeviceExplorer.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DeviceExplorer/DADeviceExplorer.java new file mode 100644 index 0000000..8e5722b --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DeviceExplorer/DADeviceExplorer.java @@ -0,0 +1,89 @@ +package org.tizen.dynamicanalyzer.swap.platform.ui.DeviceExplorer; + +import org.eclipse.nebula.widgets.grid.GridItem; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Composite; +import org.tizen.dynamicanalyzer.swap.platform.ui.ExplorerUtil; +import org.tizen.sdblib.service.FileEntry; +import org.tizen.sdblib.service.FileEntryType; + +public class DADeviceExplorer extends DeviceExplorer { + + public DADeviceExplorer(Composite parent) { + super(parent); + } + + @Override + public void updateData() { + if (null == current) { + if (null == root) { + System.out.println("Root is empty"); + return; + } + current = root; + } + table.removeAll(); + inputText.setText(current.getFullPath()); + + if (!current.getFullPath().equals(root.getFullPath())) { + GridItem parentItem = new GridItem(table, SWT.NONE); + parentItem.setText(1, ExplorerUtil.PARENT_STR); + parentItem.setData(ExplorerUtil.DATA_FIEL_KEY, current.getParent()); + } + FileEntry[] children = current.getChildren(); + int selectionIndex = -1; + + if (null != children) { + int size = children.length; + // dirs + for (int i = 0; i < size; i++) { + FileEntry child = children[i]; + if (!child.isDirectory() + || child.getType() == FileEntryType.DirectoryLink) { + continue; + } + + GridItem item = new GridItem(table, SWT.NONE); + item.setText(1, child.getName()); + item.setData(ExplorerUtil.DATA_FIEL_KEY, child); + if (null != selectionStr + && selectionStr.equals(child.getFullPath())) { + int index = table.indexOf(item); + // table.getVerticalBar().setSelection(index); + table.setSelection(index); + selected = child; + inputText.setText(child.getFullPath()); + selectionIndex = index; + } + } + + // files + for (int i = 0; i < size; i++) { + FileEntry child = children[i]; + if (child.isDirectory() + || child.getType() == FileEntryType.Link) { + continue; + } + + if (null != filter && !child.getName().contains(filter)) { + continue; + } + GridItem item = new GridItem(table, SWT.NONE); + item.setText(1, child.getName()); + item.setData(ExplorerUtil.DATA_FIEL_KEY, child); + if (null != selectionStr + && selectionStr.equals(child.getFullPath())) { + int index = table.indexOf(item); + table.setSelection(index); + selected = child; + inputText.setText(child.getFullPath()); + selectionIndex = index; + } + } + table.getVerticalBar().setMaximum(size); + table.getVerticalBar().setSelection(selectionIndex); + } + table.update(); + } + +} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DeviceExplorer/DeviceExplorer.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DeviceExplorer/DeviceExplorer.java index 2cba73b..dfd65ea 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DeviceExplorer/DeviceExplorer.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DeviceExplorer/DeviceExplorer.java @@ -26,6 +26,9 @@ package org.tizen.dynamicanalyzer.swap.platform.ui.DeviceExplorer; +import java.util.ArrayList; +import java.util.List; + import org.eclipse.nebula.widgets.grid.Grid; import org.eclipse.nebula.widgets.grid.GridColumn; import org.eclipse.nebula.widgets.grid.GridItem; @@ -57,22 +60,23 @@ import org.tizen.sdblib.IDevice; import org.tizen.sdblib.service.FileEntry; public class DeviceExplorer extends Composite { - private static int FAIL = -1; - private static int FILE = 1; - private static int DIRECTORY = 2; + protected static int FAIL = -1; + protected static int FILE = 1; + protected static int DIRECTORY = 2; protected Grid table = null; protected Text inputText = null; protected DACustomButton goButton = null; protected Label info = null; - private boolean bDirectory = false; - private IDevice device = null; - private FileEntry root = null; - private FileEntry current = null; - private FileEntry selected = null; + protected IDevice device = null; + protected FileEntry root = null; + protected FileEntry current = null; + protected FileEntry selected = null; + + protected String filter = null; - private String selectionStr = null; + protected String selectionStr = null; private SelectionListener tableSelectionListener = new SelectionListener() { @@ -197,7 +201,7 @@ public class DeviceExplorer extends Composite { info.setBackground(ColorResources.DIALOG_BG_UPPER); info.setFont(FontResources.TABLE_CELL_FONT); - table = new DAGrid(this, SWT.SINGLE | SWT.BORDER | SWT.V_SCROLL); + table = new DAGrid(this, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL); table.setBackground(ColorResources.TABLE_CONTENTS_NORMAL); table.setForeground(ColorResources.TABLE_CONTENTS_FONT_COLOR); // table.setFont(FontResources.EXPLORER_CELL_FONT); @@ -254,10 +258,40 @@ public class DeviceExplorer extends Composite { } FileEntry[] children = current.getChildren(); int selectionIndex = -1; + if (null != children) { int size = children.length; + // dirs for (int i = 0; i < size; i++) { FileEntry child = children[i]; + if (!child.isDirectory()) { + continue; + } + + GridItem item = new GridItem(table, SWT.NONE); + item.setText(1, child.getName()); + item.setData(ExplorerUtil.DATA_FIEL_KEY, child); + if (null != selectionStr + && selectionStr.equals(child.getFullPath())) { + int index = table.indexOf(item); + // table.getVerticalBar().setSelection(index); + table.setSelection(index); + selected = child; + inputText.setText(child.getFullPath()); + selectionIndex = index; + } + } + + // files + for (int i = 0; i < size; i++) { + FileEntry child = children[i]; + if (child.isDirectory()) { + continue; + } + + if (null != filter && !child.getName().contains(filter)) { + continue; + } GridItem item = new GridItem(table, SWT.NONE); item.setText(1, child.getName()); item.setData(ExplorerUtil.DATA_FIEL_KEY, child); @@ -294,39 +328,24 @@ public class DeviceExplorer extends Composite { return table; } - public FileEntry getSelection() { + public List getSelection() { GridItem[] selections = table.getSelection(); + List fileEntries = new ArrayList(); + if (selections.length > 0) { - GridItem selection = selections[0]; - if (selection.getText().equals(ExplorerUtil.PARENT_STR)) { - return null; - } - FileEntry entry = (FileEntry) selection - .getData(ExplorerUtil.DATA_FIEL_KEY); - if (entry.isDirectory() || entry.isRoot()) { - if (bDirectory) { - return entry; - } else { - return null; - } - } else { - if (bDirectory) { - return entry.getParent(); - } else { - return entry; + for (int i = 0; i < selections.length; i++) { + GridItem selection = selections[i]; + + if (selection.getText().equals(ExplorerUtil.PARENT_STR)) { + continue; } + + FileEntry entry = (FileEntry) selection + .getData(ExplorerUtil.DATA_FIEL_KEY); + fileEntries.add(entry); } - } else { - return null; } - } - - public void setReturnDirectory(boolean getDir) { - bDirectory = getDir; - } - - public boolean isReturnDirectory() { - return bDirectory; + return fileEntries; } public void setDevice(IDevice dev) { @@ -355,4 +374,7 @@ public class DeviceExplorer extends Composite { return result; } + public void setFilterString(String filter) { + this.filter = filter; + } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DeviceExplorer/DeviceExplorerDilaog.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DeviceExplorer/DeviceExplorerDilaog.java index 61a1c91..b8fe673 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DeviceExplorer/DeviceExplorerDilaog.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DeviceExplorer/DeviceExplorerDilaog.java @@ -26,6 +26,9 @@ package org.tizen.dynamicanalyzer.swap.platform.ui.DeviceExplorer; +import java.util.ArrayList; +import java.util.List; + import org.eclipse.nebula.widgets.grid.Grid; import org.eclipse.nebula.widgets.grid.GridItem; import org.eclipse.swt.SWT; @@ -62,7 +65,7 @@ public class DeviceExplorerDilaog extends DAMessageBox { shell.setBackground(ColorResources.DIALOG_BG_UPPER); shell.setText("Select binary"); - explorer = new DeviceExplorer(shell); + explorer = new DADeviceExplorer(shell); FormData data = new FormData(); data.top = new FormAttachment(0, 17); data.left = new FormAttachment(0, 6); @@ -72,7 +75,7 @@ public class DeviceExplorerDilaog extends DAMessageBox { explorer.setDevice(DACommunicator.getSelectedDevice().getIDevice()); explorer.setRoot(DACommunicator.getSelectedDevice().getIDevice() .getRoot().getFullPath()); - explorer.updateData(); + // explorer.updateData(); Composite buttonComp = new Composite(shell, SWT.NONE); buttonComp.setLayout(new FormLayout()); @@ -159,16 +162,28 @@ public class DeviceExplorerDilaog extends DAMessageBox { FileEntry entry = (FileEntry) item .getData(ExplorerUtil.DATA_FIEL_KEY); - if (!entry.isDirectory() && !entry.isRoot() - && !explorer.isReturnDirectory()) { - result = entry; + if (!entry.isDirectory() && !entry.isRoot()) { + List entries = new ArrayList(); + entries.add(entry); + result = entries; shell.dispose(); } } }); } + @Override + protected boolean run() { + super.run(); + explorer.updateData(); + return true; + } + public DeviceExplorer getExplorer() { return explorer; } + + public void setFilter(String filter) { + explorer.setFilterString(filter); + } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/FileExplorer/DAFileExplorer.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/FileExplorer/DAFileExplorer.java index 8a6a7f8..d893723 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/FileExplorer/DAFileExplorer.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/FileExplorer/DAFileExplorer.java @@ -27,6 +27,8 @@ package org.tizen.dynamicanalyzer.swap.platform.ui.FileExplorer; import java.io.File; +import java.util.ArrayList; +import java.util.List; import org.eclipse.nebula.widgets.grid.Grid; import org.eclipse.nebula.widgets.grid.GridColumn; @@ -64,12 +66,13 @@ public class DAFileExplorer extends Composite { protected Text inputText = null; protected DACustomButton goButton = null; protected Label info = null; - private boolean bDirectory = false; private File root = null; private File current = null; private File selected = null; + protected String filter = null; + private String selectionStr = null; private SelectionListener tableSelectionListener = new SelectionListener() { @@ -194,7 +197,7 @@ public class DAFileExplorer extends Composite { info.setBackground(ColorResources.DIALOG_BG_UPPER); info.setFont(FontResources.TABLE_CELL_FONT); - table = new DAGrid(this, SWT.SINGLE | SWT.BORDER | SWT.V_SCROLL); + table = new DAGrid(this, SWT.BORDER | SWT.V_SCROLL); table.setBackground(ColorResources.TABLE_CONTENTS_NORMAL); table.setForeground(ColorResources.TABLE_CONTENTS_FONT_COLOR); // table.setFont(FontResources.EXPLORER_CELL_FONT); @@ -251,10 +254,17 @@ public class DAFileExplorer extends Composite { current.getParentFile()); } File[] children = current.listFiles(); + int selectionIndex = -1; + if (null != children) { int size = children.length; + + // dirs for (int i = 0; i < size; i++) { File child = children[i]; + if (!child.isDirectory()) { + continue; + } GridItem item = new GridItem(table, SWT.NONE); item.setText(1, child.getName()); item.setData(ExplorerUtil.DATA_FIEL_KEY, child); @@ -264,10 +274,36 @@ public class DAFileExplorer extends Composite { table.setSelection(index); selected = child; inputText.setText(child.getAbsolutePath()); + selectionIndex = index; } } - } + // files + for (int i = 0; i < size; i++) { + File child = children[i]; + if (child.isDirectory()) { + continue; + } + + if (null != filter && !child.getName().contains(filter)) { + continue; + } + + GridItem item = new GridItem(table, SWT.NONE); + item.setText(1, child.getName()); + item.setData(ExplorerUtil.DATA_FIEL_KEY, child); + if (null != selectionStr + && selectionStr.equals(child.getAbsolutePath())) { + int index = table.indexOf(item); + table.setSelection(index); + selected = child; + inputText.setText(child.getAbsolutePath()); + selectionIndex = index; + } + table.getVerticalBar().setMaximum(size); + table.getVerticalBar().setSelection(selectionIndex); + } + } table.update(); } @@ -287,42 +323,22 @@ public class DAFileExplorer extends Composite { return table; } - public File getSelection() { + public List getSelection() { GridItem[] selections = table.getSelection(); + List files = new ArrayList(); + if (selections.length > 0) { - GridItem selection = selections[0]; - if (selection.getText().equals(ExplorerUtil.PARENT_STR)) { - return null; - } - File entry = (File) selection.getData(ExplorerUtil.DATA_FIEL_KEY); - if (entry.isDirectory()) { - if (bDirectory) { - return entry; - } else { - return null; + for (int i = 0; i < selections.length; i++) { + GridItem selection = selections[i]; + if (selection.getText().equals(ExplorerUtil.PARENT_STR)) { + continue; } - } else { - if (bDirectory) { - return entry.getParentFile(); - } else { - return entry; - } - } - } else { - if (bDirectory) { - return current; - } else { - return null; + File entry = (File) selection + .getData(ExplorerUtil.DATA_FIEL_KEY); + files.add(entry); } } - } - - public void setReturnDirectory(boolean getDir) { - bDirectory = getDir; - } - - public boolean isReturnDirectory() { - return bDirectory; + return files; } public int setCurrent(String path) { @@ -347,4 +363,7 @@ public class DAFileExplorer extends Composite { return result; } + public void setFilterString(String filter) { + this.filter = filter; + } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/FileExplorer/FileExplorerDialog.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/FileExplorer/FileExplorerDialog.java index b333c78..b05f4e8 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/FileExplorer/FileExplorerDialog.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/FileExplorer/FileExplorerDialog.java @@ -26,6 +26,8 @@ package org.tizen.dynamicanalyzer.swap.platform.ui.FileExplorer; import java.io.File; +import java.util.ArrayList; +import java.util.List; import org.eclipse.nebula.widgets.grid.Grid; import org.eclipse.nebula.widgets.grid.GridItem; @@ -129,10 +131,7 @@ public class FileExplorerDialog extends DAMessageBox { shell.dispose(); } }); - } - protected boolean run() { - explorer.updateData(); explorer.getTable().addMouseListener(new MouseListener() { @Override @@ -156,13 +155,20 @@ public class FileExplorerDialog extends DAMessageBox { } GridItem item = items[0]; File entry = (File) item.getData(ExplorerUtil.DATA_FIEL_KEY); - - if (!entry.isDirectory() && !explorer.isReturnDirectory()) { - result = entry; + if (!entry.isDirectory()) { + List entries = new ArrayList(); + entries.add(entry); + result = entries; shell.dispose(); } } }); + } + + @Override + protected boolean run() { + super.run(); + explorer.updateData(); return true; } @@ -170,4 +176,7 @@ public class FileExplorerDialog extends DAMessageBox { return explorer; } + public void setFilter(String filter) { + explorer.setFilterString(filter); + } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/InputRow.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/InputRow.java index 7bae4e2..b949b0c 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/InputRow.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/InputRow.java @@ -25,6 +25,8 @@ */ package org.tizen.dynamicanalyzer.swap.platform.ui; +import java.io.File; +import java.util.ArrayList; import java.util.List; import org.eclipse.swt.SWT; @@ -34,70 +36,96 @@ import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; +import org.tizen.dynamicanalyzer.common.AnalyzerConstants; import org.tizen.dynamicanalyzer.common.CommonConstants; +import org.tizen.dynamicanalyzer.common.PathManager; +import org.tizen.dynamicanalyzer.communicator.DACommunicator; import org.tizen.dynamicanalyzer.resources.ColorResources; +import org.tizen.dynamicanalyzer.swap.platform.BinarySettingData; import org.tizen.dynamicanalyzer.swap.platform.BinarySettingManager; +import org.tizen.dynamicanalyzer.swap.platform.ui.FileExplorer.FileExplorerDialog; import org.tizen.dynamicanalyzer.ui.toolbar.configuration.BinarySettingsPage; import org.tizen.dynamicanalyzer.ui.widgets.DAButton; import org.tizen.dynamicanalyzer.widgets.button.DACustomButton; import org.tizen.dynamicanalyzer.widgets.button.DACustomButtonClickEventListener; public class InputRow extends Composite { - private final static int ROW_HEIGHT = 18; - private Text binaryPathText = null; + // private Text binaryPathText = null; + private Label binaryName = null; private Text debugPathText = null; private Text sourcePathText = null; - private DACustomButton editButton = null; + private DACustomButton findDebugButton = null; + private DACustomButton findSourceButton = null; + private DACustomButton removeButton = null; private int index = -1; - private DACustomButtonClickEventListener minusButtonListener = new DACustomButtonClickEventListener() { + private DACustomButtonClickEventListener removeButtonListener = new DACustomButtonClickEventListener() { @Override public void handleClickEvent(DACustomButton button) { BinarySettingManager.getInstance().removeInputRow( - binaryPathText.getText()); - // get InputRow -> get Input Composite - Composite pp = button.getParent().getParent(); - // get Scrolled Composite -> binary Setting page - Composite page = pp.getParent().getParent(); - BinarySettingsPage bsPage = (BinarySettingsPage) page; - int selection = bsPage.getSelectedRadio(); - if (selection == BinarySettingsPage.RADIO_ADD) { - BinarySettingManager.getInstance().removeAddBinarySettingData( - binaryPathText.getText()); - } else if (selection == BinarySettingsPage.RADIO_REMOVE) { - BinarySettingManager - .getInstance() - .removeRemoveBinarySettingData(binaryPathText.getText()); - } + binaryName.getText()); + Composite inputComposite = button.getParent().getParent(); + BinarySettingData rmData = BinarySettingManager.getInstance() + .getRealBinarySetting(binaryName.getText()); + List rmBinaries = new ArrayList(); + rmBinaries.add(rmData); + DACommunicator.sendSWAPMessage( + AnalyzerConstants.MSG_SWAP_INST_REMOVE, rmBinaries); + + BinarySettingManager.getInstance().removeRealBinarySettingData( + binaryName.getText()); button.getParent().dispose(); - pp.layout(); + ((BinarySettingsPage)(inputComposite.getParent().getParent())).updateLayout(); } }; - private DACustomButtonClickEventListener editButtonListener = new DACustomButtonClickEventListener() { + private DACustomButtonClickEventListener findDebugButtonListener = new DACustomButtonClickEventListener() { @Override public void handleClickEvent(DACustomButton button) { - BinaryAddDialog dialog = new BinaryAddDialog( - getParent().getShell(), binaryPathText.getText(), - debugPathText.getText()); + FileExplorerDialog dialog = new FileExplorerDialog(getShell()); + dialog.setFilter("debug"); + dialog.getExplorer().setRoot(PathManager.getRootStrapsPath()); Object result = dialog.open(); - if (null != result) { + if (result != null) { @SuppressWarnings("unchecked") - List paths = (List) result; - binaryPathText.setText(paths.get(0)); - debugPathText.setText(paths.get(1)); - sourcePathText.setText(paths.get(2)); + List files = (List) result; + if (!files.isEmpty()) { + File file = files.get(0); + debugPathText.setText(file.getAbsolutePath()); + } + } + } + }; + + private DACustomButtonClickEventListener findSourceButtonListener = new DACustomButtonClickEventListener() { + + @Override + public void handleClickEvent(DACustomButton button) { + FileExplorerDialog dialog = new FileExplorerDialog(getShell()); + dialog.getExplorer().setRoot("/home/"); + Object result = dialog.open(); + if (result != null) { + @SuppressWarnings("unchecked") + List files = (List) result; + if (!files.isEmpty()) { + File file = files.get(0); + if (!file.isDirectory()) { + file = file.getParentFile(); + } + sourcePathText.setText(file.getAbsolutePath()); + } } } }; public InputRow(Composite parent) { - super(parent, SWT.NONE); + super(parent, SWT.BORDER); this.setBackground(ColorResources.DIALOG_BG_UPPER); Rectangle pRect = parent.getBounds(); @@ -109,68 +137,100 @@ public class InputRow extends Composite { FormData data = new FormData(); if (null != lastChlid) { - data.top = new FormAttachment(lastChlid, 2); + data.top = new FormAttachment(lastChlid, 5); } else { data.top = new FormAttachment(0, 5); } - data.height = ROW_HEIGHT; - data.left = new FormAttachment(0, 10); - data.width = pRect.width; + data.height = 60; + data.left = new FormAttachment(0, 5); + data.width = pRect.width - 10; this.setLayoutData(data); this.setLayout(new FormLayout()); - binaryPathText = new Text(this, SWT.SINGLE); - binaryPathText.setEditable(false); - binaryPathText.setBackground(ColorResources.GRAY_170); + binaryName = new Label(this, SWT.TRANSPARENT); + binaryName.setBackground(ColorResources.DIALOG_BG_UPPER); + + Label debugLabel = new Label(this, SWT.TRANSPARENT); + debugLabel.setBackground(ColorResources.DIALOG_BG_UPPER); + debugLabel.setText("Debug package"); + + Label sourceLabel = new Label(this, SWT.TRANSPARENT); + sourceLabel.setBackground(ColorResources.DIALOG_BG_UPPER); + sourceLabel.setText("Source Directory path"); debugPathText = new Text(this, SWT.SINGLE); - debugPathText.setEditable(false); debugPathText.setBackground(ColorResources.GRAY_170); - editButton = new DAButton(this, SWT.NONE); + + findDebugButton = new DAButton(this, SWT.NONE); + findDebugButton.addClickListener(findDebugButtonListener); + findDebugButton.setText("F"); + + findSourceButton = new DAButton(this, SWT.NONE); + findSourceButton.addClickListener(findSourceButtonListener); + findSourceButton.setText("F"); + removeButton = new DAButton(this, SWT.NONE); + removeButton.addClickListener(removeButtonListener); + removeButton.setText("X"); sourcePathText = new Text(this, SWT.SINGLE); + sourcePathText.setBackground(ColorResources.GRAY_170); data = new FormData(); data.top = new FormAttachment(0, 0); data.left = new FormAttachment(0, 0); - data.right = new FormAttachment(37, 0); - data.height = ROW_HEIGHT; - binaryPathText.setLayoutData(data); + data.right = new FormAttachment(0, 200); + data.height = 20; + binaryName.setLayoutData(data); data = new FormData(); data.top = new FormAttachment(0, 0); - data.left = new FormAttachment(37, 5); - data.right = new FormAttachment(74, 0); - data.height = ROW_HEIGHT; + data.right = new FormAttachment(100, 0); + data.width = 20; + data.height = 20; + removeButton.setLayoutData(data); + + data = new FormData(); + data.top = new FormAttachment(binaryName, 0); + data.left = new FormAttachment(0, 5); + data.right = new FormAttachment(50, -10); + data.height = 20; + debugLabel.setLayoutData(data); + + data = new FormData(); + data.top = new FormAttachment(binaryName, 0); + data.left = new FormAttachment(debugLabel, 0); + data.right = new FormAttachment(90, -10); + data.height = 20; + sourceLabel.setLayoutData(data); + + data = new FormData(); + data.top = new FormAttachment(debugLabel, 0); + data.left = new FormAttachment(0, 0); + data.right = new FormAttachment(50, -50); + data.height = 20; debugPathText.setLayoutData(data); data = new FormData(); - data.top = new FormAttachment(0, 0); - data.left = new FormAttachment(60, 5); - data.right = new FormAttachment(85, 0); - data.height = 0; - data.width = 0; - sourcePathText.setLayoutData(data); + data.top = new FormAttachment(debugLabel, 0); + data.left = new FormAttachment(debugPathText, 0); + data.width = 20; + data.height = 20; + findDebugButton.setLayoutData(data); data = new FormData(); - data.top = new FormAttachment(0, 0); - data.left = new FormAttachment(debugPathText, 3); - data.width = 65; - data.height = ROW_HEIGHT; - editButton.setLayoutData(data); - editButton.setText("Edit"); - editButton.addClickListener(editButtonListener); + data.top = new FormAttachment(debugLabel, 0); + data.left = new FormAttachment(findDebugButton, 5); + data.right = new FormAttachment(90, -10); + data.height = 20; + sourcePathText.setLayoutData(data); data = new FormData(); - data.top = new FormAttachment(0, 0); - // data.left = new FormAttachment(85, 3); - data.left = new FormAttachment(editButton, 3); - data.width = 65; - data.height = ROW_HEIGHT; - removeButton.setLayoutData(data); - removeButton.setText("remove"); - removeButton.addClickListener(minusButtonListener); + data.top = new FormAttachment(debugLabel, 0); + data.left = new FormAttachment(sourcePathText, 0); + data.width = 20; + data.height = 20; + findSourceButton.setLayoutData(data); } @@ -183,11 +243,11 @@ public class InputRow extends Composite { } public void setBinaryText(String text) { - binaryPathText.setText(text); + binaryName.setText(text); } public String getBinaryText() { - return binaryPathText.getText(); + return binaryName.getText(); } public void setDebugText(String text) { @@ -208,28 +268,20 @@ public class InputRow extends Composite { public String getSaveData() { StringBuffer strBuffer = new StringBuffer(); - strBuffer.append(binaryPathText.getText()) - .append(CommonConstants.COMMA); - if (null == debugPathText.getText()) { + strBuffer.append(binaryName.getText()).append(CommonConstants.COMMA); + if (null == debugPathText.getText() || debugPathText.getText().isEmpty()) { strBuffer.append(CommonConstants.SPACE).append( CommonConstants.COMMA); - ; } else { strBuffer.append(debugPathText.getText()).append( CommonConstants.COMMA); - ; } - if (null == sourcePathText.getText()) { + if (null == sourcePathText.getText() || sourcePathText.getText().isEmpty()) { strBuffer.append(CommonConstants.SPACE); } else { strBuffer.append(sourcePathText.getText()); } return strBuffer.toString(); } - - public void setDisable() { - editButton.setButtonEnabled(false); - removeButton.setButtonEnabled(false); - } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/SaveSettingDialog.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/SaveSettingDialog.java index 9ed7e1b..2ad8f3d 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/SaveSettingDialog.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/SaveSettingDialog.java @@ -141,9 +141,6 @@ public class SaveSettingDialog extends DAMessageBox { File saveFile = new File(targetPath); FileWriter fileWriter = null; BufferedWriter bufWriter = null; - // List binaryData = - // BinarySettingManager.getInstance() - // .getTempBinarySettings(); boolean success = false; try { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/configuration/BinarySettingsPage.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/configuration/BinarySettingsPage.java index f923c8f..72e9ff3 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/configuration/BinarySettingsPage.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/configuration/BinarySettingsPage.java @@ -47,23 +47,23 @@ import org.eclipse.swt.widgets.Listener; import org.tizen.dynamicanalyzer.common.AnalyzerConstants; import org.tizen.dynamicanalyzer.common.AnalyzerPaths; import org.tizen.dynamicanalyzer.common.CommonConstants; +import org.tizen.dynamicanalyzer.common.PathManager; import org.tizen.dynamicanalyzer.communicator.DACommunicator; import org.tizen.dynamicanalyzer.resources.ColorResources; -import org.tizen.dynamicanalyzer.resources.FontResources; import org.tizen.dynamicanalyzer.swap.platform.BinarySettingData; import org.tizen.dynamicanalyzer.swap.platform.BinarySettingManager; -import org.tizen.dynamicanalyzer.swap.platform.ui.BinaryAddDialog; +import org.tizen.dynamicanalyzer.swap.platform.ui.BinarySettingProcessor; +import org.tizen.dynamicanalyzer.swap.platform.ui.BinarySettingProgressManager; import org.tizen.dynamicanalyzer.swap.platform.ui.InputRow; import org.tizen.dynamicanalyzer.swap.platform.ui.LoadSettingDialog; import org.tizen.dynamicanalyzer.swap.platform.ui.SaveSettingDialog; +import org.tizen.dynamicanalyzer.swap.platform.ui.DeviceExplorer.DeviceExplorerDilaog; +import org.tizen.dynamicanalyzer.swap.platform.ui.FileExplorer.FileExplorerDialog; import org.tizen.dynamicanalyzer.ui.page.DAPageComposite; import org.tizen.dynamicanalyzer.ui.widgets.DAButton; import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; import org.tizen.dynamicanalyzer.widgets.button.DACustomButton; import org.tizen.dynamicanalyzer.widgets.button.DACustomButtonClickEventListener; -import org.tizen.dynamicanalyzer.widgets.button.radio.DARadioButton; -import org.tizen.dynamicanalyzer.widgets.button.radio.DARadioGroup; -import org.tizen.dynamicanalyzer.widgets.button.radio.DARadioSelectionListener; public class BinarySettingsPage extends DAPageComposite { public static final String ID = BinarySettingsPage.class.getName(); @@ -78,86 +78,27 @@ public class BinarySettingsPage extends DAPageComposite { private ScrolledComposite scrolledComposite = null; private Composite inputComposite = null; - DARadioGroup radioGroup = null; - private DARadioButton currentRadioButton = null; - private DARadioButton addRadioButton = null; - private DARadioButton removeRadioButton = null; - private DAButton cleanButton = null; private DAButton addButton = null; private DAButton saveButton = null; private DAButton loadButton = null; + private DAButton debugRootButton = null; + private Label msgTypeLabel = null; - private DARadioSelectionListener currentRadioButtonListener = new DARadioSelectionListener() { - - @Override - public void handleSelectionEvent(DARadioButton radio) { - cleanButtonListener.handleClickEvent(null); - initInputRows(); - addButton.setButtonEnabled(false); - saveButton.setButtonEnabled(true); - loadButton.setButtonEnabled(false); - cleanButton.setButtonEnabled(false); - } - }; + private String rootPath = null; + private BinarySettingsPage me = null; - private DARadioSelectionListener addRadioButtonListener = new DARadioSelectionListener() { - - @Override - public void handleSelectionEvent(DARadioButton radio) { - cleanButtonListener.handleClickEvent(null); - initInputRows(); - addButton.setButtonEnabled(true); - saveButton.setButtonEnabled(true); - loadButton.setButtonEnabled(true); - cleanButton.setButtonEnabled(true); - } - }; - - private DARadioSelectionListener removeRadioButtonListener = new DARadioSelectionListener() { - - @Override - public void handleSelectionEvent(DARadioButton radio) { - cleanButtonListener.handleClickEvent(null); - initInputRows(); - addButton.setButtonEnabled(true); - saveButton.setButtonEnabled(true); - loadButton.setButtonEnabled(true); - cleanButton.setButtonEnabled(true); - } - }; private DACustomButtonClickEventListener addButtonListener = new DACustomButtonClickEventListener() { @Override public void handleClickEvent(DACustomButton button) { - BinaryAddDialog dialog = new BinaryAddDialog(button.getParent() - .getShell()); + DeviceExplorerDilaog dialog = new DeviceExplorerDilaog(getShell()); + dialog.setFilter(".so"); Object result = dialog.open(); - if (result != null) { - @SuppressWarnings("unchecked") - List paths = (List) result; - InputRow inputRow = new InputRow(inputComposite); - inputRow.setBinaryText(paths.get(0)); - inputRow.setDebugText(paths.get(1)); - inputRow.setSourceText(paths.get(2)); - inputRowHash.put(paths.get(0), inputRow); - inputRowList.add(inputRow); - - BinarySettingData binaryData = new BinarySettingData(); - binaryData.setBinaryPath(inputRow.getBinaryText()); - binaryData.setDebugPath(inputRow.getDebugText()); - binaryData.setUserSourcePath(inputRow.getSourceText()); - - if (addRadioButton.isSelected()) { - BinarySettingManager.getInstance().getAddBinarySettings() - .add(binaryData); - } else if (removeRadioButton.isSelected()) { - BinarySettingManager.getInstance() - .getRemoveBinarySettings().add(binaryData); - } - - inputComposite.layout(); + BinarySettingProgressManager.getInstance().startProcessStart( + "Wait for add binaries..."); + BinarySettingProcessor.runAddThread(result, me); } } }; @@ -173,6 +114,7 @@ public class BinarySettingsPage extends DAPageComposite { return; } + // swap remove message send and inputrow dispose cleanButtonListener.handleClickEvent(null); String path = (String) result; @@ -180,7 +122,7 @@ public class BinarySettingsPage extends DAPageComposite { BufferedReader br = null; String content = null; try { - List tempBinarySettings = new ArrayList(); + List binarySettings = new ArrayList(); br = new BufferedReader(new FileReader(saveFile)); while (null != (content = br.readLine())) { InputRow inputRow = new InputRow(inputComposite); @@ -196,17 +138,14 @@ public class BinarySettingsPage extends DAPageComposite { binaryData.setBinaryPath(inputRow.getBinaryText()); binaryData.setDebugPath(inputRow.getDebugText()); binaryData.setUserSourcePath(inputRow.getSourceText()); - tempBinarySettings.add(binaryData); - } - if (addRadioButton.isSelected()) { - BinarySettingManager.getInstance().getAddBinarySettings() - .addAll(tempBinarySettings); - } else if (removeRadioButton.isSelected()) { - BinarySettingManager.getInstance() - .getRemoveBinarySettings() - .addAll(tempBinarySettings); + binarySettings.add(binaryData); } + BinarySettingManager.getInstance().putRealBinarySettingData( + binarySettings); + BinarySettingProgressManager.getInstance().startProcessStart( + "now loading binaries..."); + BinarySettingProcessor.runLoadingThread(me); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { @@ -214,10 +153,34 @@ public class BinarySettingsPage extends DAPageComposite { } finally { AnalyzerUtil.tryClose(br); } - inputComposite.layout(); } }; + private DACustomButtonClickEventListener debugRootButtonListener = new DACustomButtonClickEventListener() { + + @Override + public void handleClickEvent(DACustomButton button) { + FileExplorerDialog dialog = new FileExplorerDialog(getShell()); + dialog.getExplorer().setRoot("/home/"); + Object result = dialog.open(); + if (result != null) { + @SuppressWarnings("unchecked") + List files = (List) result; + if (!files.isEmpty()) { + File file = files.get(0); + if (!file.isDirectory()) { + file = file.getParentFile(); + } + rootPath = file.getAbsolutePath(); + } + } + if (null != rootPath) { + BinarySettingProgressManager.getInstance().startProcessStart( + "Wait for update debug path"); + BinarySettingProcessor.runUpdateDebugRoot(me); + } + } + }; private DACustomButtonClickEventListener saveButtonListener = new DACustomButtonClickEventListener() { @Override @@ -225,8 +188,6 @@ public class BinarySettingsPage extends DAPageComposite { SaveSettingDialog dialog = new SaveSettingDialog(button.getParent() .getShell(), inputRowList); dialog.open(); - // save dialog - // filename.setting } }; @@ -234,18 +195,39 @@ public class BinarySettingsPage extends DAPageComposite { @Override public void handleClickEvent(DACustomButton button) { - for (int i = 0; i < inputRowList.size(); i++) { - inputRowList.get(i).dispose(); + List binaries = BinarySettingManager + .getInstance().getRealBinarySettings(); + if (!binaries.isEmpty()) { + DACommunicator.sendSWAPMessage( + AnalyzerConstants.MSG_SWAP_INST_REMOVE, binaries); + + for (int i = 0; i < inputRowList.size(); i++) { + BinarySettingManager.getInstance() + .removeRealBinarySettingData( + inputRowList.get(i).getBinaryText()); + inputRowList.get(i).dispose(); + } + inputRowList.clear(); + inputRowHash.clear(); } - inputRowList.clear(); - inputRowHash.clear(); + + updateLayout(); } }; + private void clearLayout() { + for (int i = 0; i < inputRowList.size(); i++) { + inputRowList.get(i).dispose(); + } + inputRowList.clear(); + inputRowHash.clear(); + } + public BinarySettingsPage(Composite parent, int style) { super(parent, style); - + me = this; name = "Binary Settings"; + rootPath = PathManager.getRootStrapsPath(); inputRowHash = BinarySettingManager.getInstance().getInputRowHash(); inputRowList = BinarySettingManager.getInstance().getInputRowList(); @@ -260,85 +242,22 @@ public class BinarySettingsPage extends DAPageComposite { this.setLayout(new FormLayout()); this.setBackground(ColorResources.DIALOG_BG_UPPER); - Label msgTypeLabel = new Label(this, SWT.TRANSPARENT); + int libCount = BinarySettingManager.getInstance() + .getRealBinarySettings().size(); + msgTypeLabel = new Label(this, SWT.TRANSPARENT); FormData data = new FormData(); data.top = new FormAttachment(0, 6); data.left = new FormAttachment(0, 8); data.height = 16; - data.width = 60; + data.width = 100; msgTypeLabel.setLayoutData(data); - msgTypeLabel.setText("Libraies :"); + msgTypeLabel.setText("Libraies (" + libCount + ")"); msgTypeLabel.setBackground(ColorResources.DIALOG_BG_UPPER); - radioGroup = new DARadioGroup(); - - currentRadioButton = new DARadioButton(this, SWT.NONE, RADIO_CURRENT); - data = new FormData(); - data.top = new FormAttachment(0, 6); - data.left = new FormAttachment(msgTypeLabel, 22); - data.height = 16; - data.width = 120; - currentRadioButton.setLayoutData(data); - currentRadioButton.setForeground(ColorResources.BLACK); - currentRadioButton.setBackground(ColorResources.DIALOG_BG_UPPER); - currentRadioButton.setText("Current Library"); - currentRadioButton.addSelectionListener(currentRadioButtonListener); - radioGroup.addChild(currentRadioButton); - - addRadioButton = new DARadioButton(this, SWT.NONE, RADIO_ADD); - data = new FormData(); - data.top = new FormAttachment(0, 6); - data.left = new FormAttachment(currentRadioButton, 22); - data.height = 16; - data.width = 100; - addRadioButton.setLayoutData(data); - addRadioButton.setForeground(ColorResources.BLACK); - addRadioButton.setBackground(ColorResources.DIALOG_BG_UPPER); - addRadioButton.setText("Add Library"); - addRadioButton.addSelectionListener(addRadioButtonListener); - radioGroup.addChild(addRadioButton); - - removeRadioButton = new DARadioButton(this, SWT.NONE, RADIO_REMOVE); - data = new FormData(); - data.top = new FormAttachment(0, 6); - data.left = new FormAttachment(addRadioButton, 22); - data.height = 16; - data.width = 120; - removeRadioButton.setLayoutData(data); - removeRadioButton.setForeground(ColorResources.BLACK); - removeRadioButton.setBackground(ColorResources.DIALOG_BG_UPPER); - removeRadioButton.setText("Remove Library"); - removeRadioButton.addSelectionListener(removeRadioButtonListener); - radioGroup.addChild(removeRadioButton); - - Label binaryLabel = new Label(this, SWT.TRANSPARENT); - data = new FormData(); - data.top = new FormAttachment(msgTypeLabel, 12); - data.left = new FormAttachment(0, 20); - data.height = 10; - data.width = 148 + 80; - binaryLabel.setLayoutData(data); - binaryLabel.setText("Binary Name"); - binaryLabel.setBackground(ColorResources.DIALOG_BG_UPPER); - binaryLabel.setForeground(ColorResources.BLUE); - binaryLabel.setFont(FontResources.ADDITEM_BUTTON_FONT); - - Label sourceLabel = new Label(this, SWT.TRANSPARENT); - data = new FormData(); - data.top = new FormAttachment(msgTypeLabel, 12); - data.left = new FormAttachment(binaryLabel, 3); - data.height = 10; - data.width = 207 + 60; - sourceLabel.setLayoutData(data); - sourceLabel.setText("Debug Binary Path"); - sourceLabel.setBackground(ColorResources.DIALOG_BG_UPPER); - sourceLabel.setForeground(ColorResources.BLUE); - sourceLabel.setFont(FontResources.ADDITEM_BUTTON_FONT); - scrolledComposite = new ScrolledComposite(this, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); data = new FormData(); - data.top = new FormAttachment(binaryLabel, 6); + data.top = new FormAttachment(msgTypeLabel, 6); data.left = new FormAttachment(0, 6); data.height = 210; data.width = 590; @@ -348,18 +267,16 @@ public class BinarySettingsPage extends DAPageComposite { scrolledComposite.setExpandHorizontal(true); scrolledComposite.setExpandVertical(true); - // scrolledComposite.setMinSize(WIDTH - 30, 200); - inputComposite = new Composite(scrolledComposite, SWT.NONE); scrolledComposite.setContent(inputComposite); scrolledComposite.setMinSize(inputComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT)); scrolledComposite.setShowFocusedControl(true); data = new FormData(); - data.top = new FormAttachment(binaryLabel, 5); - data.left = new FormAttachment(0, 15); - data.height = 210; - data.width = 590; + data.top = new FormAttachment(0, 5); + data.left = new FormAttachment(0, 0); + data.right = new FormAttachment(100, 0); + data.bottom = new FormAttachment(100, -5); inputComposite.setLayoutData(data); inputComposite.setLayout(new FormLayout()); inputComposite.setBackground(ColorResources.DIALOG_BG_UPPER); @@ -384,6 +301,16 @@ public class BinarySettingsPage extends DAPageComposite { loadButton.setText("Load Settings"); loadButton.addClickListener(loadButtonListener); + debugRootButton = new DAButton(this, SWT.NONE); + data = new FormData(); + data.top = new FormAttachment(scrolledComposite, 5); + data.left = new FormAttachment(loadButton, 8); + data.height = 22; + data.width = 100; + debugRootButton.setLayoutData(data); + debugRootButton.setText("set debug root"); + debugRootButton.addClickListener(debugRootButtonListener); + addButton = new DAButton(this, SWT.NONE); data = new FormData(); data.top = new FormAttachment(scrolledComposite, 5); @@ -411,22 +338,6 @@ public class BinarySettingsPage extends DAPageComposite { @Override public void handleEvent(Event event) { - if (currentRadioButton.isSelected()) { - addButton.setButtonEnabled(false); - saveButton.setButtonEnabled(true); - loadButton.setButtonEnabled(false); - cleanButton.setButtonEnabled(false); - } else if (addRadioButton.isSelected()) { - addButton.setButtonEnabled(true); - saveButton.setButtonEnabled(true); - loadButton.setButtonEnabled(true); - cleanButton.setButtonEnabled(true); - } else { - addButton.setButtonEnabled(true); - saveButton.setButtonEnabled(true); - loadButton.setButtonEnabled(true); - cleanButton.setButtonEnabled(true); - } initInputRows(); } }); @@ -435,93 +346,123 @@ public class BinarySettingsPage extends DAPageComposite { @Override public void handleEvent(Event event) { - System.out.println(" dispose called!"); - BinarySettingManager.getInstance().getAddBinarySettings() - .clear(); - BinarySettingManager.getInstance().getRemoveBinarySettings() - .clear(); } }); } public void doApply() { - List tempBinarySettings = new ArrayList(); - if (addRadioButton.isSelected()) { - for (InputRow input : inputRowList) { - BinarySettingData binaryData = new BinarySettingData(); - binaryData.setBinaryPath(input.getBinaryText()); - binaryData.setDebugPath(input.getDebugText()); - binaryData.setUserSourcePath(input.getSourceText()); - tempBinarySettings.add(binaryData); - } - // BinarySettingManager.getInstance().putBinarySettingData( - // tempBinarySettings); - BinarySettingManager.getInstance().putRealBinarySettingData( - tempBinarySettings); - BinarySettingManager.getInstance().checkSourcePath( - tempBinarySettings); - - DACommunicator.sendBinaryInfoMessageForLib(tempBinarySettings); - DACommunicator.sendSWAPMessage(AnalyzerConstants.MSG_SWAP_INST_ADD, - tempBinarySettings); - BinarySettingManager.getInstance().getAddBinarySettings().clear(); - } else if (removeRadioButton.isSelected()) { - for (InputRow input : inputRowList) { - - BinarySettingManager.getInstance().removeRealBinarySettingData( - input.getBinaryText()); - - BinarySettingData binaryData = new BinarySettingData(); - binaryData.setBinaryPath(input.getBinaryText()); - binaryData.setDebugPath(input.getDebugText()); - binaryData.setUserSourcePath(input.getSourceText()); - tempBinarySettings.add(binaryData); - } - DACommunicator.sendSWAPMessage( - AnalyzerConstants.MSG_SWAP_INST_REMOVE, tempBinarySettings); - BinarySettingManager.getInstance().getRemoveBinarySettings() - .clear(); - } else { - System.out.println("current do nothing"); + // dirty check and update path + for (InputRow inputRow : inputRowList) { + String binary = inputRow.getBinaryText(); + String debug = inputRow.getDebugText(); + String source = inputRow.getSourceText(); + BinarySettingData binData = BinarySettingManager.getInstance() + .getRealBinarySetting(binary); + binData.setDebugPath(debug); + binData.setUserSourcePath(source); } - initInputRows(); - // BinarySettingManager.getInstance().syncData(); + + System.out.println("update complete!"); } public void initInputRows() { List binData = null; - if (addRadioButton.isSelected()) { - binData = BinarySettingManager.getInstance().getAddBinarySettings(); - } else if (removeRadioButton.isSelected()) { - binData = BinarySettingManager.getInstance() - .getRemoveBinarySettings(); - } else { - binData = BinarySettingManager.getInstance() - .getRealBinarySettings(); - } - cleanButtonListener.handleClickEvent(null); + binData = BinarySettingManager.getInstance().getRealBinarySettings(); + clearLayout(); for (int i = 0; i < binData.size(); i++) { InputRow inputRow = new InputRow(inputComposite); inputRow.setBinaryText(binData.get(i).getBinaryPath()); - String source = binData.get(i).getDebugPath(); + String debug = binData.get(i).getDebugPath(); + if (null != debug && !debug.isEmpty()) { + inputRow.setDebugText(debug); + } + + String source = binData.get(i).getUserSourcePath(); if (null != source && !source.isEmpty()) { - inputRow.setDebugText(source); - // String[] splitSource = - // source.split(CommonConstants.SLASH); - // String comboSel = new String( - // splitSource[splitSource.length - 1]); - // inputRow.setSourceComboText(comboSel); + inputRow.setSourceText(source); } inputRowHash.put(binData.get(i).getBinaryPath(), inputRow); inputRowList.add(inputRow); - if (currentRadioButton.isSelected()) { - inputRow.setDisable(); - } } + // inputComposite.layout(); + // scrolledComposite.setMinSize(inputComposite.computeSize(SWT.DEFAULT, + // SWT.DEFAULT)); + updateLayout(); + } + + // private String getDebugInfoPath(String libPath) { + // String[] splitTargetLib = libPath.split(CommonConstants.SLASH); + // String libFullName = splitTargetLib[splitTargetLib.length - 1]; + // int index = libFullName.indexOf(".so"); + // if (index < 0) { + // return null; + // } + // // 3 means remove "lib" string + // String debugInfoToken = "*" + libFullName.substring(3, index) + // + "-debuginfo*.rpm"; + // String rootstrapPath = PathManager.getRootStrapsPath(); + // List lines = new ArrayList(); + // String toolPath = AnalyzerPaths.TOOL_FOLDER_PATH + File.separator + // + "debuginfo.sh"; + // String[] command = new String[] { toolPath, "-f", rootstrapPath, + // debugInfoToken }; + // try { + // Runtime rt = Runtime.getRuntime(); + // Process process = rt.exec(command); + // process.waitFor(); + // BufferedReader reader = new BufferedReader(new InputStreamReader( + // process.getInputStream())); + // int lineCount = 0; + // String line = null; + // while (null != (line = reader.readLine())) { + // lineCount++; + // System.out.println("LINE (" + lineCount + ") : " + line); + // lines.add(line); + // } + // if (lineCount == 0) { + // BufferedReader error = new BufferedReader( + // new InputStreamReader(process.getErrorStream())); + // String errorStr = error.readLine(); + // System.out.println("find debug info path fail.. " + errorStr); + // return null; + // } + // } catch (IOException e) { + // e.printStackTrace(); + // return null; + // } catch (InterruptedException e) { + // e.printStackTrace(); + // return null; + // } + // + // String select = null; + // for (String line : lines) { + // if (null == select) { + // select = line; + // } else if (select.length() > line.length()) { + // select = line; + // } + // } + // + // String debugPath = null; + // if (null == select) { + // return null; + // } else { + // select = select.substring(1, select.length()); + // debugPath = rootstrapPath + select; + // } + // return debugPath; + // } + + public void updateLayout() { + int count = BinarySettingManager.getInstance().getRealBinarySettings() + .size(); + msgTypeLabel.setText("Libries (" + count + ")"); inputComposite.layout(); + scrolledComposite.setMinSize(inputComposite.computeSize(SWT.DEFAULT, + SWT.DEFAULT)); } - public int getSelectedRadio() { - return radioGroup.getSelection().getRadioId(); + public String getDebugRootPath() { + return rootPath; } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/AnalyzerUtil.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/AnalyzerUtil.java index 5a69a84..02137dc 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/AnalyzerUtil.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/AnalyzerUtil.java @@ -1073,8 +1073,8 @@ public class AnalyzerUtil { public static String getBinarySourcePath(int pid, long time) { String localBinPath = AnalyzerUtil.getProcessLocalBinaryPath(pid, time); -// String key = getTargetPathKey(localBinPath); - BinaryInfo binInfo = DACommunicator.getSelectedApp().getBinaryInfo(localBinPath); + String key = getTargetPathKey(localBinPath); + BinaryInfo binInfo = DACommunicator.getSelectedApp().getBinaryInfo(key); String sourceBinPath = binInfo.getTempBinaryPath(); return sourceBinPath; } @@ -1088,8 +1088,8 @@ public class AnalyzerUtil { } String path = processInfo.getMainTargetBinaryPath(); -// String key = getTargetPathKey(path); - BinaryInfo binInfo = DACommunicator.getSelectedApp().getBinaryInfo(path); + String key = getTargetPathKey(path); + BinaryInfo binInfo = DACommunicator.getSelectedApp().getBinaryInfo(key); return binInfo; } @@ -1132,7 +1132,8 @@ public class AnalyzerUtil { public static boolean getBinaryBuildType(String localBinaryPath) { HashMap binMap = DACommunicator.getSelectedApp() .getBinaryInfoMap(); - BinaryInfo binInfo = binMap.get(localBinaryPath); + String key = AnalyzerUtil.getTargetPathKey(localBinaryPath); + BinaryInfo binInfo = binMap.get(key); if (null == binInfo) { return false; } @@ -1145,27 +1146,28 @@ public class AnalyzerUtil { public static String getFuncName(ProfileData input) { long pcAddr = input.getPcAddr(); - HashMap funcNameMap = AnalyzerManager.getFuncNameMap(); - String functionName = funcNameMap.get(pcAddr); - if (null != functionName) { - return functionName; - } +// HashMap funcNameMap = AnalyzerManager.getFuncNameMap(); +// String functionName = funcNameMap.get(pcAddr); +// if (null != functionName) { +// return functionName; +// } + String functionName = null; ProcessInfoPackage processInfoPkg = AnalyzerManager.getProject() .getProcessInfo(input.getPid()); ProcessInfo processInfo = processInfoPkg .getProcessInfo(input.getTime()); /** for debug */ - // String binPath1 = processInfo.getBinaryPath().substring(0, - // processInfo.getBinaryPath().length() - 1); - // System.out.print("binary : " + binPath1 + " ==> "); - // AnalyzerUtil.printHexdecimal(processInfo.getLowestAddress()); - // System.out.print(" < "); - // AnalyzerUtil.printHexdecimal(pcAddr); - // System.out.print(" < "); - // AnalyzerUtil.printHexdecimal(processInfo.getHighestAddress()); - // System.out.println(); +// BinaryInfo binInfo1 = processInfo.getTargetBinary(input.getPcAddr()); +// String binPath1 =binInfo1.getTargetBinaryPath(); +// System.out.print("binary : " + binPath1 + " ==> "); +// AnalyzerUtil.printHexdecimal(processInfo.getLowestAddress()); +// System.out.print(" < "); +// AnalyzerUtil.printHexdecimal(pcAddr); +// System.out.print(" < "); +// AnalyzerUtil.printHexdecimal(processInfo.getHighestAddress()); +// System.out.println(); if (pcAddr >= processInfo.getLowestAddress() && pcAddr <= processInfo.getHighestAddress()) { @@ -1250,9 +1252,87 @@ public class AnalyzerUtil { return functionName; } + // public static String getTargetPathKey(String targetPath) { + // String[] splitTargetPath = targetPath.split(CommonConstants.SLASH); + // String libName = splitTargetPath[splitTargetPath.length - 1]; + // return libName; + // } + + public static String getDebugInfoPath(String libPath, String rootPath) { + String[] splitTargetLib = libPath.split(CommonConstants.SLASH); + String libFullName = splitTargetLib[splitTargetLib.length - 1]; + if (rootPath.endsWith(CommonConstants.SLASH)) { + rootPath = rootPath.substring(0, rootPath.length() - 1); + } + int index = libFullName.indexOf(".so"); + if (index < 0) { + return null; + } + // 3 means remove "lib" string + String debugInfoToken = "*" + libFullName.substring(3, index) + + "-debuginfo*.rpm"; + // String rootstrapPath = PathManager.getRootStrapsPath(); + List lines = new ArrayList(); + String toolPath = AnalyzerPaths.TOOL_FOLDER_PATH + File.separator + + "debuginfo.sh"; + String[] command = new String[] { toolPath, "-f", rootPath, + debugInfoToken }; + try { + Runtime rt = Runtime.getRuntime(); + Process process = rt.exec(command); + process.waitFor(); + BufferedReader reader = new BufferedReader(new InputStreamReader( + process.getInputStream())); + int lineCount = 0; + String line = null; + while (null != (line = reader.readLine())) { + lineCount++; + System.out.println("LINE (" + lineCount + ") : " + line); + lines.add(line); + } + if (lineCount == 0) { + BufferedReader error = new BufferedReader( + new InputStreamReader(process.getErrorStream())); + String errorStr = error.readLine(); + System.out.println("find debug info path fail.. " + errorStr); + return null; + } + } catch (IOException e) { + e.printStackTrace(); + return null; + } catch (InterruptedException e) { + e.printStackTrace(); + return null; + } + + String select = null; + for (String line : lines) { + if (null == select) { + select = line; + } else if (select.length() > line.length()) { + select = line; + } + } + + String debugPath = null; + if (null == select) { + return null; + } else { + select = select.substring(1, select.length()); + debugPath = rootPath + select; + } + return debugPath; + } + public static String getTargetPathKey(String targetPath) { - String[] splitTargetPath = targetPath.split(CommonConstants.SLASH); - String libName = splitTargetPath[splitTargetPath.length - 1]; - return libName; + String returnStr = null; + String[] splitPath = targetPath.split(CommonConstants.SLASH); + if (splitPath.length < 3) { + returnStr = targetPath; + } else { + int index = targetPath.indexOf(splitPath[splitPath.length - 3]); + returnStr = targetPath.substring(index, targetPath.length()); + } + return returnStr; } } -- 2.7.4