report package installation errors, simplify code
[teamcity/dotNetPackagesSupport.git] / nuget-server / src / jetbrains / buildServer / nuget / server / toolRegistry / impl / NuGetToolsInstaller.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.feed.reader.FeedPackage;\r
21 import jetbrains.buildServer.nuget.server.feed.reader.NuGetFeedReader;\r
22 import jetbrains.buildServer.nuget.server.toolRegistry.ToolException;\r
23 import jetbrains.buildServer.util.FileUtil;\r
24 import org.jetbrains.annotations.NotNull;\r
25 \r
26 import java.io.File;\r
27 import java.io.IOException;\r
28 \r
29 /**\r
30  * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
31  * Date: 15.08.11 20:47\r
32  */\r
33 public class NuGetToolsInstaller {\r
34   private static final Logger LOG = Logger.getInstance(NuGetToolsInstaller.class.getName());\r
35 \r
36   private final ToolPaths myToolPaths;\r
37   private final NuGetFeedReader myClient;\r
38   private final AvailableToolsState myState;\r
39   private final ToolsWatcher myWatcher;\r
40 \r
41   public NuGetToolsInstaller(@NotNull final ToolPaths toolPaths,\r
42                              @NotNull final NuGetFeedReader client,\r
43                              @NotNull final AvailableToolsState state,\r
44                              @NotNull final ToolsWatcher watcher) {\r
45     myToolPaths = toolPaths;\r
46     myClient = client;\r
47     myState = state;\r
48     myWatcher = watcher;\r
49   }\r
50 \r
51   public void installNuGet(@NotNull final String packageId) throws ToolException {\r
52     LOG.info("Start installing package " + packageId);\r
53 \r
54     final FeedPackage tool = myState.findTool(packageId);\r
55     if (tool == null) {\r
56       throw new ToolException("Failed to find package " + packageId);\r
57     }\r
58 \r
59     LOG.info("Downloading package from: " + tool.getDownloadUrl());\r
60     File dest = new File(myToolPaths.getPackages(), tool.getInfo().getId() + "." + tool.getInfo().getVersion() + ".nupkg");\r
61     try {\r
62       File tmp = File.createTempFile(dest.getName(), ".nupkg");\r
63       FileUtil.createParentDirs(tmp);\r
64       myClient.downloadPackage(tool, tmp);\r
65       if (!tmp.renameTo(dest)) {\r
66         throw new IOException("Failed to plug downloaded package to " + dest);\r
67       }\r
68     } catch (Exception e) {\r
69       throw new ToolException("Failed to download package " + tool + ". " + e.getMessage(), e);\r
70     }\r
71     myWatcher.checkNow();\r
72   }\r
73 }\r