org.ebayopensource.turmeric.plugins.maven.utils.LegacyProperties.java Source code

Java tutorial

Introduction

Here is the source code for org.ebayopensource.turmeric.plugins.maven.utils.LegacyProperties.java

Source

/*******************************************************************************
 * Copyright (c) 2006-2010 eBay Inc. All Rights Reserved.
 * 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
 *******************************************************************************/
package org.ebayopensource.turmeric.plugins.maven.utils;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;

import org.apache.commons.io.IOUtils;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.project.MavenProject;

/**
 * Representation of Legacy Properties.
 * <p>
 * The properties from both a properties file, and a project.properties
 * are loaded and tracked separately (for logging purposes).
 * <p>
 * NOTE: Do not use LegacyProperties from within standard maven flows!
 */
public class LegacyProperties {
    private Log log;
    private Properties projectProps;
    private Properties legacyFileProps;
    private File legacyPropertiesFile;

    /**
     * Create a LegacyProperties object for dealing with Legacy Properties.
     * 
     * @param log
     *            the log to write to
     * @param project
     *            the maven project to get maven properties from
     * @param legacyPropertiesFile
     *            the (potential) legacy properties file to load from. if this file does not exist, no properties are
     *            loaded, and no exception is thrown.
     * @throws MojoFailureException
     *             if the legacyPropertiesFile exists, but there is a problem reading / parsing / loading the properties
     *             from the file.
     */
    public LegacyProperties(Log log, MavenProject project, File legacyPropertiesFile) throws MojoFailureException {
        this.log = log;
        this.legacyPropertiesFile = legacyPropertiesFile;

        projectProps = project.getProperties();
        if (projectProps == null) {
            projectProps = new Properties();
        }

        if (legacyPropertiesFile.exists()) {
            FileReader reader = null;
            try {
                reader = new FileReader(legacyPropertiesFile);
                legacyFileProps = new Properties();
                legacyFileProps.load(reader);
            } catch (IOException e) {
                throw new MojoFailureException("Unable to load properties file: " + legacyPropertiesFile, e);
            } finally {
                IOUtils.closeQuietly(reader);
            }
        }
    }

    /**
     * Asserts that the required legacyPropertiesFile exists.
     * 
     * @throws MojoFailureException
     *             if unable to find the legacy properties file
     */
    public void assertLegacyFileRequired() throws MojoFailureException {
        if (legacyPropertiesFile.exists() == false) {
            throw new MojoFailureException("Missing Required Legacy File: " + legacyPropertiesFile);
        }
    }

    /**
     * Get a property.
     * <p>
     * Search order is: Project Properties, then Legacy File Properties, finally Default Value.
     * 
     * @param key
     *            the property key to look for
     * @param defaultValue
     *            the default value to return if not found in the primary two properties sources.
     * @return the value
     */
    public String getProperty(String key, String defaultValue) {
        String ret = projectProps.getProperty(key);
        if (ret != null) {
            log.debug("[LEGACY] Using project property value [" + key + "]: \"" + ret + "\"");
            return ret;
        }

        ret = legacyFileProps.getProperty(key);
        if (ret != null) {
            log.debug("[LEGACY] Using file property value [" + key + "]: \"" + ret + "\"");
            return ret;
        }

        log.debug("[LEGACY] Property not found, using default [" + key + "]: \"" + defaultValue + "\"");
        return defaultValue;
    }

    public boolean exists() {
        return legacyPropertiesFile.exists();
    }
}