implement push command
[teamcity/dotNetPackagesSupport.git] / nuget-agent / src / jetbrains / buildServer / nuget / agent / commands / impl / CommandFactoryImpl.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.commands.impl;\r
18 \r
19 import jetbrains.buildServer.RunBuildException;\r
20 import jetbrains.buildServer.nuget.agent.commands.CommandFactory;\r
21 import jetbrains.buildServer.nuget.agent.parameters.*;\r
22 import jetbrains.buildServer.util.FileUtil;\r
23 import org.jetbrains.annotations.NotNull;\r
24 \r
25 import java.io.File;\r
26 import java.util.ArrayList;\r
27 import java.util.Arrays;\r
28 import java.util.Collection;\r
29 import java.util.List;\r
30 \r
31 /**\r
32  * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
33  * Date: 21.07.11 16:10\r
34  */\r
35 public class CommandFactoryImpl implements CommandFactory {\r
36 \r
37   @NotNull\r
38   public <T> T createInstall(@NotNull PackagesInstallParameters params, @NotNull File packagesConfig, @NotNull File targetFolder, @NotNull Callback<T> factory) throws RunBuildException {\r
39     final List<String> argz = new ArrayList<String>();\r
40     argz.add("install");\r
41     argz.add(FileUtil.getCanonicalFile(packagesConfig).getPath()); //path to package\r
42     if (params.getExcludeVersion()) {\r
43       argz.add("-ExcludeVersion");\r
44     }\r
45     argz.add("-OutputDirectory");\r
46     argz.add(FileUtil.getCanonicalFile(targetFolder).getPath());\r
47 \r
48     return executeNuGet(params.getNuGetParameters(), argz, packagesConfig.getParentFile(), factory);\r
49   }\r
50 \r
51   @NotNull\r
52   public <T> T createUpdate(@NotNull PackagesUpdateParameters params, @NotNull File packagesConfig, @NotNull File targetFolder, @NotNull Callback<T> factory) throws RunBuildException {\r
53     final List<String> argz = new ArrayList<String>();\r
54     argz.add("update");\r
55     argz.add(FileUtil.getCanonicalFile(packagesConfig).getPath()); //path to package\r
56     if (params.getUseSafeUpdate()) {\r
57       argz.add("-Safe");\r
58     }\r
59     argz.add("-Verbose");\r
60     argz.add("-RepositoryPath");\r
61     argz.add(FileUtil.getCanonicalFile(targetFolder).getPath());\r
62 \r
63     for (String id : params.getPackagesToUpdate()) {\r
64       argz.add("-Id");\r
65       argz.add(id);\r
66     }\r
67 \r
68     return executeNuGet(params.getNuGetParameters(), argz, packagesConfig.getParentFile(), factory);\r
69   }\r
70 \r
71   @NotNull\r
72   public <T> T createPush(@NotNull final NuGetPublishParameters params,\r
73                           @NotNull final File packagePath,\r
74                           @NotNull final Callback<T> factory) throws RunBuildException {\r
75     return executeNuGet(params, Arrays.asList(params.getPublishSource()),\r
76             Arrays.asList(\r
77                     packagePath.getPath(),\r
78                     params.getApiKey()\r
79             ),\r
80             packagePath.getParentFile(),\r
81             factory);\r
82   }\r
83 \r
84   @NotNull\r
85   private <T> T executeNuGet(@NotNull final NuGetFetchParameters nuget,\r
86                              @NotNull final Collection<String> arguments,\r
87                              @NotNull final File workingDir,\r
88                              @NotNull final Callback<T> factory) throws RunBuildException {\r
89     return executeNuGet(nuget, nuget.getNuGetPackageSources(), arguments, workingDir, factory);\r
90   }\r
91 \r
92   private <T> T executeNuGet(NuGetParameters nuget, Collection<String> sources, Collection<String> arguments, File workingDir, Callback<T> factory) throws RunBuildException {\r
93     final List<String> argz = new ArrayList<String>(arguments);\r
94     for (String source : sources) {\r
95       argz.add("-Source");\r
96       argz.add(source);\r
97     }\r
98 \r
99     return factory.createCommand(\r
100             nuget.getNuGetExeFile(),\r
101             workingDir,\r
102             argz\r
103     );\r
104   }\r
105 \r
106 }\r