org.fusesource.ide.foundation.ui.form.Forms.java Source code

Java tutorial

Introduction

Here is the source code for org.fusesource.ide.foundation.ui.form.Forms.java

Source

/*******************************************************************************
 * Copyright (c) 2013 Red Hat, Inc.
 * Distributed under license by Red Hat, Inc. All rights reserved.
 * This program is 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:
 *     Red Hat, Inc. - initial API and implementation
 ******************************************************************************/

package org.fusesource.ide.foundation.ui.form;

import org.eclipse.core.databinding.Binding;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.UpdateValueStrategy;
import org.eclipse.core.databinding.ValidationStatusProvider;
import org.eclipse.core.databinding.beans.BeanProperties;
import org.eclipse.core.databinding.beans.PojoProperties;
import org.eclipse.core.databinding.observable.list.IObservableList;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.core.databinding.validation.IValidator;
import org.eclipse.core.internal.databinding.BindingStatus;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.databinding.swt.ISWTObservableValue;
import org.eclipse.jface.databinding.swt.WidgetProperties;
import org.eclipse.jface.databinding.viewers.IViewerObservableList;
import org.eclipse.jface.databinding.viewers.ViewerProperties;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.IMessageManager;

public class Forms {

    public static ISWTObservableValue observe(Text text) {
        return WidgetProperties.text(SWT.Modify).observe(text);
    }

    public static ISWTObservableValue observe(Button text) {
        return WidgetProperties.selection().observe(text);
    }

    public static void bindPojoProperty(DataBindingContext dataBindingContext, final IMessageManager mmng,
            Object bean, final String propertyName, boolean mandatory, final String labelText,
            IObservableValue value, final Control control) {
        IObservableValue modelValue = PojoProperties.value(propertyName).observe(bean);

        UpdateValueStrategy targetToModel = new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE);
        UpdateValueStrategy modelToTarget = new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE);

        if (mandatory) {
            targetToModel.setBeforeSetValidator(new MandatoryValidator(labelText));
            modelToTarget.setBeforeSetValidator(new MandatoryValidator(labelText));
        }

        Binding bindValue = dataBindingContext.bindValue(value, modelValue, targetToModel, modelToTarget);

        final IObservableValue validationStatus = bindValue.getValidationStatus();
        validationStatus
                .addChangeListener(new MessageChangeListener(validationStatus, control, propertyName, mmng));

        // we need to call validation here otherwise the fresh initiated fields
        // would
        // have no error decoration if field is invalid on init phase
        bindValue.validateTargetToModel();
        // bindValue.validateModelToTarget();
    }

    public static void bindBeanProperty(DataBindingContext dataBindingContext, final IMessageManager mmng,
            Object bean, final String propertyName, boolean mandatory, final String labelText,
            IObservableValue value, final Control control) {
        IValidator validator = null;
        if (mandatory) {
            validator = new MandatoryValidator(labelText);
        }
        bindBeanProperty(dataBindingContext, mmng, bean, propertyName, validator, value, control);
    }

    public static void bindBeanProperty(DataBindingContext dataBindingContext, final IMessageManager mmng,
            Object bean, final String propertyName, IValidator validator, IObservableValue value,
            final Control control) {
        IObservableValue modelValue = BeanProperties.value(propertyName).observe(bean);

        UpdateValueStrategy targetToModel = new TrimmingUpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE);
        //UpdateValueStrategy modelToTarget = new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE);
        UpdateValueStrategy modelToTarget = new TrimmingUpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE);

        if (validator != null) {
            targetToModel.setBeforeSetValidator(validator);
            modelToTarget.setBeforeSetValidator(validator);
        }

        Binding bindValue = dataBindingContext.bindValue(value, modelValue, targetToModel, modelToTarget);

        final IObservableValue validationStatus = bindValue.getValidationStatus();
        validationStatus
                .addChangeListener(new MessageChangeListener(validationStatus, control, propertyName, mmng));

        // we need to call validation here otherwise the fresh initiated fields
        // would
        // have no error decoration if field is invalid on init phase
        bindValue.validateTargetToModel();
        // bindValue.validateModelToTarget();
    }

    public static boolean isValid(DataBindingContext context) {
        IObservableList validationStatusProviders = context.getValidationStatusProviders();
        for (Object object : validationStatusProviders) {
            if (object instanceof ValidationStatusProvider) {
                ValidationStatusProvider provider = (ValidationStatusProvider) object;
                IObservableValue validationStatus = provider.getValidationStatus();
                if (validationStatus != null) {
                    Object value = validationStatus.getValue();
                    if (value instanceof BindingStatus) {
                        BindingStatus status = (BindingStatus) value;
                        if (!status.isOK()) {
                            return false;
                        }
                    }
                }
            }
        }
        return true;
    }

    public static void updateMessageManager(IMessageManager messageManager, Object source, Control propertyControl,
            IStatus status, String propertyId) {
        if (status.getSeverity() == IStatus.OK) {
            messageManager.removeMessage(propertyId, propertyControl);
        } else {
            String message = status.getMessage();
            messageManager.addMessage(propertyId, message, source, IMessageProvider.ERROR, propertyControl);
        }
    }

    public static void bindMultipleSelection(DataBindingContext dataBindingContext, IMessageManager mmgr,
            IObservableList modelList, StructuredViewer profilesViewer, String propertyName, String labelText) {
        IViewerObservableList observe = ViewerProperties.multipleSelection().observe(profilesViewer);

        UpdateValueStrategy targetToModel = new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE);
        UpdateValueStrategy modelToTarget = new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE);

        targetToModel.setBeforeSetValidator(new MandatoryValidator(labelText));
        modelToTarget.setBeforeSetValidator(new MandatoryValidator(labelText));

        Binding bindValue = dataBindingContext.bindList(observe, modelList);

        final IObservableValue validationStatus = bindValue.getValidationStatus();
        validationStatus.addChangeListener(
                new MessageChangeListener(validationStatus, profilesViewer.getControl(), propertyName, mmgr));
    }
}