Package com.piki.client.view

Source Code of com.piki.client.view.WikiPageViewImpl

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

import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FileUpload;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HasHTML;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TabLayoutPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.piki.client.mvp.AbstractView;
import com.piki.client.presenter.WikiPagePresenterCallback;
import com.piki.client.ui.HasWikiPageName;
import com.piki.client.ui.WikiPage;
import com.piki.client.ui.WikiPageArea;

/**
* Implementation of the WikiView
*
*/
public class WikiPageViewImpl extends AbstractView<TabLayoutPanel, WikiPagePresenterCallback> implements WikiPageView {
 
/**  private final static String WIKI_HELP = "<h1>Wiki markup help</h1>\n"
      + "<br/>"
      + "<h1>=Heading1=</h1><br/>\n"
      + "<h2>==Heading2==</h2><br/>\n"
      + "<h3>==Heading3==</h3><br/>\n"
      + "\n"
      + "<b>'''bold'''</b>     <i>''italic''</i><br/>\n"
      + "<code>inline code</code><>\n"
      + "\n"
      + "Indent lists 2 spaces:<br/>\n"
      + "<li>* bullet item</li<br/>\n"
      + "<li># numbered list</li><br/>\n"
      + "\n"
      + "horizontal rule<br/>\n"
      + "----\n"
      + "\n"
      + "WikiWordLink <br/>\n"
      + "[http://domain/page label]<br/>\n"
      + "http://domain/page\n"
      + "\n"
      + "{|<br/>\n"
      + "! column1 header<br/>\n"
      + "! column2 header<br/>\n"
      + "|<br/>\n"
      + "| column1<br/>\n"
      + "| column2<br/>\n"
      + "|}\n"
      + "\n" + "[http://code.google.com/p/piki piki homepage]";
  */   
      private final static String WIKI_HELP = "<h1>Wiki markup help</h1>"
          + "<br/>"
          + "<h1>=Heading1=</h1><br/>\n"
          + "<h2>==Heading2==</h2><br/>\n"
          + "<h3>==Heading3==</h3><br/>\n"
          + "\n"
          + "<b>'''bold'''</b>     <i>''italic''</i><br/>\n"
          + "<code>inline code</code><>\n"
          + "\n"
          + "Indent lists 2 spaces:<br/>\n"
          + "<li>* bullet item</li<br/>\n"
          + "<li># numbered list</li><br/>\n"
          + "\n"
          + "horizontal rule<br/>\n"
          + "----\n"
          + "\n"
          + "WikiWordLink <br/>\n"
          + "[http://domain/page label]<br/>\n"
          + "http://domain/page\n"
          + "\n"
          + "{|<br/>\n"
          + "! column1 header<br/>\n"
          + "! column2 header<br/>\n"
          + "|<br/>\n"
          + "| column1<br/>\n"
          + "| column2<br/>\n"
          + "|}\n"
          + "\n" + "[http://code.google.com/p/piki piki homepage]";
 
  /**
   * css sstyle name of the view
   */
  private static final String STYLE_NAME = "WikiPage-view";

  /**
   * style name of the edit area
   */
  private static final String STYLE_NAME_EDIT = "WikiPage-edit";

  private static final String STYLE_NAME_EDIT_FOOTER = "WikiPage-footer";

  private static final String STYLE_NAME_BUTTON = "WikiPage-button";

  private static final String STYLE_NAME_READ = "WikiPage-read";

  // content of the wiki page
  WikiPage wikiPage = new WikiPage();
 
  // editing erea of the wiki page
  WikiPageArea wikiPageArea = new WikiPageArea();
 
  // preview of the wiki page
  WikiPage wikiPagePreview = new WikiPage();
 
  // wiki page name
  HasWikiPageName wikiPageName = new  HasWikiPageName() {

    @Override
    public void setWikiPageName(String name) {
      wikiPage.setWikiPageName(name);
      wikiPageArea.setWikiPageName(name);
      wikiPagePreview.setWikiPageName(name + " - Vorschau");
    }

    @Override
    public String getWikiPageName() {
      return wikiPage.getWikiPageName();
    }
   
  };
 
  /**
   * tab Panel
   */
  TabLayoutPanel deckPanel = null;
 
  @Override
  public HasWikiPageName name() {
    return wikiPageName;
  }

  @Override
  public HasHTML read() {
    return wikiPage;
  }

  @Override
  public HasText editing() {
    return wikiPageArea;
  }
 
  @Override
  protected TabLayoutPanel onInitialize() {
   
    final WikiPagePresenterCallback callback = getPresenterCallback();
   
    deckPanel = new TabLayoutPanel(2.5, Unit.EM);
    deckPanel.setStyleName(STYLE_NAME);
   
    // add panels
    deckPanel.add(decorateWidget(createReadPanel()), "Lesen");
    deckPanel.add(decorateWidget(createEditPanel()), "Bearbeiten");
   
    // select read Tab
    deckPanel.selectTab(0);
   
    deckPanel.addSelectionHandler(new SelectionHandler<Integer>() {
     
      @Override
      public void onSelection(SelectionEvent<Integer> event) {
        int tabId = event.getSelectedItem();
        if (tabId == 1) {
          callback.toBeEdit(new AsyncCallback<Boolean>() {

            @Override
            public void onSuccess(Boolean result) {
              if (result == null)
                Window.alert("Seite kann leider nicht geladen werden: unerwarteter Rückgabewert (result == null");
             
              if (result != null)
                if (!result)
                  Window.alert("Seite kann leider nicht geladen werden: unerwarteter Rückgabewert (result == false");
            }
           
            @Override
            public void onFailure(Throwable caught) {
              Window.alert("Seite kann leider nicht geladen werden: caught.getMessage()");         
            }
          });
        }
       
      }
    });
   
    return deckPanel;
  }

   /**
    * create the read panel
    * @return read panel
    */
  protected Widget createReadPanel() {
    wikiPage.setStyleName(STYLE_NAME_READ);
    return wikiPage;
  }
 
  /**
   * create the edit panel
   * @return edit panel
   */
  private Widget createEditPanel() {
   
    final WikiPagePresenterCallback callback = getPresenterCallback();
   
    HorizontalPanel deckPanel = new HorizontalPanel();
    deckPanel.setWidth("100%");
    deckPanel.setStyleName(STYLE_NAME_EDIT);
    deckPanel.add(wikiPageArea);

    // footer panel
    VerticalPanel footerPanel = new VerticalPanel();
    footerPanel.setStyleName(STYLE_NAME_EDIT_FOOTER);
 
    // Hilfe
    HTML help = new HTML(WIKI_HELP);
    footerPanel.add(help);
   
    // save button
    Button save = new Button("Seite speichern");
    save.setStyleName(STYLE_NAME_BUTTON);
    save.addClickHandler(new ClickHandler() {
     
      @Override
      public void onClick(ClickEvent event) {
        callback.toBeSaved(wikiPageArea.getText()new AsyncCallback<Boolean>() {
         
          @Override
          public void onSuccess(Boolean result) {
            if (result == null)
              Window.alert("Seite kann leider nicht gespeichert werden: unerwarteter Rückgabewert (result == null");
           
            if (result != null) {
              if (result)
                selectReadPanel();
              else
                Window.alert("Seite kann leider nicht gespeichert werden: unerwarteter Rückgabewert (result == false");
            }
          }
         

          @Override
          public void onFailure(Throwable caught) {
            Window.alert("Seite kann leider nicht gespeichert werden: caught.getMessage()");         
          }
        });
       
      }
    });
    footerPanel.add(save);
   
    // preview button
    Button preview = new Button("Vorschau anzeigen");
    preview.setStyleName(STYLE_NAME_BUTTON);
    preview.addClickHandler(new ClickHandler() {
     
      @Override
      public void onClick(ClickEvent event) {
        callback.toBePreview(wikiPageArea.getText()new AsyncCallback<Boolean>() {
         
          @Override
          public void onSuccess(Boolean result) {
            if (result == null)
              Window.alert("Vorschau auf Seite leider nicht möglich: unerwarteter Rückgabewert (result == null");
           
            if (result != null) {
              if (!result)
                Window.alert("Vorschau auf Seite leider nicht möglich: unerwarteter Rückgabewert (result == false");
            }
          }
         

          @Override
          public void onFailure(Throwable caught) {
            Window.alert("Vorschau auf Seite nicht möglich: caught.getMessage()");         
          }
        });
       
      }
       
    });
    footerPanel.add(preview);
   
    // discard button
    Button discard = new Button("Abbrechen");
    discard.setStyleName(STYLE_NAME_BUTTON);
    discard.addClickHandler(new ClickHandler() {
     
      @Override
      public void onClick(ClickEvent event) {
        try {
          if (!callback.discard())
          Window.alert("Änderung kann nicht zurückgenommen werden");
        } catch (Exception exception) {
          Window.alert("Änderung kann nicht zurückgenommen werden: " + exception.getMessage());
        }
      }
       
    });
    footerPanel.add(discard);
   
    // Create a FormPanel and point it at a service.
      final FormPanel form = new FormPanel();
      form.setAction("/image");

      // Because we're going to add a FileUpload widget, we'll need to set the
      // form to use the POST method, and multipart MIME encoding.
      form.setEncoding(FormPanel.ENCODING_MULTIPART);
      form.setMethod(FormPanel.METHOD_POST);

      // Create a panel to hold all of the form widgets.
      VerticalPanel panel = new VerticalPanel();
      form.setWidget(panel);

      // add label
      panel.add(new Label("select a file:"));
     
      // Create a FileUpload widget.
      final FileUpload upload = new FileUpload();
      upload.setName("uploadFormElement");
      panel.add(upload);

      // Add a 'submit' button.
      panel.add(new Button("Submit", new ClickHandler() {
        public void onClick(ClickEvent event) {
        upload.setName(upload.getFilename());
          form.submit();
        }
      }));

    footerPanel.add(form);
    deckPanel.add(footerPanel);
    return deckPanel;
  }

    /**
     * decorate the widget of the tab panel
     * @param widget widget to be decorated
     * @return decorated panel
     */
  protected Widget decorateWidget(Widget widget) {
    widget.setVisible(true);
    return widget;
  }
 
  protected void selectReadPanel() {
    if (deckPanel != null)
      deckPanel.selectTab(0);
  }

  @Override
  public HasHTML preview() {
    return wikiPagePreview;
  }

  @Override
  public void newWikiPage() {
    if (deckPanel != null)
      deckPanel.selectTab(1);
  }


}
TOP

Related Classes of com.piki.client.view.WikiPageViewImpl

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.