show available nuget versions
[teamcity/dotNetPackagesSupport.git] / nuget-server / src / jetbrains / buildServer / nuget / server / show / NuGetDownloadedPackagesTab.java
1 package jetbrains.buildServer.nuget.server.show;\r
2 \r
3 import com.intellij.openapi.diagnostic.Logger;\r
4 import jetbrains.buildServer.nuget.common.PackageDependencies;\r
5 import jetbrains.buildServer.nuget.common.PackageDependenciesStore;\r
6 import jetbrains.buildServer.nuget.common.PackageInfo;\r
7 import jetbrains.buildServer.serverSide.SBuild;\r
8 import jetbrains.buildServer.serverSide.SBuildServer;\r
9 import jetbrains.buildServer.serverSide.artifacts.BuildArtifact;\r
10 import jetbrains.buildServer.serverSide.artifacts.BuildArtifactsViewMode;\r
11 import jetbrains.buildServer.util.FileUtil;\r
12 import jetbrains.buildServer.web.openapi.PagePlaces;\r
13 import jetbrains.buildServer.web.openapi.PluginDescriptor;\r
14 import jetbrains.buildServer.web.openapi.ViewLogTab;\r
15 import org.jetbrains.annotations.NotNull;\r
16 import org.jetbrains.annotations.Nullable;\r
17 \r
18 import javax.servlet.http.HttpServletRequest;\r
19 import java.io.IOException;\r
20 import java.io.InputStream;\r
21 import java.util.Map;\r
22 import java.util.TreeMap;\r
23 \r
24 import static jetbrains.buildServer.nuget.common.PackagesConstants.NUGET_USED_PACKAGES_DIR;\r
25 import static jetbrains.buildServer.nuget.common.PackagesConstants.NUGET_USED_PACKAGES_FILE;\r
26 \r
27 /**\r
28  * Created Eugene Petrenko (eugene.petrenko@gmail.com)\r
29  * date: 28.04.11\r
30  */\r
31 public class NuGetDownloadedPackagesTab extends ViewLogTab {\r
32   private static final String DEPS_FILE = NUGET_USED_PACKAGES_DIR + "/" + NUGET_USED_PACKAGES_FILE;\r
33   private static final Logger LOG = Logger.getInstance(NuGetDownloadedPackagesTab.class.getName());\r
34 \r
35 \r
36   private final PackageDependenciesStore myStore;\r
37 \r
38   public NuGetDownloadedPackagesTab(@NotNull final PagePlaces pagePlaces,\r
39                                     @NotNull final SBuildServer server,\r
40                                     @NotNull final PluginDescriptor descriptor,\r
41                                     @NotNull final PackageDependenciesStore store) {\r
42     super("NuGet Packages", "nugetPackagesBuildTab", pagePlaces, server);\r
43     myStore = store;\r
44     setIncludeUrl(descriptor.getPluginResourcesPath("show/showPackages.jsp"));\r
45     register();\r
46   }\r
47 \r
48   @Override\r
49   public boolean isAvailable(@NotNull final HttpServletRequest request) {\r
50     final SBuild build = getBuild(request);\r
51     return super.isAvailable(request) && getPackagesFile(build) != null;\r
52   }\r
53 \r
54   @Nullable\r
55   private BuildArtifact getPackagesFile(@Nullable final SBuild build) {\r
56     if (build == null) return null;\r
57     BuildArtifact file = build.getArtifacts(BuildArtifactsViewMode.VIEW_ALL).getArtifact(DEPS_FILE);\r
58     if (file == null) return null;\r
59     if (file.isDirectory()) return null;\r
60     return file;\r
61   }\r
62 \r
63 \r
64   @Override\r
65   protected void fillModel(final Map model, final HttpServletRequest request, @Nullable final SBuild build) {\r
66     final Map<String, String> packages = new TreeMap<String, String>();\r
67     //noinspection unchecked\r
68     model.put("nugetPackages", packages);\r
69 \r
70     if (build == null) return;\r
71     PackageDependencies deps = loadDependencies(build);\r
72 \r
73     if (deps != null) {\r
74       for (PackageInfo info : deps.getPackages()) {\r
75         packages.put(info.getId(), info.getVersion());\r
76       }\r
77     }\r
78   }\r
79 \r
80   @Nullable\r
81   private PackageDependencies loadDependencies(@NotNull final SBuild build) {\r
82     final BuildArtifact file = getPackagesFile(build);\r
83     if (file != null) {\r
84       InputStream inputStream = null;\r
85       try {\r
86         inputStream = file.getInputStream();\r
87         return myStore.load(inputStream);\r
88       } catch (IOException e) {\r
89         LOG.warn("Failed to read used packages build artifacts of build id=" + build.getBuildId());\r
90       } finally {\r
91         FileUtil.close(inputStream);\r
92       }\r
93     }\r
94     return null;\r
95   }\r
96 }\r