net.krotscheck.jersey2.configuration.Jersey2ToolkitConfig.java Source code

Java tutorial

Introduction

Here is the source code for net.krotscheck.jersey2.configuration.Jersey2ToolkitConfig.java

Source

/*
 * Copyright (c) 2014 Michael Krotscheck
 *
 * 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 net.krotscheck.jersey2.configuration;

import net.krotscheck.util.ResourceUtil;
import org.apache.commons.configuration.CompositeConfiguration;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.MapConfiguration;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.commons.configuration.SystemConfiguration;
import org.glassfish.hk2.utilities.binding.AbstractBinder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.util.HashMap;
import javax.inject.Singleton;

/**
 * The toolkit configuration object.
 */
public final class Jersey2ToolkitConfig extends CompositeConfiguration {

    /**
     * Logger instance.
     */
    private static Logger logger = LoggerFactory.getLogger(Jersey2ToolkitConfig.class);

    /**
     * Create an instance of the configuration provider.
     */
    public Jersey2ToolkitConfig() {
        logger.debug("Add version configuration");
        addConfiguration(buildVersionConfig());
        logger.debug("Adding system configuration");
        addConfiguration(new SystemConfiguration());
        logger.debug("Adding jersey2-toolkit configuration");
        addConfiguration(buildToolkitConfig());
    }

    /**
     * Creates a configuration object that contains the current version of the
     * jersey2-toolkit library in use.
     *
     * @return A configuration instance with jersey2-toolkit.version set.
     */
    private Configuration buildVersionConfig() {

        // Inject the library version
        String jersey2ToolkitVersion = Jersey2ToolkitConfig.class.getPackage().getImplementationVersion();

        HashMap<String, Object> versionConfigMap = new HashMap<>();
        versionConfigMap.put("jersey2-toolkit.version", jersey2ToolkitVersion);

        return new MapConfiguration(versionConfigMap);
    }

    /**
     * Builds the configuration object for our toolkit config.
     *
     * @return A Configuration object.
     */
    private Configuration buildToolkitConfig() {

        // The toolkit configuration file.
        try {
            File configFile = ResourceUtil.getFileForResource("jersey2-toolkit.properties");
            return new PropertiesConfiguration(configFile);
        } catch (ConfigurationException ce) {
            logger.error("jersey2-toolkit.properties not readable," + " some features may be misconfigured.");

            // Return a new, empty map configuration so we don't error out.
            return new MapConfiguration(new HashMap<String, String>());
        }
    }

    /**
     * HK2 Binder for our injector context.
     */
    public static final class Binder extends AbstractBinder {

        @Override
        protected void configure() {
            bind(Jersey2ToolkitConfig.class).to(Jersey2ToolkitConfig.class).to(Configuration.class)
                    .named("jersey2-toolkit").in(Singleton.class);
        }
    }
}