Package com.tensegrity.wpalo.client

Source Code of com.tensegrity.wpalo.client.WPalo

/*
*
* @file WPalo.java
*
* Copyright (C) 2006-2009 Tensegrity Software GmbH
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License (Version 2) as published
* by the Free Software Foundation at http://www.gnu.org/copyleft/gpl.html.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc., 59 Temple
* Place, Suite 330, Boston, MA 02111-1307 USA
*
* If you are developing and distributing open source applications under the
* GPL License, then you are free to use JPalo Modules under the GPL License.  For OEMs,
* ISVs, and VARs who distribute JPalo Modules with their products, and do not license
* and distribute their source code under the GPL, Tensegrity provides a flexible
* OEM Commercial License.
*
* @author Philipp Bouillon <Philipp.Bouillon@tensegrity-software.com>
*
* @version $Id: WPalo.java,v 1.36 2010/04/13 09:45:15 PhilippBouillon Exp $
*
*/

package com.tensegrity.wpalo.client;

import java.util.Date;
import java.util.List;


import com.extjs.gxt.ui.client.GXT;
import com.extjs.gxt.ui.client.Registry;
import com.extjs.gxt.ui.client.event.BaseEvent;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.mvc.Dispatcher;
import com.extjs.gxt.ui.client.util.Theme;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.extjs.gxt.ui.client.widget.Viewport;
import com.extjs.gxt.ui.client.widget.layout.MarginData;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Cookies;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Widget;
import com.tensegrity.palo.gwt.core.client.models.admin.XUser;
import com.tensegrity.palo.gwt.core.client.models.cubeviews.XDirectLinkData;
import com.tensegrity.palo.gwt.core.client.models.cubeviews.XView;
import com.tensegrity.wpalo.client.async.Callback;
import com.tensegrity.wpalo.client.exceptions.WPaloUncaughtExceptionHandler;
import com.tensegrity.wpalo.client.i18n.ILocalConstants;
import com.tensegrity.wpalo.client.i18n.ILocalMessages;
import com.tensegrity.wpalo.client.i18n.Resources;
import com.tensegrity.wpalo.client.services.folder.WPaloFolderServiceProvider;
import com.tensegrity.wpalo.client.services.wpalo.WPaloController;
import com.tensegrity.wpalo.client.services.wpalo.WPaloControllerServiceProvider;
import com.tensegrity.wpalo.client.ui.mvc.account.AccountController;
import com.tensegrity.wpalo.client.ui.mvc.admin.AdminController;
import com.tensegrity.wpalo.client.ui.mvc.cubeview.LargeQueryWarningDialog;
import com.tensegrity.wpalo.client.ui.mvc.cubeview.PrintDialog;
import com.tensegrity.wpalo.client.ui.mvc.viewbrowser.ViewBrowserController;
import com.tensegrity.wpalo.client.ui.mvc.viewbrowser.importer.PaloSuiteViewCreationDialog;
import com.tensegrity.wpalo.client.ui.mvc.viewbrowser.importer.ViewImportDialog;
import com.tensegrity.wpalo.client.ui.mvc.workbench.Workbench;
import com.tensegrity.wpalo.client.ui.mvc.workbench.WorkbenchController;
import com.tensegrity.wpalo.client.ui.widgets.BusyIndicatorPanel;

/**
* Entry point classes define <code>onModuleLoad()</code>.
*/
public class WPalo implements EntryPoint {
  protected transient final ILocalConstants constants = Resources.getInstance().getConstants();
  protected transient final ILocalMessages  messages  = Resources.getInstance().getMessages();

  public static final String ID = "WPalo";
 
  public static WPaloConstants i18n;
  private BusyIndicatorPanel waitPanel = null;
 
  // the main panel for the content
  private Viewport contentPane = null;

  public static native void refreshSubobjects(String id) /*-{
    $wnd.alert(id);
    $wnd.msgToSend = 'Sub Object Saved!!';
    $wnd.sendMessage({'id': id, 'msg': msgToSend},'subobjectsaved');
  }-*/;
 
  public void show(Widget panel) {   
    contentPane.setVisible(false);
    contentPane.removeAll();
    contentPane.add(panel, new MarginData(0));
    contentPane.setVisible(true);
    contentPane.layout();
  }
 
  public void attach(Widget panel) {
    contentPane.setVisible(false);
    contentPane.removeAll();
    contentPane.add(panel, new MarginData(0));
    contentPane.layout();
  }
 
  public static void loadCss(String filename) {
    Element link = DOM.createElement("link");
    DOM.setElementAttribute(link, "rel", "stylesheet");
    DOM.setElementAttribute(link, "type", "text/css");
    DOM.setElementAttribute(link, "href", filename);
    Element headElement = DOM.getElementById("head");
    DOM.appendChild(headElement, link);
  }
 
  public void show() {
    contentPane.setVisible(true);
  }
 
  private final String getValue(String key, String link) {
    String temp = link.toLowerCase();
    int index = temp.indexOf(key);
    if (index == -1) {
      return null;
    }
    int begin = temp.indexOf("\"", index);
    int end = temp.indexOf("\"", begin + 1);
    if (begin == -1 || end == -1) {
      return null;
    }
    return link.substring(begin + 1, end);
  }
 
  private final void createView(XView xView, final String viewId, final List <Boolean> displayFlags, final List <Boolean> globalFlags) {
    ((Workbench) Registry.get(Workbench.ID)).showWaitCursor(constants.creatingView());
    String sessionId = ((Workbench)Registry.get(Workbench.ID)).getUser().getSessionId();
    WPaloFolderServiceProvider.getInstance().importView(sessionId,
        xView,
          new Callback<XView>(constants.couldNotCreateView()) {
            public void onSuccess(XView xView) {
              hideWaitCursor();
              ((Workbench) Registry.get(Workbench.ID)).showWaitCursor(constants.openingView());
              XUser user = ((Workbench)Registry.get(Workbench.ID)).getUser();
              DisplayFlags.setDisplayFlagsFor(xView, user, displayFlags, globalFlags);
              xView.setExternalId(viewId);
              Dispatcher.get().dispatch(WPaloEvent.EDIT_VIEWBROWSER_VIEW, xView);
              String subobjId = "OK - 4";
              refreshSubobjects(subobjId);
            }
          });
  }   
 
  private final void parsePaloSuiteLinkData(final Dispatcher dispatcher, final ViewBrowserController viewBrowserController) {

    final String directLink = Window.Location.getQueryString();
    final String locale = Window.Location.getParameter("locale");
    WPaloServiceProvider.getInstance().openPaloSuiteView(locale, directLink,
        new AsyncCallback<XDirectLinkData>() {
          public void onFailure(Throwable t) {
            MessageBox.alert(constants.error(), t.getMessage(), null);
          }

          public void onSuccess(final XDirectLinkData data) {
            if (data.getErrors().length > 0) {
              StringBuffer buf = new StringBuffer();
              for (String s: data.getErrors()) {
                buf.append(s + "\n");
              }
              MessageBox.alert(constants.errorsWhileProcessingOptions(), buf.toString(), null);
            } else {
//              CubeViewEditor.hasBeenResized = true;
              WPaloControllerServiceProvider.getInstance().loginHash(
                  Window.Location.getParameter("user"),
                  data.getUserPassword(),
                  Window.Location.getParameter("locale"),
                  new Callback<XUser>() {
                    public void onFailure(Throwable t) {
                      super.onFailure(t);
                    }
                    public void onSuccess(XUser user) {
                      XView [] xViews = data.getViews()

                      if (xViews == null || xViews.length == 0) {
                        try {
                        DisplayFlags df = DisplayFlags.createDisplayFlags(user, data.getGlobalDisplayFlags());                       
                        dispatcher.dispatch(WPaloEvent.INIT, df);
                        ((Workbench)Registry.get(Workbench.ID)).directLogin(user);
                        ((Workbench)Registry.get(Workbench.ID)).setPaloSuite(true);
                        } catch (Throwable t) {
                          t.printStackTrace();
                        }
                        try {
                        final PaloSuiteViewCreationDialog dia =
                          new PaloSuiteViewCreationDialog();
                        dia.addButtonListener(ViewImportDialog.BUTTON_OK,
                            new Listener<BaseEvent>() {
                              public void handleEvent(BaseEvent be) {
                                XView[] xViews = dia.getSelectedViews();
                                if (xViews != null && xViews.length == 1) {
                                  xViews[0].setExternalId(data.getPaloSuiteViewId());
                                  createView(xViews[0], data.getPaloSuiteViewId(), data.getDisplayFlags(), data.getGlobalDisplayFlags());
                                }
                              }
                            });
                        dia.show();
                        } catch (Throwable t) {
                          t.printStackTrace();
                        }
                      } else {
                        try {
                          XView xView = xViews[0];
                         
                          DisplayFlags.setDisplayFlagsFor(xView, user, xView.getDisplayFlags(), data.getGlobalDisplayFlags());
                          DisplayFlags displayFlags = DisplayFlags.getDisplayFlagsFor(xView);
                          dispatcher.dispatch(WPaloEvent.INIT, displayFlags);
                          ((Workbench)Registry.get(Workbench.ID)).directLogin(user);
                          ((Workbench)Registry.get(Workbench.ID)).setPaloSuite(true);
                          dispatcher.dispatch(WPaloEvent.EDIT_VIEWBROWSER_VIEW, xView);
                          if (data.getErrors().length > 0) {
                            StringBuffer buf = new StringBuffer();
                            for (String s: data.getErrors()) {
                              buf.append(s + "\n");
                            }
                            MessageBox.alert(constants.errorsWhileProcessingOptions(), buf.toString(), null);
                         
                        } catch (Throwable t) {
                          t.printStackTrace();
                        }
                      }                     
                    }
                  });

            }
          }
        });
  }
 
  private final void parseDefaultLinkData(final Dispatcher dispatcher, final ViewBrowserController viewBrowserController) {

    final String directLink = Window.Location.getParameter("options");
    final String locale = Window.Location.getParameter("locale");
    if (directLink == null) {
      // ...and dispatch start event, i.e. we begin with login ;)
      dispatcher.dispatch(WPaloEvent.APP_START);
    } else {
      final String user = getValue("user", directLink);
      final String pass = getValue("pass", directLink);
      if (user == null || pass == null) {
        dispatcher.dispatch(WPaloEvent.APP_START);
      } else {

        waitPanel = new BusyIndicatorPanel();
        waitPanel.show(constants.startingApplication(), false);
        WPaloServiceProvider.getInstance().openViewDirectly(locale, directLink,
          new AsyncCallback<XDirectLinkData>() {
            public void onSuccess(final XDirectLinkData data) {
              if (!data.isAuthenticated()) {
                waitPanel.hide();
                dispatcher.dispatch(WPaloEvent.APP_START);
                if (data.getErrors().length > 0) {
                  StringBuffer buf = new StringBuffer();
                  for (String s: data.getErrors()) {
                    buf.append(s + "\n");
                  }
                  MessageBox.alert(constants.errorsWhileProcessingOptions(), buf.toString(), null);
                }               
              } else {

//                CubeViewEditor.hasBeenResized = true;
//                CubeViewEditor.fromDirectLink = true;
                WPaloControllerServiceProvider.getInstance().loginHash(
                    user,
                    pass,
                    Window.Location.getParameter("locale"),
                    new Callback<XUser>() {
                      public void onFailure(Throwable t) {
                        super.onFailure(t);
                        waitPanel.hide();
                      }
                      public void onSuccess(XUser user) {

                        XView [] xViews = data.getViews();
                        if (xViews == null || xViews.length == 0) {
                          try {                                   
                            dispatcher.dispatch(WPaloEvent.INIT, DisplayFlags.createDisplayFlags(user, data.getGlobalDisplayFlags()));
                            ((Workbench)Registry.get(Workbench.ID)).directLogin(user);
                          } catch (Throwable t) {
                            t.printStackTrace();
                            MessageBox.alert(t.getMessage(), t.getCause().getMessage(), null);
                          }
                          waitPanel.hide();
                          if (data.getErrors().length > 0) {
                            StringBuffer buf = new StringBuffer();
                            for (String s: data.getErrors()) {
                              buf.append(s + "\n");
                            }
                            MessageBox.alert(constants.errorsWhileProcessingOptions(), buf.toString(), null);
                          }                         
                          return;
                        }
                        LargeQueryWarningDialog.hideWarnDialog = true;
                        for (int i = 1; i < xViews.length; i++) {
                          viewBrowserController.addViewToLoad(xViews[i]);
                        }
                        XView xView = xViews[0];
                       
                        DisplayFlags.setDisplayFlagsFor(xView, user, xView.getDisplayFlags(), data.getGlobalDisplayFlags());
                        DisplayFlags displayFlags = DisplayFlags.getDisplayFlagsFor(xView);

                        dispatcher.dispatch(WPaloEvent.INIT, displayFlags);
                        ((Workbench)Registry.get(Workbench.ID)).directLogin(user);
//                        CubeViewEditor.hasBeenResized = true;
                        dispatcher.dispatch(WPaloEvent.EDIT_VIEWBROWSER_VIEW, xView);
                        waitPanel.hide();
                        if (data.getErrors().length > 0) {
                          StringBuffer buf = new StringBuffer();
                          for (String s: data.getErrors()) {
                            buf.append(s + "\n");
                          }
                          MessageBox.alert(constants.errorsWhileProcessingOptions(), buf.toString(), null);
                        }                       
                      }
                    });
              }               
            }
           
            public void onFailure(Throwable arg0) {
              dispatcher.dispatch(WPaloEvent.APP_START);
            }
          });
      }
    }   
  }
 
  private final String setLocale() {
    String val = Window.Location.getParameter("locale");
    if (val == null) {
      val = Cookies.getCookie("locale");
      if (val != null) {
        String url = Window.Location.getHref();
        int index;
        if ((index = url.indexOf("locale=")) != -1) {
          int i2 = url.indexOf("&", index);
          if (i2 == -1) {
            url = url.substring(0, index) + "locale=" + val;
          } else {
            url = url.substring(0, index) + "locale=" + val + url.substring(i2);
          }
        } else {
          if (url.indexOf("?") != -1) {
              url += "&locale=" + val; 
          } else {
            url += "?locale=" + val;
          }
        }
        //Window.Location.assign(url);
        return url;
      }
    }
    if (val == null || val.isEmpty()) {
      return null;
    }
    if (val.equals(Cookies.getCookie("locale"))) {
      return null;
    }
    Date date = new Date(System.currentTimeMillis() + 1000l
        * 60l * 60l * 24l * 30l);
    Cookies.setCookie("locale", val, date);
    return null;
  }
 
  private final String setTheme(String url) {
    String val = Window.Location.getParameter("theme");
    if (val == null) {
      val = Cookies.getCookie("theme");
      if (val != null) {
        if (url == null) {
          url = Window.Location.getHref();
        }
        int index;
        if ((index = url.indexOf("theme=")) != -1) {
          int i2 = url.indexOf("&", index);
          if (i2 == -1) {
            url = url.substring(0, index) + "theme=" + val;
          } else {
            url = url.substring(0, index) + "theme=" + val + url.substring(i2);
          }
        } else {
          if (url.indexOf("?") != -1) {
              url += "&theme=" + val; 
          } else {
            url += "?theme=" + val;
          }
        }
        //Window.Location.assign(url);
        return url;
      }
    }
    if (val == null || val.isEmpty()) {
      return url;
    }
    if (val.equals(Cookies.getCookie("theme"))) {
      return url;
    }
    Date date = new Date(System.currentTimeMillis() + 1000l
        * 60l * 60l * 24l * 30l);
    Cookies.setCookie("theme", val, date);
    return url;
  }

  /**
   * This is the entry point method.
   */
  public void onModuleLoad() {

    String theme = Window.Location.getParameter("theme");
    if (theme == null || theme.isEmpty() || theme.equalsIgnoreCase("blue") || theme.equalsIgnoreCase("default")) {
      GXT.setDefaultTheme(Theme.BLUE, true);
      loadCss("blue_theme.css");
    } else if (theme.equalsIgnoreCase("grey") || theme.equalsIgnoreCase("gray")) {
      GXT.setDefaultTheme(Theme.GRAY, true);
      loadCss("gray_theme.css");
    } else {
      GXT.setDefaultTheme(Theme.BLUE, true);
      loadCss("blue_theme.css");
    }
       
    Registry.register(ID, this);
    String url = setLocale();
    url = setTheme(url);
    if (url != null) {
      Window.Location.assign(url);
    }
    initialize();
   
    if (!GXT.isIE) {
      loadCss("firefox.css");
    }
    // simply register main controller...
    final Dispatcher dispatcher = Dispatcher.get();
    dispatcher.addController(new WPaloController());
    WorkbenchController wBenchController = new WorkbenchController();
    dispatcher.addController(wBenchController);
    // the left side content:   
    final ViewBrowserController viewBrowserController = new ViewBrowserController();
    wBenchController.setViewBrowserController(viewBrowserController);
    dispatcher.addController(viewBrowserController);
    // dispatcher.addController(new ReportController());
    // dispatcher.addController(new ReportStructureController());
    // dispatcher.addController(new ModellerController());
    dispatcher.addController(new AdminController());
    dispatcher.addController(new AccountController());
    // dispatcher.addController(new ViewModeWorkbenchController());
    // dispatcher.addController(new ViewModeController());

    PrintDialog.setDefaults();
   
    WPaloPropertyServiceProvider.getInstance().getBooleanProperty("isPaloSuite", false,
        new AsyncCallback<Boolean>() {
          public void onFailure(Throwable arg0) {
            parseDefaultLinkData(dispatcher, viewBrowserController);
          }

          public void onSuccess(Boolean result) {
            if (result) {             
              parsePaloSuiteLinkData(dispatcher, viewBrowserController);
            } else {
              parseDefaultLinkData(dispatcher, viewBrowserController);
            }
           
          }
        });
  }

 
  private final void initialize() {
    // Initialize i18n:
    i18n = GWT.create(WPaloConstants.class);
   
    GWT.setUncaughtExceptionHandler(new WPaloUncaughtExceptionHandler());
//    init();
   
    // required for palo cube table!!
    // PaloTableJSBridge.defineMethods();

    // main panel:
    if (contentPane == null) {
      contentPane = new Viewport();
//      {       
//        protected void onWindowResize(int width, int height) {   
//          if (waitPanel != null) {
//            waitPanel.hide();
//            waitPanel = null;     
//          }
//          super.onWindowResize(width, height);
//        }       
//      };
      contentPane.setMonitorWindowResize(true);
      contentPane.setSize("100%", "100%");
      RootPanel.get().add(contentPane);
    }   
  }
 
//  static void onResize() {
//    if (waitPanel == null) {
//      waitPanel = new BusyIndicatorPanel();
//      waitPanel.show("Resizing, please wait...");
//      System.out.println("Resizing, please wait...");
//    }
//  }
   
//    private static native void init() /*-{
//      // Magic function defined by the selection script.
//      __gwt_initHandlers(
//        function() {
//          @com.tensegrity.wpalo.client.WPalo::onResize()();
//        },
//        function() {
//          return @com.google.gwt.user.client.Window::onClosing()();
//        },
//        function() {
//          @com.google.gwt.user.client.Window::onClosed()();
//        }
//      );
//    }-*/; 
}
 
TOP

Related Classes of com.tensegrity.wpalo.client.WPalo

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.