/** * Copyright 2008-2016 Qualogy Solutions B.V. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.qualogy.qafe.gwt.client; /** * $Id: QAFEGWTWeb.java 4152 2009-12-09 11:54:24Z rjankie $ * $URL$ */ import java.util.Map; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.StyleInjector; import com.google.gwt.event.logical.shared.ResizeEvent; import com.google.gwt.event.logical.shared.ResizeHandler; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.AbsolutePanel; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.MenuBar; import com.google.gwt.user.client.ui.Panel; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.SimplePanel; import com.qualogy.qafe.gwt.client.component.QMenuBar; import com.qualogy.qafe.gwt.client.context.ClientApplicationContext; import com.qualogy.qafe.gwt.client.css.Resources; import com.qualogy.qafe.gwt.client.factory.MainFactoryActions; import com.qualogy.qafe.gwt.client.service.RPCServiceAsync; import com.qualogy.qafe.gwt.client.util.JSNIUtil; import com.qualogy.qafe.gwt.client.vo.data.InitState; /** * Entry point classes define <code>onModuleLoad()</code>. */ public class QAFEGWTWeb implements EntryPoint { public static final int MAIN_MENU_HEIGHT = 24; public static final String WINDOW_CLOSING_MESSAGE = "Do you really want to leave the Qafe application page?"; private static MenuBar menuBar = null; private static String rootPanelValue = ""; @Override public void onModuleLoad() { JSNIUtil.exportQafeFunctions(); rootPanelValue = JSNIUtil.getScriptParameter(GWT.getModuleName(), JSNIUtil.ROOT_PANEL_PARAM); // inject default qafe-gwt.css Resources.INSTANCE.css().ensureInjected(); // This is same as StyleInjector.inject(Resources.INSTANCE.css().getText()); // now inject the custom css. injectGeneratedCSS(); buildUI(); Window.addResizeHandler(new ResizeHandler() { @Override public void onResize(ResizeEvent event) { moveWidgets(); } }); Window.addWindowClosingHandler(new Window.ClosingHandler() { @Override public void onWindowClosing(Window.ClosingEvent closingEvent) { closingEvent.setMessage(WINDOW_CLOSING_MESSAGE); } }); // For reloading of the CSS Element styleElement = DOM.createElement("style"); ClientApplicationContext.getInstance().setStyleElement(styleElement); // workaround for GWT issue 1813 // http://code.google.com/p/google-web-toolkit/issues/detail?id=1813 RootPanel.get(rootPanelValue).getElement().getStyle().setProperty("position", "relative"); // set uncaught exception handler GWT.setUncaughtExceptionHandler(new GWT.UncaughtExceptionHandler() { @Override public void onUncaughtException(Throwable throwable) { Throwable tempThrowable = throwable; StringBuffer text = new StringBuffer("Uncaught exception: " +throwable.getMessage()); while (tempThrowable != null) { StackTraceElement[] stackTraceElements = tempThrowable.getStackTrace(); text.append(tempThrowable.toString() + "\n"); for (StackTraceElement element : stackTraceElements) { text.append( " at " + element + "\n"); } tempThrowable = tempThrowable.getCause(); if (tempThrowable != null) { text.append( "Caused by: " + tempThrowable.getCause()); } } ClientApplicationContext.getInstance().log("Uncaught exception: "+throwable.getMessage(), text.toString(), true, true, throwable); } }); } protected void moveWidgets() { try { DOM.setStyleAttribute(ClientApplicationContext.getInstance().getPi().getElement(), "left", "" + (Window.getClientWidth() - ClientApplicationContext.getInstance().getPi().getWidth())); if (ClientApplicationContext.getInstance().isMDI()){ if (ClientApplicationContext.getInstance().getDockMode().booleanValue()){ int dockWidth= ClientApplicationContext.getInstance().getDockPanel().getOffsetWidth(); DOM.setStyleAttribute( ClientApplicationContext.getInstance().getDockPanel().getElement(), "left", Window.getClientWidth()/2 - (dockWidth/2)+""); DOM.setStyleAttribute( ClientApplicationContext.getInstance().getDockPanel().getElement(), "top", "" + (Window.getClientHeight() - 80)); } else { DOM.setStyleAttribute(ClientApplicationContext.getInstance().getBottomMenuBar().getElement(), "left", "" + 0); DOM.setStyleAttribute(ClientApplicationContext.getInstance().getBottomMenuBar().getElement(), "top", "" + (Window.getClientHeight() - 25)); DOM.setStyleAttribute(ClientApplicationContext.getInstance().getHorizontalPanel().getElement(), "left", "" + 0); DOM.setStyleAttribute(ClientApplicationContext.getInstance().getHorizontalPanel().getElement(), "top", "" + (Window.getClientHeight() - 23)); } }else { SimplePanel mainPanel = ClientApplicationContext.getInstance().getMainPanel(); mainPanel.setWidth(Window.getClientWidth() + "px"); mainPanel.setHeight(Window.getClientHeight() + "px"); } } catch (Exception e) {} } private void buildUI() { RPCServiceAsync service = MainFactoryActions.createService(); AsyncCallback<?> callback = createMDICallback(); Map<String, String> parameters = ClientApplicationContext.getInstance().getParameters(); service.getMDIState(parameters, callback); } private static AsyncCallback<?> createMDICallback() { return new AsyncCallback<Object>() { @Override public void onFailure(Throwable caught) { ClientApplicationContext.getInstance().log("Setting up SDI/MDI mode failed", caught.getMessage(), true, true, caught); } @Override public void onSuccess(Object result) { if (result != null && result instanceof InitState) { InitState initState = (InitState)result; if (initState.getMdiMode().booleanValue()){ setupMDI(initState.getDockMode()); } else { setupSDI(); } }else { ClientApplicationContext.getInstance().log("Something went wrong when requesting information from the server"); setupMDI(Boolean.FALSE); } } }; } protected static void setupMDI(Boolean dockMode) { Window.enableScrolling(false); ClientApplicationContext.getInstance().setMode(ClientApplicationContext.MDI); ClientApplicationContext.getInstance().setDockMode(dockMode); RootPanel.get(rootPanelValue).add(buildMenu(), 0, 0); MainFactoryActions.processUIFromApplicationContext(); ClientApplicationContext.getInstance().setLogText("MDI Mode"); if (dockMode.booleanValue()){ Panel dockPanel = new HorizontalPanel(); ClientApplicationContext.getInstance().setDockPanel(dockPanel); RootPanel.get(rootPanelValue).add(dockPanel,Window.getClientWidth()/2,Window.getClientHeight()-80); } else { RootPanel.get(rootPanelValue).add(ClientApplicationContext.getInstance().getHorizontalPanel(), 0, Window.getClientHeight() - 23); ClientApplicationContext.getInstance().getBottomMenuBar().setWidth("100%"); ClientApplicationContext.getInstance().getBottomMenuBar().addItem(" ", new Command() { @Override public void execute() { } }); RootPanel.get(rootPanelValue).add(ClientApplicationContext.getInstance().getBottomMenuBar(), 0, Window.getClientHeight() - 25); } AbsolutePanel image = new AbsolutePanel(); image.addStyleName("imglogo"); RootPanel.get(rootPanelValue).add(image); RootPanel.get(rootPanelValue).add(ClientApplicationContext.getInstance().getPi(), Window.getClientWidth()-ClientApplicationContext.getInstance().getPi().getWidth(), 3); } protected static void setupSDI() { ClientApplicationContext.getInstance().setMode(ClientApplicationContext.SDI); // This will remove the horizontal scrollbar RootPanel.get(rootPanelValue).getElement().getStyle().setProperty("overflow-x", "hidden"); RootPanel.get(rootPanelValue).getElement().addClassName("SDIBody"); RootPanel.get(rootPanelValue).add(buildMenu(),0,0); MainFactoryActions.processUIFromApplicationContext(); ClientApplicationContext.getInstance().setLogText("SDI Mode"); RootPanel.get(rootPanelValue).add(ClientApplicationContext.getInstance().getPi(), Window.getClientWidth()-ClientApplicationContext.getInstance().getPi().getWidth(), 3); } private static MenuBar buildMenu() { menuBar = new QMenuBar(); menuBar.setAnimationEnabled(true); menuBar.setAutoOpen(true); menuBar.setWidth("100%"); menuBar.addStyleName("SDIMenu"); ClientApplicationContext.getInstance().setMainMenu(menuBar); return menuBar; } private void injectGeneratedCSS() { AsyncCallback<?> callback = createGenerateTypedCSSCallBack(); RPCServiceAsync service = MainFactoryActions.createService(); service.generateTypedCSS("gwt", null, callback); } private static AsyncCallback<?> createGenerateTypedCSSCallBack() { return new AsyncCallback<Object>() { @Override public void onFailure(Throwable caught) { ClientApplicationContext.getInstance().log("Getting generated CSS Failed", caught.getMessage(), true, true, caught); } @Override public void onSuccess(Object result) { if (result != null) { String generatedCss = (String) result; StyleInjector.injectAtEnd(generatedCss); } } }; } }