VersionPlace.java
- package emissary.place;
- import emissary.core.IBaseDataObject;
- import emissary.core.ResourceException;
- import emissary.util.GitRepositoryState;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- public class VersionPlace extends ServiceProviderPlace {
- private static final String EMISSARY_VERSION = "EMISSARY_VERSION";
- private static final String EMISSARY_VERSION_HASH = "EMISSARY_VERSION_HASH";
- private boolean includeDate;
- private boolean useAbbrevHash;
- private String formattedVersion;
- private String versionHash;
- protected Pattern regexPatternForVersion;
- /**
- * Create the place from the specified config file or resource
- *
- * @param configInfo the config file or resource to use
- * @param dir the name of the controlling directory to register with
- * @param placeLoc string name of this place
- */
- public VersionPlace(String configInfo, String dir, String placeLoc) throws IOException {
- super(configInfo, dir, placeLoc);
- configurePlace();
- }
- /**
- * Create the place from the specified config stream data
- *
- * @param configInfo the config file or resource to use
- * @param dir the name of the controlling directory to register with
- * @param placeLoc string name of this place
- */
- public VersionPlace(InputStream configInfo, String dir, String placeLoc) throws IOException {
- super(configInfo, dir, placeLoc);
- configurePlace();
- }
- /**
- * Create the place from the specified config stream data
- *
- * @param configInfo the config file or resource to use
- */
- public VersionPlace(InputStream configInfo) throws IOException {
- super(configInfo);
- configurePlace();
- }
- /**
- * Create with the default configuration
- */
- public VersionPlace() throws IOException {
- super();
- configurePlace();
- }
- private void configurePlace() {
- GitRepositoryState gitRepositoryState = initGitRepositoryState();
- includeDate = configG.findBooleanEntry("INCLUDE_DATE", true);
- useAbbrevHash = configG.findBooleanEntry("USE_ABBREV_HASH", true);
- String cfgRegex = configG.findStringEntry("VERSION_REGEX_FOR_NO_DATE", "^(\\d+\\.)?(\\d+\\.)?(\\d+)$");
- regexPatternForVersion = Pattern.compile(cfgRegex);
- formattedVersion = getVersion(gitRepositoryState);
- versionHash = getVersionHash(gitRepositoryState);
- }
- @Override
- public void process(IBaseDataObject payload) throws ResourceException {
- payload.putParameter(EMISSARY_VERSION, formattedVersion);
- payload.putParameter(EMISSARY_VERSION_HASH, versionHash);
- }
- GitRepositoryState initGitRepositoryState() {
- return GitRepositoryState.getRepositoryState();
- }
- protected String getVersion(GitRepositoryState gitRepositoryState) {
- String version = gitRepositoryState.getBuildVersion();
- Matcher matcher = regexPatternForVersion.matcher(version);
- // if a release version, return just the version, even if includeDate is true
- if (matcher.matches()) {
- return version;
- }
- if (includeDate) {
- // version with date & time information
- // changes format of date from 2024-09-23T10:41:18-0400, to 20240923104118
- String buildTime = gitRepositoryState.getBuildTime();
- int cutEndMark = buildTime.lastIndexOf(":") + 3;
- String formattedDate = buildTime.substring(0, cutEndMark).replaceAll("\\D", "");
- return version + "-" + formattedDate;
- } else {
- // adds just version
- return version;
- }
- }
- protected String getVersionHash(GitRepositoryState gitRepositoryState) {
- if (useAbbrevHash) {
- // first 7 chars of commit hash
- return gitRepositoryState.getCommitIdAbbrev();
- } else {
- // full commit hash (default option)
- return gitRepositoryState.getCommitId();
- }
- }
- public void setIncludeDate(Boolean includeDate) {
- this.includeDate = includeDate;
- }
- public void setAbbrevHash(Boolean useAbbrevHash) {
- this.useAbbrevHash = useAbbrevHash;
- }
- public boolean isIncludeDate() {
- return includeDate;
- }
- public boolean isUseAbbrevHash() {
- return useAbbrevHash;
- }
- }