e8a75840c1d398db7fbbc6523971e54c5ea57872
[teamcity/dotNetPackagesSupport.git] / nuget-agent / src / jetbrains / buildServer / nuget / agent / install / PackagesInstallerBuilder.java
1 /*\r
2  * Copyright 2000-2011 JetBrains s.r.o.\r
3  *\r
4  * Licensed under the Apache License, Version 2.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  * http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 \r
17 package jetbrains.buildServer.nuget.agent.install;\r
18 \r
19 import jetbrains.buildServer.RunBuildException;\r
20 import jetbrains.buildServer.agent.BuildProcess;\r
21 import jetbrains.buildServer.agent.BuildProgressLogger;\r
22 import jetbrains.buildServer.agent.BuildRunnerContext;\r
23 import jetbrains.buildServer.nuget.agent.parameters.PackagesInstallParameters;\r
24 import jetbrains.buildServer.nuget.agent.parameters.PackagesUpdateParameters;\r
25 import jetbrains.buildServer.nuget.agent.util.BuildProcessContinuation;\r
26 import jetbrains.buildServer.nuget.agent.util.DelegatingBuildProcess;\r
27 import jetbrains.buildServer.util.FileUtil;\r
28 import org.jetbrains.annotations.NotNull;\r
29 import org.jetbrains.annotations.Nullable;\r
30 \r
31 import java.io.File;\r
32 \r
33 /**\r
34 * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
35 * Date: 11.07.11 14:57\r
36 */\r
37 public class PackagesInstallerBuilder implements LocateNuGetConfigBuildProcess.Callback {\r
38   private final NuGetActionFactory myActionFactory;\r
39   private final BuildProcessContinuation myInstall;\r
40   private final BuildProcessContinuation myUpdate;\r
41   private final BuildProcessContinuation myPostUpdate;\r
42   private final BuildRunnerContext myContext;\r
43 \r
44   private final PackagesUpdateParameters myUpdateParameters;\r
45   private final PackagesInstallParameters myInstallParameters;\r
46 \r
47   public PackagesInstallerBuilder(@NotNull final NuGetActionFactory actionFactory,\r
48                                   @NotNull final BuildProcessContinuation install,\r
49                                   @NotNull final BuildProcessContinuation update,\r
50                                   @NotNull final BuildProcessContinuation postUpdate,\r
51                                   @NotNull final BuildRunnerContext context,\r
52                                   @NotNull final PackagesInstallParameters installParameters,\r
53                                   @Nullable final PackagesUpdateParameters updateParameters) {\r
54     myInstall = install;\r
55     myUpdate = update;\r
56     myPostUpdate = postUpdate;\r
57     myContext = context;\r
58     myUpdateParameters = updateParameters;\r
59     myInstallParameters = installParameters;\r
60     myActionFactory = actionFactory;\r
61   }\r
62 \r
63   public final void onPackagesConfigFound(@NotNull final File config, @NotNull final File targetFolder) {\r
64     myInstall.pushBuildProcess(createInstallAction(config, targetFolder));\r
65 \r
66     if (myUpdateParameters == null) return;\r
67     myUpdate.pushBuildProcess(createUpdateAction(config, targetFolder));\r
68     myPostUpdate.pushBuildProcess(createInstallAction(config, targetFolder));\r
69   }\r
70 \r
71   private DelegatingBuildProcess createUpdateAction(final File config, final File targetFolder) {\r
72     return new DelegatingBuildProcess(\r
73             new DelegatingBuildProcess.Action() {\r
74               private final BuildProgressLogger logger = myContext.getBuild().getBuildLogger();\r
75 \r
76               @NotNull\r
77               public BuildProcess startImpl() throws RunBuildException {\r
78                 String pathToLog = FileUtil.getRelativePath(myContext.getBuild().getCheckoutDirectory(), config);\r
79                 if (pathToLog == null) pathToLog = config.getPath();\r
80                 logger.activityStarted("update", "Updating NuGet packages for " + pathToLog, "nuget");\r
81 \r
82                 return myActionFactory.createUpdate(myContext,\r
83                         myUpdateParameters,\r
84                         config,\r
85                         targetFolder)\r
86                         ;\r
87               }\r
88 \r
89               public void finishedImpl() {\r
90                 logger.activityFinished("update", "nuget");\r
91               }\r
92             }\r
93     );\r
94   }\r
95 \r
96   private DelegatingBuildProcess createInstallAction(final File config, final File targetFolder) {\r
97     return new DelegatingBuildProcess(\r
98             new DelegatingBuildProcess.Action() {\r
99               private final BuildProgressLogger logger = myContext.getBuild().getBuildLogger();\r
100 \r
101               @NotNull\r
102               public BuildProcess startImpl() throws RunBuildException {\r
103                 String pathToLog = FileUtil.getRelativePath(myContext.getBuild().getCheckoutDirectory(), config);\r
104                 if (pathToLog == null) pathToLog = config.getPath();\r
105                 logger.activityStarted("install", "Installing NuGet packages for " + pathToLog, "nuget");\r
106 \r
107 \r
108                 return myActionFactory.createInstall(myContext,\r
109                         myInstallParameters,\r
110                         config,\r
111                         targetFolder)\r
112                         ;\r
113               }\r
114 \r
115               public void finishedImpl() {\r
116                 logger.activityFinished("install", "nuget");\r
117               }\r
118             }\r
119     );\r
120   }\r
121 }\r