Package org.fusesource.ide.commons.ui.form

Source Code of org.fusesource.ide.commons.ui.form.Forms

/*******************************************************************************
* 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.commons.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));
  }
}
TOP

Related Classes of org.fusesource.ide.commons.ui.form.Forms

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.