org.eclipse.e4.tools.ui.designer.dialogs.ElementInitializeDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.e4.tools.ui.designer.dialogs.ElementInitializeDialog.java

Source

/*******************************************************************************
 * Copyright (c) 2006, 2010 Soyatec (http://www.soyatec.com) 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:
 *     Soyatec - initial API and implementation
 *******************************************************************************/
package org.eclipse.e4.tools.ui.designer.dialogs;

import java.net.URL;

import org.eclipse.core.databinding.AggregateValidationStatus;
import org.eclipse.core.databinding.observable.ChangeEvent;
import org.eclipse.core.databinding.observable.IChangeListener;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.e4.tools.ui.dataform.AbstractDataForm;
import org.eclipse.e4.tools.ui.dataform.DataForms;
import org.eclipse.e4.xwt.databinding.BindingContext;
import org.eclipse.e4.xwt.emf.EMFBinding;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;

/**
 * @author Jin Liu(jin.liu@soyatec.com)
 */
public class ElementInitializeDialog extends TitleAreaDialog {

    private EObject container;
    private EObject eObject;
    private IProject project;

    public ElementInitializeDialog(Shell parentShell, IProject project, EObject container, EObject eObject) {
        super(parentShell);
        this.project = project;
        this.container = container;
        this.eObject = eObject;
    }

    protected void configureShell(Shell newShell) {
        super.configureShell(newShell);
        newShell.setText("Element Initialization Dialog");
    }

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

    protected Control createDialogArea(Composite parent) {
        EMFBinding.initialze();
        Composite control = (Composite) super.createDialogArea(parent);

        AbstractDataForm widget = DataForms.getWidget(control, eObject.eClass());
        if (widget == null || widget.isDisposed()) {
            setErrorMessage("Can not initialize.");
        } else {
            BindingContext bindingContext = widget.getBindingContext();
            final AggregateValidationStatus validationStatus = bindingContext.getStatus();
            validationStatus.addChangeListener(new IChangeListener() {
                public void handleChange(ChangeEvent event) {
                    IStatus status = (IStatus) validationStatus.getValue();
                    setMessage(status);
                }
            });
            widget.setNewObject(eObject);
            widget.setProject(project);
            widget.setContainer(container);
        }
        setTitle(eObject.eClass().getName() + " Creation");
        setMessage("Element Initialization");
        return control;
    }

    protected void createButtonsForButtonBar(Composite parent) {
        super.createButtonsForButtonBar(parent);
        Button button = getButton(IDialogConstants.OK_ID);
        if (button != null && !button.isDisposed()) {
            button.setEnabled(false);
        }
    }

    /**
     * In fact, severity of status is different from the type of messages.
     */
    protected void setMessage(IStatus status) {
        if (status == null || status.isOK()) {
            setMessage((String) null);
        } else {
            int severity = status.getSeverity();
            String message = status.getMessage();
            switch (severity) {
            case IStatus.ERROR:
                setMessage(message, IMessageProvider.ERROR);
                break;
            case IStatus.INFO:
                setMessage(message, IMessageProvider.INFORMATION);
                break;
            case IStatus.WARNING:
                setMessage(message, IMessageProvider.WARNING);
                break;
            default:
                setMessage((String) null);
                break;
            }
        }
        Button button = getButton(IDialogConstants.OK_ID);
        if (button != null && !button.isDisposed()) {
            button.setEnabled(status == null || status.getSeverity() != IStatus.ERROR);
        }
    }

    public URL getContentURL() {
        return DataForms.findWidget(eObject.eClass());
    }
}