support nuget tools reference in nuget trigger
[teamcity/dotNetPackagesSupport.git] / nuget-server / src / jetbrains / buildServer / nuget / server / toolRegistry / impl / ToolsRegistry.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.PackagesConstants;\r
21 import jetbrains.buildServer.nuget.server.toolRegistry.NuGetInstalledTool;\r
22 import jetbrains.buildServer.util.FileUtil;\r
23 import jetbrains.buildServer.util.StringUtil;\r
24 import org.jetbrains.annotations.NotNull;\r
25 import org.jetbrains.annotations.Nullable;\r
26 \r
27 import java.io.File;\r
28 import java.io.FileFilter;\r
29 import java.util.ArrayList;\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: 16.08.11 0:25\r
36  */\r
37 public class ToolsRegistry {\r
38   private static final Logger LOG = Logger.getInstance(ToolsRegistry.class.getName());\r
39 \r
40   private final ToolPaths myPaths;\r
41   private final PluginNaming myNaming;\r
42   private final ToolsWatcher myWatcher;\r
43 \r
44   public ToolsRegistry(@NotNull final ToolPaths paths,\r
45                        @NotNull final PluginNaming naming,\r
46                        @NotNull final ToolsWatcher watcher) {\r
47     myPaths = paths;\r
48     myNaming = naming;\r
49     myWatcher = watcher;\r
50   }\r
51 \r
52   @NotNull\r
53   public Collection<? extends NuGetInstalledTool> getTools() {\r
54     return getToolsInternal();\r
55   }\r
56 \r
57   @Nullable\r
58   public File getNuGetPath(@NotNull String path) {\r
59     if (StringUtil.isEmptyOrSpaces(path)) return null;\r
60     for (NuGetInstalledTool tool : getToolsInternal()) {\r
61       if (tool.getId().equals(path)) {\r
62         return tool.getPath();\r
63       }\r
64     }\r
65     return null;\r
66   }\r
67 \r
68   private Collection<InstalledTool> getToolsInternal() {\r
69     final File[] tools = myPaths.getPackages().listFiles(IS_PACKAGE);\r
70     if (tools == null) return Collections.emptyList();\r
71 \r
72     final Collection<InstalledTool> result = new ArrayList<InstalledTool>();\r
73     for (final File path : tools) {\r
74       final InstalledTool e = new InstalledTool(myNaming, path);\r
75       if (!e.getPath().isFile()) {\r
76         LOG.warn("NuGet.exe is not found at " + e);\r
77         continue;\r
78       }\r
79 \r
80       if (!e.getAgentPluginFile().isFile()) {\r
81         LOG.warn("NuGet tool is not packed for agent. " + e);\r
82         continue;\r
83       }\r
84       result.add(e);\r
85     }\r
86     return result;\r
87   }\r
88 \r
89   public void removeTool(@NotNull final String toolId) {\r
90     for (InstalledTool tool : getToolsInternal()) {\r
91       if (tool.getId().equals(toolId)) {\r
92         LOG.info("Removing NuGet plugin: " + tool);\r
93         tool.delete();\r
94       }\r
95     }\r
96     myWatcher.checkNow();\r
97   }\r
98 \r
99   private static class InstalledTool implements NuGetInstalledTool {\r
100     private final PluginNaming myNaming;\r
101     private final File myPath;\r
102 \r
103     public InstalledTool(PluginNaming naming, @NotNull final File path) {\r
104       myNaming = naming;\r
105       myPath = path;\r
106     }\r
107 \r
108     @NotNull\r
109     public File getPath() {\r
110       return FileUtil.getCanonicalFile(new File(myNaming.getUnpackedFolder(myPath), PackagesConstants.NUGET_TOOL_REL_PATH));\r
111     }\r
112 \r
113     @NotNull\r
114     public File getAgentPluginFile() {\r
115       return FileUtil.getCanonicalFile(myNaming.getAgentFile(myPath));\r
116     }\r
117 \r
118     public void delete() {\r
119       FileUtil.delete(myPath);\r
120     }\r
121 \r
122     @NotNull\r
123     public String getId() {\r
124       return myPath.getName();\r
125     }\r
126 \r
127     @NotNull\r
128     public String getVersion() {\r
129       return myNaming.getVersion(myPath);\r
130     }\r
131 \r
132     @Override\r
133     public String toString() {\r
134       return "InstalledTool{version=" + getVersion() +\r
135               ", myPath=" + myPath +\r
136               '}';\r
137     }\r
138   }\r
139 \r
140   private final FileFilter IS_PACKAGE = new FileFilter() {\r
141     public boolean accept(File pathname) {\r
142       return pathname.isFile() && pathname.getName().endsWith(".nupkg");\r
143     }\r
144   };\r
145 \r
146 }\r