com.google.gwt.gen2.demo.logging.client.LoggingDemo.java Source code

Java tutorial

Introduction

Here is the source code for com.google.gwt.gen2.demo.logging.client.LoggingDemo.java

Source

/*******************************************************************************
 * Copyright 2008 Google Inc.
 * 
 * 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.google.gwt.gen2.demo.logging.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.gen2.logging.handler.client.GroupedLogHandler;
import com.google.gwt.gen2.logging.handler.client.PopupLogHandler;
import com.google.gwt.gen2.logging.handler.client.RemoteLogHandler;
import com.google.gwt.gen2.logging.handler.client.SimpleLogHandler;
import com.google.gwt.gen2.logging.shared.Level;
import com.google.gwt.gen2.logging.shared.Log;
import com.google.gwt.gen2.logging.shared.LogFormatter;
import com.google.gwt.gen2.logging.shared.LogHandler;
import com.google.gwt.gen2.logging.shared.SmartLogHandler;
import com.google.gwt.gen2.selection.client.DropDownListBox;
import com.google.gwt.gen2.widgetbase.client.Gen2CssInjector;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;

import java.util.Iterator;

/**
 * Entry point classes define <code>onModuleLoad()</code>.
 */
public class LoggingDemo implements EntryPoint {
    class HandlerConfig extends FlowPanel {
        HandlerConfig(final String title, final SmartLogHandler handler) {
            Log.addLogHandler(handler);
            setStyleName("handler-control");

            add(new HTML("<h3>" + title + "</h3>"));

            final DropDownListBox<Level> levelList = new DropDownListBox<Level>("");
            Iterator<Level> levels = Log.levelIterator();
            while (levels.hasNext()) {
                final Level level = levels.next();
                levelList.addItem(level.getName(), level, "logging level " + level.getName().toLowerCase(),
                        "handler level: <b> " + level.getName() + "</b>");
            }
            levelList.setValue(Level.OFF);
            handler.setLevel(Level.OFF);

            levelList.addValueChangeHandler(new ValueChangeHandler<Level>() {
                public void onValueChange(ValueChangeEvent<Level> event) {
                    handler.setLevel(levelList.getValue());
                    Log.finest("Setting " + title + " to level " + levelList.getValue(), Log.CATEGORY);
                }
            });
            add(levelList);
        }
    }

    static String myCategory = "com.google.gwt.gen2.demo.logging.client.LoggingDemo";

    boolean b = true;

    int messageNumber = 1;

    int exceptionCount = 0;

    int popupTop = 200;

    int popupLeft = 200;

    /**
     * This is the entry point method.
     */
    public void onModuleLoad() {
        if (Log.isLoggingSupported() && !Log.isLoggingMinimal()) {
            Gen2CssInjector.addLogHandlerDefault();
            Log.setDefaultLevel(Level.ALL);

            final FlexTable control = new FlexTable();
            RootPanel.get().add(control);
            addLevelControls(control);
            addHandlers(control);
        } else {
            Window.alert("Now that you have logging turned off or to minimal, now check your compiled output.");
            Log.warning("Should be compiled out when logging is turned off or in minimal mode");
            Log.severe("Should be compiled out when logging is turned off, but present in minimal mode");
        }
    }

    private void addHandlers(final FlexTable control) {
        int pos = 0;

        // Smart text log handler.
        SmartLogHandler textHandler = new SmartLogHandler() {
            @Override
            protected void ensureLogHandler() {
                setLogHandler(asPopup(new SimpleLogHandler(LogFormatter.TEXT)));
            }
        };
        control.setWidget(pos, 0, new HandlerConfig("Text panel", textHandler));
        ++pos;

        // Smart html log handler.
        SmartLogHandler htmlHandler = new SmartLogHandler() {
            @Override
            protected void ensureLogHandler() {
                setLogHandler(asPopup(new SimpleLogHandler()));
            }
        };
        control.setWidget(pos, 0, new HandlerConfig("Html panel", htmlHandler));
        ++pos;

        // Tree based log handler.
        SmartLogHandler treeHandler = new SmartLogHandler() {
            @Override
            protected void ensureLogHandler() {
                setLogHandler(asPopup(new GroupedLogHandler()));
            }
        };
        control.setWidget(pos, 0, new HandlerConfig("Grouped panel", treeHandler));
        ++pos;

        // Remote logger.
        SmartLogHandler remoteHandler = new SmartLogHandler() {
            @Override
            protected void ensureLogHandler() {
                setLogHandler(new RemoteLogHandler());
                // Grouped panel is longer then the others.
                popupLeft += 100;
            }
        };
        control.setWidget(pos, 0, new HandlerConfig("Remote logging", remoteHandler));
        ++pos;
    }

    private void addLevelControls(final FlexTable control) {
        final TextBox box = new TextBox();
        box.setText("message 0");
        VerticalPanel loggingMessage = new VerticalPanel();
        loggingMessage.add(new Label("Message to log"));
        loggingMessage.add(box);
        control.setWidget(0, 1, loggingMessage);
        Iterator<Level> levels = Log.levelIterator();
        final DropDownListBox<Level> levelList = new DropDownListBox<Level>();

        while (levels.hasNext()) {
            final Level level = levels.next();
            if (level != Level.ALL || level != Level.OFF) {
                levelList.addItem(level.getName(), level, "logging level " + level.getName().toLowerCase(),
                        "use <b> " + level.getName().toLowerCase() + "</b> level");
            }
        }
        control.setWidget(0, 2, levelList);
        levelList.setValue(Level.INFO);

        Button log = new Button("Log message", new ClickListener() {
            public void onClick(Widget sender) {

                Log.log(box.getText(), levelList.getValue(), "user", null);
                box.setText("message " + messageNumber++);
            }
        });

        control.setWidget(0, 3, log);

        Button error = new Button("Log error", new ClickListener() {
            public void onClick(Widget sender) {

                Log.log(box.getText(), levelList.getValue(), "user.error", new NullPointerException());
                box.setText("message " + messageNumber++);
            }
        });

        control.setWidget(0, 4, error);
    }

    private <Handler extends Widget & LogHandler> PopupLogHandler asPopup(Handler handler) {
        PopupLogHandler popup = new PopupLogHandler(handler);
        popup.setPopupPosition(popupLeft, popupTop);
        popupLeft += 100;
        return popup;
    }

}