RTRConfig.java
/*
* Copyright (C) 2016 Ronald Jack Jenkins Jr.
*
* 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 info.ronjenkins.maven.rtr;
import org.apache.commons.lang.BooleanUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.project.MavenProject;
/**
* Configuration parser/constants for the Smart Reactor.
*
* @author Ronald Jack Jenkins Jr.
*/
public final class RTRConfig {
public static final String PROP_DISABLED = "rtr.disabled";
public static final boolean DEFAULT_DISABLED = false;
public static final String PROP_SINGLE_POM_REACTOR_ALLOWED = "rtr.allowSinglePomReactor";
public static final boolean DEFAULT_SINGLE_POM_REACTOR_ALLOWED = false;
public static final String PROP_EXTERNAL_SNAPSHOTS_ALLOWED = "rtr.allowExternalSnapshots";
public static final boolean DEFAULT_EXTERNAL_SNAPSHOTS_ALLOWED = false;
public static final String PROP_RELEASE = "rtr.release";
public static final boolean DEFAULT_RELEASE = false;
public static final String PROP_ADDSCHEMA = "addSchema";
public static final boolean DEFAULT_ADDSCHEMA = true;
public static final String PROP_ALLOWTIMESTAMPEDSNAPSHOTS = "allowTimestampedSnapshots";
public static final boolean DEFAULT_ALLOWTIMESTAMPEDSNAPSHOTS = false;
public static final String PROP_AUTOVERSIONSUBMODULES = "autoVersionSubmodules";
public static final boolean DEFAULT_AUTOVERSIONSUBMODULES = false;
public static final String PROP_PROJECTVERSIONPOLICYID = "projectVersionPolicyId";
public static final String DEFAULT_PROJECTVERSIONPOLICYID = "default";
public static final String PROP_RELEASEVERSION = "releaseVersion";
public static final String PROP_TAG = "tag";
public static final String PROP_TAGBASE = "tagBase";
public static final String PROP_TAGNAMEFORMAT = "tagNameFormat";
private static void checkParameters(final MavenSession session,
final MavenProject project) {
if (session == null && project == null) {
throw new NullPointerException("session and project cannot both be null");
}
}
private static boolean getFlag(final String prop, final boolean defaultValue,
final MavenSession session, final MavenProject project) {
final String rawValue = RTRConfig.getProperty(prop, session, project);
return rawValue == null ? defaultValue : BooleanUtils.toBoolean(rawValue,
"true", "false");
}
/**
* Returns the "projectVersionPolicyId" property.
*
* @param session
* the Maven session.
* @param project
* a project that may have this property set.
* @return never null. "default" if unset anywhere.
*/
public static String getProjectVersionPolicyId(final MavenSession session,
final MavenProject project) {
RTRConfig.checkParameters(session, project);
return StringUtils.defaultString(RTRConfig.getProperty(
RTRConfig.PROP_PROJECTVERSIONPOLICYID, session, project),
RTRConfig.DEFAULT_PROJECTVERSIONPOLICYID);
}
private static String getProperty(final String prop,
final MavenSession session, final MavenProject project) {
if (session == null) {
return project.getProperties().getProperty(prop);
}
else if (project == null) {
return session.getUserProperties().getProperty(prop);
}
else {
return StringUtils.defaultString(
session.getUserProperties().getProperty(prop), project
.getProperties().getProperty(prop));
}
}
/**
* Returns the "releaseVersion" property.
*
* @param session
* the Maven session.
* @param project
* a project that may have this property set.
* @return null iff unset anywhere.
*/
public static String getReleaseVersion(final MavenSession session,
final MavenProject project) {
RTRConfig.checkParameters(session, project);
return RTRConfig.getProperty(RTRConfig.PROP_RELEASEVERSION, session,
project);
}
/**
* Returns the "tag" property.
*
* @param session
* the Maven session.
* @param project
* a project that may have this property set.
* @return null iff unset anywhere.
*/
public static String getTag(final MavenSession session,
final MavenProject project) {
RTRConfig.checkParameters(session, project);
return RTRConfig.getProperty(RTRConfig.PROP_TAG, session, project);
}
/**
* Returns the "tagBase" property.
*
* @param session
* the Maven session.
* @param project
* a project that may have this property set.
* @return null iff unset anywhere.
*/
public static String getTagBase(final MavenSession session,
final MavenProject project) {
RTRConfig.checkParameters(session, project);
return RTRConfig.getProperty(RTRConfig.PROP_TAGBASE, session, project);
}
/**
* Returns the "tagNameFormat" property.
*
* @param session
* the Maven session.
* @param project
* a project that may have this property set.
* @return null iff unset anywhere.
*/
public static String getTagNameFormat(final MavenSession session,
final MavenProject project) {
RTRConfig.checkParameters(session, project);
return RTRConfig
.getProperty(RTRConfig.PROP_TAGNAMEFORMAT, session, project);
}
/**
* Returns the "addSchema" property.
*
* @param session
* the Maven session.
* @param project
* a project that may have this property set.
* @return true if set in the session or given project, false if unset.
*/
public static boolean isAddSchema(final MavenSession session,
final MavenProject project) {
RTRConfig.checkParameters(session, project);
return RTRConfig.getFlag(RTRConfig.PROP_ADDSCHEMA,
RTRConfig.DEFAULT_ADDSCHEMA, session, project);
}
/**
* Returns the "allowTimestampedSnapshots" property.
*
* @param session
* the Maven session.
* @param project
* a project that may have this property set.
* @return true if set in the session or given project, false if unset.
*/
public static boolean isAllowTimestampedSnapshots(final MavenSession session,
final MavenProject project) {
RTRConfig.checkParameters(session, project);
return RTRConfig.getFlag(RTRConfig.PROP_ALLOWTIMESTAMPEDSNAPSHOTS,
RTRConfig.DEFAULT_ALLOWTIMESTAMPEDSNAPSHOTS, session, project);
}
/**
* Returns the "autoVersionSubmodules" property.
*
* @param session
* the Maven session.
* @param project
* a project that may have this property set.
* @return true if set in the session or given project, false if unset.
*/
public static boolean isAutoVersionSubmodules(final MavenSession session,
final MavenProject project) {
RTRConfig.checkParameters(session, project);
return RTRConfig.getFlag(RTRConfig.PROP_AUTOVERSIONSUBMODULES,
RTRConfig.DEFAULT_AUTOVERSIONSUBMODULES, session, project);
}
/**
* Indicates whether or not the Smart Reactor is disabled.
*
* @param session
* the Maven session.
* @param project
* a project that may have this property set.
* @return true if disabled, false if enabled.
*/
public static boolean isDisabled(final MavenSession session,
final MavenProject project) {
RTRConfig.checkParameters(session, project);
return RTRConfig.getFlag(RTRConfig.PROP_DISABLED,
RTRConfig.DEFAULT_DISABLED, session, project);
}
/**
* Indicates whether or not the Smart Reactor should allow a release reactor
* containing references to any non-reactor SNAPSHOT artifacts.
*
* @param session
* the Maven session.
* @param project
* a project that may have this property set.
* @return true if allowed, false if prohibited.
*/
public static boolean isExternalSnapshotsAllowed(final MavenSession session,
final MavenProject project) {
RTRConfig.checkParameters(session, project);
return RTRConfig.getFlag(RTRConfig.PROP_EXTERNAL_SNAPSHOTS_ALLOWED,
RTRConfig.DEFAULT_EXTERNAL_SNAPSHOTS_ALLOWED, session, project);
}
/*
* Private utility methods.
*/
/**
* Indicates whether or not a release was requested.
*
* @param session
* the Maven session.
* @param project
* a project that may have this property set.
* @return true if a release was requested, false otherwise.
*/
public static boolean isRelease(final MavenSession session,
final MavenProject project) {
RTRConfig.checkParameters(session, project);
return RTRConfig.getFlag(RTRConfig.PROP_RELEASE, RTRConfig.DEFAULT_RELEASE,
session, project);
}
/**
* Indicates whether or not the Smart Reactor should allow a reactor
* containing a single POM-packaging project.
*
* @param session
* the Maven session.
* @param project
* a project that may have this property set.
* @return true if allowed, false if prohibited.
*/
public static boolean isSinglePomReactorAllowed(final MavenSession session,
final MavenProject project) {
RTRConfig.checkParameters(session, project);
return RTRConfig.getFlag(RTRConfig.PROP_SINGLE_POM_REACTOR_ALLOWED,
RTRConfig.DEFAULT_SINGLE_POM_REACTOR_ALLOWED, session, project);
}
/* This class is not instantiable. */
private RTRConfig() {}
}