067517504c96e98cc9354aa9f4f49008c2987577
[sdc.git] /
1 package org.openecomp.sdc.onboarding.util;
2
3 import java.io.File;
4 import java.io.IOException;
5 import java.net.URL;
6 import java.util.List;
7 import java.util.regex.Matcher;
8 import java.util.regex.Pattern;
9 import org.apache.maven.artifact.repository.ArtifactRepository;
10 import org.apache.maven.execution.MavenSession;
11 import org.apache.maven.plugin.AbstractMojo;
12 import org.apache.maven.plugin.MojoExecutionException;
13 import org.apache.maven.plugin.MojoFailureException;
14 import org.apache.maven.plugins.annotations.LifecyclePhase;
15 import org.apache.maven.plugins.annotations.Mojo;
16 import org.apache.maven.plugins.annotations.Parameter;
17 import org.apache.maven.plugins.annotations.ResolutionScope;
18 import org.apache.maven.project.MavenProject;
19
20 @Mojo(name = "init-artifact-helper", threadSafe = true, defaultPhase = LifecyclePhase.PRE_CLEAN,
21         requiresDependencyResolution = ResolutionScope.NONE)
22 public class InitializationHelperMojo extends AbstractMojo {
23
24     private static final String SKIP_GET = "skipGet";
25
26     @Parameter(defaultValue = "${session}")
27     private MavenSession session;
28     @Parameter(defaultValue = "${project}", readonly = true)
29     private MavenProject project;
30     @Parameter
31     private String groupId;
32     @Parameter
33     private String artifactId;
34     @Parameter
35     private String version;
36     @Parameter
37     private String targetLocation;
38     @Parameter
39     private String name;
40     @Parameter
41     private String excludePackaging;
42     @Parameter
43     private ArtifactHelper artifactHelper;
44
45     public void execute() throws MojoExecutionException, MojoFailureException {
46         if (System.getProperties().containsKey(SKIP_GET)) {
47             project.getProperties()
48                    .setProperty(SKIP_GET, Boolean.valueOf(System.getProperties().containsKey(SKIP_GET)).toString());
49             return;
50         } else {
51             File orgFile = new File(
52                     session.getLocalRepository().getBasedir() + File.separator + (groupId.replace(".", File.separator))
53                             + File.separator + artifactId + File.separator + version);
54             String resolvedVersion = getResolvedVersion(artifactHelper.getRepositories(version.contains("SNAPSHOT")));
55             project.getProperties().setProperty("resolvedVersion", resolvedVersion);
56             System.getProperties().setProperty(SKIP_GET, Boolean.TRUE.toString());
57             if (resolvedVersion.equals(version) && !orgFile.exists()) {
58                 project.getProperties().setProperty(SKIP_GET, Boolean.TRUE.toString());
59             }
60         }
61     }
62
63     private String getResolvedVersion(List<ArtifactRepository> list) {
64         Pattern timestampPattern = Pattern.compile(".*<timestamp>(.*)</timestamp>.*");
65         Pattern buildNumberPattern = Pattern.compile(".*<buildNumber>(.*)</buildNumber>.*");
66         String timestamp = null;
67         String buildNumber = null;
68         for (ArtifactRepository repo : list) {
69             try {
70                 String content = artifactHelper.getContents(
71                         new URL(repo.getUrl() + (groupId.replace('.', '/')) + '/' + artifactId + '/' + version
72                                         + "/maven-metadata.xml"));
73                 Matcher m = timestampPattern.matcher(content);
74                 if (m.find()) {
75                     timestamp = m.group(1);
76                 }
77                 m = buildNumberPattern.matcher(content);
78                 if (m.find()) {
79                     buildNumber = m.group(1);
80                 }
81             } catch (IOException e) {
82                 continue;
83             }
84         }
85         return timestamp != null && buildNumber != null ? timestamp + "-" + buildNumber : version;
86     }
87
88 }