support nuget tools reference in nuget trigger
[teamcity/dotNetPackagesSupport.git] / nuget-agent / src / jetbrains / buildServer / nuget / agent / parameters / impl / PackagesParametersFactoryImpl.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.parameters.impl;\r
18 \r
19 import jetbrains.buildServer.RunBuildException;\r
20 import jetbrains.buildServer.agent.BuildRunnerContext;\r
21 import jetbrains.buildServer.agent.BundledTool;\r
22 import jetbrains.buildServer.agent.BundledToolsRegistry;\r
23 import jetbrains.buildServer.nuget.agent.parameters.*;\r
24 import jetbrains.buildServer.nuget.common.PackagesUpdateMode;\r
25 import jetbrains.buildServer.util.FileUtil;\r
26 import jetbrains.buildServer.util.StringUtil;\r
27 import org.jetbrains.annotations.NotNull;\r
28 \r
29 import java.io.File;\r
30 import java.util.ArrayList;\r
31 import java.util.Collection;\r
32 import java.util.Collections;\r
33 import java.util.List;\r
34 \r
35 import static jetbrains.buildServer.nuget.common.PackagesConstants.*;\r
36 \r
37 /**\r
38  * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
39  * Date: 07.07.11 18:09\r
40  */\r
41 public class PackagesParametersFactoryImpl implements PackagesParametersFactory {\r
42   private final BundledToolsRegistry myBundledTools;\r
43 \r
44   public PackagesParametersFactoryImpl(@NotNull final BundledToolsRegistry bundledTools) {\r
45     myBundledTools = bundledTools;\r
46   }\r
47 \r
48   @NotNull\r
49   public NuGetFetchParameters loadNuGetFetchParameters(@NotNull final BuildRunnerContext context) throws RunBuildException {\r
50     return new NuGetFetchParameters() {\r
51       @NotNull\r
52       public File getSolutionFile() throws RunBuildException {\r
53         return getFile(context, SLN_PATH, "Visual Studio .sln file");\r
54       }\r
55 \r
56       @NotNull\r
57       public File getNuGetExeFile() throws RunBuildException {\r
58         return getPathToNuGet(context);\r
59       }\r
60 \r
61       @NotNull\r
62       public Collection<String> getNuGetPackageSources() {\r
63         return getMultilineParameter(context, NUGET_SOURCES);\r
64       }\r
65 \r
66       public boolean getExcludeVersion() {\r
67         return getBoolean(context, NUGET_EXCLUDE_VERSION);\r
68       }\r
69     };\r
70   }\r
71 \r
72   private File getPathToNuGet(BuildRunnerContext context) throws RunBuildException {\r
73     String path = getParameter(context, NUGET_PATH);\r
74     if (StringUtil.isEmptyOrSpaces(path))\r
75       throw new RunBuildException("Runner parameter '" + NUGET_PATH + "' was not found");\r
76 \r
77     if (path.startsWith("?")) {\r
78       final BundledTool tool = myBundledTools.findTool(path.substring(1));\r
79       if (tool != null) {\r
80         path = new File(tool.getRootPath(), NUGET_TOOL_REL_PATH).getPath();\r
81       }\r
82     }\r
83 \r
84     File file = FileUtil.resolvePath(context.getBuild().getCheckoutDirectory(), path);\r
85     if (!file.exists()) {\r
86       throw new RunBuildException("Failed to find " + "nuget.exe" + " at " + file);\r
87     }\r
88 \r
89     return file;\r
90   }\r
91 \r
92   @NotNull\r
93   private File getFile(@NotNull final BuildRunnerContext context,\r
94                        @NotNull final String runnerParameter,\r
95                        @NotNull final String fileName) throws RunBuildException {\r
96     String path = getParameter(context, runnerParameter);\r
97     if (StringUtil.isEmptyOrSpaces(path))\r
98       throw new RunBuildException("Runner parameter '" + runnerParameter + "' was not found");\r
99 \r
100     File file = FileUtil.resolvePath(context.getBuild().getCheckoutDirectory(), path);\r
101     if (!file.exists()) {\r
102       throw new RunBuildException("Failed to find " + fileName + " at " + file);\r
103     }\r
104 \r
105     return file;\r
106   }\r
107 \r
108 \r
109   private Collection<String> getMultilineParameter(BuildRunnerContext context, String nugetSources) {\r
110     String sources = getParameter(context, nugetSources);\r
111     if (sources == null) return Collections.emptyList();\r
112 \r
113     List<String> list = new ArrayList<String>();\r
114     for (String _source : sources.split("[\\r\\n]+")) {\r
115       final String source = _source.trim();\r
116       if (!source.isEmpty()) {\r
117         list.add(source);\r
118       }\r
119     }\r
120 \r
121     return Collections.unmodifiableList(list);\r
122   }\r
123 \r
124   private boolean getBoolean(@NotNull BuildRunnerContext context, @NotNull String key) {\r
125     return !StringUtil.isEmptyOrSpaces(getParameter(context, key));\r
126   }\r
127 \r
128   private String getParameter(@NotNull BuildRunnerContext context, @NotNull String key) {\r
129     return context.getRunnerParameters().get(key);\r
130   }\r
131 \r
132 \r
133   public PackagesInstallParameters loadInstallPackagesParameters(@NotNull final BuildRunnerContext context,\r
134                                                                  @NotNull final NuGetFetchParameters nuget) throws RunBuildException {\r
135     return new PackagesInstallParameters() {\r
136       @NotNull\r
137       public NuGetFetchParameters getNuGetParameters() {\r
138         return nuget;\r
139       }\r
140 \r
141       public boolean getExcludeVersion() {\r
142         return getBoolean(context, NUGET_EXCLUDE_VERSION);\r
143       }\r
144     };\r
145   }\r
146 \r
147   public PackagesUpdateParameters loadUpdatePackagesParameters(@NotNull final BuildRunnerContext context,\r
148                                                                @NotNull final NuGetFetchParameters nuget) throws RunBuildException {\r
149     if (!getBoolean(context, NUGET_UPDATE_PACKAGES)) return null;\r
150 \r
151     return new PackagesUpdateParameters() {\r
152       @NotNull\r
153       public NuGetFetchParameters getNuGetParameters() {\r
154         return nuget;\r
155       }\r
156 \r
157       @NotNull\r
158       public PackagesUpdateMode getUpdateMode() {\r
159         PackagesUpdateMode mode = PackagesUpdateMode.parse(getParameter(context, NUGET_UPDATE_MODE));\r
160         return mode == null ? PackagesUpdateMode.FOR_SLN : mode;\r
161       }\r
162 \r
163       public boolean getUseSafeUpdate() {\r
164         return getBoolean(context, NUGET_UPDATE_PACKAGES_SAFE);\r
165       }\r
166 \r
167       @NotNull\r
168       public Collection<String> getPackagesToUpdate() {\r
169         return getMultilineParameter(context, NUGET_UPDATE_PACKAGE_IDS);\r
170       }\r
171     };\r
172   }\r
173 \r
174   @NotNull\r
175   public NuGetPublishParameters loadPublishParameters(@NotNull final BuildRunnerContext context) throws RunBuildException {\r
176     return new NuGetPublishParameters() {\r
177       public String getPublishSource() throws RunBuildException {\r
178         return getParameter(context, NUGET_PUBLISH_SOURCE);\r
179       }\r
180 \r
181       @NotNull\r
182       public String getApiKey() throws RunBuildException {\r
183         return getParameter(context, NUGET_API_KEY);\r
184       }\r
185 \r
186       @NotNull\r
187       public Collection<String> getFiles() throws RunBuildException {\r
188         return getMultilineParameter(context, NUGET_PUBLISH_FILES);\r
189       }\r
190 \r
191       public boolean getCreateOnly() {\r
192         return getBoolean(context, NUGET_PUBLISH_CREATE_ONLY);\r
193       }\r
194 \r
195       @NotNull\r
196       public File getNuGetExeFile() throws RunBuildException {\r
197         return getPathToNuGet(context);\r
198       }\r
199     };\r
200   }\r
201 }\r