Package com.habitsoft.kiyaa.views

Source Code of com.habitsoft.kiyaa.views.DynamicView

package com.habitsoft.kiyaa.views;

import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
import com.habitsoft.kiyaa.util.AsyncCallbackDirectProxy;
import com.habitsoft.kiyaa.widgets.Feedback;

/**
* Utility view that takes a view as a parameter and shows it.  This
* is useful in a template where the view would be set programmatically;
* you can make the view an attribute on the GeneratedHTMLView base class
* and assign it into the view attribute of this class.
*/
public class DynamicView implements View {

  View view;
  SimplePanel wrapper = new SimplePanel();
  boolean viewChanged = false;
  String loadingHtml = null;
 
  public View getView() {
    return view;
  }

  public void setView(View view) {
    if(view != this.view) {
      this.view = view;
      viewChanged = true;
      if(view != null && loadingHtml != null) {
        wrapper.setWidget(new HTML(loadingHtml));
      } else {
        wrapper.clear();
      }
    }
  }

  public void clearFields() {
    if(view != null)
      view.clearFields();
  }

  public Widget getViewWidget() {
    return wrapper;
  }

  public void load(AsyncCallback<Void> callback) {
    if(view != null) {
      view.load(new AsyncCallbackDirectProxy<Void>(callback) {
        @Override
        public void onSuccess(Void result) {
          show();
          super.onSuccess(result);
        }

                private void show() {
                    if(viewChanged) {
            wrapper.setWidget(view.getViewWidget());
            viewChanged = false;
          }
                }
       
        @Override
        public void onFailure(Throwable caught) {
                    Log.error("Error loading view "+view, caught);
                    displayError(caught);
          super.onSuccess(null);
        }
      });
    } else {
      callback.onSuccess(null);
    }
  }

  public void save(AsyncCallback<Void> callback) {
    if(view != null) {
      view.save(new AsyncCallbackDirectProxy<Void>(callback) {
          @Override
          public void onFailure(Throwable caught) {
              Log.error("Error saving view "+view, caught);
              super.onSuccess(null);
          }
      });
    } else {
      callback.onSuccess(null);
    }
  }

  public String getLoadingHtml() {
    return loadingHtml;
  }

  public void setLoadingHtml(String loadingHtml) {
    this.loadingHtml = loadingHtml;
    if(wrapper.getWidget() == null && view != null) {
      wrapper.setWidget(new HTML(loadingHtml));
    }
  }
 
  public void setLoadingImage(String src) {
    setLoadingHtml("<img src=\""+src+"\"/>");
  }

    private void displayError(Throwable caught) {
        Feedback fb = new Feedback();
        fb.showError(caught);
        if(GWT.getUncaughtExceptionHandler() != null)
          GWT.getUncaughtExceptionHandler().onUncaughtException(caught);
        wrapper.setWidget(fb);
    }
}
TOP

Related Classes of com.habitsoft.kiyaa.views.DynamicView

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.