org.eclipse.wst.common.snippets.internal.ui.SnippetVariableTableViewer.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.wst.common.snippets.internal.ui.SnippetVariableTableViewer.java

Source

/*******************************************************************************
 * Copyright (c) 2004, 2005 IBM Corporation and others.
 * 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:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.wst.common.snippets.internal.ui;

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

import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.wst.common.snippets.core.ISnippetVariable;
import org.eclipse.wst.common.snippets.internal.palette.SnippetVariable;

/**
 * Not ready yet.
 */

public class SnippetVariableTableViewer {
    protected List fLibraryVariables;
    protected ISnippetVariable fSelection;

    protected List fSelectionChangedListeners;

    protected TableViewer fTableViewer = null;
    protected List fValueChangedListeners;
    protected Hashtable fValues = null;

    /**
     * Constructor for VariableInsertionDialog.
     * 
     * @param parentShell
     */
    public SnippetVariableTableViewer(Composite parent) {
        super();
        createContents(parent);
    }

    public void addSelectionChangedListener(ISelectionChangedListener listener) {
        getSelectionChangedListeners().add(listener);
    }

    public void addValueChangedListener(ValueChangedListener listener) {
        getValueChangeListeners().add(listener);
    }

    public Control createContents(Composite parent) {
        // pity we can't just use a PropertySheetPage, but the column headers
        // aren't customizable
        fTableViewer = new TableViewer(new Table(parent, SWT.FULL_SELECTION | SWT.SINGLE | SWT.BORDER));

        // GridData data = new GridData(GridData.FILL_BOTH);
        // fTableViewer.getTable().setLayoutData(data);

        fTableViewer.getTable().setHeaderVisible(true);
        fTableViewer.getTable().setLinesVisible(true);

        fTableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
            public void selectionChanged(SelectionChangedEvent event) {
                ISelection sel = event.getSelection();
                if (sel != null && !sel.isEmpty() && sel instanceof IStructuredSelection)
                    fSelection = (ISnippetVariable) ((IStructuredSelection) sel).getFirstElement();
                else
                    fSelection = null;
                fireSelectionChanged(event);
            }
        });

        fTableViewer.setContentProvider(new ArrayContentProvider());

        fTableViewer.setLabelProvider(new ITableLabelProvider() {

            public void addListener(ILabelProviderListener listener) {
            }

            public void dispose() {
            }

            public Image getColumnImage(Object element, int columnIndex) {
                return null;
            }

            public String getColumnText(Object element, int columnIndex) {
                if (element == null)
                    return null;
                SnippetVariable var = (SnippetVariable) element;
                if (columnIndex == 0)
                    return var.getId();
                else if (columnIndex == 1)
                    return (String) fValues.get(var.getId());
                return ""; //$NON-NLS-1$
            }

            public boolean isLabelProperty(Object element, String property) {
                return false;
            }

            public void removeListener(ILabelProviderListener listener) {
            }
        });

        TableLayout tlayout = new TableLayout();
        tlayout.addColumnData(new ColumnWeightData(35, true));
        tlayout.addColumnData(new ColumnWeightData(65, true));
        fTableViewer.getTable().setLayout(tlayout); // Create the Host column
        TableColumn tc1 = new TableColumn(fTableViewer.getTable(), SWT.NONE);
        tc1.setText("Variable ID"); //$NON-NLS-1$
        tc1.setResizable(true);
        tc1.setWidth(40);
        TableColumn tc2 = new TableColumn(fTableViewer.getTable(), SWT.NONE);
        tc2.setText("Value"); //$NON-NLS-1$
        tc2.setResizable(true);
        tc2.setWidth(40);

        fTableViewer.setCellEditors(new CellEditor[] { new TextCellEditor(fTableViewer.getTable()),
                new TextCellEditor(fTableViewer.getTable()) });

        fTableViewer.setColumnProperties(new String[] { "id", "value" }); //$NON-NLS-1$ //$NON-NLS-2$
        ICellModifier cellmodifier = new ICellModifier() {
            public boolean canModify(Object element, String property) {
                return property.equals("value"); //$NON-NLS-1$
            }

            public Object getValue(Object element, String property) {
                if (property.equals("id")) //$NON-NLS-1$
                    return ((SnippetVariable) element).getId();
                else if (property.equals("value")) //$NON-NLS-1$
                    return fValues.get(((SnippetVariable) element).getId());
                return ""; //$NON-NLS-1$
            }

            public void modify(Object element, String property, Object value) {
                TableItem item = (TableItem) element;
                SnippetVariable var = (SnippetVariable) item.getData();
                if (property.equals("value")) { //$NON-NLS-1$
                    String oldValue = (String) fValues.get(var.getId());
                    fValues.put(var.getId(), value);
                    item.setText(1, (String) value);
                    fireValueChanged(new String(var.getId()), property, oldValue, new String((String) value));
                }
            }
        };
        fTableViewer.setCellModifier(cellmodifier);
        fTableViewer.setInput(getLibraryVariables());
        refresh();
        return getControl();
    }

    protected void fireSelectionChanged(SelectionChangedEvent event) {
        ISelectionChangedListener[] listeners = new ISelectionChangedListener[getSelectionChangedListeners()
                .size()];
        getSelectionChangedListeners().toArray(listeners);
        for (int i = 0; i < listeners.length; i++)
            listeners[i].selectionChanged(event);
    }

    protected void fireValueChanged(String key, String property, String oldValue, String newValue) {
        ValueChangedListener[] listeners = new ValueChangedListener[getValueChangeListeners().size()];
        getValueChangeListeners().toArray(listeners);
        for (int i = 0; i < listeners.length; i++)
            listeners[i].valueChanged(key, property, oldValue, newValue);
    }

    public Control getControl() {

        return getTable();
    }

    /**
     * Gets the libraryVariables.
     * 
     * @return Returns a List
     */
    public List getLibraryVariables() {
        if (fLibraryVariables == null)
            fLibraryVariables = new ArrayList();
        return fLibraryVariables;
    }

    public ISnippetVariable getSelectedVariable() {
        return fSelection;
    }

    protected List getSelectionChangedListeners() {
        if (fSelectionChangedListeners == null)
            fSelectionChangedListeners = new ArrayList();
        return fSelectionChangedListeners;
    }

    /**
     * Gets the tableViewer.
     * 
     * @return Returns a TableViewer
     */
    public Table getTable() {
        if (fTableViewer == null)
            return null;
        return fTableViewer.getTable();
    }

    public String getValue(ISnippetVariable var) {
        return getValue(((SnippetVariable) var).getId());
    }

    public String getValue(String id) {
        if (getValues().containsKey(id))
            return (String) getValues().get(id);
        return ""; //$NON-NLS-1$
    }

    protected List getValueChangeListeners() {
        if (fValueChangedListeners == null)
            fValueChangedListeners = new ArrayList();
        return fValueChangedListeners;
    }

    /**
     * Gets the values.
     * 
     * @return Returns a Hashtable
     */
    public Hashtable getValues() {
        if (fValues == null)
            fValues = new Hashtable();
        return fValues;
    }

    protected void refresh() {
        if (fLibraryVariables != null) {
            fValues = null;
            for (int i = 0; i < fLibraryVariables.size(); i++) {
                SnippetVariable var = (SnippetVariable) fLibraryVariables.get(i);
                getValues().put(var.getId(), var.getDefaultValue());
            }
        }
        if (fTableViewer != null) {
            fTableViewer.setInput(fLibraryVariables);
        }
    }

    public void removeSelectionChangedListener(ISelectionChangedListener listener) {
        getSelectionChangedListeners().remove(listener);
    }

    public void removeValueChangedListener(ValueChangedListener listener) {
        getValueChangeListeners().remove(listener);
    }

    /**
     * Sets the libraryVariables.
     * 
     * @param libraryVariables
     *            The libraryVariables to set
     */
    public void setLibraryVariables(List libraryVariables) {
        fLibraryVariables = libraryVariables;
        refresh();
    }

}