/** * The contents of this file are subject to the license and copyright * detailed in the LICENSE file at the root of the source * tree and available online at * * https://github.com/keeps/roda */ /** * */ package org.roda.wui.client.main; import java.util.List; import org.roda.wui.client.browse.BrowserService; import org.roda.wui.client.common.utils.JavascriptUtils; import org.roda.wui.client.welcome.Welcome; import org.roda.wui.common.client.ClientLogger; import org.roda.wui.common.client.tools.DescriptionLevelUtils; import org.roda.wui.common.client.tools.HistoryUtils; import org.roda.wui.common.client.widgets.HTMLWidgetWrapper; import org.roda.wui.common.client.widgets.wcag.AccessibleFocusPanel; 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.dom.client.Element; import com.google.gwt.dom.client.NodeList; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.History; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.Widget; import config.i18n.client.ClientMessages; /** * @author Luis Faria * */ public class Main extends Composite implements EntryPoint { private ClientLogger logger = new ClientLogger(getClass().getName()); private static ClientMessages messages = (ClientMessages) GWT.create(ClientMessages.class); @Override public void onModuleLoad() { // Set uncaught exception handler ClientLogger.setUncaughtExceptionHandler(); // Remove loading image RootPanel.getBodyElement().removeChild(DOM.getElementById("loading")); NodeList<Element> bodyChilds = RootPanel.getBodyElement().getElementsByTagName("iframe"); for (int i = 0; i < bodyChilds.getLength(); i++) { Element bodyChild = bodyChilds.getItem(i); if (!bodyChild.hasAttribute("title")) { bodyChild.setAttribute("title", "iframe_title"); } } // Add main widget to root panel RootPanel.get().add(this); RootPanel.get().add(footer); RootPanel.get().addStyleName("roda"); // deferred call to init Scheduler.get().scheduleDeferred(new Command() { @Override public void execute() { DescriptionLevelUtils.load(new AsyncCallback<Void>() { @Override public void onFailure(Throwable caught) { logger.error("Failed loading initial data", caught); } @Override public void onSuccess(Void result) { init(); } }); } }); BrowserService.Util.getInstance().isCookiesMessageActive(new AsyncCallback<Boolean>() { @Override public void onSuccess(Boolean result) { if (result) { JavascriptUtils.setCookieOptions(messages.cookiesMessage(), messages.cookiesDismisse(), messages.cookiesLearnMore(), "#" + Theme.RESOLVER.getHistoryToken() + "/CookiesPolicy.html"); } } @Override public void onFailure(Throwable caught) { logger.error("Error checking if cookies message is active!!", caught); } }); } interface Binder extends UiBinder<Widget, Main> { } @UiField AccessibleFocusPanel homeLinkArea; @UiField FlowPanel bannerLogo; @UiField(provided = true) Menu menu; @UiField(provided = true) ContentPanel contentPanel; Composite footer; /** * Create a new main */ public Main() { menu = new Menu(); contentPanel = ContentPanel.getInstance(); footer = new Footer(); Binder uiBinder = GWT.create(Binder.class); initWidget(uiBinder.createAndBindUi(this)); } /** * Initialize */ public void init() { contentPanel.init(); onHistoryChanged(History.getToken()); History.addValueChangeHandler(new ValueChangeHandler<String>() { @Override public void onValueChange(ValueChangeEvent<String> event) { onHistoryChanged(event.getValue()); } }); bannerLogo.add(new HTMLWidgetWrapper("Banner.html")); homeLinkArea.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { HistoryUtils.newHistory(Welcome.RESOLVER); } }); homeLinkArea.setTitle(messages.homeTitle()); } private void onHistoryChanged(String historyToken) { if (historyToken.length() == 0) { contentPanel.update(Welcome.RESOLVER.getHistoryPath()); HistoryUtils.newHistory(Welcome.RESOLVER); } else { List<String> currentHistoryPath = HistoryUtils.getCurrentHistoryPath(); contentPanel.update(currentHistoryPath); GAnalyticsTracker.track(historyToken); } } }