support nuget tools reference in nuget trigger
[teamcity/dotNetPackagesSupport.git] / nuget-server / src / jetbrains / buildServer / nuget / server / toolRegistry / impl / NuGetToolManagerImpl.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.impl;\r
18 \r
19 import com.intellij.openapi.diagnostic.Logger;\r
20 import jetbrains.buildServer.nuget.common.FeedConstants;\r
21 import jetbrains.buildServer.nuget.server.toolRegistry.*;\r
22 import jetbrains.buildServer.util.StringUtil;\r
23 import org.jetbrains.annotations.NotNull;\r
24 import org.jetbrains.annotations.Nullable;\r
25 \r
26 import java.io.File;\r
27 import java.lang.reflect.InvocationHandler;\r
28 import java.lang.reflect.Method;\r
29 import java.lang.reflect.Proxy;\r
30 import java.util.Collection;\r
31 import java.util.Collections;\r
32 \r
33 /**\r
34  * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
35  * Date: 11.08.11 1:07\r
36  */\r
37 public class NuGetToolManagerImpl implements NuGetToolManager {\r
38   private static final Logger LOG = Logger.getInstance(NuGetToolManagerImpl.class.getName());\r
39 \r
40   private final AvailableToolsState myAvailables;\r
41   private final NuGetToolsInstaller myInstaller;\r
42   private final ToolsRegistry myInstalled;\r
43 \r
44   public NuGetToolManagerImpl(@NotNull final AvailableToolsState availables,\r
45                               @NotNull final NuGetToolsInstaller installer,\r
46                               @NotNull final ToolsRegistry installed) {\r
47     myAvailables = availables;\r
48     myInstaller = installer;\r
49     myInstalled = installed;\r
50   }\r
51 \r
52   @NotNull\r
53   public Collection<? extends NuGetInstalledTool> getInstalledTools() {\r
54     return myInstalled.getTools();\r
55   }\r
56 \r
57   @NotNull\r
58   public Collection<NuGetInstallingTool> getInstallingTool() {\r
59     return Collections.emptyList();\r
60   }\r
61 \r
62   @NotNull\r
63   public Collection<? extends NuGetTool> getAvailableTools(@NotNull ToolsPolicy policy) throws FetchException {\r
64     //This must be cached to make if work faster!\r
65     return myAvailables.getAvailable(policy);\r
66   }\r
67 \r
68   public void installTool(@NotNull String toolId) {\r
69     myInstaller.installNuGet(\r
70             toolId,\r
71             (InstallLogger) Proxy.newProxyInstance(getClass().getClassLoader(),\r
72                     new Class<?>[]{InstallLogger.class},\r
73                     new InvocationHandler() {\r
74                       public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {\r
75                         StringBuilder sb = new StringBuilder();\r
76                         sb.append(method.getName());\r
77                         for (Object arg : args) {\r
78                           sb.append(" ").append(arg);\r
79                         }\r
80                         LOG.debug(sb.toString());\r
81                         return null;\r
82                       }\r
83                     }));\r
84   }\r
85 \r
86   public void removeTool(@NotNull String toolId) {\r
87     myInstalled.removeTool(toolId);\r
88   }\r
89 \r
90   @Nullable\r
91   public String getNuGetPath(@Nullable final String path) {\r
92     if (path == null || StringUtil.isEmptyOrSpaces(path)) return path;\r
93     if (!path.startsWith("?")) {\r
94       return path;\r
95     }\r
96     final String id = path.substring(1);\r
97     final File nuGetPath = myInstalled.getNuGetPath(id);\r
98     if (nuGetPath != null) {\r
99       return nuGetPath.getPath();\r
100     }\r
101     throw new RuntimeException("Failed to find " + FeedConstants.NUGET_COMMANDLINE + " version " + id);\r
102   }\r
103 }\r