org.mypsycho.swing.app.ResourceManager.java Source code

Java tutorial

Introduction

Here is the source code for org.mypsycho.swing.app.ResourceManager.java

Source

/*
 * Copyright (C) 2011 Peransin Nicolas.
 * Use is subject to license terms.
 */
package org.mypsycho.swing.app;

import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.util.Locale;
import java.util.logging.Level;

import javax.swing.JFrame;

import org.apache.commons.beanutils.NestedNullException;
import org.mypsycho.beans.DescriptorExtension;
import org.mypsycho.beans.Injector;
import org.mypsycho.swing.app.beans.ActionMapExtension;
import org.mypsycho.swing.app.reflect.ActionConverter;
import org.mypsycho.swing.app.reflect.BorderConverter;
import org.mypsycho.swing.app.reflect.ClientComponentProperty;
import org.mypsycho.swing.app.reflect.ComponentBoundsProperty;
import org.mypsycho.swing.app.reflect.ComponentCollection;
import org.mypsycho.swing.app.reflect.ComponentPopupProperty;
import org.mypsycho.swing.app.reflect.ComponentProperty;
import org.mypsycho.swing.app.reflect.DerivedFontConverter;
import org.mypsycho.swing.app.reflect.DialogPaneProperty;
import org.mypsycho.swing.app.reflect.MenuConverter;
import org.mypsycho.swing.app.reflect.MnemonicProperty;
import org.mypsycho.swing.app.reflect.ResourceConverter;
import org.mypsycho.swing.app.reflect.TableColumnsProperty;
import org.mypsycho.swing.app.reflect.TableHeaderProperty;
import org.mypsycho.swing.app.reflect.UiConverter;
import org.mypsycho.swing.app.reflect.WindowIconProperty;

/**
 * Class for ...
 * <p>Details</p>
 *
 * @author Peransin Nicolas
 *
 */
public class ResourceManager extends Injector {

    public final UtilsListener defaultListener = new UtilsListener() {

        @Override
        public void handle(Object event, String detail, Throwable t) {
            // trim usual case
            Level lvl = (t instanceof NestedNullException) ? Level.CONFIG : Level.INFO;
            getApplication().exceptionThrown(lvl, "resourceManager:" + event, detail, t);
        }
    };

    final ApplicationContext context;

    public ResourceManager(ApplicationContext parent) {

        context = parent;

        // type converter
        register(new MenuConverter());
        register(new UiConverter());
        register(new ResourceConverter());
        register(new ActionConverter());
        register(new BorderConverter(getConverter()));
        register(new DerivedFontConverter());

        // collection
        register(new ComponentCollection());
        register(new ActionMapExtension());

        // property
        try {
            register(new ComponentPopupProperty());
            register(new ComponentBoundsProperty());
            register(new WindowIconProperty());
            register(new ComponentProperty());
            register(new MnemonicProperty.Action());
            register(new MnemonicProperty.Button());
            register(new MnemonicProperty.Label());
            register(new MnemonicProperty.Menu());
            register(new TableHeaderProperty());
            register(new TableColumnsProperty());
            // By default, JFrame expose a property 'JMenuBar' not jMenuBar
            // We register a more convenient name (Note: Frame.menuBar is no more accessible)
            register(new DescriptorExtension(JFrame.class, "menuBar",
                    new PropertyDescriptor("JMenuBar", JFrame.class)));

            register(ClientComponentProperty.createComponentInstance());
            register(ClientComponentProperty.createWindowInstance());
            register(new DialogPaneProperty());

        } catch (IntrospectionException e) {
            throw new RuntimeException(e);
        }

        register(defaultListener);
    }

    /*
     * (non-Javadoc)
     *
     * @see com.psycho.beans.Injector#getLocale()
     */
    @Override
    public Locale getLocale() {
        return getApplication().getLocale();
    }

    /**
     * Returns the context.
     *
     * @return the context
     */
    public ApplicationContext getContext() {
        return context;
    }

    public Application getApplication() {
        return getContext().getApplication();
    }
}