Added separator, pre-release and metada prefixes.

This commit is contained in:
Erik C. Thauvin 2019-04-01 01:51:18 -07:00
parent e8c00828f3
commit 45a90d1353
7 changed files with 207 additions and 35 deletions

View file

@ -39,6 +39,10 @@ package net.thauvin.erik.semver;
* @since 1.0
*/
public final class Constants {
/**
* The default metadata prefix.
*/
public static final String DEFAULT_BUILDMETA_PREFIX = "+";
/**
* The default class name.
*/
@ -71,6 +75,14 @@ public final class Constants {
* The default patch version.
*/
public static final int DEFAULT_PATCH = 0;
/**
* The default prerelease prefix.
*/
public static final String DEFAULT_PRERELEASE_PREFIX = "-";
/**
* The default version separator.
*/
public static final String DEFAULT_SEPARATOR = ".";
/**
* The default mustache template.
*/
@ -87,6 +99,10 @@ public final class Constants {
* The build metadata property key.
*/
public static final String KEY_VERSION_BUILDMETA = "buildmeta";
/**
* The build metadata prefix property key.
*/
public static final String KEY_VERSION_BUILDMETA_PREFIX = "buildmeta.prefix";
/**
* The major version property key.
*/
@ -103,10 +119,18 @@ public final class Constants {
* The pre-release version property key.
*/
public static final String KEY_VERSION_PRERELEASE = "prerelease";
/**
* The pre-release prefix property key.
*/
public static final String KEY_VERSION_PRERELEASE_PREFIX = "prerelease.prefix";
/**
* The project property key.
*/
public static final String KEY_VERSION_PROJECT = "project";
/**
* The version separator property key.
*/
public static final String KEY_VERSION_SEPARATOR = "separator";
/**
* The kotlin type.
*/

View file

@ -50,8 +50,14 @@ public @interface Version {
String buildMetaKey() default Constants.KEY_VERSION_BUILDMETA;
String buildMetaPrefix() default Constants.DEFAULT_BUILDMETA_PREFIX;
String buildMetaPrefixKey() default Constants.KEY_VERSION_BUILDMETA_PREFIX;
String className() default Constants.DEFAULT_CLASS_NAME;
String keysPrefix() default Constants.DEFAULT_KEYS_PREFIX;
int major() default Constants.DEFAULT_MAJOR;
String majorKey() default Constants.KEY_VERSION_MAJOR;
@ -60,25 +66,31 @@ public @interface Version {
String minorKey() default Constants.KEY_VERSION_MINOR;
int patch() default Constants.DEFAULT_PATCH;
String packageName() default Constants.EMPTY;
int patch() default Constants.DEFAULT_PATCH;
String patchKey() default Constants.KEY_VERSION_PATCH;
String preRelease() default Constants.EMPTY;
String preReleaseKey() default Constants.KEY_VERSION_PRERELEASE;
String preReleasePrefix() default Constants.DEFAULT_PRERELEASE_PREFIX;
String preReleasePrefixKey() default Constants.KEY_VERSION_PRERELEASE_PREFIX;
String project() default Constants.EMPTY;
String projectKey() default Constants.KEY_VERSION_PROJECT;
String properties() default Constants.EMPTY;
String separator() default Constants.DEFAULT_SEPARATOR;
String separatorKey() default Constants.KEY_VERSION_SEPARATOR;
String template() default Constants.DEFAULT_JAVA_TEMPLATE;
String type() default Constants.DEFAULT_JAVA_TYPE;
String keysPrefix() default Constants.DEFAULT_KEYS_PREFIX;
}

View file

@ -42,13 +42,16 @@ public class VersionInfo {
private final long epoch = System.currentTimeMillis();
private String buildMeta;
private String buildMetaPrefix;
private String className;
private int major;
private int minor;
private String packageName;
private int patch;
private String preRelease;
private String preReleasePrefix;
private String project;
private String separator;
/**
@ -59,7 +62,10 @@ public class VersionInfo {
minor = Constants.DEFAULT_MINOR;
patch = Constants.DEFAULT_PATCH;
buildMeta = Constants.EMPTY;
buildMetaPrefix = Constants.DEFAULT_BUILDMETA_PREFIX;
preRelease = Constants.EMPTY;
preReleasePrefix = Constants.DEFAULT_PRERELEASE_PREFIX;
separator = Constants.DEFAULT_SEPARATOR;
project = Constants.EMPTY;
className = Constants.DEFAULT_CLASS_NAME;
packageName = Constants.EMPTY;
@ -75,7 +81,10 @@ public class VersionInfo {
minor = version.minor();
patch = version.patch();
buildMeta = version.buildMeta();
buildMetaPrefix = version.buildMetaPrefix();
preRelease = version.preRelease();
preReleasePrefix = version.preReleasePrefix();
separator = version.separator();
project = version.project();
className = version.className();
packageName = version.packageName();
@ -99,6 +108,24 @@ public class VersionInfo {
this.buildMeta = buildMeta;
}
/**
* Returns the meta-data prefix.
*
* @return The meta-data prefix.
*/
public String getBuildMetaPrefix() {
return buildMetaPrefix;
}
/**
* Sets the meta-data prefix.
*
* @param buildMetaPrefix The meta-data prefix.
*/
public void setBuildMetaPrefix(String buildMetaPrefix) {
this.buildMetaPrefix = buildMetaPrefix;
}
/**
* Returns the class name.
*
@ -216,6 +243,24 @@ public class VersionInfo {
this.preRelease = preRelease;
}
/**
* Returns the pre-release prefix.
*
* @return The pre-release prefix.
*/
public String getPreReleasePrefix() {
return preReleasePrefix;
}
/**
* Sets the pre-release prefix.
*
* @param preReleasePrefix The new pre-release prefix.
*/
public void setPreReleasePrefix(String preReleasePrefix) {
this.preReleasePrefix = preReleasePrefix;
}
/**
* Returns the project name.
*
@ -234,11 +279,29 @@ public class VersionInfo {
this.project = project;
}
/**
* Returns the version separator.
*
* @return The version separator.
*/
public String getSeparator() {
return separator;
}
/**
* Setsthe version separtor.
*
* @param separator The new version separator.
*/
public void setSeparator(String separator) {
this.separator = separator;
}
/**
* Returns the full version string.
* <p>
* Formatted as:
* <blockquote><code>MAJOR.MINOR.PATCH[-PRERELEASE][+BUILDMETADATA]</code></blockquote>
* <blockquote><code>[MAJOR][SEPARATOR][MINOR][SEPARATOR][PATCH][[PRERELEASE-PREFIX][PRERELEASE]][[BUILDMETA-PREFIX][BUILDMETA]]</code></blockquote>
* <p>
* For example:
* <ul>
@ -251,12 +314,12 @@ public class VersionInfo {
* @return The version string.
*/
public String getVersion() {
return Integer.toString(major)
+ '.'
return major
+ separator
+ minor
+ '.'
+ separator
+ patch
+ (preRelease.length() > 0 ? '-' + preRelease : "")
+ (buildMeta.length() > 0 ? '+' + buildMeta : "");
+ (preRelease.length() > 0 ? preReleasePrefix + preRelease : "")
+ (buildMeta.length() > 0 ? buildMetaPrefix + buildMeta : "");
}
}

View file

@ -94,8 +94,14 @@ public class VersionProcessor extends AbstractProcessor {
parseIntProperty(p, version.keysPrefix() + version.patchKey(), version.patch()));
versionInfo.setBuildMeta(
p.getProperty(version.keysPrefix() + version.buildMetaKey(), version.buildMeta()));
versionInfo.setBuildMetaPrefix(
p.getProperty(version.keysPrefix() + version.buildMetaPrefixKey(), version.buildMetaPrefix()));
versionInfo.setPreRelease(
p.getProperty(version.keysPrefix() + version.preReleaseKey(), version.preRelease()));
versionInfo.setPreReleasePrefix(
p.getProperty(version.keysPrefix() + version.preReleasePrefixKey(), version.preReleasePrefix()));
versionInfo.setSeparator(
p.getProperty(version.keysPrefix() + version.separatorKey(), version.separator()));
}
} else {
final String findOrRead;

View file

@ -12,11 +12,6 @@ import java.util.Date
* @author <a href="https://github.com/ethauvin/semver">Semantic Version Annotation Processor</a>
*/
object {{className}} {
@JvmField
val PRERELEASE_PREFIX = "-"
@JvmField
val BUILDMEATA_PREFIX = "+"
@JvmField
val PROJECT = "{{project}}"
@JvmField
@ -30,13 +25,19 @@ object {{className}} {
@JvmField
val PRERELEASE = "{{preRelease}}"
@JvmField
val PRERELEASE_PREFIX = "{{preReleasePrefix}}"
@JvmField
val BUILDMETA = "{{buildMeta}}"
@JvmField
val BUILDMEATA_PREFIX = "{{buildMetaPrefix}}"
@JvmField
val SEPARATOR = "{{separator}}"
/**
* The full version string formatted as [MAJOR].[MINOR].[PATCH]-[PRERELEASE]+[BUILDMETA]
* The full version string formatted as [MAJOR][SEPARATOR][MINOR][SEPARATOR][PATCH][[PRERELEASE_PREFIX][PRERELEASE]][[BUILDMETA_PREFIX][BUILDMETA]]
*/
@JvmField
val VERSION = "$MAJOR.$MINOR.$PATCH" + preReleaseWithPrefix() + buildMetaWithPrefix()
val VERSION = "$MAJOR$SEPARATOR$MINOR$SEPARATOR$PATCH" + preReleaseWithPrefix() + buildMetaWithPrefix()
/**
* Returns the pre-release version with prefix.
@ -47,7 +48,7 @@ object {{className}} {
@JvmStatic
@JvmOverloads
fun preReleaseWithPrefix(prefix: String = PRERELEASE_PREFIX): String {
return if (PRERELEASE.isNotEmpty() && prefix.isNotEmpty()) {
return if (PRERELEASE.isNotEmpty()) {
"$prefix$PRERELEASE"
} else {
PRERELEASE
@ -63,7 +64,7 @@ object {{className}} {
@JvmStatic
@JvmOverloads
fun buildMetaWithPrefix(prefix: String = BUILDMEATA_PREFIX): String {
return if (BUILDMETA.isNotEmpty() && prefix.isNotEmpty()) {
return if (BUILDMETA.isNotEmpty()) {
"$prefix$BUILDMETA"
} else {
BUILDMETA

View file

@ -12,23 +12,23 @@ import java.util.Date;
* @author <a href="https://github.com/ethauvin/semver">Semantic Version Annotation Processor</a>
*/
public final class {{className}} {
public final static String PRERELEASE_PREFIX = "-";
public final static String BUILDMETA_PREFIX = "+";
public final static String PROJECT = "{{project}}";
public final static Date BUILDDATE = new Date({{epoch}}L);
public final static int MAJOR = {{major}};
public final static int MINOR = {{minor}};
public final static int PATCH = {{patch}};
public final static String PRERELEASE = "{{preRelease}}";
public final static String PRERELEASE_PREFIX = "{{preReleasePrefix}}";
public final static String BUILDMETA = "{{buildMeta}}";
public final static String BUILDMETA_PREFIX = "{{buildMetaPrefix}}";
public final static String SEPARATOR = "{{separator}}";
/**
* The full version string.
* <p>
* Formatted as:
* <blockquote>
* <code>MAJOR.MINOR.PATCH[-PRERELEASE][+BUILDMETADATA]</code>
* <code>[MAJOR][SEPARATOR][MINOR][SEPARATOR][PATCH][[PRERELEASE_PREFIX][PRERELEASE]][[BUILDMETA_PREFIX][BUILDMETA]]</code>
* </blockquote>
* <p>
* For example:
@ -39,10 +39,8 @@ public final class {{className}} {
* <li><code>1.0.0-alpha+001</code></li>
* </ul>
*/
public final static String VERSION = Integer.toString(MAJOR) + '.'
+ Integer.toString(MINOR) + '.'
+ Integer.toString(PATCH)
+ preReleaseWithPrefix() + buildMetaWithPrefix();
public final static String VERSION = Integer.toString(MAJOR) + SEPARATOR + Integer.toString(MINOR) + SEPARATOR
+ Integer.toString(PATCH) + preReleaseWithPrefix() + buildMetaWithPrefix();
/**
* Disables the default constructor.
@ -70,7 +68,7 @@ public final class {{className}} {
* @return The build metadata, if any.
*/
public static String buildMetaWithPrefix(final String prefix) {
if (BUILDMETA.length() > 0 && prefix.length() > 0) {
if (BUILDMETA.length() > 0) {
return prefix + BUILDMETA;
} else {
return BUILDMETA;
@ -93,7 +91,7 @@ public final class {{className}} {
* @return The pre-release version, if any.
*/
public static String preReleaseWithPrefix(final String prefix) {
if (PRERELEASE.length() > 0 && prefix.length() > 0) {
if (PRERELEASE.length() > 0) {
return prefix + PRERELEASE;
} else {
return PRERELEASE;

View file

@ -73,9 +73,28 @@ public class VersionInfoTest {
Assert.assertEquals(versionInfo.getVersion(), "3.2.1-beta+001", "getVersion(3.2.1-beta+001)");
versionInfo.setPreReleasePrefix("+");
Assert.assertEquals(versionInfo.getVersion(), "3.2.1+beta+001", "getVersion(3.2.1+beta+001)");
versionInfo.setPreReleasePrefix("-");
versionInfo.setPreRelease("");
Assert.assertEquals(versionInfo.getVersion(), "3.2.1+001", "getVersion(3.2.1+001)");
versionInfo.setBuildMetaPrefix(".");
Assert.assertEquals(versionInfo.getVersion(), "3.2.1.001", "getVersion(3.2.1.001)");
versionInfo.setBuildMetaPrefix("+");
versionInfo.setSeparator("-");
Assert.assertEquals(versionInfo.getVersion(), "3-2-1+001", "getVersion(3-2-1+001)");
versionInfo.setSeparator(".");
}
@Test
@ -107,6 +126,19 @@ public class VersionInfoTest {
Assert.assertEquals(versionInfo.getVersion(), "1.2.3-alpha+001", "getVersion(1.2.3-alpha+001)");
versionInfo.setBuildMeta("1");
versionInfo.setBuildMetaPrefix("");
Assert.assertEquals(versionInfo.getBuildMetaPrefix(), "", "getBuildMetaPrefix( )");
Assert.assertEquals(versionInfo.getVersion(), "1.2.3-alpha1", "getVersion(1.2.3-alpha1)");
versionInfo.setPreReleasePrefix(".");
Assert.assertEquals(versionInfo.getPreReleasePrefix(), ".", "getPreReleasePrefix(.)");
Assert.assertEquals(versionInfo.getVersion(), "1.2.3.alpha1", "getVersion(1.2.3.alpha1)");
versionInfo.setProject("My Example");
Assert.assertEquals(versionInfo.getProject(), "My Example", "getProject(My Example)");
@ -133,8 +165,14 @@ public class VersionInfoTest {
Assert.assertEquals(versionInfo.getPreRelease(), version.preRelease(), "getPreRelease(preRelease)");
Assert.assertEquals(versionInfo.getPreReleasePrefix(), version.preReleasePrefix(),
"getPreReleasePrefix(preReleasePrefix)");
Assert.assertEquals(versionInfo.getBuildMeta(), version.buildMeta(), "getBuildMeta(buildMeta)");
Assert.assertEquals(versionInfo.getBuildMetaPrefix(), version.buildMetaPrefix(),
"getBuildMetaPrefix(buildMetaPrefix)");
Assert.assertEquals(versionInfo.getPackageName(), version.packageName(),
"getPackageName(packageName)");
@ -173,6 +211,16 @@ class VersionTest implements Version {
return "build.meta";
}
@Override
public String buildMetaPrefix() {
return "+";
}
@Override
public String buildMetaPrefixKey() {
return "build.meta.prefix";
}
@Override
public String className() {
return "MyTest";
@ -228,6 +276,16 @@ class VersionTest implements Version {
return "build.prerelease";
}
@Override
public String preReleasePrefix() {
return "-";
}
@Override
public String preReleasePrefixKey() {
return "build.prerelase.prefix";
}
@Override
public String project() {
return "My Test Project";
@ -243,6 +301,16 @@ class VersionTest implements Version {
return "test.properties";
}
@Override
public String separator() {
return ".";
}
@Override
public String separatorKey() {
return "build.separator";
}
@Override
public String template() {
return "myversion.mustache";