support custom nuget.exe selection
[teamcity/dotNetPackagesSupport.git] / nuget-server / src / jetbrains / buildServer / nuget / server / toolRegistry / ui / ToolSelectorController.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.server.toolRegistry.ui;\r
18 \r
19 import jetbrains.buildServer.controllers.BaseController;\r
20 import jetbrains.buildServer.controllers.BasePropertiesBean;\r
21 import jetbrains.buildServer.nuget.server.toolRegistry.NuGetInstalledTool;\r
22 import jetbrains.buildServer.nuget.server.toolRegistry.NuGetToolManager;\r
23 import jetbrains.buildServer.nuget.server.toolRegistry.tab.ServerSettingsTab;\r
24 import jetbrains.buildServer.util.StringUtil;\r
25 import jetbrains.buildServer.web.openapi.PluginDescriptor;\r
26 import jetbrains.buildServer.web.openapi.WebControllerManager;\r
27 import org.jetbrains.annotations.NotNull;\r
28 import org.jetbrains.annotations.Nullable;\r
29 import org.springframework.web.servlet.ModelAndView;\r
30 \r
31 import javax.servlet.http.HttpServletRequest;\r
32 import javax.servlet.http.HttpServletResponse;\r
33 import java.util.ArrayList;\r
34 import java.util.Collection;\r
35 \r
36 /**\r
37  * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
38  * Date: 16.08.11 10:21\r
39  */\r
40 public class ToolSelectorController extends BaseController {\r
41   private final NuGetToolManager myToolManager;\r
42   private final PluginDescriptor myDescriptor;\r
43   private final String myPath;\r
44 \r
45   public ToolSelectorController(@NotNull final NuGetToolManager toolManager,\r
46                                 @NotNull final PluginDescriptor descriptor,\r
47                                 @NotNull final WebControllerManager web) {\r
48     myToolManager = toolManager;\r
49     myDescriptor = descriptor;\r
50     myPath = descriptor.getPluginResourcesPath("tool/runnerSettings.html");\r
51     web.registerController(myPath, this);\r
52   }\r
53 \r
54   @NotNull\r
55   public String getPath() {\r
56     return myPath;\r
57   }\r
58 \r
59   @Override\r
60   protected ModelAndView doHandle(HttpServletRequest request, HttpServletResponse response) throws Exception {\r
61     final String name = safe(request.getParameter("name"));\r
62     String value = parseValue(request, "value", name);\r
63     final Collection<ToolInfo> tools = getTools();\r
64     ensureVersion(value, tools);\r
65 \r
66 \r
67     ModelAndView mv = new ModelAndView(myDescriptor.getPluginResourcesPath("tool/runnerSettings.jsp"));\r
68     mv.getModel().put("name", name);\r
69     mv.getModel().put("value", value);\r
70     mv.getModel().put("customValue", safe(parseValue(request, "customValue", "nugetCustomPath")));\r
71     mv.getModel().put("clazz", safe(request.getParameter("class")));\r
72     mv.getModel().put("style", safe(request.getParameter("style")));\r
73     mv.getModel().put("items", tools);\r
74     mv.getModel().put("settingsUrl", "/admin/serverConfig.html?init=1&tab=" + ServerSettingsTab.TAB_ID);\r
75     return mv;\r
76   }\r
77 \r
78   private void ensureVersion(@NotNull final String version, @NotNull Collection<ToolInfo> actionInfos) {\r
79     if (!version.startsWith("?")) return;\r
80     for (ToolInfo actionInfo : actionInfos) {\r
81       if (actionInfo.getId().equals(version)) return;\r
82     }\r
83     actionInfos.add(new ToolInfo(version, "Not Installed: " + version.substring(1)));\r
84   }\r
85 \r
86   @NotNull\r
87   private Collection<ToolInfo> getTools() {\r
88     final ArrayList<ToolInfo> result = new ArrayList<ToolInfo>();\r
89     for (NuGetInstalledTool nuGetInstalledTool : myToolManager.getInstalledTools()) {\r
90       result.add(new ToolInfo(nuGetInstalledTool));\r
91     }\r
92     return result;\r
93   }\r
94 \r
95   private static String safe(@Nullable String s) {\r
96     if (StringUtil.isEmptyOrSpaces(s)) return "";\r
97     return s;\r
98   }\r
99 \r
100   @NotNull\r
101   private String parseValue(HttpServletRequest request, final String requestName, String propertyName) {\r
102     String value = null;\r
103 \r
104     final BasePropertiesBean bean = (BasePropertiesBean)request.getAttribute("propertiesBean");\r
105     if (bean != null) {\r
106       value = bean.getProperties().get(propertyName);\r
107     }\r
108     if (value == null) {\r
109       value = request.getParameter(requestName);\r
110     }\r
111     if (value == null) {\r
112       value = "";\r
113     }\r
114     return value;\r
115   }\r
116 }\r