/******************************************************************************* * Copyright (c) 2006, 2012 Brad Reynolds 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: * Brad Reynolds - initial API and implementation * Brad Reynolds - bug 116920 * Samy Abou-Shama - adapted for RAP and implemented Snippet as Control * EclipseSource - ongoing development ******************************************************************************/ package org.eclipse.rap.demo.databinding; import org.eclipse.core.databinding.*; import org.eclipse.core.databinding.observable.Realm; import org.eclipse.core.databinding.observable.value.WritableValue; import org.eclipse.core.databinding.validation.IValidator; import org.eclipse.core.databinding.validation.ValidationStatus; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.databinding.swt.SWTObservables; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.internal.graphics.Graphics; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*; /** * Snippet that displays how to bind the validation error of the * {@link DataBindingContext} to a label. * * @since 1.0 */ public class Snippet004DataBindingContextErrorLabel extends Group { /** * Validator that returns validation errors for any value other than 5. * * @since 1.0 */ private static class FiveValidator implements IValidator { public IStatus validate( final Object value ) { String msg = "the value was '" + value + "', not '5'"; return "5".equals( value ) ? Status.OK_STATUS : ValidationStatus.error( msg ); } } public Snippet004DataBindingContextErrorLabel( final Composite parent, final int style ) { super( parent, style ); createPartControl(); } public void createPartControl() { // Initiating the realm Realm realm = SWTObservables.getRealm( Display.getCurrent() ); FormLayout formLayout = new FormLayout(); formLayout.marginHeight = DatabindingSnippetsView.GROUP_MARGIN_HEIGHT; formLayout.marginWidth = DatabindingSnippetsView.GROUP_MARGIN_WIDTH; setLayout( formLayout ); setText( "Context Error Label Snippet 004 - Binding Example" ); Label info1 = new Label( this, SWT.NONE ); info1.setText( "Enter '5' to be valid:" ); FormData data = new FormData( DatabindingSnippetsView.STD_LABEL_WIDTH_LARGE, SWT.DEFAULT ); data.top = new FormAttachment( 0, DatabindingSnippetsView.TOP_MARGIN ); data.left = new FormAttachment( 0, 0 ); info1.setLayoutData( data ); Text text = new Text( this, SWT.BORDER ); WritableValue value = new WritableValue( realm, null, String.class ); data = new FormData( DatabindingSnippetsView.STD_LABEL_WIDTH_LARGE, SWT.DEFAULT ); data.top = new FormAttachment( 0, DatabindingSnippetsView.TOP_MARGIN ); data.left = new FormAttachment( info1, 0 ); text.setLayoutData( data ); Label info2 = new Label( this, SWT.NONE ); info2.setText( "Error/Validation:" ); data = new FormData( DatabindingSnippetsView.STD_LABEL_WIDTH_LARGE, SWT.DEFAULT ); data.top = new FormAttachment( info1, DatabindingSnippetsView.TOP_MARGIN ); data.left = new FormAttachment( 0, 0 ); info2.setLayoutData( data ); Label errorLabel = new Label( this, SWT.BORDER ); Color color = Graphics.getColor( 255, 0, 0 ); errorLabel.setForeground( color ); data = new FormData( DatabindingSnippetsView.STD_TEXT_WIDTH_LARGE, SWT.DEFAULT ); data.top = new FormAttachment( text, DatabindingSnippetsView.TOP_MARGIN ); data.left = new FormAttachment( info2, 0 ); errorLabel.setLayoutData( data ); errorLabel.setText( "hallo" ); DataBindingContext dbc = new DataBindingContext( realm ); // Bind the text to the value. UpdateValueStrategy updateValueStrategy = new UpdateValueStrategy(); updateValueStrategy.setAfterConvertValidator( new FiveValidator() ); dbc.bindValue( SWTObservables.observeText( text, SWT.Modify ), value, updateValueStrategy, null ); // Bind the error label to the validation error on the dbc. int severity = AggregateValidationStatus.MAX_SEVERITY; AggregateValidationStatus aggregateValidationStatus = new AggregateValidationStatus( realm, dbc.getBindings(), severity ); dbc.bindValue( SWTObservables.observeText( errorLabel ), aggregateValidationStatus, null, null ); } }