org.eclipse.datatools.sqltools.result.internal.preference.ResultHistoryPage.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.datatools.sqltools.result.internal.preference.ResultHistoryPage.java

Source

/*******************************************************************************
 * Copyright (c) 2005 Sybase, Inc.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Sybase, Inc. - initial API and implementation
 *******************************************************************************/
package org.eclipse.datatools.sqltools.result.internal.preference;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.eclipse.datatools.help.ContextProviderDelegate;
import org.eclipse.datatools.help.HelpUtil;
import org.eclipse.datatools.sqltools.result.internal.ui.AbstractShiftedListSection;
import org.eclipse.datatools.sqltools.result.internal.ui.Messages;
import org.eclipse.datatools.sqltools.result.internal.ui.PreferenceConstants;
import org.eclipse.datatools.sqltools.result.internal.ui.view.ResultHistoryHelper;
import org.eclipse.datatools.sqltools.result.ui.IHelpConstants;
import org.eclipse.datatools.sqltools.result.ui.ResultsViewUIPlugin;
import org.eclipse.help.IContext;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
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.Control;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;

/**
 * Result history options preference page
 * 
 * @author Dafan Yang
 */
public class ResultHistoryPage extends PreferencePage implements IWorkbenchPreferencePage {
    private String[] _initVisibleColumns, _initInvisibleColumns;
    private AbstractShiftedListSection _shiftedListSection;

    private Composite _otherComp;
    private Button _autoSaveHistory;
    private Button _autoCleanHistory;

    private ContextProviderDelegate contextProviderDelegate = new ContextProviderDelegate(
            ResultsViewUIPlugin.getDefault().getBundle().getSymbolicName());

    class ColumnsDisplaySection extends AbstractShiftedListSection {
        public ColumnsDisplaySection(String sectionTitle, String leftTitle, String rightTitle) {
            super(sectionTitle, leftTitle, rightTitle);
        }

        PaintListener paintListener = new PaintListener() {
            public void paintControl(PaintEvent e) {
                if (_leftList.getItems().length < 1) {
                    setErrorMessage(Messages.ResultHistoryPage_no_column_selected);
                    setValid(false);
                    updateApplyButton();
                } else {
                    setErrorMessage(null);
                    setValid(true);
                    updateApplyButton();
                }
            }

        };

        public Control createContents(Composite parent) {
            Control control = super.createContents(parent);
            //   _leftList.addPaintListener(paintListener);
            setInput(_initVisibleColumns, _initInvisibleColumns, true);
            return control;
        }

        Map getCloumnsDisplayInfo() {
            Map result = new HashMap();
            String name = "";

            String[] items = _leftList.getItems();
            for (int i = 0; i < items.length; i++) {
                name = items[i];
                result.put(name, _leftList.getData(name));
            }

            items = _rightList.getItems();
            for (int i = 0; i < items.length; i++) {
                name = items[i];
                result.put(name, _rightList.getData(name));
            }

            return result;
        }
    }

    public IContext getContext(Object target) {
        return contextProviderDelegate.getContext(target);
    }

    public int getContextChangeMask() {
        return contextProviderDelegate.getContextChangeMask();
    }

    public String getSearchExpression(Object target) {
        return contextProviderDelegate.getSearchExpression(target);
    }

    protected Control createContents(Composite parent) {
        getShell().setData(HelpUtil.CONTEXT_PROVIDER_KEY, this);
        HelpUtil.setHelp(parent, HelpUtil.getContextId(IHelpConstants.PREFERENCE_PAGE_RESULT_HISTORY,
                ResultsViewUIPlugin.getDefault().getBundle().getSymbolicName()));

        Composite comp = new Composite(parent, SWT.NONE);
        GridLayout layout = new GridLayout();
        layout.numColumns = 1;
        layout.marginHeight = 0;
        layout.marginWidth = 0;
        comp.setLayout(layout);

        initShiftedListValues(true);
        _shiftedListSection = new ColumnsDisplaySection(Messages.ResultHistoryPage_columns_group_name,
                Messages.ResultHistoryPage_columns_selectedlist_name,
                Messages.ResultHistoryPage_columns_availablelist_name);
        _shiftedListSection.createContents(comp);

        _otherComp = new Composite(comp, SWT.NONE);
        layout = new GridLayout();
        layout.numColumns = 1;
        layout.marginHeight = 0;
        layout.marginWidth = 0;

        _otherComp.setLayout(layout);
        _otherComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        _autoSaveHistory = new Button(_otherComp, SWT.CHECK);
        _autoSaveHistory.setText(Messages.ResultHistoryPage_auto_persist);
        _autoSaveHistory.setToolTipText(Messages.ResultHistoryPage_tooltip_auto_persist);

        _autoCleanHistory = new Button(_otherComp, SWT.CHECK);
        _autoCleanHistory.setText(Messages.ResultHistoryPage_auto_clean);
        _autoCleanHistory.setToolTipText(Messages.ResultHistoryPage_tooltip_auto_clean);

        initializeValues();
        return comp;
    }

    public void init(IWorkbench workbench) {
        setPreferenceStore(ResultsViewUIPlugin.getDefault().getPreferenceStore());
    }

    private void initializeValues() {
        IPreferenceStore store = getPreferenceStore();

        _autoSaveHistory.setSelection(store.getBoolean(PreferenceConstants.RESULT_HISTORY_SAVE_HISTORY));
        _autoCleanHistory.setSelection(store.getBoolean(PreferenceConstants.RESULT_HISTORY_CLEAN_HISTORY));
    }

    private void initShiftedListValues(boolean usePreference) {
        ResultHistoryHelper.refreshOrderFromPreference(usePreference);

        int len = ResultHistoryHelper.getColumnNumber(usePreference);
        _initVisibleColumns = new String[len];
        _initInvisibleColumns = new String[ResultHistoryHelper.COLUMN_NAME.length - len];

        for (Iterator iter = ResultHistoryHelper.COLUMN_PREFERENCE_ORDER_MAP.keySet().iterator(); iter.hasNext();) {
            Object prefName = iter.next();
            int index = ((Integer) ResultHistoryHelper.COLUMN_PREFERENCE_ORDER_MAP.get(prefName)).intValue();

            if (index < 0) {
                continue;
            }

            for (Iterator iter1 = ResultHistoryHelper.COLUMN_NAME_PREFERENCE_MAP.keySet().iterator(); iter1
                    .hasNext();) {
                Object columnName = iter1.next();

                if (ResultHistoryHelper.COLUMN_NAME_PREFERENCE_MAP.get(columnName).equals(prefName)) {
                    _initVisibleColumns[index] = (String) columnName;
                }
            }
        }

        List visibleList = Arrays.asList(_initVisibleColumns);
        List invisibleList = new ArrayList(Arrays.asList(ResultHistoryHelper.COLUMN_NAME));

        invisibleList.removeAll(visibleList);
        invisibleList.toArray(_initInvisibleColumns);
    }

    protected void performDefaults() {
        initShiftedListValues(false);
        _shiftedListSection.setInput(_initVisibleColumns, _initInvisibleColumns, true);

        IPreferenceStore store = getPreferenceStore();
        _autoSaveHistory.setSelection(store.getDefaultBoolean(PreferenceConstants.RESULT_HISTORY_SAVE_HISTORY));
        _autoCleanHistory.setSelection(store.getDefaultBoolean(PreferenceConstants.RESULT_HISTORY_CLEAN_HISTORY));

        super.performDefaults();
    }

    public boolean performOk() {
        IPreferenceStore store = getPreferenceStore();

        Map columnNameOrderMap = ((ColumnsDisplaySection) _shiftedListSection).getCloumnsDisplayInfo();

        for (Iterator iter = columnNameOrderMap.keySet().iterator(); iter.hasNext();) {
            Object columnName = iter.next();
            Object preference = ResultHistoryHelper.COLUMN_NAME_PREFERENCE_MAP.get(columnName);
            Object order = columnNameOrderMap.get(columnName);

            store.setValue((String) preference, ((Integer) order).intValue());
        }

        store.setValue(PreferenceConstants.RESULT_HISTORY_ALL_COLUMNS,
                !store.getBoolean(PreferenceConstants.RESULT_HISTORY_ALL_COLUMNS));
        store.setValue(PreferenceConstants.RESULT_HISTORY_SAVE_HISTORY, _autoSaveHistory.getSelection());
        store.setValue(PreferenceConstants.RESULT_HISTORY_CLEAN_HISTORY, _autoCleanHistory.getSelection());

        return super.performOk();
    }
}