polish install tool IU
[teamcity/dotNetPackagesSupport.git] / nuget-server / src / jetbrains / buildServer / nuget / server / toolRegistry / impl / AvailableToolsState.java
index bb69a94f0c6fdce89a450b771ca3338aca1189b9..5abf9f397474f51c405bb9a5da2c8aae8586121e 100644 (file)
@@ -22,6 +22,7 @@ import jetbrains.buildServer.nuget.server.feed.reader.NuGetFeedReader;
 import jetbrains.buildServer.nuget.server.toolRegistry.NuGetTool;\r
 import jetbrains.buildServer.util.CollectionsUtil;\r
 import jetbrains.buildServer.util.Converter;\r
+import jetbrains.buildServer.util.TimeService;\r
 import jetbrains.buildServer.util.filters.Filter;\r
 import org.jetbrains.annotations.NotNull;\r
 \r
@@ -34,13 +35,30 @@ import java.util.Collections;
  * Date: 15.08.11 16:33\r
  */\r
 public class AvailableToolsState {\r
+  private static final long TIMEOUT = 1000 * 60 * 15; //15 min\r
+\r
   private final NuGetFeedReader myReader;\r
+  private final TimeService myTime;\r
+  private Collection<NuGetTool> myTools;\r
+  private long lastRequest = 0;\r
 \r
-  public AvailableToolsState(@NotNull final NuGetFeedReader reader) {\r
+  public AvailableToolsState(@NotNull final NuGetFeedReader reader,\r
+                             @NotNull final TimeService time) {\r
     myReader = reader;\r
+    myTime = time;\r
   }\r
 \r
+  @NotNull\r
   public Collection<NuGetTool> getAvailable() {\r
+    Collection<NuGetTool> nuGetTools = myTools;\r
+    if (nuGetTools == null || lastRequest + TIMEOUT < myTime.now()) {\r
+      myTools = nuGetTools = fetchAvailable();\r
+      lastRequest = myTime.now();\r
+    }\r
+    return nuGetTools;\r
+  }\r
+\r
+  private Collection<NuGetTool> fetchAvailable() {\r
     try {\r
       final Collection<FeedPackage> packages = myReader.queryPackageVersions(FeedConstants.FEED_URL, FeedConstants.NUGET_COMMANDLINE);\r
       return CollectionsUtil.filterAndConvertCollection(\r