de.fhg.igd.mapviewer.server.file.PropertiesConverterFactory.java Source code

Java tutorial

Introduction

Here is the source code for de.fhg.igd.mapviewer.server.file.PropertiesConverterFactory.java

Source

/*
 * Copyright (c) 2016 Fraunhofer IGD
 * 
 * All rights reserved. This program and the accompanying materials are made
 * available under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation, either version 3 of the License,
 * or (at your option) any later version.
 * 
 * You should have received a copy of the GNU Lesser General Public License
 * along with this distribution. If not, see <http://www.gnu.org/licenses/>.
 * 
 * Contributors:
 *     Fraunhofer IGD <http://www.igd.fraunhofer.de/>
 */
package de.fhg.igd.mapviewer.server.file;

import java.lang.reflect.Constructor;
import java.util.Properties;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jdesktop.swingx.mapviewer.PixelConverter;
import org.jdesktop.swingx.mapviewer.TileProvider;

/**
 * Factory for {@link PixelConverter} that can be configured with a
 * {@link Properties} object
 *
 * @author <a href="mailto:simon.templer@igd.fhg.de">Simon Templer</a>
 *
 * @version $Id$
 */
public abstract class PropertiesConverterFactory {

    private static final Log log = LogFactory.getLog(PropertiesConverterFactory.class);

    /** converter class property name */
    public static final String PROP_CONVERTER_CLASS = "converterClass"; //$NON-NLS-1$

    /**
     * Creates a {@link PixelConverter} for the given {@link TileProvider} from
     * the given properties
     * 
     * @param properties the properties that specify the {@link PixelConverter}
     * @param tileProvider the {@link TileProvider} for to be associated with
     *            the {@link PixelConverter}
     * 
     * @return a {@link PixelConverter} or null if the properties didn't specify
     *         a valid converter
     */
    @SuppressWarnings("unchecked")
    public static PixelConverter createConverter(Properties properties, TileProvider tileProvider) {
        String className = properties.getProperty(PROP_CONVERTER_CLASS);

        if (className == null) {
            log.error("Didn't find " + PROP_CONVERTER_CLASS + " property"); //$NON-NLS-1$ //$NON-NLS-2$
            return null;
        } else {
            Class<?> converterClass;
            try {
                converterClass = Class.forName(className);

                Constructor<? extends PixelConverter> constructor;

                // try Properties/TileProvider constructor
                try {
                    constructor = (Constructor<? extends PixelConverter>) converterClass
                            .getConstructor(Properties.class, TileProvider.class);
                    log.info("Found converter constructor with Properties and TileProvider arguments"); //$NON-NLS-1$
                    return constructor.newInstance(properties, tileProvider);
                } catch (Throwable e) {
                    // ignoring
                }

                // try TileProvider/Properties constructor
                try {
                    constructor = (Constructor<? extends PixelConverter>) converterClass
                            .getConstructor(TileProvider.class, Properties.class);
                    log.info("Found converter constructor with TileProvider and Properties arguments"); //$NON-NLS-1$
                    return constructor.newInstance(tileProvider, properties);
                } catch (Throwable e) {
                    // ignoring
                }

                // try Properties constructor
                try {
                    constructor = (Constructor<? extends PixelConverter>) converterClass
                            .getConstructor(Properties.class);
                    log.info("Found converter constructor with Properties argument"); //$NON-NLS-1$
                    return constructor.newInstance(properties);
                } catch (Throwable e) {
                    // ignoring
                }

                // try TileProvider constructor
                try {
                    constructor = (Constructor<? extends PixelConverter>) converterClass
                            .getConstructor(TileProvider.class);
                    log.info("Found converter constructor with TileProvider argument"); //$NON-NLS-1$
                    return constructor.newInstance(tileProvider);
                } catch (Throwable e) {
                    // ignoring
                }

                // try Default constructor
                try {
                    constructor = (Constructor<? extends PixelConverter>) converterClass.getConstructor();
                    log.info("Found converter default constructor"); //$NON-NLS-1$
                    return constructor.newInstance();
                } catch (Throwable e) {
                    // ignoring
                }

                log.warn("Found no supported constructor: " + className); //$NON-NLS-1$
            } catch (ClassNotFoundException e) {
                log.error("Converter class not found", e); //$NON-NLS-1$
            }
        }

        return null;
    }

}