1   package com.atlassian.maven.plugins.amps;
2   
3   import java.util.List;
4   
5   import org.apache.maven.execution.MavenSession;
6   import org.apache.maven.plugin.BuildPluginManager;
7   import org.apache.maven.plugin.PluginManager;
8   import org.apache.maven.plugin.logging.Log;
9   import org.apache.maven.project.MavenProject;
10  import org.twdata.maven.mojoexecutor.MojoExecutor;
11  import org.twdata.maven.mojoexecutor.MojoExecutor.ExecutionEnvironment;
12  
13  public class MavenContext
14  {
15      private final MavenProject project;
16      private final List<MavenProject> reactor;
17      private final MavenSession session;
18  
19      /* Maven 2 */
20      private final PluginManager pluginManager;
21  
22      /* Maven 3 */
23      private final BuildPluginManager buildPluginManager;
24  
25      private final Log log;
26  
27      public MavenContext(final MavenProject project, List<MavenProject> reactor, final MavenSession session, final PluginManager pluginManager, Log log)
28      {
29          this(project, reactor, session, pluginManager, null, log);
30      }
31  
32      public MavenContext(final MavenProject project, List<MavenProject> reactor, final MavenSession session,
33              BuildPluginManager buildPluginManager,
34              Log log)
35      {
36          this(project, reactor, session, null, buildPluginManager, log);
37      }
38  
39      private MavenContext(final MavenProject project, List<MavenProject> reactor, final MavenSession session,
40              final PluginManager pluginManager,
41              BuildPluginManager buildPluginManager,
42              Log log)
43      {
44          this.project = project;
45          this.reactor = reactor;
46          this.session = session;
47  
48          this.pluginManager = pluginManager;
49  
50          this.buildPluginManager = buildPluginManager;
51  
52          this.log = log;
53      }
54  
55      public MavenProject getProject()
56      {
57          return project;
58      }
59  
60      MavenSession getSession()
61      {
62          return session;
63      }
64  
65      public Log getLog()
66      {
67          return log;
68      }
69  
70      public List<MavenProject> getReactor()
71      {
72          return reactor;
73      }
74  
75      public MavenContext with(final MavenProject project, List<MavenProject> reactor, final MavenSession session)
76      {
77          return new MavenContext(project, reactor, session,
78                  this.pluginManager, this.buildPluginManager,
79                  this.log);
80      }
81  
82      public ExecutionEnvironment getExecutionEnvironment()
83      {
84          if (buildPluginManager != null)
85          {
86              /* Maven 3 */
87              return MojoExecutor.executionEnvironment(project, session, buildPluginManager);
88          }
89          else
90          {
91              /* Maven 2 */
92              return MojoExecutor.executionEnvironment(project, session, pluginManager);
93          }
94      }
95  }