WithView.java :  » GWT » kiyaa » com » habitsoft » kiyaa » views » Java Open Source

Java Open Source » GWT » kiyaa 
kiyaa » com » habitsoft » kiyaa » views » WithView.java
package com.habitsoft.kiyaa.views;

import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
import com.habitsoft.kiyaa.metamodel.Value;
import com.habitsoft.kiyaa.util.AsyncCallbackDirectProxy;
import com.habitsoft.kiyaa.util.AsyncCallbackProxy;

/**
 * Create a scoped variable with a given value.  Useful if you are
 * accessing a value loaded using an AsyncCallback and you just want
 * to load it once.
 * 
 * Example: <k:with value="${expr}" with-model="com.package.ModelType model"/>
 */
public class WithView implements View {

  ModelView<Object> view;
  Value value;
  
  public void clearFields() {
    if(view != null) {
      view.clearFields();
    }
  }

  public Widget getViewWidget() {
    if(view == null) return new Label();
    return view.getViewWidget();
  }

  public void load(AsyncCallback<Void> callback) {
    if(view != null) {
      if(value != null) {
        value.getValue(new AsyncCallbackProxy<Object,Void>(callback) {
          @Override
          public void onSuccess(Object result) {
            view.setModel(result, new AsyncCallbackDirectProxy<Void>(takeCallback()) {
              @Override
              public void onSuccess(Void result) {
                view.load(takeCallback());
              }
            });
          }
        });
      } else {
        view.load(callback);
      }
    } else {
      callback.onSuccess(null);
    }
  }

  public void save(AsyncCallback<Void> callback) {
    if(view != null) {
      view.save(callback);
    } else {
      callback.onSuccess(null);
    }
  }

  public View getView() {
    return view;
  }

  public Value getValue() {
    return value;
  }

  public void setValue(Value value) {
    this.value = value;
  }

  public void setView(ModelView<Object> view) {
    this.view = view;
  }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.