fr.labsticc.framework.constraints.view.ConstraintLibraryPanel.java Source code

Java tutorial

Introduction

Here is the source code for fr.labsticc.framework.constraints.view.ConstraintLibraryPanel.java

Source

/*******************************************************************************
 * Copyright (c) 2011 Lab-STICC Universite de Bretagne Sud, Lorient.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the CeCILL-B license available
 * at :
 * en : http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
 * fr : http://www.cecill.info/licences/Licence_CeCILL-B_V1-fr.html
 * 
 * Contributors:
 * Dominique BLOUIN (Lab-STICC UBS), dominique.blouin@univ-ubs.fr
 ******************************************************************************/
package fr.labsticc.framework.constraints.view;

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

import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;

import fr.labsticc.framework.constraints.view.i18n.ConstraintConsoleMessages;

public class ConstraintLibraryPanel extends BasicPanel {

    private TableViewer tblLibraries;
    private Collection<Object[]> dataElements;
    private ToolItem tbiEditLib;
    private ToolItem tbiRefreshLib;
    private ToolItem tbiDeleteLib;

    private final IConstraintLibraryPanelActionHandler actionHandler;

    public ConstraintLibraryPanel(final Composite p_parent, final int pi_style,
            final IConstraintLibraryPanelActionHandler p_actionHandler) {
        super(p_parent, pi_style);

        dataElements = new ArrayList<Object[]>();
        actionHandler = p_actionHandler;

        createControls();
    }

    protected void createControls() {
        setLayout(new GridLayout());
        tbrActions = new ToolBar(this, SWT.FLAT | SWT.WRAP | SWT.RIGHT);

        createToolBarItem(ConstraintConsoleMessages.addLibAction_icon, ConstraintConsoleMessages.addLibAction_tip,
                SWT.PUSH, new SelectionAdapter() {

                    @Override
                    public void widgetSelected(final SelectionEvent p_evt) {
                        final Collection<String> addedLibs = actionHandler.addLibrariesRequested(getLibraries());

                        // Check if canceled
                        if (addedLibs != null) {
                            setLibraries(addedLibs);
                        }
                    }
                });

        tbiEditLib = createToolBarItem(ConstraintConsoleMessages.editLibAction_icon,
                ConstraintConsoleMessages.editLibAction_tip, SWT.PUSH, new SelectionAdapter() {

                    @Override
                    public void widgetSelected(final SelectionEvent p_evt) {
                        actionHandler.openLibrariesRequested(selectedLibraryIds());
                    }
                });
        tbiEditLib.setEnabled(false);

        tbiRefreshLib = createToolBarItem(ConstraintConsoleMessages.refreshLibAction_icon,
                ConstraintConsoleMessages.refreshLibAction_tip, SWT.PUSH, new SelectionAdapter() {

                    @Override
                    public void widgetSelected(final SelectionEvent p_evt) {
                        actionHandler.librariesRefreshRequested(selectedLibraryIds());
                    }
                });
        tbiRefreshLib.setEnabled(false);

        tbiDeleteLib = createToolBarItem(ConstraintConsoleMessages.deleteLibAction_icon,
                ConstraintConsoleMessages.deleteLibAction_tip, SWT.PUSH, new SelectionAdapter() {

                    @Override
                    public void widgetSelected(final SelectionEvent p_evt) {
                        final Collection<String> deletedLibs = selectedLibraryIds();
                        final Collection<String> remainingLibs = getLibraries();
                        remainingLibs.removeAll(deletedLibs);
                        setLibraries(remainingLibs);
                        actionHandler.librariesDeleted(deletedLibs);
                    }
                });
        tbiDeleteLib.setEnabled(false);

        tblLibraries = new TableViewer(this,
                SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
        final Table table = tblLibraries.getTable();
        table.setHeaderVisible(true);
        table.setLinesVisible(true);
        table.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseDoubleClick(MouseEvent p_evt) {
                final Object source = p_evt.getSource();

                if (source instanceof Table) {
                    final Table tbl = (Table) source;

                    if (tbl.getSelectionCount() == 1) {
                        actionHandler.openLibrariesRequested(selectedLibraryIds());
                    }
                }
            }
        });

        final GridData gridData = new GridData();
        gridData.verticalAlignment = GridData.FILL;
        gridData.grabExcessHorizontalSpace = true;
        gridData.grabExcessVerticalSpace = true;
        gridData.horizontalAlignment = GridData.FILL;
        tblLibraries.getControl().setLayoutData(gridData);

        tblLibraries.setContentProvider(new IStructuredContentProvider() {

            @Override
            public void inputChanged(final Viewer p_viewer, final Object p_oldInput, final Object p_newInput) {
            }

            @Override
            public void dispose() {
            }

            @Override
            public Object[] getElements(final Object p_inputElement) {
                return ((List<?>) p_inputElement).toArray();
            }
        });

        tblLibraries.setInput(dataElements);
        tblLibraries.setComparator(new TableColumnSorter());

        tblLibraries.addPostSelectionChangedListener(new ISelectionChangedListener() {

            @Override
            public void selectionChanged(final SelectionChangedEvent p_event) {
                if (p_event.getSelection() instanceof IStructuredSelection) {
                    final IStructuredSelection structSel = (IStructuredSelection) p_event.getSelection();
                    tbiEditLib.setEnabled(structSel.size() == 1);
                    tbiRefreshLib.setEnabled(structSel.size() > 0);
                    tbiDeleteLib.setEnabled(structSel.size() > 0);
                } else {
                    tbiEditLib.setEnabled(false);
                    tbiRefreshLib.setEnabled(false);
                    tbiDeleteLib.setEnabled(false);
                }
            }
        });

        buildColumns();
    }

    private void buildColumns() {
        final TableColumnSortSelectionListener sortListener = new TableColumnSortSelectionListener(tblLibraries);

        TableViewerColumn viewerColumn = new TableViewerColumn(tblLibraries, SWT.NONE);
        ColumnLabelProvider lblProvider = new ColumnLabelProvider() {
            @Override
            public String getText(final Object p_element) {
                return String.valueOf(((Object[]) p_element)[0]);
            }
        };
        viewerColumn.setLabelProvider(lblProvider);

        TableColumn column = viewerColumn.getColumn();
        column.setText(ConstraintConsoleMessages.evalOrderHeader);
        column.setWidth(80);
        column.setResizable(true);
        column.setMoveable(true);
        column.addSelectionListener(sortListener);

        viewerColumn = new TableViewerColumn(tblLibraries, SWT.NONE);
        lblProvider = new ColumnLabelProvider() {
            @Override
            public String getText(final Object p_element) {
                return String.valueOf(((Object[]) p_element)[1]);
            }
        };
        viewerColumn.setLabelProvider(lblProvider);

        column = viewerColumn.getColumn();
        column.setText(ConstraintConsoleMessages.libraryHeader);
        column.setWidth(700);
        column.setResizable(true);
        column.setMoveable(true);
        column.addSelectionListener(sortListener);
    }

    private Collection<String> selectedLibraryIds() {
        final Collection<String> elements = new ArrayList<String>();

        for (final TableItem item : tblLibraries.getTable().getSelection()) {
            elements.add(item.getText(1));
        }

        return elements;
    }

    public void setLibraries(final Collection<String> p_libraries) {
        dataElements.clear();

        if (p_libraries != null) {
            int index = 0;

            for (final String libName : p_libraries) {
                dataElements.add(new Object[] { index++, libName });
            }
        }

        Display.getDefault().asyncExec(new Runnable() {
            @Override
            public void run() {
                tblLibraries.refresh();
            }
        });
    }

    public Collection<String> getLibraries() {
        final Collection<String> libraryIds = new ArrayList<String>();

        for (final Object[] library : dataElements) {
            libraryIds.add(library[1].toString());
        }

        return libraryIds;
    }

    @Override
    public void setEnabled(final boolean pb_value) {
        super.setEnabled(pb_value);

        tblLibraries.getControl().setEnabled(pb_value);
    }
}