df1b2246229d54547dcf8bab4bb5189234d03cb3
[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.server.toolRegistry.*;\r
21 import org.jetbrains.annotations.NotNull;\r
22 \r
23 import java.lang.reflect.InvocationHandler;\r
24 import java.lang.reflect.Method;\r
25 import java.lang.reflect.Proxy;\r
26 import java.util.Arrays;\r
27 import java.util.Collection;\r
28 import java.util.Collections;\r
29 import java.util.List;\r
30 \r
31 /**\r
32  * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
33  * Date: 11.08.11 1:07\r
34  */\r
35 public class NuGetToolManagerImpl implements NuGetToolManager {\r
36   private static final Logger LOG = Logger.getInstance(NuGetToolManagerImpl.class.getName());\r
37 \r
38   private final AvailableToolsState myAvailables;\r
39   private final NuGetToolsInstaller myInstaller;\r
40   private final ToolsRegistry myInstalled;\r
41 \r
42   public NuGetToolManagerImpl(@NotNull final AvailableToolsState availables,\r
43                               @NotNull final NuGetToolsInstaller installer,\r
44                               @NotNull final ToolsRegistry installed) {\r
45     myAvailables = availables;\r
46     myInstaller = installer;\r
47     myInstalled = installed;\r
48   }\r
49 \r
50   @NotNull\r
51   public Collection<? extends NuGetInstalledTool> getInstalledTools() {\r
52     return myInstalled.getTools();\r
53   }\r
54 \r
55   @NotNull\r
56   public Collection<NuGetInstallingTool> getInstallingTool() {\r
57     return Collections.emptyList();\r
58   }\r
59 \r
60   @NotNull\r
61   public Collection<? extends NuGetTool> getAvailableTools(@NotNull ToolsPolicy policy) throws FetchException {\r
62     //This must be cached to make if work faster!\r
63     return myAvailables.getAvailable(policy);\r
64   }\r
65 \r
66   public void installTool(@NotNull String toolId) {\r
67     myInstaller.installNuGet(\r
68             toolId,\r
69             (InstallLogger) Proxy.newProxyInstance(getClass().getClassLoader(),\r
70                     new Class<?>[]{InstallLogger.class},\r
71                     new InvocationHandler() {\r
72                       public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {\r
73                         StringBuilder sb = new StringBuilder();\r
74                         sb.append(method.getName());\r
75                         for (Object arg : args) {\r
76                           sb.append(" ").append(arg);\r
77                         }\r
78                         LOG.debug(sb.toString());\r
79                         return null;\r
80                       }\r
81                     }));\r
82   }\r
83 \r
84   public void removeTool(@NotNull String toolId) {\r
85     myInstalled.removeTool(toolId);\r
86   }\r
87 \r
88   private List<NuGetInstallingTool> mockInstallingTools() {\r
89     return Arrays.<NuGetInstallingTool>asList(\r
90             new NuGetInstallingTool() {\r
91               @NotNull\r
92               public Collection<String> getInstallMessages() {\r
93                 return Arrays.asList("mgs1", "msg2", "msg3");\r
94               }\r
95 \r
96               @NotNull\r
97               public String getId() {\r
98                 return "ii-1";\r
99               }\r
100 \r
101               @NotNull\r
102               public String getVersion() {\r
103                 return "ii.1.2.43";\r
104               }\r
105             }\r
106     );\r
107   }\r
108 }\r