fr.sc.crator.application.ui.dialog.CRAConfiguringDialog.java Source code

Java tutorial

Introduction

Here is the source code for fr.sc.crator.application.ui.dialog.CRAConfiguringDialog.java

Source

/*
 * Copyright (c) 2014 Goulwen Le Fur <goulwen .lefur at gmail.com>. 
 * 
 * This file is part of the Crator application.
 * 
 * Crator is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * Crator 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 General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with Crator.  If not, see <http ://www.gnu.org/licenses/>.
 */
package fr.sc.crator.application.ui.dialog;

import java.util.List;

import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
import org.eclipse.emf.eef.runtime.context.PropertiesEditingContext;
import org.eclipse.emf.eef.runtime.ui.swt.viewer.EEFContentProvider;
import org.eclipse.emf.eef.runtime.ui.swt.viewer.EEFViewer;
import org.eclipse.jface.dialogs.TrayDialog;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.ListViewer;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;

import com.google.common.collect.Lists;

import fr.sc.crator.model.CRA;

/**
 *
 * @author <a href="mailto:goulwen.lefur@gmail.com">Goulwen Le Fur</a>
 */
public abstract class CRAConfiguringDialog extends TrayDialog {

    private EEFViewer viewer;
    private ComboViewer craSelector;
    private ISelectionChangedListener viewerSynchronizer;
    private ListViewer daySelector;
    private AdapterFactory adapterFactory;
    private List<CRA> input;

    /**
     * @param shell
     */
    public CRAConfiguringDialog(Shell shell, AdapterFactory adapterFactory) {
        super(shell);
        this.adapterFactory = adapterFactory;
    }

    /**
     * {@inheritDoc}
     * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
     */
    @Override
    protected void configureShell(Shell newShell) {
        super.configureShell(newShell);
        setShellStyle(SWT.CLOSE | SWT.TITLE | SWT.BORDER | SWT.APPLICATION_MODAL);
        newShell.setText("Correct the predefined input values");
    }

    /**
     * {@inheritDoc}
     * @see org.eclipse.jface.dialogs.Dialog#getInitialSize()
     */
    @Override
    protected Point getInitialSize() {
        return new Point(650, 450);
    }

    /**
     * {@inheritDoc}
     * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
     */
    @Override
    protected Control createDialogArea(Composite parent) {
        Composite container = new Composite(parent, SWT.NONE);
        container.setLayout(new GridLayout(2, true));
        container.setLayoutData(new GridData(GridData.FILL_BOTH));

        /* selector */
        Composite selector = new Composite(container, SWT.NONE);
        selector.setLayout(new GridLayout(1, false));
        selector.setLayoutData(new GridData(GridData.FILL_BOTH));
        craSelector = new ComboViewer(selector, SWT.DROP_DOWN);
        craSelector.getControl().setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        craSelector.setContentProvider(new ArrayContentProvider());
        craSelector.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
        craSelector.setInput(input);
        craSelector.addSelectionChangedListener(getViewerSynchronizer());
        daySelector = new ListViewer(selector);
        daySelector.getControl().setLayoutData(new GridData(GridData.FILL_BOTH));
        daySelector.setContentProvider(new ArrayContentProvider());
        daySelector.setLabelProvider(new LabelProvider() {

            /**
             * {@inheritDoc}
             * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
             */
            @Override
            public String getText(Object element) {
                if (element.equals(2)) {
                    return "Monday";
                } else if (element.equals(3)) {
                    return "Tuesday";
                } else if (element.equals(4)) {
                    return "Wednesday";
                } else if (element.equals(5)) {
                    return "Thursday";
                } else if (element.equals(6)) {
                    return "Friday";
                }
                return super.getText(element);
            }

        });
        List<Integer> days = Lists.newArrayList(2, 3, 4, 5, 6);
        daySelector.setInput(days);
        daySelector.addSelectionChangedListener(getViewerSynchronizer());

        /* EEF Viewer */
        viewer = new EEFViewer(container, SWT.NONE);
        viewer.setLayoutData(new GridData(GridData.FILL_BOTH));
        viewer.setContentProvider(new EEFContentProvider());
        return container;
    }

    /**
     * @param input the input to set
     */
    public void setInput(List<CRA> input) {
        this.input = input;
    }

    public abstract PropertiesEditingContext createEditingContext(EObject source);

    private ISelectionChangedListener getViewerSynchronizer() {
        if (viewerSynchronizer == null) {
            viewerSynchronizer = new ViewerSynchronizer();
        }
        return viewerSynchronizer;
    }

    public EObject getSelectedCRA() {
        if (craSelector.getSelection() instanceof StructuredSelection) {
            return (EObject) ((StructuredSelection) craSelector.getSelection()).getFirstElement();
        }
        return null;
    }

    public Integer getSelectedDay() {
        if (!daySelector.getSelection().isEmpty() && daySelector.getSelection() instanceof StructuredSelection) {
            return (Integer) ((StructuredSelection) daySelector.getSelection()).getFirstElement();
        }
        return -1;
    }

    private class ViewerSynchronizer implements ISelectionChangedListener {

        /**
         * {@inheritDoc}
         * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
         */
        @Override
        public void selectionChanged(SelectionChangedEvent event) {
            EObject cra = getSelectedCRA();
            Integer day = getSelectedDay();
            if (cra instanceof CRA && day > 0) {
                viewer.setInput(createEditingContext(((CRA) cra).getWeek().getDay(day)));
            }
        }

    }

}