org.roda.wui.client.main.Main.java Source code

Java tutorial

Introduction

Here is the source code for org.roda.wui.client.main.Main.java

Source

/**
 * 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);
        }
    }
}