org.eclipse.paho.mqtt.ui.support.table.TableViewerBuilder.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.paho.mqtt.ui.support.table.TableViewerBuilder.java

Source

/*******************************************************************************
 * Copyright (c) 2013 IBM Corp.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * and Eclipse Distribution License v1.0 which accompany this distribution. 
 *
 * The Eclipse Public License is available at 
 *    http://www.eclipse.org/legal/epl-v10.html
 * and the Eclipse Distribution License is available at 
 *   http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * Contributors:
 *    Bin Zhang - initial API and implementation and/or initial documentation
 *******************************************************************************/
package org.eclipse.paho.mqtt.ui.support.table;

import java.beans.PropertyDescriptor;
import java.util.Collections;
import java.util.Map;

import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ColumnViewerEditor;
import org.eclipse.jface.viewers.ColumnViewerEditorActivationEvent;
import org.eclipse.jface.viewers.ColumnViewerEditorActivationStrategy;
import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerEditor;
import org.eclipse.jface.window.ToolTip;
import org.eclipse.paho.mqtt.ui.util.Beans;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;

/**
 * TableViewer builder
 * 
 * @author Bin Zhang
 */
public final class TableViewerBuilder {
    private final TableViewer viewer;
    private final boolean checkable;
    private Map<String, PropertyDescriptor> mappings;

    /**
     * Creates a new TableViewerBuilder
     * 
     * @param parent
     * @param style
     */
    public TableViewerBuilder(Composite parent, int style) {
        // check parent
        if (parent.getChildren().length > 0) {
            throw new IllegalArgumentException(
                    "The parent composite for the table needs to be empty for TableColumnLayout."); //$NON-NLS-1$
        }

        mappings = Collections.emptyMap();
        checkable = (style & SWT.CHECK) == SWT.CHECK;

        if (checkable) {
            viewer = CheckboxTableViewer.newCheckList(parent, style);
        } else {
            viewer = new TableViewer(parent, style);
        }

        viewer.setContentProvider(new ArrayContentProvider());
        viewer.setUseHashlookup(true);

        // enable tooltip support
        ColumnViewerToolTipSupport.enableFor(viewer, ToolTip.NO_RECREATE);

        Table table = viewer.getTable();

        // set TableColumnLayout to table parent
        // Table parent layout needs to be a TableColumnLayout
        table.getParent().setLayout(new TableColumnLayout());

        // headers / lines visible by default
        table.setHeaderVisible(true);
        table.setLinesVisible(true);
    }

    /**
     * Creates a new TableViewerBuilder with default SWT styles.
     */
    public TableViewerBuilder(Composite parent) {
        this(parent, SWT.MULTI | SWT.V_SCROLL | SWT.BORDER | SWT.FULL_SELECTION);
    }

    /**
     * Default activationStrategy and ColumnViewerEditor feature
     */
    public TableViewerBuilder makeEditable() {
        return makeEditable(null, -1);
    }

    /**
     * @param activationStrategy
     * @param feature
     */
    public TableViewerBuilder makeEditable(ColumnViewerEditorActivationStrategy activationStrategy, int feature) {
        ColumnViewerEditorActivationStrategy defaultActivationStrategy = new ColumnViewerEditorActivationStrategy(
                viewer) {
            protected boolean isEditorActivationEvent(ColumnViewerEditorActivationEvent event) {
                return event.eventType == ColumnViewerEditorActivationEvent.MOUSE_DOUBLE_CLICK_SELECTION
                        || event.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC;
            }
        };
        TableViewerEditor.create(viewer,
                activationStrategy == null ? defaultActivationStrategy : activationStrategy,
                feature < 0 ? ColumnViewerEditor.DEFAULT : feature);
        return this;
    }

    /**
     * @param listener
     */
    public TableViewerBuilder selectionChangedListener(ISelectionChangedListener listener) {
        this.viewer.addSelectionChangedListener(listener);
        return this;
    }

    /**
     * @param listener
     */
    public TableViewerBuilder doubleClickListener(IDoubleClickListener listener) {
        this.viewer.addDoubleClickListener(listener);
        return this;
    }

    /**
     * @param listener
     */
    public TableViewerBuilder checkStateListener(ICheckStateListener listener) {
        if (!checkable) {
            throw new IllegalStateException("The table viewer is not a CheckboxTableViewer!"); //$NON-NLS-1$
        }

        ((CheckboxTableViewer) viewer).addCheckStateListener(listener);
        return this;
    }

    /**
     * @param modelClass
     */
    public TableViewerBuilder modelClass(Class<?> modelClass) {
        this.mappings = Beans.introspect(modelClass);
        return this;
    }

    /**
     * @param modelClass
     */
    public TableViewerBuilder contentProvider(IContentProvider contentProvider) {
        viewer.setContentProvider(contentProvider);
        return this;
    }

    /**
     * Sets the given collection as input object
     */
    public TableViewerBuilder input(Object input) {
        viewer.setInput(input);
        return this;
    }

    /**
     * Returns the JFace TableViewer.
     */
    public TableViewer build() {
        return viewer;
    }

    /**
     * Returns the JFace CheckboxTableViewer.
     */
    public CheckboxTableViewer buildCheckable() {
        if (!checkable) {
            throw new IllegalStateException("The table viewer is not a CheckboxTableViewer!"); //$NON-NLS-1$
        }

        return (CheckboxTableViewer) viewer;
    }

    /**
     * Creates a new ColumnBuilder that can be used to configure the table column. When you have finished configuring
     * the column, call build() on the ColumnBuilder to create the actual column.
     */
    public TableViewerColumnBuilder columnBuilder(String headerText, int style) {
        return new TableViewerColumnBuilder(this, headerText, style);
    }

    TableViewer getTableViewer() {
        return viewer;
    }

    PropertyDescriptor getPropertyDescriptor(String propertyName) {
        return mappings.get(propertyName);
    }

    TableColumnLayout getTableLayout() {
        return (TableColumnLayout) viewer.getTable().getParent().getLayout();
    }

}