com.google.gwt.sample.logexample.client.HandlerController.java Source code

Java tutorial

Introduction

Here is the source code for com.google.gwt.sample.logexample.client.HandlerController.java

Source

/*
 * Copyright 2010 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.sample.logexample.client;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.logging.client.ConsoleLogHandler;
import com.google.gwt.logging.client.DevelopmentModeLogHandler;
import com.google.gwt.logging.client.FirebugLogHandler;
import com.google.gwt.logging.client.HasWidgetsLogHandler;
import com.google.gwt.logging.client.SimpleRemoteLogHandler;
import com.google.gwt.logging.client.SystemLogHandler;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.Panel;

import java.util.HashMap;
import java.util.Map;
import java.util.logging.Handler;
import java.util.logging.Logger;

/**
 * A section allowing the user to enable and disable the different handlers
 * attached to the Root Logger.
 */
public class HandlerController {
    private class CheckboxHandler implements ValueChangeHandler<Boolean> {
        private CheckBox checkbox;
        private Handler handler;

        public CheckboxHandler(CheckBox checkbox, Handler handler) {
            this.checkbox = checkbox;
            this.handler = handler;
        }

        public void onValueChange(ValueChangeEvent<Boolean> event) {
            if (checkbox.getValue()) {
                logger.addHandler(handler);
            } else {
                logger.removeHandler(handler);
            }
        }
    }

    interface MyUiBinder extends UiBinder<HTMLPanel, HandlerController> {
    }

    private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
    @UiField
    CheckBox consoleCheckbox;
    @UiField
    CheckBox devmodeCheckbox;
    @UiField
    CheckBox firebugCheckbox;
    @UiField
    CheckBox popupCheckbox;
    @UiField
    CheckBox systemCheckbox;
    @UiField
    CheckBox remoteCheckbox;
    private Map<String, Handler> handlers;
    private Logger logger;
    private Panel panel;

    public HandlerController(final Logger logger) {
        this.logger = logger;
        panel = uiBinder.createAndBindUi(this);
        Handler[] handlersArray = logger.getHandlers();
        handlers = new HashMap<String, Handler>();
        if (handlersArray != null) {
            for (Handler h : handlersArray) {
                handlers.put(h.getClass().getName(), h);
            }
        }
        setupHandler(SystemLogHandler.class, systemCheckbox);
        setupHandler(ConsoleLogHandler.class, consoleCheckbox);
        setupHandler(DevelopmentModeLogHandler.class, devmodeCheckbox);
        setupHandler(FirebugLogHandler.class, firebugCheckbox);
        setupHandler(HasWidgetsLogHandler.class, popupCheckbox);
        setupHandler(SimpleRemoteLogHandler.class, remoteCheckbox);
    }

    public Panel getPanel() {
        return panel;
    }

    void setupHandler(Class clazz, CheckBox checkbox) {
        Handler h = handlers.get(clazz.getName());
        if (h == null) {
            checkbox.setEnabled(false);
        } else {
            checkbox.setValue(true);
            checkbox.addValueChangeHandler(new CheckboxHandler(checkbox, h));
        }
    }
}