--- /dev/null
- import java.io.BufferedWriter;
+/*
+ * Dynamic Analyzer
+ *
+ * Copyright (c) 2013 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * Jaewon Lim <jaewon81.lim@samsung.com>
+ * Jooyoul Lee <jy.exe.lee@samsung.com>
+ * Juyoung Kim <j0.kim@samsung.com>
+ *
+ * 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.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+
+package org.tizen.dynamicanalyzer.ui.toolbar.setting;
+
+import java.io.BufferedReader;
- import java.io.FileWriter;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
- import java.util.HashMap;
+import java.io.IOException;
+import java.util.ArrayList;
- private HashMap<String, InputRow> inputRowHash = null;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.tizen.dynamicanalyzer.common.AnalyzerConstants;
+import org.tizen.dynamicanalyzer.common.path.PathManager;
+import org.tizen.dynamicanalyzer.communicator.DACommunicator;
+import org.tizen.dynamicanalyzer.constant.CommonConstants;
+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.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.util.CommonUtil;
+import org.tizen.dynamicanalyzer.util.Logger;
+import org.tizen.dynamicanalyzer.widgets.button.DACustomButton;
+import org.tizen.dynamicanalyzer.widgets.button.DACustomButtonClickEventListener;
+import org.tizen.dynamicanalyzer.widgets.da.base.DAButton;
+import org.tizen.dynamicanalyzer.widgets.da.base.WarningDialog;
+import org.tizen.dynamicanalyzer.widgets.da.view.DAPageComposite;
+
+public class SettingDialogBinarySettingsPage extends DAPageComposite {
+ public static final String ID = SettingDialogBinarySettingsPage.class.getName();
+
+ public static final int RADIO_CURRENT = 1;
+ public static final int RADIO_ADD = 2;
+ public static final int RADIO_REMOVE = 3;
+
- LoadSettingDialog dialog = new LoadSettingDialog(button.getParent()
- .getShell());
+ private List<InputRow> inputRowList = null;
+
+ private ScrolledComposite scrolledComposite = null;
+ private Composite inputComposite = null;
+
+ private DAButton clearButton = null;
+ private DAButton addButton = null;
+ private DAButton saveButton = null;
+ private DAButton loadButton = null;
+ private DAButton debugRootButton = null;
+ private Label librariesLabel = null;
+
+ private String rootPath = null;
+ private SettingDialogBinarySettingsPage me = null;
+
+ private DACustomButtonClickEventListener addButtonListener = new DACustomButtonClickEventListener() {
+
+ @Override
+ public void handleClickEvent(DACustomButton button) {
+ DeviceExplorerDilaog dialog = new DeviceExplorerDilaog(getShell());
+// dialog.setFilter(".so");
+ Object result = dialog.open();
+ if (result != null) {
+ BinarySettingProgressManager.getInstance().startProcessStart(
+ "Wait for add binaries...");
+ BinarySettingProcessor.runAddThread(result, me);
+ }
+ }
+ };
+
++ private DACustomButtonClickEventListener removeButtonListener = new DACustomButtonClickEventListener() {
++
++ @Override
++ public void handleClickEvent(DACustomButton button) {
++ String binaryPath = ((InputRow) button.getParent()).getBinaryText();
++
++ removeInputRow(binaryPath);
++ Composite inputComposite = button.getParent().getParent();
++ BinarySettingData rmData = BinarySettingManager.getInstance().getBinarySetting(
++ binaryPath);
++ List<BinarySettingData> rmBinaries = new ArrayList<BinarySettingData>();
++ rmBinaries.add(rmData);
++ DACommunicator.sendSWAPMessage(AnalyzerConstants.MSG_SWAP_INST_REMOVE, rmBinaries);
++
++ BinarySettingManager.getInstance().removeBinarySettingData(binaryPath);
++ button.getParent().dispose();
++ ((SettingDialogBinarySettingsPage) (inputComposite.getParent().getParent())).updateLayout();
++ }
++ };
++
+ private DACustomButtonClickEventListener loadButtonListener = new DACustomButtonClickEventListener() {
+
+ @Override
+ public void handleClickEvent(DACustomButton button) {
- String content = null;
++ LoadSettingDialog dialog = new LoadSettingDialog(button.getParent().getShell());
+ Object result = dialog.open();
+ if (result == null) {
+ return;
+ }
+
+ // swap remove message send and inputrow dispose
+ cleanButtonListener.handleClickEvent(null);
+
+ String path = (String) result;
+ File saveFile = new File(path);
+ BufferedReader br = null;
- List<BinarySettingData> binarySettings = new ArrayList<BinarySettingData>();
+ try {
- while (null != (content = br.readLine())) {
- InputRow inputRow = new InputRow(inputComposite);
- String[] splitContent = content
- .split(CommonConstants.COMMA);
- inputRow.setBinaryText(new String(splitContent[0]));
- inputRow.setDebugText(new String(splitContent[3]));
- inputRow.setSourceText(new String(splitContent[4]));
+ br = new BufferedReader(new FileReader(saveFile));
- inputRowHash.put(inputRow.getBinaryText(), inputRow);
-
- BinarySettingData binaryData = new BinarySettingData();
- binaryData.loadSaveData(content);
- binarySettings.add(binaryData);
++ BinarySettingManager.getInstance().openData(br);
++ List<BinarySettingData> binarySettings = BinarySettingManager.getInstance()
++ .getBinarySettingList();
++
++ for (int i = 0; i < binarySettings.size(); i++) {
++ InputRow inputRow = new InputRow(inputComposite, removeButtonListener);
++ inputRow.setBinaryText(binarySettings.get(i).getBinaryPath());
++ inputRow.setDebugText(binarySettings.get(i).getDebugRpmPath());
++ inputRow.setSourceText(binarySettings.get(i).getUserSourceDir());
+ inputRowList.add(inputRow);
- BinarySettingManager.getInstance().putRealBinarySettingData(
- binarySettings);
+ }
+
- SaveSettingDialog dialog = new SaveSettingDialog(button.getParent()
- .getShell(), inputRowList);
+ BinarySettingProgressManager.getInstance().startProcessStart(
+ "now loading binaries...");
+ BinarySettingProcessor.runLoadingThread(me);
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ CommonUtil.tryClose(br);
+ }
+ }
+ };
+
+ private DACustomButtonClickEventListener debugRootButtonListener = new DACustomButtonClickEventListener() {
+
+ @Override
+ public void handleClickEvent(DACustomButton button) {
+ FileExplorerDialog dialog = new FileExplorerDialog(getShell());
+ dialog.getExplorer().setRoot(CommonUtil.getHomeDirectory());
+ Object result = dialog.open();
+ if (result != null) {
+ @SuppressWarnings("unchecked")
+ List<File> files = (List<File>) 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);
+ BinarySettingManager.getInstance().setDebugRoot(rootPath);
+ }
+ }
+ }
+ };
++
+ private DACustomButtonClickEventListener saveButtonListener = new DACustomButtonClickEventListener() {
+
+ @Override
+ public void handleClickEvent(DACustomButton button) {
- List<BinarySettingData> binaries = BinarySettingManager
- .getInstance().getRealBinarySettings();
++ SaveSettingDialog dialog = new SaveSettingDialog(button.getParent().getShell(),
++ inputRowList);
+ dialog.open();
+ }
+ };
+
+ private DACustomButtonClickEventListener cleanButtonListener = new DACustomButtonClickEventListener() {
+
+ @Override
+ public void handleClickEvent(DACustomButton button) {
+ if (null != button) {
+ WarningDialog dialog = new WarningDialog(getShell(), SWT.NONE);
+ dialog.setMessage("Clear binary settings?\nIf you click 'Ok', All settings will be deleted");
+ boolean result = dialog.open();
+ if (!result) {
+ return;
+ }
+ }
- DACommunicator.sendSWAPMessage(
- AnalyzerConstants.MSG_SWAP_INST_REMOVE, binaries);
++ List<BinarySettingData> binaries = BinarySettingManager.getInstance()
++ .getBinarySettingList();
+ if (!binaries.isEmpty()) {
- BinarySettingManager.getInstance()
- .removeRealBinarySettingData(
- inputRowList.get(i).getBinaryText());
++ DACommunicator.sendSWAPMessage(AnalyzerConstants.MSG_SWAP_INST_REMOVE, binaries);
+
+ for (int i = 0; i < inputRowList.size(); i++) {
- inputRowHash.clear();
++ BinarySettingManager.getInstance().removeBinarySettingData(
++ inputRowList.get(i).getBinaryText());
+ inputRowList.get(i).dispose();
+ }
+ inputRowList.clear();
- inputRowHash.clear();
+ }
+
+ updateLayout();
+ }
+ };
+
+ private void clearLayout() {
+ for (int i = 0; i < inputRowList.size(); i++) {
+ inputRowList.get(i).dispose();
+ }
+ inputRowList.clear();
- rootPath = PathManager
- .getRootstrapsPath(SettingDataManager.getInstance().getPlatform());
- inputRowHash = BinarySettingManager.getInstance().getInputRowHash();
- inputRowList = BinarySettingManager.getInstance().getInputRowList();
+ }
+
+ public SettingDialogBinarySettingsPage(Composite parent, int style) {
+ super(parent, style);
+ me = this;
+ setTitle("Binary Settings"); // TODO nl
- int libCount = BinarySettingManager.getInstance()
- .getRealBinarySettings().size();
++ rootPath = PathManager.getRootstrapsPath(SettingDataManager.getInstance().getPlatform());
++ inputRowList = new ArrayList<InputRow>();
++
+
+ String settingPath = PathManager.DA_SETTING_PATH;
+ File settingFolder = new File(settingPath);
+ if (!settingFolder.exists() || !settingFolder.isDirectory()) {
+ if (!settingFolder.mkdirs()) {
+ Logger.debug("setting directory create failed...");
+ }
+ }
+
+ this.setLayout(new FormLayout());
+ this.setBackground(ColorResources.DIALOG_BG_UPPER);
+
- scrolledComposite = new ScrolledComposite(this, SWT.BORDER
- | SWT.V_SCROLL | SWT.H_SCROLL);
++ int libCount = BinarySettingManager.getInstance().getBinarySettingList().size();
+ librariesLabel = new Label(this, SWT.TRANSPARENT);
+ FormData data = new FormData();
+ data.top = new FormAttachment(0, 15);
+ data.left = new FormAttachment(0, 16);
+ data.height = 16;
+ data.width = 100;
+ librariesLabel.setLayoutData(data);
+ librariesLabel.setText("Libraies (" + libCount + ")");
+ librariesLabel.setBackground(ColorResources.DIALOG_BG_UPPER);
+ librariesLabel.setFont(FontResources.getDADefaultFont());
+
- scrolledComposite
- .setBackground(ColorResources.BINARY_SETTINGS_INPUT_BOX_COLOR);
++ scrolledComposite = new ScrolledComposite(this, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
+ data = new FormData();
+ data.top = new FormAttachment(librariesLabel, 4);
+ data.left = new FormAttachment(0, 6);
+ data.right = new FormAttachment(100, -6);
+ data.height = 310;
+ // data.width = 590;
+ scrolledComposite.setLayoutData(data);
+ scrolledComposite.setLayout(new FormLayout());
+ scrolledComposite.setExpandHorizontal(true);
+ scrolledComposite.setExpandVertical(true);
- scrolledComposite.setMinSize(inputComposite.computeSize(SWT.DEFAULT,
- SWT.DEFAULT));
++ scrolledComposite.setBackground(ColorResources.BINARY_SETTINGS_INPUT_BOX_COLOR);
+
+ inputComposite = new Composite(scrolledComposite, SWT.NONE);
+ scrolledComposite.setContent(inputComposite);
- inputComposite
- .setBackground(ColorResources.BINARY_SETTINGS_INPUT_BOX_COLOR);
++ scrolledComposite.setMinSize(inputComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+ scrolledComposite.setShowFocusedControl(true);
+ data = new FormData();
+ 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());
- inputRowList.clear();
- inputRowHash.clear();
-
++ inputComposite.setBackground(ColorResources.BINARY_SETTINGS_INPUT_BOX_COLOR);
+
+ loadButton = new DAButton(this, SWT.NONE);
+ data = new FormData();
+ data.top = new FormAttachment(scrolledComposite, 17);
+ data.left = new FormAttachment(0, 6);
+ data.height = 22;
+ data.width = 78;
+ loadButton.setLayoutData(data);
+ loadButton.setText("Load");
+ loadButton.addClickListener(loadButtonListener);
+
+ saveButton = new DAButton(this, SWT.NONE);
+ data = new FormData();
+ data.top = new FormAttachment(scrolledComposite, 17);
+ data.left = new FormAttachment(loadButton, 6);
+ data.height = 22;
+ data.width = 78;
+ saveButton.setLayoutData(data);
+ saveButton.setText("Save");
+ saveButton.addClickListener(saveButtonListener);
+
+ debugRootButton = new DAButton(this, SWT.NONE);
+ data = new FormData();
+ data.top = new FormAttachment(scrolledComposite, 17);
+ data.left = new FormAttachment(saveButton, 32);
+ data.height = 22;
+ data.width = 112;
+ debugRootButton.setLayoutData(data);
+ debugRootButton.setText("Set DebugRoot");
+ debugRootButton.addClickListener(debugRootButtonListener);
+
+ clearButton = new DAButton(this, SWT.NONE);
+ data = new FormData();
+ data.top = new FormAttachment(scrolledComposite, 17);
+ data.right = new FormAttachment(100, -6);
+ data.height = 22;
+ data.width = 78;
+ clearButton.setLayoutData(data);
+ clearButton.setText("Clear");
+ clearButton.addClickListener(cleanButtonListener);
+
+ addButton = new DAButton(this, SWT.NONE);
+ data = new FormData();
+ data.top = new FormAttachment(scrolledComposite, 17);
+ data.right = new FormAttachment(clearButton, -6);
+ data.height = 22;
+ data.width = 78;
+ addButton.setLayoutData(data);
+ addButton.setText("Add");
+ addButton.addClickListener(addButtonListener);
+
- BinarySettingData binData = BinarySettingManager.getInstance()
- .getRealBinarySetting(binary);
+ this.addListener(SWT.Show, new Listener() {
+
+ @Override
+ public void handleEvent(Event event) {
+ initInputRows();
+ }
+ });
+
+ this.addListener(SWT.Dispose, new Listener() {
+
+ @Override
+ public void handleEvent(Event event) {
+ }
+ });
+ }
+
+ public void doApply() {
+ // dirty check and update path
+ for (InputRow inputRow : inputRowList) {
+ String binary = inputRow.getBinaryText();
+ String debug = inputRow.getDebugText();
+ String source = inputRow.getSourceText();
- binData.setUserSourcePath(source);
++ BinarySettingData binData = BinarySettingManager.getInstance().getBinarySetting(binary);
+ if (binData != null) {
+ binData.setDebugRpmPath(debug);
- String targetPath = PathManager.DA_BINARY_AUTO_SAVE_FILE;
-
- File saveFile = new File(targetPath);
- FileWriter fileWriter = null;
- BufferedWriter bufWriter = null;
-
- List<BinarySettingData> saveData = BinarySettingManager.getInstance()
- .getRealBinarySettings();
-
- boolean success = false;
- try {
- fileWriter = new FileWriter(saveFile);
- bufWriter = new BufferedWriter(fileWriter);
- for (int i = 0; i < saveData.size(); i++) {
- bufWriter.write(saveData.get(i).getSaveData());
- bufWriter.newLine();
- }
- success = true;
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- CommonUtil.tryClose(bufWriter, fileWriter);
- }
-
- if (success) {
- // add snapshot model update
- Logger.debug("binary settings auto save success!!"); //$NON-NLS-1$
-
- } else {
- Logger.debug("binary settings auto save fail..."); //$NON-NLS-1$
- }
++ binData.setUserSourceDir(source);
+ } else {
+ Logger.debug("binary data is null");
+ }
+ }
+
+ Logger.debug("update complete!");
+ }
+
+ public void doClose() {
- binData = BinarySettingManager.getInstance().getRealBinarySettings();
+ }
+
+ public void initInputRows() {
+ List<BinarySettingData> binData = null;
- InputRow inputRow = new InputRow(inputComposite);
++ binData = BinarySettingManager.getInstance().getBinarySettingList();
+ clearLayout();
+ for (int i = 0; i < binData.size(); i++) {
- String source = binData.get(i).getUserSourcePath();
++ InputRow inputRow = new InputRow(inputComposite, removeButtonListener);
+ inputRow.setBinaryText(binData.get(i).getBinaryPath());
+ // String debug = binData.get(i).getDebugFilePath();
+ String debug = binData.get(i).getDebugRpmPath();
+ if (null != debug && !debug.isEmpty()) {
+ inputRow.setDebugText(debug);
+ } else {
+ inputRow.setDebugText(CommonConstants.EMPTY);
+ }
+
- source = binData.get(i).getDebugSourcePath();
++ String source = binData.get(i).getUserSourceDir();
+ if (null != source && !source.isEmpty()) {
+ inputRow.setSourceText(source);
+ } else {
- inputRowHash.put(binData.get(i).getBinaryPath(), inputRow);
++ source = binData.get(i).getRpmSourceDir();
+ if (null != source && !source.isEmpty()) {
+ inputRow.setSourceText(source);
+ } else {
+ inputRow.setSourceText(CommonConstants.EMPTY);
+ }
+ }
- int count = BinarySettingManager.getInstance().getRealBinarySettings()
- .size();
+ inputRowList.add(inputRow);
+ }
+ updateLayout();
+ }
+
++ private void removeInputRow(String path) {
++ InputRow prev = null;
++ InputRow cur = null;
++ InputRow next = null;
++
++ for (int i = 0; i < inputRowList.size(); i++) {
++ // define prev, cur, next inputRow
++ if (i != 0) {
++ prev = cur;
++ }
++ cur = inputRowList.get(i);
++ if (i != inputRowList.size() - 1) {
++ next = inputRowList.get(i + 1);
++ } else {
++ next = null;
++ }
++
++ if (cur.getBinaryText().equals(path)) {
++ // modify layout of next input row
++ if (next != null) {
++ FormData nextData = (FormData) next.getLayoutData();
++ if (prev != null) {
++ nextData.top = new FormAttachment(prev, 2);
++ } else {
++ nextData.top = new FormAttachment(0, 0);
++ }
++ }
++
++ // remove from row list
++ inputRowList.remove(i);
++ break;
++ }
++ }
++ }
++
+ public void updateLayout() {
- scrolledComposite.setMinSize(inputComposite.computeSize(SWT.DEFAULT,
- SWT.DEFAULT));
++ int count = BinarySettingManager.getInstance().getBinarySettingList().size();
+ librariesLabel.setText("Libraries (" + count + ")");
+ inputComposite.layout();
++ scrolledComposite.setMinSize(inputComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+ if (count == 0) {
+ saveButton.setButtonEnabled(false);
+ clearButton.setButtonEnabled(false);
+ } else {
+ saveButton.setButtonEnabled(true);
+ clearButton.setButtonEnabled(true);
+ }
+ }
+
+ public String getDebugRootPath() {
+ return rootPath;
+ }
+}