org.emftools.emf2gv.graphdesc.presentation.wizard.EPackagesSelectionPage.java Source code

Java tutorial

Introduction

Here is the source code for org.emftools.emf2gv.graphdesc.presentation.wizard.EPackagesSelectionPage.java

Source

/**
 * This file is part of emf2gv : an eclipse plugin that allows to
 * generate a graphical representation of an EMF model.
 *
 * Copyright 2010-2011 Jean-Francois Brazeau
 * 
 * emf2gv is free software: you can redistribute it and/or modify
 * it under the terms of either:
 * 
 *      a) the GNU Lesser General Public License as published by
 *       the Free Software Foundation, either version 3 of the License, or
 *       (at your option) any later version.
 *  or
 *      b) the Eclipse Public License version 1.0 as published by
 *       the Eclipse Foundation.
 * 
 * emf2gv is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public License
 * along with emf2gv.  If not, see <http://www.gnu.org/licenses/>.
 * 
 * You should have received a copy of the  Eclipse Public License
 * along with emf2gv.  If not, see <http://www.eclipse.org/legal/epl-v10.html>.
 */
package org.emftools.emf2gv.graphdesc.presentation.wizard;

import java.net.URL;
import java.util.List;

import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.provider.EcoreEditPlugin;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Table;
import org.emftools.emf2gv.graphdesc.GVFigureDescription;
import org.emftools.emf2gv.util.EMFHelper;
import org.emftools.emf2gv.util.EPackageFake;

/**
 * The EPackage selection page.
 * 
 * @author jbrazeau
 */
public class EPackagesSelectionPage extends AbstractGraphdescWizardPage {

    /** EPackage table viewer */
    private CheckboxTableViewer ePackageTableViewer;

    /** Workspace registered ePackage list */
    private List<EPackage> registeredEPackages;

    /**
     * Default constructor.
     * 
     * @param pageName
     *            the page name.
     * @param gvFigureDescription
     *            the figure description model.
     */
    protected EPackagesSelectionPage(String pageName, GVFigureDescription gvFigureDescription) {
        super(pageName, gvFigureDescription);

        // Workspace EPackages retrieval
        registeredEPackages = EMFHelper.getRegisteredEPackages();
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets
     * .Composite)
     */
    public void createControl(Composite parent) {
        Composite rootContainer = new Composite(parent, SWT.NONE);
        GridLayout layout = new GridLayout(1, false);
        rootContainer.setLayout(layout);
        GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
        gridData.verticalAlignment = SWT.TOP;
        rootContainer.setLayoutData(gridData);

        createEPackageSelectionGroup(rootContainer);

        setControl(rootContainer);
        entryChanged();
    }

    /**
     * Creates the EPackage selection group.
     * 
     * @param rootContainer
     *            the root container.
     */
    private void createEPackageSelectionGroup(Composite rootContainer) {
        // EPackage list group
        Group ePackageListGroup = createGroup(rootContainer, "EPackage selection", 1, true);
        // EPackage table initialization
        Table ePackageTable = new Table(ePackageListGroup, SWT.CHECK | SWT.BORDER);
        GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
        // gridData.heightHint = 350;
        ePackageTable.setLayoutData(gridData);
        ePackageTableViewer = new CheckboxTableViewer(ePackageTable);
        ePackageTableViewer.setContentProvider(new EPackagesContentProvider());
        ePackageTableViewer.setLabelProvider(new EPackageLabelProvider());
        ePackageTableViewer.addCheckStateListener(new ICheckStateListener() {
            public void checkStateChanged(CheckStateChangedEvent event) {
                handleEPackageCheckedStateChanged((EPackage) event.getElement(), event.getChecked());
            }
        });

    }

    /**
     * Handles a status change event on an EPackage tree item.
     * 
     * @param ePackage
     *            the EPackage.
     * @param checked
     *            the check status.
     */
    private void handleEPackageCheckedStateChanged(EPackage ePackage, boolean checked) {
        if (checked) {
            // If the EPackage has not been loaded, we meet an EPackage fake
            // that we have to replace by the resolved EPackage
            if (ePackage instanceof EPackageFake) {
                int idx = registeredEPackages.indexOf(ePackage);
                ePackage = EMFHelper.resolve((EPackageFake) ePackage);
                // Substitution in the list + tableViewer refresh
                registeredEPackages.set(idx, ePackage);
                ePackageTableViewer.refresh();
                ePackageTableViewer.setChecked(ePackage, true);
            }
            // Then we can add the EPackage to the graphical definition
            getGvFigureDescription().getEPackages().add(ePackage);

        } else {
            // If the EPackage is unchecked, we remove it from the
            // graphical definition
            getGvFigureDescription().getEPackages().remove(ePackage);
        }
        entryChanged();
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.emftools.emf2gv.graphdesc.presentation.wizard.AbstractGraphdescWizardPage
     * #initPageContent()
     */
    @Override
    protected void initPageContent() {
        ePackageTableViewer.setInput(registeredEPackages);
        List<EPackage> selectedEPackages = getGvFigureDescription().getEPackages();
        for (EPackage ePackage : selectedEPackages) {
            ePackageTableViewer.setChecked(ePackage, true);
        }
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.emftools.emf2gv.graphdesc.presentation.GraphDescModelWizardPage#
     * validatePage()
     */
    protected boolean validatePage() {
        Object[] checkedElements = ePackageTableViewer.getCheckedElements();
        // Page is valid if at least one EPackage has been chosen or
        return (checkedElements != null && checkedElements.length != 0);
    }

}

/**
 * EPackage content provider.
 * 
 * @author jbrazeau
 */
class EPackagesContentProvider implements IStructuredContentProvider {

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface
     * .viewers.Viewer, java.lang.Object, java.lang.Object)
     */
    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.viewers.IContentProvider#dispose()
     */
    public void dispose() {
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.jface.viewers.ITreeContentProvider#getElements(java.lang.
     * Object)
     */
    public Object[] getElements(Object inputElement) {
        return ((List<?>) inputElement).toArray();
    }

}

/**
 * EPackage label provider.
 */
class EPackageLabelProvider extends LabelProvider {

    /**
     * EPackage icon.
     */
    private Image labelIcon;

    /**
     * Default constructor.
     */
    EPackageLabelProvider() {
        // EPackage icon load
        URL iconUrl = (URL) EcoreEditPlugin.INSTANCE.getImage("full/obj16/EPackage");
        if (iconUrl != null) {
            this.labelIcon = ImageDescriptor.createFromURL(iconUrl).createImage();
        }
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
     */
    @Override
    public String getText(Object element) {
        return ((EPackage) element).getNsURI();
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.viewers.LabelProvider#getImage(java.lang.Object)
     */
    @Override
    public Image getImage(Object element) {
        return labelIcon;
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.viewers.BaseLabelProvider#dispose()
     */
    @Override
    public void dispose() {
        super.dispose();
        if (labelIcon != null) {
            labelIcon.dispose();
        }
    }

}