org.eclipse.worldcupforecast.parts.impl.WorldCupGroupPropertiesEditionPartImpl.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.worldcupforecast.parts.impl.WorldCupGroupPropertiesEditionPartImpl.java

Source

/*******************************************************************************
 * Copyright (c) 2008, 2010 Obeo.
 * 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:
 *     Obeo - initial API and implementation
 *******************************************************************************/
/**
 * Generated with Acceleo
 */
package org.eclipse.worldcupforecast.parts.impl;

// Start of user code for imports
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
import org.eclipse.emf.eef.runtime.api.component.IPropertiesEditionComponent;
import org.eclipse.emf.eef.runtime.api.notify.IPropertiesEditionEvent;
import org.eclipse.emf.eef.runtime.api.parts.ISWTPropertiesEditionPart;
import org.eclipse.emf.eef.runtime.api.policies.IPropertiesEditionPolicy;
import org.eclipse.emf.eef.runtime.api.providers.IPropertiesEditionPolicyProvider;
import org.eclipse.emf.eef.runtime.impl.notify.PropertiesEditionEvent;
import org.eclipse.emf.eef.runtime.impl.parts.CompositePropertiesEditionPart;
import org.eclipse.emf.eef.runtime.impl.policies.EObjectPropertiesEditionContext;
import org.eclipse.emf.eef.runtime.impl.services.PropertiesEditionPolicyProviderService;
import org.eclipse.emf.eef.runtime.impl.utils.EMFListEditUtil;
import org.eclipse.emf.eef.runtime.ui.widgets.SWTUtils;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusAdapter;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Text;

import org.eclipse.worldcupforecast.Team;
import org.eclipse.worldcupforecast.WorldcupforecastFactory;
import org.eclipse.worldcupforecast.parts.WorldCupGroupPropertiesEditionPart;
import org.eclipse.worldcupforecast.parts.WorldcupforecastViewsRepository;
import org.eclipse.worldcupforecast.providers.WorldcupforecastMessages;

// End of user code   

/**
 * 
 * 
 */
public class WorldCupGroupPropertiesEditionPartImpl extends CompositePropertiesEditionPart
        implements ISWTPropertiesEditionPart, WorldCupGroupPropertiesEditionPart {

    protected Text name;
    protected EMFListEditUtil teamsEditUtil;
    protected TableViewer teams;
    protected List<ViewerFilter> teamsBusinessFilters = new ArrayList<ViewerFilter>();
    protected List<ViewerFilter> teamsFilters = new ArrayList<ViewerFilter>();

    /**
     * Default constructor
     * @param editionComponent the {@link IPropertiesEditionComponent} that manage this part
     * 
     */
    public WorldCupGroupPropertiesEditionPartImpl(IPropertiesEditionComponent editionComponent) {
        super(editionComponent);
    }

    /**
     * {@inheritDoc}
     * 
     * @see org.eclipse.emf.eef.runtime.api.parts.ISWTPropertiesEditionPart#
     *          createFigure(org.eclipse.swt.widgets.Composite)
     * 
     */
    public Composite createFigure(final Composite parent) {
        view = new Composite(parent, SWT.NONE);
        GridLayout layout = new GridLayout();
        layout.numColumns = 3;
        view.setLayout(layout);
        createControls(view);
        return view;
    }

    /**
     * {@inheritDoc}
     * 
     * @see org.eclipse.emf.eef.runtime.api.parts.ISWTPropertiesEditionPart#
     *          createControls(org.eclipse.swt.widgets.Composite)
     * 
     */
    public void createControls(Composite view) {
        createPropertiesGroup(view);

        // Start of user code for additional ui definition

        // End of user code
    }

    /**
     * 
     */
    protected void createPropertiesGroup(Composite parent) {
        Group propertiesGroup = new Group(parent, SWT.NONE);
        propertiesGroup.setText(WorldcupforecastMessages.WorldCupGroupPropertiesEditionPart_PropertiesGroupLabel);
        GridData propertiesGroupData = new GridData(GridData.FILL_HORIZONTAL);
        propertiesGroupData.horizontalSpan = 3;
        propertiesGroup.setLayoutData(propertiesGroupData);
        GridLayout propertiesGroupLayout = new GridLayout();
        propertiesGroupLayout.numColumns = 3;
        propertiesGroup.setLayout(propertiesGroupLayout);
        createNameText(propertiesGroup);
        createTeamsTableComposition(propertiesGroup);
    }

    protected void createNameText(Composite parent) {
        SWTUtils.createPartLabel(parent, WorldcupforecastMessages.WorldCupGroupPropertiesEditionPart_NameLabel,
                propertiesEditionComponent.isRequired(WorldcupforecastViewsRepository.WorldCupGroup.name,
                        WorldcupforecastViewsRepository.SWT_KIND));
        name = new Text(parent, SWT.BORDER);
        GridData nameData = new GridData(GridData.FILL_HORIZONTAL);
        name.setLayoutData(nameData);
        name.addFocusListener(new FocusAdapter() {

            /**
             * {@inheritDoc}
             * 
             * @see org.eclipse.swt.events.FocusAdapter#focusLost(org.eclipse.swt.events.FocusEvent)
             * 
             */
            @Override
            @SuppressWarnings("synthetic-access")
            public void focusLost(FocusEvent e) {
                if (propertiesEditionComponent != null)
                    propertiesEditionComponent.firePropertiesChanged(new PropertiesEditionEvent(
                            WorldCupGroupPropertiesEditionPartImpl.this,
                            WorldcupforecastViewsRepository.WorldCupGroup.name, PropertiesEditionEvent.COMMIT,
                            PropertiesEditionEvent.SET, null, name.getText()));
            }

        });
        name.addKeyListener(new KeyAdapter() {

            /**
             * {@inheritDoc}
             * 
             * @see org.eclipse.swt.events.KeyAdapter#keyPressed(org.eclipse.swt.events.KeyEvent)
             * 
             */
            @Override
            @SuppressWarnings("synthetic-access")
            public void keyPressed(KeyEvent e) {
                if (e.character == SWT.CR) {
                    if (propertiesEditionComponent != null)
                        propertiesEditionComponent.firePropertiesChanged(new PropertiesEditionEvent(
                                WorldCupGroupPropertiesEditionPartImpl.this,
                                WorldcupforecastViewsRepository.WorldCupGroup.name, PropertiesEditionEvent.COMMIT,
                                PropertiesEditionEvent.SET, null, name.getText()));
                }
            }

        });
        SWTUtils.createHelpButton(parent,
                propertiesEditionComponent.getHelpContent(WorldcupforecastViewsRepository.WorldCupGroup.name,
                        WorldcupforecastViewsRepository.SWT_KIND),
                null); //$NON-NLS-1$
    }

    /**
     * @param container
     * 
     */
    protected void createTeamsTableComposition(Composite container) {
        Composite tableContainer = new Composite(container, SWT.NONE);
        GridLayout tableContainerLayout = new GridLayout();
        GridData tableContainerData = new GridData(GridData.FILL_BOTH);
        tableContainerData.horizontalSpan = 3;
        tableContainer.setLayoutData(tableContainerData);
        tableContainerLayout.numColumns = 2;
        tableContainer.setLayout(tableContainerLayout);
        org.eclipse.swt.widgets.Table tableTeams = new org.eclipse.swt.widgets.Table(tableContainer,
                SWT.FULL_SELECTION);
        tableTeams.setHeaderVisible(true);
        GridData gdTeams = new GridData();
        gdTeams.grabExcessHorizontalSpace = true;
        gdTeams.horizontalAlignment = GridData.FILL;
        gdTeams.grabExcessVerticalSpace = true;
        gdTeams.verticalAlignment = GridData.FILL;
        tableTeams.setLayoutData(gdTeams);
        tableTeams.setLinesVisible(true);

        // Start of user code for columns definition for Teams
        TableColumn name = new TableColumn(tableTeams, SWT.NONE);
        name.setWidth(80);
        name.setText("Label"); //$NON-NLS-1$      
        // End of user code

        teams = new TableViewer(tableTeams);
        teams.setContentProvider(new ArrayContentProvider());
        teams.setLabelProvider(new ITableLabelProvider() {
            //Start of user code for label provider definition for Teams
            public String getColumnText(Object object, int columnIndex) {
                AdapterFactoryLabelProvider labelProvider = new AdapterFactoryLabelProvider(adapterFactory);
                if (object instanceof EObject) {
                    switch (columnIndex) {
                    case 0:
                        return labelProvider.getText(object);
                    }
                }
                return ""; //$NON-NLS-1$
            }

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

            //End of user code

            public void addListener(ILabelProviderListener listener) {
            }

            public void dispose() {
            }

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

            public void removeListener(ILabelProviderListener listener) {
            }

        });
        teams.getTable().addListener(SWT.MouseDoubleClick, new Listener() {

            public void handleEvent(Event event) {
                editTeams();
            }

        });
        GridData teamsData = new GridData(GridData.FILL_HORIZONTAL);
        teamsData.minimumHeight = 120;
        teamsData.heightHint = 120;
        teams.getTable().setLayoutData(teamsData);
        createTeamsPanel(tableContainer);
    }

    /**
     * @param container
     * 
     */
    protected Composite createTeamsPanel(Composite container) {
        Composite teamsPanel = new Composite(container, SWT.NONE);
        GridLayout teamsPanelLayout = new GridLayout();
        teamsPanelLayout.numColumns = 1;
        teamsPanel.setLayout(teamsPanelLayout);
        Button addTeams = new Button(teamsPanel, SWT.NONE);
        addTeams.setText(WorldcupforecastMessages.PropertiesEditionPart_AddTableViewerLabel);
        GridData addTeamsData = new GridData(GridData.FILL_HORIZONTAL);
        addTeams.setLayoutData(addTeamsData);
        addTeams.addSelectionListener(new SelectionAdapter() {

            /**
             * {@inheritDoc}
             * 
             * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
             */
            public void widgetSelected(SelectionEvent e) {
                addToTeams();
            }
        });
        Button removeTeams = new Button(teamsPanel, SWT.NONE);
        removeTeams.setText(WorldcupforecastMessages.PropertiesEditionPart_RemoveTableViewerLabel);
        GridData removeTeamsData = new GridData(GridData.FILL_HORIZONTAL);
        removeTeams.setLayoutData(removeTeamsData);
        removeTeams.addSelectionListener(new SelectionAdapter() {

            /**
             * {@inheritDoc}
             * 
             * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
             * 
             */
            public void widgetSelected(SelectionEvent e) {
                removeFromTeams();
            }

        });
        Button editTeams = new Button(teamsPanel, SWT.NONE);
        editTeams.setText(WorldcupforecastMessages.PropertiesEditionPart_EditTableViewerLabel);
        GridData editTeamsData = new GridData(GridData.FILL_HORIZONTAL);
        editTeams.setLayoutData(editTeamsData);
        editTeams.addSelectionListener(new SelectionAdapter() {

            /**
             * {@inheritDoc}
             * 
             * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
             * 
             */
            public void widgetSelected(SelectionEvent e) {
                editTeams();
            }

        });
        return teamsPanel;
    }

    /**
     *  
     */
    protected void addToTeams() {
        // Start of user code addToTeams() method body
        Team eObject = WorldcupforecastFactory.eINSTANCE.createTeam();
        IPropertiesEditionPolicyProvider policyProvider = PropertiesEditionPolicyProviderService.getInstance()
                .getProvider(eObject);
        IPropertiesEditionPolicy editionPolicy = policyProvider.getEditionPolicy(eObject);
        if (editionPolicy != null) {
            EObject propertiesEditionObject = editionPolicy.getPropertiesEditionObject(
                    new EObjectPropertiesEditionContext(propertiesEditionComponent, eObject, resourceSet));
            if (propertiesEditionObject != null) {
                teamsEditUtil.addElement(propertiesEditionObject);
                teams.refresh();
                propertiesEditionComponent.firePropertiesChanged(
                        new PropertiesEditionEvent(WorldCupGroupPropertiesEditionPartImpl.this,
                                WorldcupforecastViewsRepository.WorldCupGroup.teams, PropertiesEditionEvent.COMMIT,
                                PropertiesEditionEvent.ADD, null, propertiesEditionObject));
            }
        }

        // End of user code

    }

    /**
     *  
     */
    protected void removeFromTeams() {
        // Start of user code removeFromTeams() method body
        if (teams.getSelection() instanceof IStructuredSelection) {
            IStructuredSelection selection = (IStructuredSelection) teams.getSelection();
            if (selection.getFirstElement() instanceof EObject) {
                EObject selectedElement = (EObject) selection.getFirstElement();
                EObject editedElement = teamsEditUtil.foundCorrespondingEObject(selectedElement);
                teamsEditUtil.removeElement(selectedElement);
                teams.refresh();
                propertiesEditionComponent.firePropertiesChanged(
                        new PropertiesEditionEvent(WorldCupGroupPropertiesEditionPartImpl.this,
                                WorldcupforecastViewsRepository.WorldCupGroup.teams, PropertiesEditionEvent.CHANGE,
                                PropertiesEditionEvent.REMOVE, null, editedElement));
            }
        }

        // End of user code

    }

    /**
     *  
     */
    protected void editTeams() {
        // Start of user code editTeams() method body
        if (teams.getSelection() instanceof IStructuredSelection) {
            IStructuredSelection selection = (IStructuredSelection) teams.getSelection();
            if (selection.getFirstElement() instanceof EObject) {
                EObject selectedElement = (EObject) selection.getFirstElement();
                EObject editedElement = teamsEditUtil.foundCorrespondingEObject(selectedElement);
                IPropertiesEditionPolicyProvider policyProvider = PropertiesEditionPolicyProviderService
                        .getInstance().getProvider(editedElement);
                IPropertiesEditionPolicy editionPolicy = policyProvider.getEditionPolicy(editedElement);
                if (editionPolicy != null) {
                    EObject propertiesEditionObject = editionPolicy.getPropertiesEditionObject(
                            new EObjectPropertiesEditionContext(null, selectedElement, resourceSet));
                    if (propertiesEditionObject != null) {
                        teamsEditUtil.putElementToRefresh(editedElement, propertiesEditionObject);
                        teams.refresh();
                        propertiesEditionComponent.firePropertiesChanged(new PropertiesEditionEvent(
                                WorldCupGroupPropertiesEditionPartImpl.this,
                                WorldcupforecastViewsRepository.WorldCupGroup.teams, PropertiesEditionEvent.CHANGE,
                                PropertiesEditionEvent.SET, editedElement, propertiesEditionObject));
                    }
                }
            }
        }

        // End of user code

    }

    /**
     * {@inheritDoc}
     * 
     * @see org.eclipse.emf.eef.runtime.api.notify.IPropertiesEditionListener#firePropertiesChanged(org.eclipse.emf.eef.runtime.api.notify.IPropertiesEditionEvent)
     * 
     */
    public void firePropertiesChanged(IPropertiesEditionEvent event) {
        // Start of user code for tab synchronization

        // End of user code
    }

    /**
     * {@inheritDoc}
     * 
     * @see org.eclipse.worldcupforecast.parts.WorldCupGroupPropertiesEditionPart#getName()
     * 
     */
    public String getName() {
        return name.getText();
    }

    /**
     * {@inheritDoc}
     * 
     * @see org.eclipse.worldcupforecast.parts.WorldCupGroupPropertiesEditionPart#setName(String newValue)
     * 
     */
    public void setName(String newValue) {
        if (newValue != null) {
            name.setText(newValue);
        } else {
            name.setText(""); //$NON-NLS-1$
        }
    }

    /**
     * {@inheritDoc}
     * 
     * @see org.eclipse.worldcupforecast.parts.WorldCupGroupPropertiesEditionPart#getTeamsToAdd()
     * 
     */
    public List getTeamsToAdd() {
        return teamsEditUtil.getElementsToAdd();
    }

    /**
     * {@inheritDoc}
     * 
     * @see org.eclipse.worldcupforecast.parts.WorldCupGroupPropertiesEditionPart#getTeamsToRemove()
     * 
     */
    public List getTeamsToRemove() {
        return teamsEditUtil.getElementsToRemove();
    }

    /**
     * {@inheritDoc}
     * 
     * @see org.eclipse.worldcupforecast.parts.WorldCupGroupPropertiesEditionPart#getTeamsToEdit()
     * 
     */
    public Map getTeamsToEdit() {
        return teamsEditUtil.getElementsToRefresh();
    }

    /**
     * {@inheritDoc}
     * 
     * @see org.eclipse.worldcupforecast.parts.WorldCupGroupPropertiesEditionPart#getTeamsToMove()
     * 
     */
    public List getTeamsToMove() {
        return teamsEditUtil.getElementsToMove();
    }

    /**
     * {@inheritDoc}
     * 
     * @see org.eclipse.worldcupforecast.parts.WorldCupGroupPropertiesEditionPart#getTeamsTable()
     * 
     */
    public List getTeamsTable() {
        return teamsEditUtil.getVirtualList();
    }

    /**
     * {@inheritDoc}
     * 
     * @see org.eclipse.worldcupforecast.parts.WorldCupGroupPropertiesEditionPart#initTeams(EObject current, EReference containingFeature, EReference feature)
     */
    public void initTeams(EObject current, EReference containingFeature, EReference feature) {
        if (current.eResource() != null && current.eResource().getResourceSet() != null)
            this.resourceSet = current.eResource().getResourceSet();
        if (containingFeature != null)
            teamsEditUtil = new EMFListEditUtil(current, containingFeature, feature);
        else
            teamsEditUtil = new EMFListEditUtil(current, feature);
        this.teams.setInput(teamsEditUtil.getVirtualList());
    }

    /**
     * {@inheritDoc}
     * 
     * @see org.eclipse.worldcupforecast.parts.WorldCupGroupPropertiesEditionPart#updateTeams(EObject newValue)
     * 
     */
    public void updateTeams(EObject newValue) {
        if (teamsEditUtil != null) {
            teamsEditUtil.reinit(newValue);
            teams.refresh();
        }
    }

    /**
     * {@inheritDoc}
     * 
     * @see org.eclipse.worldcupforecast.parts.WorldCupGroupPropertiesEditionPart#addFilterTeams(ViewerFilter filter)
     * 
     */
    public void addFilterToTeams(ViewerFilter filter) {
        teamsFilters.add(filter);
    }

    /**
     * {@inheritDoc}
     * 
     * @see org.eclipse.worldcupforecast.parts.WorldCupGroupPropertiesEditionPart#addBusinessFilterTeams(ViewerFilter filter)
     * 
     */
    public void addBusinessFilterToTeams(ViewerFilter filter) {
        teamsBusinessFilters.add(filter);
    }

    /**
     * {@inheritDoc}
     * 
     * @see org.eclipse.worldcupforecast.parts.WorldCupGroupPropertiesEditionPart#isContainedInTeamsTable(EObject element)
     * 
     */
    public boolean isContainedInTeamsTable(EObject element) {
        return teamsEditUtil.contains(element);
    }

    /**
     * {@inheritDoc}
     *
     * @see org.eclipse.emf.eef.runtime.api.parts.IPropertiesEditionPart#getTitle()
     * 
     */
    public String getTitle() {
        return WorldcupforecastMessages.WorldCupGroup_Part_Title;
    }

    // Start of user code additional methods

    // End of user code

}