PageRenderTime 44ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/opup-maven-plugin/src/main/java/com/atlassian/maven/plugins/opup/mojo/AbstractOpUpMojo.java

https://bitbucket.org/jwalton/opup
Java | 158 lines | 121 code | 29 blank | 8 comment | 9 complexity | 48da11ebe37196463265449c67f2adbb MD5 | raw file
Possible License(s): BSD-3-Clause
  1. package com.atlassian.maven.plugins.opup.mojo;
  2. import java.io.File;
  3. import java.net.URI;
  4. import java.net.URISyntaxException;
  5. import java.util.List;
  6. import com.atlassian.labs.opup.ArtifactoryVersionClient;
  7. import com.atlassian.labs.opup.HttpAuthentication;
  8. import com.atlassian.labs.opup.HttpCache;
  9. import com.atlassian.labs.opup.MavenArtifactVersionClient;
  10. import com.atlassian.labs.opup.NexusVersionClient;
  11. import com.atlassian.labs.opup.UpgradeAdvice;
  12. import com.atlassian.labs.opup.VersionClient;
  13. import com.atlassian.labs.opup.VersionClientUtil;
  14. import com.atlassian.labs.opup.VerySimpleCache;
  15. import org.apache.http.auth.AuthScope;
  16. import org.apache.http.auth.UsernamePasswordCredentials;
  17. import org.apache.http.client.CredentialsProvider;
  18. import org.apache.http.impl.client.BasicCredentialsProvider;
  19. import org.apache.maven.artifact.repository.ArtifactRepository;
  20. import org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager;
  21. import org.apache.maven.execution.MavenSession;
  22. import org.apache.maven.plugin.AbstractMojo;
  23. import org.apache.maven.plugin.MojoExecutionException;
  24. import org.apache.maven.plugins.annotations.Component;
  25. import org.apache.maven.plugins.annotations.Parameter;
  26. import org.apache.maven.settings.Server;
  27. import org.sonatype.plexus.components.sec.dispatcher.SecDispatcher;
  28. import org.sonatype.plexus.components.sec.dispatcher.SecDispatcherException;
  29. public abstract class AbstractOpUpMojo extends AbstractMojo
  30. {
  31. @Parameter(property = "strategy", defaultValue = "latest")
  32. public String strategy;
  33. @Parameter(defaultValue = "${project.build.directory}/opup-report.html")
  34. public File reportFile;
  35. @Parameter(property = "opup.cache", defaultValue="${project.build.directory}/opup/cache")
  36. public File opupCache;
  37. @Parameter(property = "nexus.url")
  38. public String nexusUrl;
  39. @Parameter(property = "nexus.serverid")
  40. public String nexusServerId;
  41. /**
  42. * Follow an Atlassian-specific convention for distinguishing Cloud and
  43. * Server artifact versions when querying Artifactory.
  44. */
  45. @Parameter(property = "forServer", defaultValue = "true")
  46. public boolean forServer;
  47. @Parameter(property = "artifactory.url")
  48. public String artifactoryUrl;
  49. @Parameter(property = "artifactory.apiKey")
  50. public String artifactoryApiKey;
  51. @Parameter(property = "requireFinal", defaultValue = "true")
  52. public boolean requireFinal;
  53. @Component
  54. public RepositoryMetadataManager repositoryMetadataManager;
  55. @Parameter(property = "localRepository", required = true)
  56. public ArtifactRepository localRepository;
  57. @Parameter(property = "project.remoteArtifactRepositories", required = true)
  58. public List<ArtifactRepository> remoteRepositories;
  59. /* Components to get hold of repository passwords */
  60. /**
  61. * The Maven Session Object
  62. */
  63. @Parameter(property = "session", required = true, readonly = true)
  64. private MavenSession session;
  65. @Component(hint = "mng-4384")
  66. SecDispatcher securityDispatcher;
  67. CredentialsProvider getNexusCredentials() throws MojoExecutionException
  68. {
  69. if (nexusServerId != null)
  70. {
  71. Server server = session.getSettings().getServer(nexusServerId);
  72. if (server == null)
  73. {
  74. throw new MojoExecutionException("Unknown server ID: " + nexusServerId);
  75. }
  76. String password;
  77. try
  78. {
  79. password = securityDispatcher.decrypt(server.getPassword());
  80. }
  81. catch (SecDispatcherException sde)
  82. {
  83. throw new MojoExecutionException("Failed to decrypt password for " + nexusServerId, sde);
  84. }
  85. try
  86. {
  87. URI uri = new URI(nexusUrl);
  88. AuthScope scope = new AuthScope(uri.getHost(), uri.getPort());
  89. BasicCredentialsProvider bcp = new BasicCredentialsProvider();
  90. bcp.setCredentials(scope, new UsernamePasswordCredentials(server.getUsername(), password));
  91. return bcp;
  92. }
  93. catch (URISyntaxException e)
  94. {
  95. throw new MojoExecutionException("Bad Nexus URL: " + nexusUrl, e);
  96. }
  97. }
  98. else
  99. {
  100. return HttpAuthentication.fromConsole();
  101. }
  102. }
  103. UpgradeAdvice getUpgradeAdvice()
  104. {
  105. return UpgradeAdvice.fromResources().requireFinal(requireFinal);
  106. }
  107. HttpCache newHttpCache() throws MojoExecutionException
  108. {
  109. return new VerySimpleCache(opupCache, getNexusCredentials());
  110. }
  111. VersionClient getVersionClient() throws MojoExecutionException
  112. {
  113. VersionClient versionClient;
  114. if (nexusUrl != null)
  115. {
  116. versionClient = new NexusVersionClient(newHttpCache(), nexusUrl);
  117. }
  118. else if (artifactoryUrl != null)
  119. {
  120. versionClient = new ArtifactoryVersionClient(newHttpCache(), forServer, artifactoryUrl, artifactoryApiKey);
  121. }
  122. else
  123. {
  124. getLog().info("nexus.url not specified; using Maven to resolve artifacts");
  125. versionClient = new MavenArtifactVersionClient(repositoryMetadataManager, localRepository, remoteRepositories);
  126. }
  127. return VersionClientUtil.filtered(versionClient, getUpgradeAdvice().versionOverrides());
  128. }
  129. }