/******************************************************************************* * Copyright (c) 2011, 2016 Eurotech and/or its affiliates * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Eurotech *******************************************************************************/ package org.eclipse.kura.web.client; import java.util.Date; import java.util.List; import org.eclipse.kura.web.client.messages.Messages; import org.eclipse.kura.web.client.util.FailureHandler; import org.eclipse.kura.web.shared.model.GwtGroupedNVPair; import org.eclipse.kura.web.shared.model.GwtSession; import org.eclipse.kura.web.shared.model.GwtXSRFToken; import org.eclipse.kura.web.shared.service.GwtDeviceService; import org.eclipse.kura.web.shared.service.GwtDeviceServiceAsync; import org.eclipse.kura.web.shared.service.GwtSecurityService; import org.eclipse.kura.web.shared.service.GwtSecurityServiceAsync; import org.eclipse.kura.web.shared.service.GwtSecurityTokenService; import org.eclipse.kura.web.shared.service.GwtSecurityTokenServiceAsync; import org.eclipse.kura.web.shared.service.GwtStatusService; import org.eclipse.kura.web.shared.service.GwtStatusServiceAsync; import com.allen_sauer.gwt.log.client.Log; import com.extjs.gxt.ui.client.GXT; import com.extjs.gxt.ui.client.Style.HorizontalAlignment; import com.extjs.gxt.ui.client.Style.LayoutRegion; import com.extjs.gxt.ui.client.data.ListLoadResult; import com.extjs.gxt.ui.client.util.Margins; import com.extjs.gxt.ui.client.util.Theme; import com.extjs.gxt.ui.client.widget.ContentPanel; import com.extjs.gxt.ui.client.widget.HorizontalPanel; import com.extjs.gxt.ui.client.widget.Info; import com.extjs.gxt.ui.client.widget.Viewport; import com.extjs.gxt.ui.client.widget.layout.BorderLayout; import com.extjs.gxt.ui.client.widget.layout.BorderLayoutData; import com.extjs.gxt.ui.client.widget.layout.FitLayout; import com.extjs.gxt.ui.client.widget.layout.TableData; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.Scheduler; import com.google.gwt.core.client.Scheduler.ScheduledCommand; import com.google.gwt.core.client.ScriptInjector; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.RootPanel; /** * Entry point classes define <code>onModuleLoad()</code>. */ public class denali implements EntryPoint { private static final Messages MSGS = GWT.create(Messages.class); //private final boolean VIEW_LOG = true; private final GwtStatusServiceAsync gwtStatusService = GWT.create(GwtStatusService.class); private final GwtSecurityTokenServiceAsync gwtXSRFService = GWT.create(GwtSecurityTokenService.class); private final GwtDeviceServiceAsync gwtDeviceService = GWT.create(GwtDeviceService.class); private final GwtSecurityServiceAsync gwtSecurityService = GWT.create(GwtSecurityService.class); private boolean isDevelopMode = false; private boolean m_connected; /** * Note, we defer all application initialization code to * {@link #onModuleLoad2()} so that the UncaughtExceptionHandler can catch * any unexpected exceptions. */ public void onModuleLoad() { /* * Install an UncaughtExceptionHandler which will produce <code>FATAL</code> log messages */ Log.setUncaughtExceptionHandler(); /* // Disable the web UI log view unless VIEW_LOG is set to true if (!VIEW_LOG) { Widget divLogger = Log.getLogger(DivLogger.class).getWidget(); divLogger.setVisible(false); } */ // use deferred command to catch initialization exceptions in // onModuleLoad2 Scheduler.get().scheduleDeferred(new ScheduledCommand() { public void execute() { onModuleLoad2(); } }); } /** * This is the 'real' entry point method. */ public void onModuleLoad2() { // set the default theme GXT.setDefaultTheme(Theme.GRAY, true); // load custom CSS/JS loadCss("denali/skin/skin.css"); ScriptInjector.fromUrl("skin/skin.js?v=1").inject(); // Make sure this request is not cached gwtXSRFService.generateSecurityToken(new AsyncCallback<GwtXSRFToken> () { @Override public void onFailure(Throwable ex) { FailureHandler.handle(ex); } @Override public void onSuccess(GwtXSRFToken token) { gwtDeviceService.findSystemProperties(token, new AsyncCallback<ListLoadResult<GwtGroupedNVPair>>() { public void onSuccess(ListLoadResult<GwtGroupedNVPair> results) { final GwtSession gwtSession = new GwtSession(); if (results != null) { List<GwtGroupedNVPair> pairs = results.getData(); if (pairs != null) { for (GwtGroupedNVPair pair : pairs) { String name = pair.getName(); if (name != null && name.equals("kura.have.net.admin")) { Boolean value = Boolean.valueOf(pair.getValue()); gwtSession.setNetAdminAvailable(value); } if (name != null && name.equals("kura.version")) { gwtSession.setKuraVersion(pair.getValue()); } if (name != null && name.equals("kura.os.version")) { gwtSession.setOsVersion(pair.getValue()); } } } } gwtXSRFService.generateSecurityToken(new AsyncCallback<GwtXSRFToken> () { @Override public void onFailure(Throwable ex) { FailureHandler.handle(ex); } @Override public void onSuccess(GwtXSRFToken token) { gwtStatusService.getDeviceConfig(token, gwtSession.isNetAdminAvailable(), new AsyncCallback<ListLoadResult<GwtGroupedNVPair>>() { public void onFailure(Throwable caught) { FailureHandler.handle(caught); } public void onSuccess(ListLoadResult<GwtGroupedNVPair> pairs) { List<GwtGroupedNVPair> results = pairs.getData(); for (GwtGroupedNVPair result : results) { if ("Connection Status".equals(result.getName())) { if ("CONNECTED".equals(result.getValue())) { m_connected = true; } else { m_connected = false; } } } gwtSecurityService.isDebugMode(new AsyncCallback<Boolean>() { public void onFailure(Throwable caught) { Info.display("Bad", "Is debug mode error"); render(gwtSession); } public void onSuccess(Boolean result) { if(result){ isDevelopMode= true; } render(gwtSession); } }); } }); }}); } public void onFailure(Throwable caught) { FailureHandler.handle(caught); render( new GwtSession()); } }); }}); } private static native void loadCss(String url) /*-{ var l = $doc.createElement("link"); l.setAttribute("id", url); l.setAttribute("rel", "stylesheet"); l.setAttribute("type", "text/css"); l.setAttribute("href", url + "?v=1"); // Make sure this request is not cached $doc.getElementsByTagName("head")[0].appendChild(l); }-*/; private void render(GwtSession gwtSession) { Log.debug("Beginning page render"); final Viewport viewport = new Viewport(); final BorderLayout borderLayout = new BorderLayout(); viewport.setLayout(borderLayout); viewport.setStyleAttribute("padding", "5px"); // // north BorderLayoutData northData = new BorderLayoutData(LayoutRegion.NORTH, 52); northData.setCollapsible(false); northData.setFloatable(false); northData.setHideCollapseTool(false); northData.setSplit(false); northData.setMargins(new Margins(0, 0, 5, 0)); viewport.add(new NorthView(gwtSession), northData); // // center BorderLayoutData centerData = new BorderLayoutData(LayoutRegion.CENTER); centerData.setMargins(new Margins(0)); ContentPanel center = new ContentPanel(); center.setLayout(new FitLayout()); center.setBorders(false); center.setBodyBorder(false); center.setId("center-panel-wrapper"); viewport.add(center, centerData); // // west BorderLayoutData westData = new BorderLayoutData(LayoutRegion.WEST, 180); westData.setSplit(true); westData.setCollapsible(true); westData.setMargins(new Margins(0,5,0,0)); WestNavigationView westView = new WestNavigationView(gwtSession, center, m_connected); viewport.add(westView, westData); // // south BorderLayoutData southData = new BorderLayoutData(LayoutRegion.SOUTH, 18); southData.setCollapsible(false); southData.setFloatable(false); southData.setHideCollapseTool(false); southData.setSplit(false); southData.setMargins(new Margins(3, 5, 0, 0)); final HorizontalPanel south = new HorizontalPanel(); south.setTableWidth("100%"); south.setId("south-panel-wrapper"); Date now = new Date(); @SuppressWarnings("deprecation") int year = now.getYear() + 1900; Label copyright = new Label(MSGS.copyright(String.valueOf(year))); copyright.setStyleName("x-form-label"); TableData td = new TableData(); td.setHorizontalAlign(HorizontalAlignment.LEFT); south.add(copyright, td); final Label developmentMode = new Label(MSGS.developmentMode()); developmentMode.setStyleName("x-form-label"); developmentMode.getElement().getStyle().setColor("red"); final TableData tdExecMode = new TableData(); tdExecMode.setHorizontalAlign(HorizontalAlignment.LEFT); if(isDevelopMode){ south.add(developmentMode, tdExecMode); } Label version = new Label(gwtSession.getKuraVersion()); version.setStyleName("x-form-label"); TableData tdVersion = new TableData(); tdVersion.setHorizontalAlign(HorizontalAlignment.RIGHT); south.add(version, tdVersion); viewport.add(south, southData); // // Initial Selection // center.setIconAbstractImagePrototype.create(Resources.INSTANCE.alerts())); // center.setHeading(MSGS.announcements()); // center.removeAll(); // center.add(new Overview(currentSession)); // center.layout(); // // RootPanel RootPanel.get().add(viewport); } }