/******************************************************************************* * Copyright (c) 2016 EclipseSource 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: * EclipseSource - initial API and implementation ******************************************************************************/ package com.eclipsesource.tabris.internal; import static com.eclipsesource.tabris.internal.Constants.EVENT_REFRESH; import static com.eclipsesource.tabris.internal.Constants.METHOD_DONE; import static com.eclipsesource.tabris.internal.Constants.PROPERTY_MESSAGE; import org.eclipse.rap.rwt.remote.RemoteObject; import com.eclipsesource.tabris.widgets.RefreshComposite; public class RefreshCompositeRemoteAdapter extends TabrisRemoteAdapter<RefreshComposite> { private static final int MESSAGE = 1; private static final int REFRESH_LISTENER = 2; private final RemoteObject remoteObject; private final Runnable renderRunnable; private transient String message; private transient boolean refreshListener; private transient boolean done; public RefreshCompositeRemoteAdapter( RefreshComposite composite, RemoteObject remoteObject ) { super( composite ); this.remoteObject = remoteObject; renderRunnable = createRenderRunnable(); } private Runnable createRenderRunnable() { return new Runnable() { @Override public void run() { renderMessage(); renderRefreshListener(); renderDone(); clear(); } }; } public void preserveMessage( String message ) { if( !hasPreserved( MESSAGE ) ) { markPreserved( MESSAGE ); this.message = message; scheduleRender( renderRunnable ); } } private void renderMessage() { if( hasPreserved( MESSAGE ) ) { String actual = control.getMessage(); if( changed( actual, message ) ) { remoteObject.set( PROPERTY_MESSAGE, actual ); } } } public void preserveRefreshListener( boolean refreshListener ) { if( !hasPreserved( REFRESH_LISTENER ) ) { markPreserved( REFRESH_LISTENER ); this.refreshListener = refreshListener; scheduleRender( renderRunnable ); } } private void renderRefreshListener() { if( hasPreserved( REFRESH_LISTENER ) ) { boolean actual = !control.getRefreshListeners().isEmpty(); if( changed( actual, refreshListener )) { remoteObject.listen( EVENT_REFRESH, actual ); } } } public void setDone( boolean reset ) { this.done = reset; scheduleRender( renderRunnable ); } private void renderDone() { if( done ) { remoteObject.call( METHOD_DONE, null ); } } @Override protected void clear() { super.clear(); done = false; } }