/* * Copyright 2014 cruxframework.org. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package org.cruxframework.crux.core.client.screen.binding; import com.google.gwt.user.client.ui.IsWidget; /** * @author Thiago da Rosa de Bustamante * */ /** * Interface for expression binding between dataObjects and widgets in this view. * @author Thiago da Rosa de Bustamante * */ public abstract class ExpressionBinder<W extends IsWidget> { // to avoid the same expression be evaluated more than once on the same execution context private long timestamp = 0; protected W widget; @SuppressWarnings("unchecked") protected void bind(IsWidget w) { this.widget = (W) w; } protected boolean isBound() { return widget != null; } void execute(BindingContext context) { long executionTimestamp = context.getExecutionTimestamp(); if (timestamp < executionTimestamp) { timestamp = executionTimestamp; updateExpression(context); } } /** * Update the widget expression binding * @param w widget */ protected abstract void updateExpression(BindingContext context); public static interface BindingContext { <T> T getDataObject(String dataObject); long getExecutionTimestamp(); } }