es.cv.gvcase.gvm.glossary.formseditor.composites.fefem.TableOfTermsComposite.java Source code

Java tutorial

Introduction

Here is the source code for es.cv.gvcase.gvm.glossary.formseditor.composites.fefem.TableOfTermsComposite.java

Source

/***************************************************************************
* Copyright (c) 2008 Conselleria de Infraestructuras y Transporte,
* Generalitat de la Comunitat Valenciana . 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: Mario Cervera Ubeda (Integranova) - Initial API and implementation
*
**************************************************************************/
package es.cv.gvcase.gvm.glossary.formseditor.composites.fefem;

import java.util.ArrayList;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.CellLabelProvider;
import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.ui.forms.widgets.FormToolkit;

import es.cv.gvcase.fefem.common.FEFEMPage;
import es.cv.gvcase.fefem.common.composites.EMFContainedCollectionEditionComposite;
import es.cv.gvcase.gvm.glossary.GlossaryFactory;
import es.cv.gvcase.gvm.glossary.GlossaryPackage;
import es.cv.gvcase.gvm.glossary.Term;
import es.cv.gvcase.gvm.glossary.formseditor.cellmodifiers.GlossaryCellModifier;
import es.cv.gvcase.gvm.glossary.formseditor.filters.GlossaryFilter;
import es.cv.gvcase.gvm.glossary.formseditor.internal.Messages;
import es.cv.gvcase.gvm.glossary.formseditor.pages.MainPage;
import es.cv.gvcase.gvm.glossary.formseditor.providers.GlossaryLabelProvider;
import es.cv.gvcase.gvm.glossary.formseditor.sorters.NameSorter;
import es.cv.gvcase.gvm.glossary.formseditor.sorters.TypeSorter;

public class TableOfTermsComposite extends EMFContainedCollectionEditionComposite {

    private static final String NAME_COLUMN = Messages.TableOfTermsComposite_Name;
    private static final String TYPE_COLUMN = Messages.TableOfTermsComposite_Type;

    public TableOfTermsComposite(Composite parent, int style, FormToolkit toolkit, EObject eobject,
            FEFEMPage page) {
        super(parent, style, toolkit, eobject, page);

        getViewer().addSelectionChangedListener(new ISelectionChangedListener() {
            public void selectionChanged(SelectionChangedEvent event) {
                handleSelectionChanged();
            }
        });
    }

    @Override
    protected ICellModifier getCellModifier(FEFEMPage page) {
        return new GlossaryCellModifier(page);
    }

    protected CellEditor[] getCellEditors(Table table) {
        CellEditor[] cellEditors = new CellEditor[1];
        cellEditors[0] = new TextCellEditor(table);
        return cellEditors;
    }

    @Override
    protected String[] getColumNames() {
        return new String[] { NAME_COLUMN, TYPE_COLUMN };
    }

    @Override
    protected EStructuralFeature getFeature() {
        return GlossaryPackage.eINSTANCE.getGlossary_ContainedTerms();
    }

    @Override
    protected CellLabelProvider getLabelProvider() {
        return new GlossaryLabelProvider();
    }

    protected void handleSelectionChanged() {
        MainPage page = ((MainPage) this.getPage());

        StructuredSelection selection = (StructuredSelection) getViewer().getSelection();

        if (page != null && page.getTermDetailsComposite() != null
                && !page.getTermDetailsComposite().isDisposed()) {

            page.getTermDetailsComposite().dispose();
        }

        if (selection.getFirstElement() instanceof EObject) {
            EObject selectedTerm = (EObject) selection.getFirstElement();
            page.createTermDetails(selectedTerm);

            page.getEditor().getEcoreValidationListener().obtainDiagnostics(selectedTerm);
        }

    }

    protected ViewerSorter getSorter(String columName) {
        if (columName.equals(NAME_COLUMN)) {
            return new NameSorter();
        } else if (columName.equals(TYPE_COLUMN)) {
            return new TypeSorter();
        }
        return null;
    }

    protected void createAddAndRemoveButtons(Composite container, FormToolkit toolkit) {

        if (this.addButtons == null) {
            this.addButtons = new ArrayList<Button>();
        }

        //Add Local Term button
        Button addLocalTermButton = toolkit.createButton(container, Messages.TableOfTermsComposite_AddLocalTerm,
                SWT.NONE);
        addLocalTermButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        this.addButtons.add(addLocalTermButton);
        addLocalTermButton.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent event) {
                Term t = GlossaryFactory.eINSTANCE.createLocalTerm();
                t.setName(Messages.TableOfTermsComposite_NewLocalTerm);
                addNewTerm(t);
            }
        });

        //Add Referenced Term button
        Button addReferencedTermButton = toolkit.createButton(container, Messages.TableOfTermsComposite_AddRefTerm,
                SWT.NONE);
        addReferencedTermButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        this.addButtons.add(addReferencedTermButton);
        addReferencedTermButton.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent event) {
                ;
                Term t = GlossaryFactory.eINSTANCE.createReferencedTerm();
                t.setName(Messages.TableOfTermsComposite_NewReferencedTerm);
                addNewTerm(t);
            }
        });

        //Add Redefined Term button
        Button addRedefinedTermButton = toolkit.createButton(container, Messages.TableOfTermsComposite_AddRedTerm,
                SWT.NONE);
        addRedefinedTermButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        this.addButtons.add(addRedefinedTermButton);
        addRedefinedTermButton.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent event) {
                ;
                Term t = GlossaryFactory.eINSTANCE.createRedefinedTerm();
                t.setName(Messages.TableOfTermsComposite_NewRedefinedTerm);
                addNewTerm(t);
            }
        });

        if (this.removeButtons == null) {
            this.removeButtons = new ArrayList<Button>();
        }

        //Remove button
        Button removeButton = toolkit.createButton(container, Messages.TableOfTermsComposite_RemoveTerm, SWT.NONE);
        removeButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        SelectionListener removeButtonListener = getRemoveButtonSelectionListener();
        if (removeButtonListener != null) {
            removeButton.addSelectionListener(removeButtonListener);
        }
        this.removeButtons.add(removeButton);

    }

    private void addNewTerm(EObject newElement) {

        if (modelObservable != null) {
            modelObservable.add(newElement);
            getPage().setDirty(true);
            getViewer().setSelection(new StructuredSelection(newElement));
        }
    }

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

    @Override
    protected boolean canFilter() {
        return true;
    }

    @Override
    protected ViewerFilter getSearchFilter() {
        return new GlossaryFilter(getSearchText());
    }

}