Package com.piki.client.presenter

Source Code of com.piki.client.presenter.WikiPagePresenter

/**
*
*/
package com.piki.client.presenter;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.piki.client.event.AddWikiPageEvent;
import com.piki.client.event.DeleteWikiPageEvent;
import com.piki.client.event.DeleteWikiPageEventHandler;
import com.piki.client.mvp.BasisChangeablePresenter;
import com.piki.client.mvp.HasEventBus;
import com.piki.client.rpc.FormatService;
import com.piki.client.rpc.FormatServiceAsync;
import com.piki.client.rpc.WikiPageDAOAsyn;
import com.piki.client.rpc.WikiPageDAOAsynImpl;
import com.piki.client.view.WikiPageView;
import com.piki.client.view.WikiPageViewImpl;
import com.piki.shared.model.WikiPage;

/**
* wiki page presenter
*/
public class WikiPagePresenter extends
        BasisChangeablePresenter<WikiPageView, WikiPagePresenterCallback> implements
    WikiPagePresenterCallback, DeleteWikiPageEventHandler, HasEventBus {

  /**
   * default content of the page
   */
  private final static String NEW_WIKI_PAGE_CONTENT = "<Geben Sie bitte eine neue Seite ein>...";
 
  /**
   * format service
   */
  private final FormatServiceAsync formatService = GWT
      .create(FormatService.class);

  private EventBus eventBus = null;
 
  /**
   * DAO
   */
  private WikiPageDAOAsyn wikiPageDAO = null;

  /**
   * content
   */
  private String content = null;

  /**
   * may stop
   */
  private boolean mayStop = true;

  private boolean newPage = false;

  /**
   * default constructor
   */
  public WikiPagePresenter() {
    wikiPageDAO = new WikiPageDAOAsynImpl(formatService);
    init(new WikiPageViewImpl(), this);
  }

  public WikiPagePresenter(String name) {
    this();
    setName(name);
  }

  /**
   * create a new wiki page
   *
   * @param pageName
   *            name of the page
   */
  public void newPage(String pageName) {

    setName(pageName);
    content = NEW_WIKI_PAGE_CONTENT;
    newPage = true;
    mayStop = true;

    final WikiPageView view = getView();
    view.name().setWikiPageName(pageName);
    view.editing().setText(NEW_WIKI_PAGE_CONTENT);
    formatService.format(GWT.getHostPageBaseURL(), NEW_WIKI_PAGE_CONTENT,
        new AsyncCallback<String>() {

          @Override
          public void onFailure(Throwable caught) {
            Window.alert("Seite kann leider nicht geladen werden: "
                + caught.getMessage());
          }

          @Override
          public void onSuccess(String result) {
            view.read().setHTML(result);
            view.preview().setHTML(result);
            view.newWikiPage();
          }
        });
  }

  public void showPage(String pageName, String html) {

    setName(pageName);
    content = null;
    mayStop = true;

    final WikiPageView view = getView();
    view.name().setWikiPageName(pageName);
    view.read().setHTML(html);
    view.preview().setHTML(html);
  }

  /*
   * (non-Javadoc)
   *
   * @see
   * com.piki.client.presenter.WikiPagePresenterCallback#toBeEdit(com.google
   * .gwt.user.client.rpc.AsyncCallback)
   */
  @Override
  public void toBeEdit(final AsyncCallback<Boolean> success) {

    if (content != null) {
      mayStop = false;
      success.onSuccess(true);
    } else {
      wikiPageDAO.read(getName(), new AsyncCallback<WikiPage>() {

        @Override
        public void onFailure(Throwable caught) {
          success.onFailure(caught);
        }

        @Override
        public void onSuccess(WikiPage result) {
          mayStop = false;
          content = result.getWiki();

          final WikiPageView view = getView();
          view.editing().setText(result.getWiki());
          success.onSuccess(true);
        }
      });
    }

  }

  /*
   * (non-Javadoc)
   *
   * @see
   * com.piki.client.presenter.WikiPagePresenterCallback#toBeSaved(com.google
   * .gwt.user.client.rpc.AsyncCallback)
   */
  @Override
  public void toBeSaved(final String c, final AsyncCallback<Boolean> success) {

    final WikiPage wpc = new WikiPage();
    wpc.setName(getName());
    wpc.setWiki(c);

    wikiPageDAO.update(wpc, new AsyncCallback<WikiPage>() {

      @Override
      public void onFailure(Throwable caught) {
        success.onFailure(caught);
      }

      @Override
      public void onSuccess(WikiPage result) {

        final WikiPageView view = getView();
        view.read().setHTML(result.getHtml());
        view.preview().setHTML(result.getHtml());
        success.onSuccess(true);

        if (newPage) {
          EventBus eventBus = getEventBus();
          eventBus.fireEvent(new AddWikiPageEvent(getName()));
          newPage = false;
        }

        mayStop = true;
        content = c;
      }



    });
  }

  /*
   * (non-Javadoc)
   *
   * @see com.piki.client.presenter.WikiPagePresenterCallback#discard()
   */
  @Override
  public boolean discard() {
    final WikiPageView view = getView();
    view.editing().setText(content);
    return true;
  }

  @Override
  public void toBePreview(String wiki, final AsyncCallback<Boolean> success) {
    formatService.format(GWT.getHostPageBaseURL(), wiki,
        new AsyncCallback<String>() {

          @Override
          public void onFailure(Throwable caught) {
            success.onFailure(caught);
          }

          @Override
          public void onSuccess(String result) {
            final WikiPageView view = getView();
            view.preview().setHTML(result);
            success.onSuccess(true);
          }
        });

  }

  @Override
  public boolean isModify() {
    return !mayStop;
  }


  @Override
  public void save() {
   
    final WikiPageView view = getView();
    toBeSaved(view.editing().getText(), new AsyncCallback<Boolean>() {

      @Override
      public void onFailure(Throwable caught) {
        Window.alert("Seite " + getName() + " konnte nicht gespeichert werden");
      }

      @Override
      public void onSuccess(Boolean rc) {
       
        if (!rc)
          Window.alert("Seite " + getName() + " konnte nicht gespeichert werden");

      }
    });
   
  }

  private EventBus getEventBus() {
    return eventBus;
  }
 
  @Override
  public void setEventBus(EventBus eventBus) {
    this.eventBus = eventBus;
    eventBus.addHandler(DeleteWikiPageEvent.TYPE, this)
  }
 
  @Override
  public void onDeleteWikiPage(DeleteWikiPageEvent event) {
    if (event != null) {
      String name = getName();
      if (name != null) {
        if (name.equals(event.getWikiPageName())) {
          newPage(event.getWikiPageName());
        }
      }
    }

  }

  public void read() {
    wikiPageDAO.read(getName(),
        new AsyncCallback<WikiPage>() {

          @Override
          public void onFailure(Throwable caught) {
            newPage(getName());
          }

          @Override
          public void onSuccess(WikiPage result) {
            showPage(result.getName(), result.getHtml());
          }
        });
  }

}
TOP

Related Classes of com.piki.client.presenter.WikiPagePresenter

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.