001package org.vafer.jdeb.utils;
002
003import java.util.Date;
004import java.util.concurrent.TimeUnit;
005
006import org.apache.maven.archiver.MavenArchiver;
007import org.vafer.jdeb.Console;
008
009public class OutputTimestampResolver {
010    private final Console console;
011    private final EnvironmentVariablesReader envReader;
012
013    public OutputTimestampResolver(Console console) {
014        this(console, new EnvironmentVariablesReader());
015    }
016
017    OutputTimestampResolver(Console console, EnvironmentVariablesReader envReader) {
018        this.console = console;
019        this.envReader = envReader;
020    }
021
022    public Long resolveOutputTimestamp(String paramValue) {
023        if (paramValue != null) {
024            Date outputDate = new MavenArchiver().parseOutputTimestamp(paramValue);
025            if (outputDate != null) {
026                console.info("Accepted outputTimestamp parameter: " + paramValue);
027                return outputDate.getTime();
028            }
029        }
030
031        String sourceDate = envReader.getSourceDateEpoch();
032        if (sourceDate != null && !sourceDate.isEmpty()) {
033            try {
034                long sourceDateVal = Long.parseLong(sourceDate);
035                console.info("Accepted SOURCE_DATE_EPOCH environment variable: " + sourceDate);
036                return sourceDateVal * TimeUnit.SECONDS.toMillis(1);
037            } catch (NumberFormatException e) {
038                throw new IllegalArgumentException("Invalid SOURCE_DATE_EPOCH environment variable value: " + sourceDate, e);
039            }
040        }
041
042        return null;
043    }
044
045    static class EnvironmentVariablesReader {
046        String getSourceDateEpoch() {
047            return System.getenv("SOURCE_DATE_EPOCH");
048        }
049    }
050}