Package com.data2semantics.yasgui.client.helpers

Source Code of com.data2semantics.yasgui.client.helpers.ErrorHelper

package com.data2semantics.yasgui.client.helpers;

/*
* #%L
* YASGUI
* %%
* Copyright (C) 2013 Laurens Rietveld
* %%
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
* #L%
*/

import com.data2semantics.yasgui.client.View;
import com.data2semantics.yasgui.client.configmenu.ReportIssue;
import com.data2semantics.yasgui.client.settings.Imgs;
import com.data2semantics.yasgui.client.settings.ZIndexes;
import com.data2semantics.yasgui.client.tab.QueryTab;
import com.google.common.collect.HashMultimap;
import com.google.gwt.http.client.URL;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.widgets.Button;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.IButton;
import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.Window;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.events.CloseClickEvent;
import com.smartgwt.client.widgets.events.CloseClickHandler;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.VLayout;

public class ErrorHelper {
  private View view;
  public ErrorHelper(View view) {
    this.view = view;
  }
 

  public void onQueryError(String tabId, String error) {
    if (view.getElements() != null) {
      view.getElements().onQueryFinish();
    }
    QueryTab tab = (QueryTab)view.getTabs().getTab(tabId);
    onQueryError(error, tab.getTabSettings().getEndpoint(), tab.getTabSettings().getQueryString(), tab.getTabSettings().getQueryArgs());
  }
 
  /**
   * Show the error window for a trowable. Prints the complete stack trace
   * @param throwable
   */
  public void onError(Throwable e) {
    onError(e, view.getSettings().bugReportsSupported());
  }
 
  private void onError(final Throwable t, boolean allowBugReport) {
    Helper.onLoadingFinish();
    if (allowBugReport) {
      final Window window = getErrorWindow();
      VLayout content = new VLayout();
      content.setWidth100();
      content.addMember(getErrorLabel(getErrorMsg(t)));
     
      IButton debugButton = new IButton("Report this as a bug");
      debugButton.setIcon(Imgs.BUG.get());
      debugButton.setWidth(140);
      debugButton.addClickHandler(new ClickHandler(){
        @Override
        public void onClick(ClickEvent event) {
          window.destroy();
          ReportIssue.report(view, t);
        }});
      content.addMember(debugButton);
      window.addItem(content);
      window.draw();
    } else {
      onError(getErrorMsg(t));
    }
    Helper.logExceptionToServer(t);
  }
 
  private void drawErrorWindow(Canvas content) {
    Window window = getErrorWindow();
    window.addItem(content);
    window.draw();
  }
  private Label getErrorLabel(String error) {
    Label label = new Label(error);
    label.setMargin(4);
    label.setHeight100();
    return label;
  }
 
  /**
   * Modal popup window to show on error
   *
   * @param error
   */
  public void onError(String error) {
    Helper.onLoadingFinish();
    drawErrorWindow(getErrorLabel(error));
  }
 
  private Window getErrorWindow() {
    final Window window = new Window();
    window.setID("errorWindow");
    window.setDismissOnOutsideClick(true);
    window.setIsModal(true);
    window.setZIndex(ZIndexes.MODAL_WINDOWS);
    window.setAutoSize(true);
    window.setMinWidth(400);
    window.setShowMinimizeButton(false);
    window.setAutoCenter(true);
    window.setCanDragResize(true);
    window.addCloseClickHandler(new CloseClickHandler() {
      public void onCloseClick(CloseClickEvent event) {
        window.destroy();
      }
    });
    window.setShowTitle(false);
    return window;
  }
 
  /**
   * Display error when querying endpoint failed. Has buttons for opening query result page of endpoint itself on new page
   *
   * @param error Html error msg
   * @param endpoint Used endpoint
   * @param query Used query
   * @param args
   */
  public void onQueryError(String error, final String endpoint, final String query, final HashMultimap<String, String> args) {
    final Window window = getErrorWindow();
    window.setWidth(350);
    window.setZIndex(ZIndexes.MODAL_WINDOWS);
    VLayout vLayout = new VLayout();
    vLayout.setWidth100();
    Label label = new Label();
    label.setID("queryErrorMessage");
    label.setContents(error);
    label.setMargin(4);
    label.setHeight100();
    label.setWidth100();
    vLayout.addMember(label);
   
    HLayout buttons = new HLayout();
    buttons.setAlign(Alignment.CENTER);
    Button executeQuery = new Button("Open endpoint in new window");
    executeQuery.addClickHandler(new ClickHandler(){
      @Override
      public void onClick(ClickEvent event) {
        String url = endpoint + "?query=" + URL.encodeQueryString(query) + "&" + Helper.getParamsAsString(args);
        com.google.gwt.user.client.Window.open(url, "_blank", null);
      }});
    executeQuery.setWidth(200);
    Button closeWindow = new Button("Close window");
    closeWindow.addClickHandler(new ClickHandler(){

      @Override
      public void onClick(ClickEvent event) {
        window.destroy();
      }});
   
    buttons.addMember(executeQuery);
    buttons.addMember(closeWindow);
    buttons.setWidth100();
    buttons.setLayoutAlign(Alignment.CENTER);
    vLayout.addMember(buttons);
    window.addItem(vLayout);
    window.draw();
  }
  public static String getErrorMsg(Throwable e) {
    String errorMsg;
    if (Helper.inDebugMode()) {
      errorMsg = Helper.getStackTraceAsString(e);
      errorMsg += "\nCaused by:\n" + Helper.getCausesStackTraceAsString(e);
    } else {
      errorMsg = e.getMessage();
    }
    return errorMsg;
  }
}
TOP

Related Classes of com.data2semantics.yasgui.client.helpers.ErrorHelper

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.