com.apicloud.navigator.ui.editors.ConfigEditor.java Source code

Java tutorial

Introduction

Here is the source code for com.apicloud.navigator.ui.editors.ConfigEditor.java

Source

/**
 * APICloud Studio
 * Copyright (c) 2014-2015 by APICloud, Inc. All Rights Reserved.
 * Licensed under the terms of the GNU Public License (GPL) v3.
 * Please see the license.html included with this distribution for details.
 * Any modifications to this file must keep this entire header intact.
 */

package com.apicloud.navigator.ui.editors;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.jface.viewers.TreeNode;
import org.eclipse.jface.viewers.TreeNodeContentProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.TreeViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseTrackListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Section;
import org.eclipse.ui.part.EditorPart;

import com.apicloud.commons.model.Access;
import com.apicloud.commons.model.Config;
import com.apicloud.commons.model.Feature;
import com.apicloud.commons.model.Param;
import com.apicloud.commons.model.Permission;
import com.apicloud.commons.model.Preference;
import com.apicloud.navigator.Activator;
import com.apicloud.navigator.dialogs.AddFeatureDialog;
import com.apicloud.navigator.dialogs.CreateParamDialog;
import com.apicloud.navigator.dialogs.Messages;
import com.apicloud.navigator.ui.builder.GeneralSectionBuilder;

public class ConfigEditor extends EditorPart {
    private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
    private Config config;
    private boolean dirty;
    private Table table_1;
    private TreeViewer treeViewer;
    private TableViewer tableViewer_1;
    private GeneralSectionBuilder generalSection;
    private TableViewer tableViewer_2;
    private Table table_2;
    private Text appBackgroundText;
    private Text windowBackgroundText;
    private Text frameBackgroundText;
    private Table table_3;
    private TableViewer tableViewer_3;
    private Button pageBounceButton_ok;
    private Button pageBounceButton_cancel;
    private Button hScrollBarEnabledButton_cancel;
    private Button hScrollBarEnabledButton_ok;
    private Button vScrollBarEnabledButton_cancel;
    private Button vScrollBarEnabledButton_ok;
    private Button fullScreenButton_cancel;
    private Button fullScreenButton_ok;
    private Button ios7Button_cancel;
    private Button ios7Button_ok;
    private Button autoLaunchButton_cancel;
    private Button autoLaunchButton_ok;
    private Button autoUpdateButton_ok;
    private Button autoUpdateButton_cancel;
    private Button smartUpdateButton_ok;
    private Button smartUpdateButton_cancel;

    public ConfigEditor(APICloudMapConfigEditor editor, Config config) {
        this.config = config;
    }

    @Override
    public void doSave(IProgressMonitor monitor) {
    }

    @Override
    public void doSaveAs() {
    }

    @Override
    public void init(IEditorSite site, IEditorInput input) throws PartInitException {
        setSite(site);
        setInput(input);
    }

    public void setDirty(boolean flag) {
        this.dirty = flag;
    }

    @Override
    public boolean isDirty() {
        return this.dirty;
    }

    @Override
    public boolean isSaveAsAllowed() {
        return false;
    }

    @Override
    public void createPartControl(Composite parent) {
        parent.setLayout(new GridLayout(1, false));

        ScrolledComposite scrolledComposite = new ScrolledComposite(parent,
                SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
        scrolledComposite.setExpandVertical(true);
        scrolledComposite.setExpandHorizontal(true);
        scrolledComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
        formToolkit.adapt(scrolledComposite);
        formToolkit.paintBordersFor(scrolledComposite);
        scrolledComposite.setMinWidth(600);
        scrolledComposite.setMinHeight(1400);
        scrolledComposite.getVerticalBar().setIncrement(10);

        Composite composite_3 = new Composite(scrolledComposite, SWT.NONE);
        formToolkit.adapt(composite_3);
        formToolkit.paintBordersFor(composite_3);
        composite_3.setLayout(new GridLayout(1, false));

        generalSection = new GeneralSectionBuilder(formToolkit, composite_3, this);
        generalSection.buildUI();
        generalSection.bindData(config);

        Section preferenceSection = formToolkit.createSection(composite_3, Section.TWISTIE | Section.TITLE_BAR);
        preferenceSection.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
        formToolkit.paintBordersFor(preferenceSection);
        preferenceSection.setText("\u504F\u597D\u8BBE\u7F6E");
        preferenceSection.setExpanded(true);

        Composite preferenceComposite = formToolkit.createComposite(preferenceSection, SWT.NONE);
        preferenceComposite.setToolTipText("");
        formToolkit.paintBordersFor(preferenceComposite);
        preferenceSection.setClient(preferenceComposite);
        preferenceComposite.setLayout(new GridLayout(2, false));

        Label appBackground = new Label(preferenceComposite, SWT.NONE);
        appBackground.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false, 1, 1));
        formToolkit.adapt(appBackground, true, true);
        appBackground.setText("appBackground:");

        Composite appBackgroundComposite = new Composite(preferenceComposite, SWT.NONE);
        appBackgroundComposite.setLayout(new GridLayout(1, false));
        appBackgroundComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
        formToolkit.adapt(appBackgroundComposite);
        formToolkit.paintBordersFor(appBackgroundComposite);

        appBackgroundText = new Text(appBackgroundComposite, SWT.BORDER);
        GridData gd_appBackgroundText = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
        gd_appBackgroundText.widthHint = 200;
        appBackgroundText.setLayoutData(gd_appBackgroundText);
        appBackgroundText.setText(getPreferenceValue("appBackground", config) == null ? ""
                : getPreferenceValue("appBackground", config));
        appBackgroundText.addModifyListener(new ModifyListener() {
            @Override
            public void modifyText(ModifyEvent e) {
                String value = appBackgroundText.getText() == null ? "" : appBackgroundText.getText();
                changePreferenceValue("appBackground", value);
                dirty = true;
                firePropertyChange(PROP_DIRTY);
            }
        });
        formToolkit.adapt(appBackgroundText, true, true);

        Label windowBackground = new Label(preferenceComposite, SWT.NONE);
        windowBackground.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
        formToolkit.adapt(windowBackground, true, true);
        windowBackground.setText("windowBackground:");

        Composite windowBackgroundComposite = new Composite(preferenceComposite, SWT.NONE);
        windowBackgroundComposite.setLayout(new GridLayout(1, false));
        windowBackgroundComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
        formToolkit.adapt(windowBackgroundComposite);
        formToolkit.paintBordersFor(windowBackgroundComposite);

        windowBackgroundText = new Text(windowBackgroundComposite, SWT.BORDER);
        GridData gd_windowBackgroundText = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
        gd_windowBackgroundText.widthHint = 200;
        windowBackgroundText.setLayoutData(gd_windowBackgroundText);
        windowBackgroundText.setText(getPreferenceValue("windowBackground", config) == null ? ""
                : getPreferenceValue("windowBackground", config));
        windowBackgroundText.addModifyListener(new ModifyListener() {
            @Override
            public void modifyText(ModifyEvent e) {
                String value = windowBackgroundText.getText() == null ? "" : windowBackgroundText.getText();
                changePreferenceValue("windowBackground", value);
                dirty = true;
                firePropertyChange(PROP_DIRTY);
            }
        });
        formToolkit.adapt(windowBackgroundText, true, true);

        Label frameBackground = new Label(preferenceComposite, SWT.NONE);
        frameBackground.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
        formToolkit.adapt(frameBackground, true, true);
        frameBackground.setText("frameBackgroundColor:");

        Composite frameBackgroundComposite = new Composite(preferenceComposite, SWT.NONE);
        frameBackgroundComposite.setLayout(new GridLayout(6, false));
        frameBackgroundComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
        formToolkit.adapt(frameBackgroundComposite);
        formToolkit.paintBordersFor(frameBackgroundComposite);

        frameBackgroundText = new Text(frameBackgroundComposite, SWT.BORDER);
        GridData gd_frameBackgroundText = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
        gd_frameBackgroundText.widthHint = 200;
        frameBackgroundText.setLayoutData(gd_frameBackgroundText);
        frameBackgroundText.setText(getPreferenceValue("frameBackgroundColor", config) == null ? ""
                : getPreferenceValue("frameBackgroundColor", config));
        frameBackgroundText.addModifyListener(new ModifyListener() {
            @Override
            public void modifyText(ModifyEvent e) {
                String value = frameBackgroundText.getText() == null ? "" : frameBackgroundText.getText();
                changePreferenceValue("frameBackgroundColor", value);
                dirty = true;
                firePropertyChange(PROP_DIRTY);
            }
        });
        formToolkit.adapt(frameBackgroundText, true, true);

        Label lblNewLabel_4 = new Label(frameBackgroundComposite, SWT.NONE);
        formToolkit.adapt(lblNewLabel_4, true, true);
        new Label(frameBackgroundComposite, SWT.NONE);
        new Label(frameBackgroundComposite, SWT.NONE);
        new Label(frameBackgroundComposite, SWT.NONE);
        new Label(frameBackgroundComposite, SWT.NONE);

        Label pageBounce = new Label(preferenceComposite, SWT.NONE);
        pageBounce.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
        formToolkit.adapt(pageBounce, true, true);
        pageBounce.setText("pageBounce:");

        Composite pageBounceComposite = new Composite(preferenceComposite, SWT.NONE);
        pageBounceComposite.setLayout(new GridLayout(2, false));
        pageBounceComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
        formToolkit.adapt(pageBounceComposite);
        formToolkit.paintBordersFor(pageBounceComposite);

        pageBounceButton_ok = new Button(pageBounceComposite, SWT.RADIO | SWT.RIGHT);
        pageBounceButton_ok.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(SelectionEvent e) {
                changePreferenceValue("pageBounce", "true");
                dirty = true;
                firePropertyChange(PROP_DIRTY);
            }

        });
        pageBounceButton_ok.setAlignment(SWT.LEFT);
        formToolkit.adapt(pageBounceButton_ok, true, true);
        pageBounceButton_ok.setText("true");

        pageBounceButton_cancel = new Button(pageBounceComposite, SWT.RADIO);
        if (Boolean.parseBoolean(getPreferenceValue("pageBounce", config) == null ? "false"
                : getPreferenceValue("pageBounce", config))) {
            pageBounceButton_ok.setSelection(true);
            changePreferenceValue("pageBounce", "true");
        } else {
            pageBounceButton_cancel.setSelection(true);
            changePreferenceValue("pageBounce", "false");
        }
        pageBounceButton_cancel.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(SelectionEvent e) {
                changePreferenceValue("pageBounce", "false");
                dirty = true;
                firePropertyChange(PROP_DIRTY);
            }

        });
        formToolkit.adapt(pageBounceButton_cancel, true, true);
        pageBounceButton_cancel.setText("false");

        Label hScrollBarEnabled = new Label(preferenceComposite, SWT.NONE);
        hScrollBarEnabled.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
        formToolkit.adapt(hScrollBarEnabled, true, true);
        hScrollBarEnabled.setText("hScrollBarEnabled:");

        Composite hScrollBarEnabledComposite = new Composite(preferenceComposite, SWT.NONE);
        hScrollBarEnabledComposite.setLayout(new GridLayout(2, false));
        hScrollBarEnabledComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
        formToolkit.adapt(hScrollBarEnabledComposite);
        formToolkit.paintBordersFor(hScrollBarEnabledComposite);

        hScrollBarEnabledButton_ok = new Button(hScrollBarEnabledComposite, SWT.RADIO | SWT.RIGHT);
        hScrollBarEnabledButton_ok.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(SelectionEvent e) {
                changePreferenceValue("hScrollBarEnabled", "true");
                dirty = true;
                firePropertyChange(PROP_DIRTY);
            }

        });
        hScrollBarEnabledButton_ok.setAlignment(SWT.LEFT);
        formToolkit.adapt(hScrollBarEnabledButton_ok, true, true);
        hScrollBarEnabledButton_ok.setText("true");

        hScrollBarEnabledButton_cancel = new Button(hScrollBarEnabledComposite, SWT.RADIO);
        if (Boolean.parseBoolean(getPreferenceValue("hScrollBarEnabled", config) == null ? "false"
                : getPreferenceValue("hScrollBarEnabled", config))) {
            hScrollBarEnabledButton_ok.setSelection(true);
            changePreferenceValue("hScrollBarEnabled", "true");
        } else {
            hScrollBarEnabledButton_cancel.setSelection(true);
            changePreferenceValue("hScrollBarEnabled", "false");
        }
        hScrollBarEnabledButton_cancel.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(SelectionEvent e) {
                changePreferenceValue("hScrollBarEnabled", "false");
                dirty = true;
                firePropertyChange(PROP_DIRTY);
            }

        });
        formToolkit.adapt(hScrollBarEnabledButton_cancel, true, true);
        hScrollBarEnabledButton_cancel.setText("false");

        Label vScrollBarEnabled = new Label(preferenceComposite, SWT.NONE);
        vScrollBarEnabled.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
        formToolkit.adapt(vScrollBarEnabled, true, true);
        vScrollBarEnabled.setText("vScrollBarEnabled:");

        Composite vScrollBarEnabledComposite = new Composite(preferenceComposite, SWT.NONE);
        vScrollBarEnabledComposite.setLayout(new GridLayout(2, false));
        vScrollBarEnabledComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
        formToolkit.adapt(vScrollBarEnabledComposite);
        formToolkit.paintBordersFor(vScrollBarEnabledComposite);

        vScrollBarEnabledButton_ok = new Button(vScrollBarEnabledComposite, SWT.RADIO | SWT.RIGHT);
        vScrollBarEnabledButton_ok.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(SelectionEvent e) {
                changePreferenceValue("vScrollBarEnabled", "true");
                dirty = true;
                firePropertyChange(PROP_DIRTY);
            }

        });
        vScrollBarEnabledButton_ok.setAlignment(SWT.LEFT);
        formToolkit.adapt(vScrollBarEnabledButton_ok, true, true);
        vScrollBarEnabledButton_ok.setText("true");

        vScrollBarEnabledButton_cancel = new Button(vScrollBarEnabledComposite, SWT.RADIO);
        if (Boolean.parseBoolean(getPreferenceValue("vScrollBarEnabled", config) == null ? "false"
                : getPreferenceValue("vScrollBarEnabled", config))) {
            vScrollBarEnabledButton_ok.setSelection(true);
            changePreferenceValue("vScrollBarEnabled", "true");
        } else {
            vScrollBarEnabledButton_cancel.setSelection(true);
            changePreferenceValue("vScrollBarEnabled", "false");
        }
        vScrollBarEnabledButton_cancel.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(SelectionEvent e) {
                changePreferenceValue("vScrollBarEnabled", "false");
                dirty = true;
                firePropertyChange(PROP_DIRTY);
            }

        });
        formToolkit.adapt(vScrollBarEnabledButton_cancel, true, true);
        vScrollBarEnabledButton_cancel.setText("false");

        Label fullScreen = new Label(preferenceComposite, SWT.NONE);
        fullScreen.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
        formToolkit.adapt(fullScreen, true, true);
        fullScreen.setText("fullScreen:");

        Composite fullScreenComposite = new Composite(preferenceComposite, SWT.NONE);
        fullScreenComposite.setLayout(new GridLayout(2, false));
        fullScreenComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
        formToolkit.adapt(fullScreenComposite);
        formToolkit.paintBordersFor(fullScreenComposite);

        fullScreenButton_ok = new Button(fullScreenComposite, SWT.RADIO | SWT.RIGHT);
        fullScreenButton_ok.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(SelectionEvent e) {
                changePreferenceValue("fullScreen", "true");
                dirty = true;
                firePropertyChange(PROP_DIRTY);
            }

        });

        fullScreenButton_ok.setAlignment(SWT.LEFT);
        formToolkit.adapt(fullScreenButton_ok, true, true);
        fullScreenButton_ok.setText("true");

        fullScreenButton_cancel = new Button(fullScreenComposite, SWT.RADIO);
        if (Boolean.parseBoolean(getPreferenceValue("fullScreen", config) == null ? "false"
                : getPreferenceValue("fullScreen", config))) {
            fullScreenButton_ok.setSelection(true);
            changePreferenceValue("fullScreen", "true");
        } else {
            fullScreenButton_cancel.setSelection(true);
            changePreferenceValue("fullScreen", "false");
        }
        fullScreenButton_cancel.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(SelectionEvent e) {
                changePreferenceValue("fullScreen", "false");
                dirty = true;
                firePropertyChange(PROP_DIRTY);
            }

        });
        formToolkit.adapt(fullScreenButton_cancel, true, true);
        fullScreenButton_cancel.setText("false");

        Label ios7 = new Label(preferenceComposite, SWT.NONE);
        ios7.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
        formToolkit.adapt(ios7, true, true);
        ios7.setText("IOS7StatusBarAppearance:");

        Composite ios7Composite = new Composite(preferenceComposite, SWT.NONE);
        ios7Composite.setLayout(new GridLayout(2, false));
        ios7Composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
        formToolkit.adapt(ios7Composite);
        formToolkit.paintBordersFor(ios7Composite);

        ios7Button_ok = new Button(ios7Composite, SWT.RADIO | SWT.RIGHT);
        ios7Button_ok.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(SelectionEvent e) {
                changePreferenceValue("iOS7StatusBarAppearance", "true");
                dirty = true;
                firePropertyChange(PROP_DIRTY);
            }

        });
        ios7Button_ok.setAlignment(SWT.LEFT);
        formToolkit.adapt(ios7Button_ok, true, true);
        ios7Button_ok.setText("true");

        ios7Button_cancel = new Button(ios7Composite, SWT.RADIO);
        if (Boolean.parseBoolean(getPreferenceValue("iOS7StatusBarAppearance", config) == null ? "false"
                : getPreferenceValue("iOS7StatusBarAppearance", config))) {
            ios7Button_ok.setSelection(true);
            changePreferenceValue("iOS7StatusBarAppearance", "true");
        } else {
            ios7Button_cancel.setSelection(true);
            changePreferenceValue("iOS7StatusBarAppearance", "false");
        }
        ios7Button_cancel.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(SelectionEvent e) {
                changePreferenceValue("iOS7StatusBarAppearance", "false");
                dirty = true;
                firePropertyChange(PROP_DIRTY);
            }

        });
        formToolkit.adapt(ios7Button_cancel, true, true);
        ios7Button_cancel.setText("false");

        Label autoLaunch = new Label(preferenceComposite, SWT.NONE);
        autoLaunch.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
        formToolkit.adapt(autoLaunch, true, true);
        autoLaunch.setText("autoLaunch:");

        Composite autoLaunchComposite = new Composite(preferenceComposite, SWT.NONE);
        autoLaunchComposite.setLayout(new GridLayout(2, false));
        autoLaunchComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
        formToolkit.adapt(autoLaunchComposite);
        formToolkit.paintBordersFor(autoLaunchComposite);

        autoLaunchButton_ok = new Button(autoLaunchComposite, SWT.RADIO | SWT.RIGHT);
        autoLaunchButton_ok.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(SelectionEvent e) {
                changePreferenceValue("autoLaunch", "true");
                dirty = true;
                firePropertyChange(PROP_DIRTY);
            }

        });
        autoLaunchButton_ok.setAlignment(SWT.LEFT);
        formToolkit.adapt(autoLaunchButton_ok, true, true);
        autoLaunchButton_ok.setText("true");

        autoLaunchButton_cancel = new Button(autoLaunchComposite, SWT.RADIO);
        if (Boolean.parseBoolean(getPreferenceValue("autoLaunch", config) == null ? "false"
                : getPreferenceValue("autoLaunch", config))) {
            autoLaunchButton_ok.setSelection(true);
            changePreferenceValue("autoLaunch", "true");
        } else {
            autoLaunchButton_cancel.setSelection(true);
            changePreferenceValue("autoLaunch", "false");
        }
        autoLaunchButton_cancel.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(SelectionEvent e) {
                changePreferenceValue("autoLaunch", "false");
                dirty = true;
                firePropertyChange(PROP_DIRTY);
            }

        });
        formToolkit.adapt(autoLaunchButton_cancel, true, true);
        autoLaunchButton_cancel.setText("false");

        Label autoUpdate = new Label(preferenceComposite, SWT.NONE);
        autoUpdate.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
        formToolkit.adapt(autoUpdate, true, true);
        autoUpdate.setText("autoUpdate:");

        Composite autoUpdateComposite = new Composite(preferenceComposite, SWT.NONE);
        autoUpdateComposite.setLayout(new GridLayout(2, false));
        autoUpdateComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
        formToolkit.adapt(autoUpdateComposite);
        formToolkit.paintBordersFor(autoUpdateComposite);

        autoUpdateButton_ok = new Button(autoUpdateComposite, SWT.RADIO | SWT.RIGHT);
        autoUpdateButton_ok.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(SelectionEvent e) {
                changePreferenceValue("autoUpdate", "true");
                dirty = true;
                firePropertyChange(PROP_DIRTY);
            }

        });
        autoUpdateButton_ok.setAlignment(SWT.LEFT);
        formToolkit.adapt(autoUpdateButton_ok, true, true);
        autoUpdateButton_ok.setText("true");

        autoUpdateButton_cancel = new Button(autoUpdateComposite, SWT.RADIO);
        if (Boolean.parseBoolean(getPreferenceValue("autoUpdate", config) == null ? "false"
                : getPreferenceValue("autoUpdate", config))) {
            autoUpdateButton_ok.setSelection(true);
            changePreferenceValue("autoUpdate", "true");
        } else {
            autoUpdateButton_cancel.setSelection(true);
            changePreferenceValue("autoUpdate", "false");
        }
        autoUpdateButton_cancel.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(SelectionEvent e) {
                changePreferenceValue("autoUpdate", "false");
                dirty = true;
                firePropertyChange(PROP_DIRTY);
            }

        });
        formToolkit.adapt(autoUpdateButton_cancel, true, true);
        autoUpdateButton_cancel.setText("false");

        Label smartUpdate = new Label(preferenceComposite, SWT.NONE);
        smartUpdate.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
        formToolkit.adapt(smartUpdate, true, true);
        smartUpdate.setText("smartUpdate:");

        Composite smartUpdateComposite = new Composite(preferenceComposite, SWT.NONE);
        smartUpdateComposite.setLayout(new GridLayout(2, false));
        smartUpdateComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
        formToolkit.adapt(smartUpdateComposite);
        formToolkit.paintBordersFor(smartUpdateComposite);

        smartUpdateButton_ok = new Button(smartUpdateComposite, SWT.RADIO | SWT.RIGHT);
        smartUpdateButton_ok.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(SelectionEvent e) {
                changePreferenceValue("smartUpdate", "true");
                dirty = true;
                firePropertyChange(PROP_DIRTY);
            }

        });
        smartUpdateButton_ok.setAlignment(SWT.LEFT);
        formToolkit.adapt(smartUpdateButton_ok, true, true);
        smartUpdateButton_ok.setText("true");

        smartUpdateButton_cancel = new Button(smartUpdateComposite, SWT.RADIO);
        if (Boolean.parseBoolean(getPreferenceValue("smartUpdate", config) == null ? "false"
                : getPreferenceValue("smartUpdate", config))) {
            smartUpdateButton_ok.setSelection(true);
            changePreferenceValue("smartUpdate", "true");
        } else {
            smartUpdateButton_cancel.setSelection(true);
            changePreferenceValue("smartUpdate", "false");
        }
        smartUpdateButton_cancel.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(SelectionEvent e) {
                changePreferenceValue("smartUpdate", "false");
                dirty = true;
                firePropertyChange(PROP_DIRTY);
            }

        });
        formToolkit.adapt(smartUpdateButton_cancel, true, true);
        smartUpdateButton_cancel.setText("false");
        Section featureSection = formToolkit.createSection(composite_3, Section.TWISTIE | Section.TITLE_BAR);
        GridData gd_featureSection = new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1);
        gd_featureSection.heightHint = 112;
        featureSection.setLayoutData(gd_featureSection);
        formToolkit.paintBordersFor(featureSection);
        featureSection.setText(Messages.FEATURESETUP);
        featureSection.setExpanded(true);

        Composite composite_8 = new Composite(featureSection, SWT.NONE);
        formToolkit.adapt(composite_8);
        formToolkit.paintBordersFor(composite_8);
        featureSection.setClient(composite_8);
        composite_8.setLayout(new GridLayout(1, false));

        Label lblNewLabel_1 = new Label(composite_8, SWT.NONE);
        lblNewLabel_1.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1));
        formToolkit.adapt(lblNewLabel_1, true, true);
        lblNewLabel_1.setText(Messages.SYSTEMINFO);

        Composite composite = new Composite(composite_8, SWT.NONE);
        GridData gd_composite = new GridData(SWT.CENTER, SWT.CENTER, true, false, 1, 1);
        gd_composite.widthHint = 380;
        composite.setLayoutData(gd_composite);
        formToolkit.adapt(composite);
        formToolkit.paintBordersFor(composite);

        final Label addFeatureLabel = formToolkit.createLabel(composite, "", SWT.NONE);
        addFeatureLabel.setImage(Activator.getImage("icons/addfeature.png"));
        addFeatureLabel.setBounds(0, 0, 90, 26);
        addFeatureLabel.addMouseListener(new MouseAdapter() {

            public void mouseUp(MouseEvent e) {
                AddFeatureDialog dialog = new AddFeatureDialog(getSite().getShell(), ConfigEditor.this, treeViewer,
                        config);

                dialog.open();
            }
        });
        addFeatureLabel.addMouseTrackListener(new MouseTrackListener() {
            @Override
            public void mouseHover(MouseEvent e) {
                addFeatureLabel.setImage(Activator.getImage("icons/addfeaturefocus.png"));
            }

            @Override
            public void mouseExit(MouseEvent e) {
                addFeatureLabel.setImage(Activator.getImage("icons/addfeature.png"));
            }

            @Override
            public void mouseEnter(MouseEvent e) {
                addFeatureLabel.setImage(Activator.getImage("icons/addfeaturefocus.png"));
            }
        });

        final Label addParamLabel = formToolkit.createLabel(composite, "", SWT.NONE);
        addParamLabel.setImage(Activator.getImage("icons/addParam.png"));
        addParamLabel.setBounds(95, 0, 90, 26);
        addParamLabel.addMouseListener(new MouseAdapter() {

            public void mouseUp(MouseEvent e) {
                if (config.getFeatures().size() == 0) {
                    MessageDialog.openInformation(getSite().getShell(), Messages.PackageAppItemDialog_INFO,
                            Messages.ADDFEATURE);
                    return;
                }
                CreateParamDialog dialog = new CreateParamDialog(getSite().getShell(), ConfigEditor.this,
                        treeViewer, config);
                dialog.open();
            }
        });
        addParamLabel.addMouseTrackListener(new MouseTrackListener() {
            @Override
            public void mouseHover(MouseEvent e) {
                addParamLabel.setImage(Activator.getImage("icons/addParamfocus.png"));
            }

            @Override
            public void mouseExit(MouseEvent e) {
                addParamLabel.setImage(Activator.getImage("icons/addParam.png"));
            }

            @Override
            public void mouseEnter(MouseEvent e) {
                addParamLabel.setImage(Activator.getImage("icons/addParamfocus.png"));
            }
        });

        final Label deleteNodeLabel = formToolkit.createLabel(composite, "", SWT.NONE);
        deleteNodeLabel.setImage(Activator.getImage("icons/deleteNode.png"));
        deleteNodeLabel.setBounds(290, 0, 90, 26);
        deleteNodeLabel.addMouseListener(new MouseAdapter() {

            public void mouseUp(MouseEvent e) {
                if (treeViewer.getSelection() == null)
                    return;
                IStructuredSelection ss = (StructuredSelection) treeViewer.getSelection();
                if (ss.getFirstElement() instanceof TreeNode) {
                    TreeNode node = (TreeNode) ss.getFirstElement();
                    if (node.getValue() instanceof Feature) {
                        config.getFeatures().remove((Feature) node.getValue());
                    }
                    if (node.getValue() instanceof Param) {
                        TreeNode parent = node.getParent();
                        Feature feature = (Feature) parent.getValue();
                        Param param = (Param) node.getValue();
                        feature.removeParams(param);
                    }
                    dirty = true;
                    firePropertyChange(PROP_DIRTY);
                    treeViewer.setInput(config.createTreeNode());
                    treeViewer.refresh();
                }
            }
        });
        deleteNodeLabel.addMouseTrackListener(new MouseTrackListener() {
            @Override
            public void mouseHover(MouseEvent e) {
                deleteNodeLabel.setImage(Activator.getImage("icons/deleteNodefocus.png"));
            }

            @Override
            public void mouseExit(MouseEvent e) {
                deleteNodeLabel.setImage(Activator.getImage("icons/deleteNode.png"));
            }

            @Override
            public void mouseEnter(MouseEvent e) {
                deleteNodeLabel.setImage(Activator.getImage("icons/deleteNodefocus.png"));
            }
        });

        treeViewer = new TreeViewer(composite_8, SWT.BORDER | SWT.FULL_SELECTION);
        Tree tree = treeViewer.getTree();
        tree.setLinesVisible(true);
        tree.setHeaderVisible(true);
        GridData gd_tree = new GridData(SWT.CENTER, SWT.FILL, true, true, 1, 1);
        gd_tree.heightHint = 112;
        tree.setLayoutData(gd_tree);
        formToolkit.paintBordersFor(tree);
        this.treeViewer.setContentProvider(new TreeNodeContentProvider());
        TreeViewerColumn treeViewerColumn = new TreeViewerColumn(treeViewer, SWT.NONE);
        TreeColumn trclmnNewColumn = treeViewerColumn.getColumn();
        trclmnNewColumn.setWidth(180);
        trclmnNewColumn.setText("\u540D\u79F0");
        treeViewerColumn.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                TreeNode treeNode = TreeNode.class.cast(element);
                if (treeNode.getValue() instanceof Feature) {
                    return ((Feature) treeNode.getValue()).getName();
                }
                if (treeNode.getValue() instanceof Param) {
                    return ((Param) treeNode.getValue()).getName();
                }
                return element.toString();
            }

        });

        TreeViewerColumn treeViewerColumn_1 = new TreeViewerColumn(treeViewer, SWT.NONE);
        TreeColumn trclmnNewColumn_1 = treeViewerColumn_1.getColumn();
        trclmnNewColumn_1.setWidth(180);
        trclmnNewColumn_1.setText("\u503C");
        treeViewerColumn_1.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                TreeNode treeNode = TreeNode.class.cast(element);
                if (treeNode.getValue() instanceof Feature) {
                    return "";
                }
                if (treeNode.getValue() instanceof Param) {
                    return ((Param) treeNode.getValue()).getValue();
                }
                return element.toString();
            }

        });
        this.treeViewer.setInput(config.createTreeNode());
        treeViewer.setColumnProperties(new String[] { "name", "value" });
        CellEditor[] treeViewer_editors = new CellEditor[tree.getColumnCount()];
        treeViewer_editors[0] = new TextCellEditor(tree);
        treeViewer_editors[1] = new TextCellEditor(tree);

        treeViewer.setCellEditors(treeViewer_editors);
        treeViewer.setCellModifier(new ICellModifier() {

            @Override
            public boolean canModify(Object element, String property) {
                TreeNode treeNode = TreeNode.class.cast(element);
                if (treeNode.getValue() instanceof Feature && property.equals("value")) { //$NON-NLS-1$
                    return false;
                }
                if (property.equals("name"))
                    return false;
                return true;
            }

            @Override
            public Object getValue(Object element, String property) {
                Object value = ""; //$NON-NLS-1$
                TreeNode treeNode = TreeNode.class.cast(element);
                if (treeNode.getValue() instanceof Feature) {
                    Feature feautre = Feature.class.cast(treeNode.getValue());
                    if (property.equals("name")) {
                        value = feautre.getName();
                    }
                }
                if (treeNode.getValue() instanceof Param) {
                    Param param = Param.class.cast(treeNode.getValue());
                    if (property.equals("name")) {
                        value = param.getName();
                    } else if (property.equals("value")) {
                        value = param.getValue();
                    }
                }
                return value;
            }

            @Override
            public void modify(Object element, String property, Object value) {
                TreeItem item = (TreeItem) element;
                Object o = item.getData();
                TreeNode treeNode = TreeNode.class.cast(o);
                if (treeNode.getValue() instanceof Feature) {
                    Feature feautre = Feature.class.cast(treeNode.getValue());
                    if (property.equals("name")) {
                        if ("".equals(value)) {
                            MessageDialog.openInformation(null, Messages.AddFeatureDialog_INFORMATION,
                                    Messages.CreateFeatureDialog_FEATURE_NMAE_NOT_NULL);
                        } else {
                            if (!feautre.getName().equals((String) value)) {
                                feautre.setName((String) value);
                                dirty = true;
                                firePropertyChange(PROP_DIRTY);
                                treeViewer.refresh();
                            }
                        }
                    }
                }
                if (treeNode.getValue() instanceof Param) {
                    Param param = Param.class.cast(treeNode.getValue());
                    if (property.equals("name")) {
                        if ("".equals(value)) {
                            MessageDialog.openInformation(null, Messages.PackageAppItemDialog_INFO,
                                    Messages.PARAMNAMEISNULL);
                        } else {
                            if (!param.getName().equals((String) value)) {
                                param.setName((String) value);
                                dirty = true;
                                firePropertyChange(PROP_DIRTY);
                                treeViewer.refresh();
                            }
                        }
                    } else if (property.equals("value")) {
                        if ("".equals(value)) {
                            MessageDialog.openInformation(null, Messages.PackageAppItemDialog_INFO,
                                    Messages.PARAMNAMEISNULL);
                        } else {
                            if (!param.getValue().equals((String) value)) {
                                param.setValue((String) value);
                                dirty = true;
                                firePropertyChange(PROP_DIRTY);
                                treeViewer.refresh();
                            }
                        }
                    }
                }
            }
        });

        final Section sctnNewSection_1 = formToolkit.createSection(composite_3,
                Section.TWISTIE | Section.TITLE_BAR);
        GridData gd_sctnNewSection_1 = new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1);
        gd_sctnNewSection_1.heightHint = 73;
        sctnNewSection_1.setLayoutData(gd_sctnNewSection_1);
        formToolkit.paintBordersFor(sctnNewSection_1);
        sctnNewSection_1.setText(Messages.PERMISSIONSETTINGS);
        sctnNewSection_1.setExpanded(true);

        Composite composite_5 = formToolkit.createComposite(sctnNewSection_1, SWT.NONE);
        formToolkit.paintBordersFor(composite_5);
        sctnNewSection_1.setClient(composite_5);
        composite_5.setLayout(new GridLayout(3, false));

        Label lblNewLabel_2 = new Label(composite_5, SWT.NONE);
        lblNewLabel_2.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, false, 3, 1));
        formToolkit.adapt(lblNewLabel_2, true, true);
        lblNewLabel_2.setText(Messages.PERMISSIONINFO);

        tableViewer_1 = new TableViewer(composite_5, SWT.BORDER | SWT.FULL_SELECTION);
        table_1 = tableViewer_1.getTable();
        table_1.setLinesVisible(true);
        table_1.setHeaderVisible(true);
        GridData gd_table_1 = new GridData(SWT.RIGHT, SWT.CENTER, true, false, 1, 1);
        gd_table_1.heightHint = 250;
        table_1.setLayoutData(gd_table_1);
        formToolkit.paintBordersFor(table_1);

        TableViewerColumn tableViewerColumn_2 = new TableViewerColumn(tableViewer_1, SWT.NONE);
        TableColumn tblclmnNewColumn_2 = tableViewerColumn_2.getColumn();
        tblclmnNewColumn_2.setResizable(false);
        tblclmnNewColumn_2.setMoveable(false);
        tblclmnNewColumn_2.setWidth(160);
        tblclmnNewColumn_2.setText(Messages.STARTED);
        tableViewerColumn_2.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                return ((Permission) element).getName();
            }

        });

        tableViewer_1.setContentProvider(new ArrayContentProvider());
        tableViewer_1.setInput(config.getPermissions());
        tableViewer_1.addDoubleClickListener(new IDoubleClickListener() {

            @Override
            public void doubleClick(DoubleClickEvent event) {

                StructuredSelection ss = (StructuredSelection) event.getSelection();
                Permission p = (Permission) ss.getFirstElement();
                config.getPermissions().remove(p);
                tableViewer_1.setInput(config.getPermissions());
                tableViewer_3.setInput(getUnauthorized(config));
                sctnNewSection_1.setExpanded(false);
                sctnNewSection_1.setExpanded(true);
                dirty = true;
                firePropertyChange(PROP_DIRTY);

            }
        });
        table_1.addFocusListener(new FocusListener() {

            @Override
            public void focusLost(FocusEvent e) {
                sctnNewSection_1.setExpanded(false);
                sctnNewSection_1.setExpanded(true);
            }

            @Override
            public void focusGained(FocusEvent e) {
                sctnNewSection_1.setExpanded(false);
                sctnNewSection_1.setExpanded(true);
            }
        });

        Label lblNewLabel = new Label(composite_5, SWT.NONE);
        lblNewLabel.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1));
        formToolkit.adapt(lblNewLabel, true, true);
        lblNewLabel.setText(Messages.CHANGEBUTTON);

        tableViewer_3 = new TableViewer(composite_5, SWT.BORDER | SWT.FULL_SELECTION);
        table_3 = tableViewer_3.getTable();
        table_3.setLinesVisible(true);
        table_3.setHeaderVisible(true);
        table_3.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, true, false, 1, 1));
        formToolkit.paintBordersFor(table_3);

        TableViewerColumn tableViewerColumn = new TableViewerColumn(tableViewer_3, SWT.NONE);
        TableColumn tableColumn = tableViewerColumn.getColumn();
        tableColumn.setResizable(false);
        tableColumn.setMoveable(false);
        tableColumn.setWidth(160);
        tableColumn.setText(Messages.UNSTARTED);
        tableViewerColumn.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                return ((Permission) element).getName();
            }

        });

        tableViewer_3.setContentProvider(new ArrayContentProvider());
        tableViewer_3.setInput(getUnauthorized(config));
        tableViewer_3.addDoubleClickListener(new IDoubleClickListener() {

            @Override
            public void doubleClick(DoubleClickEvent event) {
                StructuredSelection ss = (StructuredSelection) event.getSelection();
                Permission p = (Permission) ss.getFirstElement();
                config.getPermissions().add(p);
                tableViewer_1.setInput(config.getPermissions());
                tableViewer_3.setInput(getUnauthorized(config));
                sctnNewSection_1.setExpanded(false);
                sctnNewSection_1.setExpanded(true);
                dirty = true;
                firePropertyChange(PROP_DIRTY);
            }
        });
        table_3.addFocusListener(new FocusListener() {

            @Override
            public void focusLost(FocusEvent e) {
                sctnNewSection_1.setExpanded(false);
                sctnNewSection_1.setExpanded(true);
            }

            @Override
            public void focusGained(FocusEvent e) {
                sctnNewSection_1.setExpanded(false);
                sctnNewSection_1.setExpanded(true);
            }
        });

        Section sctnNewSection = formToolkit.createSection(composite_3, Section.TWISTIE | Section.TITLE_BAR);
        sctnNewSection.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
        formToolkit.paintBordersFor(sctnNewSection);
        sctnNewSection.setText(Messages.ACCESSSETTINGS);
        sctnNewSection.setExpanded(true);

        Composite composite_9 = formToolkit.createComposite(sctnNewSection, SWT.NONE);
        formToolkit.paintBordersFor(composite_9);
        sctnNewSection.setClient(composite_9);
        composite_9.setLayout(new GridLayout(1, false));

        Label lblNewLabel_9 = new Label(composite_9, SWT.NONE);
        lblNewLabel_9.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1));
        formToolkit.adapt(lblNewLabel_9, true, true);
        lblNewLabel_9.setText(Messages.ACCESSSINFO);

        Composite composite_2 = formToolkit.createComposite(composite_9, SWT.NONE);
        composite_2.setLayout(null);
        GridData gd_composite_2 = new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1);
        gd_composite_2.widthHint = 380;
        composite_2.setLayoutData(gd_composite_2);
        formToolkit.paintBordersFor(composite_2);

        final Label addLabel = formToolkit.createLabel(composite_2, "", SWT.NONE);
        addLabel.setImage(Activator.getImage("icons/add.png"));
        addLabel.setBounds(0, 0, 55, 26);
        addLabel.addMouseListener(new MouseAdapter() {

            public void mouseUp(MouseEvent e) {
                Access a = new Access();
                a.setOrigin("*");
                config.getAccesses().add(a);
                tableViewer_2.setInput(config.getAccesses());
                tableViewer_2.refresh();
                dirty = true;
                firePropertyChange(PROP_DIRTY);
            }
        });
        addLabel.addMouseTrackListener(new MouseTrackListener() {
            @Override
            public void mouseHover(MouseEvent e) {
                addLabel.setImage(Activator.getImage("icons/addfocus.png"));
            }

            @Override
            public void mouseExit(MouseEvent e) {
                addLabel.setImage(Activator.getImage("icons/add.png"));
            }

            @Override
            public void mouseEnter(MouseEvent e) {
                addLabel.setImage(Activator.getImage("icons/addfocus.png"));
            }
        });

        final Label deleteLabel = formToolkit.createLabel(composite_2, "", SWT.NONE);
        deleteLabel.setImage(Activator.getImage("icons/delete.png"));
        deleteLabel.setBounds(60, 0, 55, 26);
        deleteLabel.addMouseListener(new MouseAdapter() {

            public void mouseUp(MouseEvent e) {
                StructuredSelection ss = (StructuredSelection) tableViewer_2.getSelection();
                if (ss.getFirstElement() == null) {
                    return;
                }
                Access a = (Access) ss.getFirstElement();
                config.getAccesses().remove(a);
                tableViewer_2.refresh();
                dirty = true;
                firePropertyChange(PROP_DIRTY);
            }
        });
        deleteLabel.addMouseTrackListener(new MouseTrackListener() {
            @Override
            public void mouseHover(MouseEvent e) {
                deleteLabel.setImage(Activator.getImage("icons/deletefocus.png"));
            }

            @Override
            public void mouseExit(MouseEvent e) {
                deleteLabel.setImage(Activator.getImage("icons/delete.png"));
            }

            @Override
            public void mouseEnter(MouseEvent e) {
                deleteLabel.setImage(Activator.getImage("icons/deletefocus.png"));
            }
        });

        tableViewer_2 = new TableViewer(composite_9, SWT.BORDER | SWT.FULL_SELECTION);
        table_2 = tableViewer_2.getTable();
        table_2.setLinesVisible(true);
        table_2.setHeaderVisible(true);
        GridData gd_table_2 = new GridData(SWT.CENTER, SWT.CENTER, true, false, 1, 1);
        gd_table_2.heightHint = 120;
        table_2.setLayoutData(gd_table_2);
        formToolkit.paintBordersFor(table_2);

        TableViewerColumn tableViewerColumn_3 = new TableViewerColumn(tableViewer_2, SWT.NONE);
        TableColumn tblclmnNewColumn_3 = tableViewerColumn_3.getColumn();
        tblclmnNewColumn_3.setWidth(360);
        tblclmnNewColumn_3.setText(Messages.SOURCE);
        tableViewerColumn_3.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                return ((Access) element).getOrigin();
            }

        });

        tableViewer_2.setContentProvider(new ArrayContentProvider());
        tableViewer_2.setInput(config.getAccesses());
        tableViewer_2.setColumnProperties(new String[] { "origin" });
        CellEditor[] tableViewer2_editor = new CellEditor[table_2.getColumnCount()];
        tableViewer2_editor[0] = new TextCellEditor(table_2);

        tableViewer_2.setCellEditors(tableViewer2_editor);
        tableViewer_2.setCellModifier(new ICellModifier() {

            @Override
            public boolean canModify(Object element, String property) {

                return true;
            }

            @Override
            public Object getValue(Object element, String property) {
                Object value = ""; //$NON-NLS-1$
                Access access = Access.class.cast(element);
                if (property.equals("origin")) {
                    value = access.getOrigin();
                }
                return value;
            }

            @Override
            public void modify(Object element, String property, Object value) {
                TableItem item = (TableItem) element;
                Object o = item.getData();
                Access access = Access.class.cast(o);
                if (property.equals("origin")) {
                    if ("".equals(value)) {
                        MessageDialog.openInformation(null, Messages.AddFeatureDialog_INFORMATION,
                                Messages.PERMISSIONISNULL);
                    } else {
                        if (!access.getOrigin().equals((String) value)) {
                            access.setOrigin((String) value);
                            dirty = true;
                            firePropertyChange(PROP_DIRTY);
                            tableViewer_2.refresh();
                        }
                    }
                }
            }
        });
        scrolledComposite.setMinSize(new Point(700, 1500));
        scrolledComposite.setContent(composite_3);
    }

    @Override
    public void setFocus() {
        getSite().getShell().setFocus();
    }

    public void setValue(Config config) {
        generalSection.setValue(config);
        setPreferences(config);
        tableViewer_1.setInput(config.getPermissions());
        tableViewer_3.setInput(getUnauthorized(config));
        treeViewer.setInput(config.createTreeNode());
        tableViewer_3.refresh();
        tableViewer_1.refresh();
        treeViewer.refresh();
        this.config = config;
    }

    public void change() {
        firePropertyChange(PROP_DIRTY);
    }

    public Config getConfig() {
        return config;
    }

    public boolean hasErrorText() {
        return generalSection.hasErrorText();
    }

    private List<Permission> getUnauthorized(Config config) {
        List<Permission> unauthorized = new ArrayList<Permission>();
        selectedUnauthorized(config, unauthorized, "readPhoneState");
        selectedUnauthorized(config, unauthorized, "call");
        selectedUnauthorized(config, unauthorized, "sms");
        selectedUnauthorized(config, unauthorized, "camera");
        selectedUnauthorized(config, unauthorized, "record");
        selectedUnauthorized(config, unauthorized, "location");
        selectedUnauthorized(config, unauthorized, "fileSystem");
        selectedUnauthorized(config, unauthorized, "internet");
        selectedUnauthorized(config, unauthorized, "bootCompleted");
        selectedUnauthorized(config, unauthorized, "hardware");
        selectedUnauthorized(config, unauthorized, "contact");
        return unauthorized;
    }

    private void selectedUnauthorized(Config config, List<Permission> list, String name) {
        Permission p = new Permission();
        p.setName(name);
        if (!config.getPermissions().contains(p)) {
            list.add(p);
        }
    }

    private String getPreferenceValue(String name, Config config) {
        for (Preference p : config.getPreferences()) {
            if (p.getName().equals(name)) {
                return p.getValue();
            }
        }
        return null;
    }

    private void changePreferenceValue(String name, String value) {
        Preference preference = new Preference();
        preference.setName(name);
        preference.setValue(value);
        boolean isFind = false;
        for (Preference p : config.getPreferences()) {
            if (p.getName().equals(name)) {
                isFind = true;
                p.setValue(value);
            }
        }
        if (!isFind)
            config.getPreferences().add(preference);
    }

    private void setPreferences(Config config) {
        appBackgroundText.setText(getPreferenceValue("appBackground", config) == null ? ""
                : getPreferenceValue("appBackground", config));
        windowBackgroundText.setText(getPreferenceValue("windowBackground", config) == null ? ""
                : getPreferenceValue("windowBackground", config));
        frameBackgroundText.setText(getPreferenceValue("frameBackgroundColor", config) == null ? ""
                : getPreferenceValue("frameBackgroundColor", config));
        if (Boolean.parseBoolean(getPreferenceValue("pageBounce", config) == null ? "false"
                : getPreferenceValue("pageBounce", config))) {
            pageBounceButton_ok.setSelection(true);
        } else {
            pageBounceButton_cancel.setSelection(true);
        }

        pageBounceButton_ok.setSelection(false);
        pageBounceButton_cancel.setSelection(false);
        if (Boolean.parseBoolean(getPreferenceValue("pageBounce", config) == null ? "false"
                : getPreferenceValue("pageBounce", config))) {
            pageBounceButton_ok.setSelection(true);
        } else {
            pageBounceButton_cancel.setSelection(true);
        }
        hScrollBarEnabledButton_ok.setSelection(false);
        hScrollBarEnabledButton_cancel.setSelection(false);
        if (Boolean.parseBoolean(getPreferenceValue("hScrollBarEnabled", config) == null ? "false"
                : getPreferenceValue("hScrollBarEnabled", config))) {
            hScrollBarEnabledButton_ok.setSelection(true);
        } else {
            hScrollBarEnabledButton_cancel.setSelection(true);
        }
        vScrollBarEnabledButton_ok.setSelection(false);
        vScrollBarEnabledButton_cancel.setSelection(false);
        if (Boolean.parseBoolean(getPreferenceValue("vScrollBarEnabled", config) == null ? "false"
                : getPreferenceValue("vScrollBarEnabled", config))) {
            vScrollBarEnabledButton_ok.setSelection(true);
        } else {
            vScrollBarEnabledButton_cancel.setSelection(true);
        }

        fullScreenButton_ok.setSelection(false);
        fullScreenButton_cancel.setSelection(false);
        if (Boolean.parseBoolean(getPreferenceValue("fullScreen", config) == null ? "false"
                : getPreferenceValue("fullScreen", config))) {
            fullScreenButton_ok.setSelection(true);
        } else {
            fullScreenButton_cancel.setSelection(true);
        }
        ios7Button_ok.setSelection(false);
        ios7Button_cancel.setSelection(false);
        if (Boolean.parseBoolean(getPreferenceValue("iOS7StatusBarAppearance", config) == null ? "false"
                : getPreferenceValue("iOS7StatusBarAppearance", config))) {
            ios7Button_ok.setSelection(true);
        } else {
            ios7Button_cancel.setSelection(true);
        }
        autoLaunchButton_ok.setSelection(false);
        autoLaunchButton_cancel.setSelection(false);
        if (Boolean.parseBoolean(getPreferenceValue("autoLaunch", config) == null ? "false"
                : getPreferenceValue("autoLaunch", config))) {
            autoLaunchButton_ok.setSelection(true);
        } else {
            autoLaunchButton_cancel.setSelection(true);
        }
        autoUpdateButton_ok.setSelection(false);
        autoUpdateButton_cancel.setSelection(false);
        if (Boolean.parseBoolean(getPreferenceValue("autoUpdate", config) == null ? "false"
                : getPreferenceValue("autoUpdate", config))) {
            autoUpdateButton_ok.setSelection(true);
        } else {
            autoUpdateButton_cancel.setSelection(true);
        }
        if (Boolean.parseBoolean(getPreferenceValue("smartUpdate", config) == null ? "false"
                : getPreferenceValue("smartUpdate", config))) {
            smartUpdateButton_ok.setSelection(true);
        } else {
            smartUpdateButton_cancel.setSelection(true);
        }
    }
}