PageRenderTime 46ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/opup/src/main/scala/com/atlassian/labs/opup/task/AbstractOpUpTask.scala

https://bitbucket.org/jwalton/opup
Scala | 105 lines | 84 code | 21 blank | 0 comment | 3 complexity | cdcfccb713a2ee37594fe800c97d13b3 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. package com.atlassian.labs.opup.task
  2. import java.io.{File, FileInputStream, FileWriter, PrintWriter}
  3. import java.net.Authenticator
  4. import scala.collection.JavaConverters._
  5. import scala.collection.JavaConverters.collectionAsScalaIterableConverter
  6. import org.apache.maven.artifact.versioning.ArtifactVersion
  7. import org.apache.maven.model.io.xpp3.MavenXpp3Reader
  8. import com.atlassian.labs.opup.HttpCache
  9. import com.atlassian.labs.opup.NexusVersionClient
  10. import com.atlassian.labs.opup.PomScanner
  11. import com.atlassian.labs.opup.Report
  12. import com.atlassian.labs.opup.UpgradeAdvice
  13. import com.atlassian.labs.opup.UpgradeSchedule
  14. import com.atlassian.labs.opup.UpgradeStrategy
  15. import com.atlassian.labs.opup.VersionClient
  16. import com.atlassian.labs.opup.VerySimpleCache
  17. import org.apache.http.client.CredentialsProvider
  18. class AbstractOpUpTask(val upgradeStrategy: String, httpCache: HttpCache, advice: UpgradeAdvice,
  19. versionClient: VersionClient, val baseDirectory: File) {
  20. val mainPom = new MavenXpp3Reader().read(new FileInputStream(new File(baseDirectory, "pom.xml")))
  21. def generateReport(htmlFile: File): (Seq[File], Map[String, ArtifactVersion], Map[String, ArtifactVersion], UpgradeSchedule)
  22. = generateReport(htmlFile, None, None)
  23. def generateReport(htmlFile: File, opUpUpgradeReport: File, junitReportFile: File): (Seq[File], Map[String, ArtifactVersion], Map[String, ArtifactVersion], UpgradeSchedule)
  24. = generateReport(htmlFile, Some(opUpUpgradeReport), Some(junitReportFile))
  25. def mkParentsOf(f: File) = {
  26. val dir = f.getParentFile()
  27. if (!dir.exists)
  28. {
  29. dir.mkdirs()
  30. }
  31. dir
  32. }
  33. def generateReport(htmlFile: File, opUpUpgradeReport: Option[File], junitReportFile: Option[File]): (Seq[File], Map[String, ArtifactVersion], Map[String, ArtifactVersion], UpgradeSchedule) = {
  34. val targetDir = mkParentsOf(htmlFile)
  35. val report = new Report(mainPom.getGroupId(), mainPom.getArtifactId(), mainPom.getVersion())
  36. report.copyStylesheet(targetDir)
  37. val ps = new PomScanner();
  38. val poms = PomScanner.pomFiles(baseDirectory);
  39. ps.process(poms.asScala)
  40. ps.findCurrent(report);
  41. val currentVersions = ps.getCurrentVersions();
  42. val currentProperties = ps.getCurrentProperties();
  43. report.setUpgradeStrategy(upgradeStrategy);
  44. val targetVersions = new UpgradeStrategy(httpCache).getUpgradeTarget(upgradeStrategy, ps.getCurrentVersions().asScala.toMap)
  45. var upgradeSchedule = UpgradeSchedule.from(currentVersions, ps, versionClient, advice.obsoleteAdvice, report, targetVersions);
  46. upgradeSchedule = upgradeSchedule.withUpgrades();
  47. report.schedule(currentVersions, ps.getCurrentProperties(), upgradeSchedule);
  48. val w = new FileWriter(htmlFile);
  49. try
  50. {
  51. report.writeReport(w);
  52. }
  53. finally
  54. {
  55. w.close();
  56. }
  57. for (f <- junitReportFile)
  58. {
  59. mkParentsOf(f)
  60. val w2 = new FileWriter(f)
  61. try
  62. {
  63. report.writeJunitReport(w2)
  64. }
  65. finally
  66. {
  67. w2.close()
  68. }
  69. }
  70. for (f <- opUpUpgradeReport)
  71. {
  72. val w2 = new PrintWriter(f)
  73. try
  74. {
  75. report.writeOpUpUpgradeReport(w2)
  76. }
  77. finally
  78. {
  79. w2.close()
  80. }
  81. }
  82. return (poms.asScala.toSeq, currentVersions.asScala.toMap, currentProperties.asScala.toMap, upgradeSchedule)
  83. }
  84. }