View Javadoc
1   /*
2    * #%L
3    * wcm.io
4    * %%
5    * Copyright (C) 2022 wcm.io
6    * %%
7    * Licensed under the Apache License, Version 2.0 (the "License");
8    * you may not use this file except in compliance with the License.
9    * You may obtain a copy of the License at
10   *
11   *      http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing, software
14   * distributed under the License is distributed on an "AS IS" BASIS,
15   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16   * See the License for the specific language governing permissions and
17   * limitations under the License.
18   * #L%
19   */
20  package io.wcm.devops.conga.plugins.aem.maven;
21  
22  import java.nio.file.attribute.FileTime;
23  import java.time.Instant;
24  import java.util.Optional;
25  
26  import org.apache.maven.archiver.MavenArchiver;
27  import org.jetbrains.annotations.Nullable;
28  
29  /**
30   * Parse/convert ${project.build.outputTimestamp}.
31   */
32  public class BuildOutputTimestamp {
33  
34    private final Optional<Instant> instant;
35  
36    /**
37     * Configured output timestamp
38     * @param outputTimestamp Configured output timestamp
39     */
40    public BuildOutputTimestamp(@Nullable String outputTimestamp) {
41      this.instant = MavenArchiver.parseBuildOutputTimestamp(outputTimestamp);
42    }
43  
44    /**
45     * Check if a valid timestamp is configured,
46     * @return true if a valid timestamp is configured
47     */
48    public boolean isValid() {
49      return instant.isPresent();
50    }
51  
52    /**
53     * File time
54     * @return FileTime or null if not a valid date
55     */
56    @Nullable
57    public FileTime toFileTime() {
58      return instant
59          .map(Instant::toEpochMilli)
60          .map(FileTime::fromMillis)
61          .orElse(null);
62    }
63  
64  }