org.eclipse.emf.examples.library.databinding.stock.dialog.BookOnTapeDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.emf.examples.library.databinding.stock.dialog.BookOnTapeDialog.java

Source

/*******************************************************************************
 * Copyright (c) 2009 BestSolution.at 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:
 *     Tom Schindl<tom.schindl@bestsolution.at> - initial API and implementation
 *******************************************************************************/
package org.eclipse.emf.examples.library.databinding.stock.dialog;

import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.UpdateValueStrategy;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.property.value.IValueProperty;
import org.eclipse.emf.databinding.edit.EMFEditObservables;
import org.eclipse.emf.databinding.edit.properties.EMFEditProperties;
import org.eclipse.emf.databinding.edit.properties.IEMFEditValueProperty;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.example.library.service.ISavePoint;
import org.eclipse.emf.example.library.service.ISavePointEditingDomain;
import org.eclipse.emf.examples.extlibrary.BookOnTape;
import org.eclipse.emf.examples.extlibrary.EXTLibraryPackage;
import org.eclipse.emf.examples.extlibrary.Library;
import org.eclipse.emf.examples.extlibrary.Writer;
import org.eclipse.emf.examples.library.databinding.common.converter.DateToStringConverter;
import org.eclipse.emf.examples.library.databinding.tokenviewer.TokenViewer;
import org.eclipse.jface.databinding.swt.ISWTObservableValue;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.databinding.swt.WidgetProperties;
import org.eclipse.jface.databinding.viewers.ViewerProperties;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
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.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

public class BookOnTapeDialog extends TitleAreaDialog {
    private BookOnTape bookOnTape;
    private Library library;
    private ISavePointEditingDomain domain;
    private ISavePoint savePoint;

    public BookOnTapeDialog(Shell parentShell, ISavePointEditingDomain domain, Library library,
            BookOnTape bookOnTape) {
        super(parentShell);
        this.bookOnTape = bookOnTape;
        this.library = library;
        this.domain = domain;
    }

    @Override
    protected Point getInitialSize() {
        return new Point(500, super.getInitialSize().y);
    }

    @Override
    public int open() {
        savePoint = domain.addSavePoint(EcoreUtil.generateUUID());
        return super.open();
    }

    @Override
    protected Control createDialogArea(Composite parent) {
        getShell().setText("Edit Book On Tape");
        setTitle("Edit the book on tape");
        setMessage(
                "Edit the data of the book on tape with the form below and press ok when done or cancel to undo all modifications.");

        Composite container = (Composite) super.createDialogArea(parent);

        Composite comp = new Composite(container, SWT.NONE);
        comp.setLayoutData(new GridData(GridData.FILL_BOTH));
        comp.setLayout(new GridLayout(2, false));

        DataBindingContext dbc = new DataBindingContext();

        /*
         * Title
         */
        Label l = new Label(comp, SWT.NONE);
        l.setText("Title");

        Text t = new Text(comp, SWT.BORDER);
        t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        IValueProperty uProp = WidgetProperties.text(SWT.Modify);
        IEMFEditValueProperty mProp = EMFEditProperties.value(domain,
                EXTLibraryPackage.Literals.AUDIO_VISUAL_ITEM__TITLE);
        dbc.bindValue(SWTObservables.observeDelayedValue(400, (ISWTObservableValue) uProp.observe(t)),
                mProp.observe(bookOnTape));

        /*
         * Publication Date
         */
        l = new Label(comp, SWT.NONE);
        l.setText("Publication Date");

        t = new Text(comp, SWT.BORDER);
        t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        mProp = EMFEditProperties.value(domain, EXTLibraryPackage.Literals.ITEM__PUBLICATION_DATE);
        dbc.bindValue(SWTObservables.observeDelayedValue(400, (ISWTObservableValue) uProp.observe(t)),
                mProp.observe(bookOnTape), new UpdateValueStrategy(),
                new UpdateValueStrategy().setConverter(new DateToStringConverter()));

        /*
         * Copies
         */
        l = new Label(comp, SWT.NONE);
        l.setText("Copies");

        t = new Text(comp, SWT.BORDER);
        t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        mProp = EMFEditProperties.value(domain, EXTLibraryPackage.Literals.LENDABLE__COPIES);
        dbc.bindValue(SWTObservables.observeDelayedValue(400, (ISWTObservableValue) uProp.observe(t)),
                mProp.observe(bookOnTape));

        /*
         * Length
         */
        l = new Label(comp, SWT.NONE);
        l.setText("Length (minutes)");

        t = new Text(comp, SWT.BORDER);
        t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        mProp = EMFEditProperties.value(domain, EXTLibraryPackage.Literals.AUDIO_VISUAL_ITEM__MINUTES_LENGTH);
        dbc.bindValue(SWTObservables.observeDelayedValue(400, (ISWTObservableValue) uProp.observe(t)),
                mProp.observe(bookOnTape));

        /*
         * Author
         */
        l = new Label(comp, SWT.NONE);
        l.setText("Author");
        {
            TokenViewer authorViewer = new TokenViewer(comp);
            authorViewer.getControl().setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
            authorViewer.setLabelProvider(new LabelProvider() {
                @Override
                public String getText(Object element) {
                    Writer w = (Writer) element;
                    return w.getLastName() + ", " + w.getFirstName();
                }
            });
            authorViewer.setContentProvider(new ArrayContentProvider());
            authorViewer.setInput(EMFEditObservables.observeList(Realm.getDefault(), domain, library,
                    EXTLibraryPackage.Literals.LIBRARY__WRITERS));

            mProp = EMFEditProperties.value(domain, EXTLibraryPackage.Literals.BOOK_ON_TAPE__AUTHOR);
            IValueProperty selectionProp = ViewerProperties.singleSelection();
            dbc.bindValue(selectionProp.observe(authorViewer), mProp.observe(bookOnTape));
        }

        /*
         * Reader
         */
        l = new Label(comp, SWT.NONE);
        l.setText("Reader");
        {
            TokenViewer readerViewer = new TokenViewer(comp);
            readerViewer.getControl().setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
            readerViewer.setLabelProvider(new LabelProvider() {
                @Override
                public String getText(Object element) {
                    Writer w = (Writer) element;
                    return w.getLastName() + ", " + w.getFirstName();
                }
            });

            readerViewer.setContentProvider(new ArrayContentProvider());
            readerViewer.setInput(EMFEditObservables.observeList(Realm.getDefault(), domain, library,
                    EXTLibraryPackage.Literals.LIBRARY__READERS));

            mProp = EMFEditProperties.value(domain, EXTLibraryPackage.Literals.BOOK_ON_TAPE__READER);
            IValueProperty selectionProp = ViewerProperties.singleSelection();
            dbc.bindValue(selectionProp.observe(readerViewer), mProp.observe(bookOnTape));
        }

        return comp;
    }

    @Override
    protected void okPressed() {
        savePoint.dispose();
        super.okPressed();
    }

    @Override
    protected void cancelPressed() {
        if (savePoint.canRollback()) {
            savePoint.rollback();
            super.cancelPressed();
        } else {
            MessageDialog.openInformation(getShell(), "Rollback failed",
                    "An error occurred while rolling back to the save point!");
        }
    }
}