make nuget install form dialog working,
authorEugene Petrenko <eugene.petrenko@gmail.com>
Mon, 15 Aug 2011 16:45:22 +0000 (20:45 +0400)
committerEugene Petrenko <eugene.petrenko@gmail.com>
Mon, 15 Aug 2011 16:45:22 +0000 (20:45 +0400)
add Refresh button

nuget-server/resources/tool/installTool-error.jsp
nuget-server/resources/tool/installTool-loading.jsp [deleted file]
nuget-server/resources/tool/installTool-show.jsp
nuget-server/resources/tool/tools.js
nuget-server/resources/tool/tools.jsp
nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/FetchException.java [new file with mode: 0644]
nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/NuGetToolManager.java
nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/ToolsPolicy.java [new file with mode: 0644]
nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/impl/AvailableToolsState.java
nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/impl/NuGetToolManagerImpl.java
nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/tab/InstallToolController.java

index cc6f5868ac9d81fa0b636a8a95f0f43e49304f6b..daec7a6f561da46e56951036e4de457649ea207e 100644 (file)
 <%@ include file="/include-internal.jsp" %>\r
 <jsp:useBean id="errorText" scope="request" type="java.lang.String"/>\r
 <div id="nugetInstallFormResreshInner">\r
-  <div class="error">\r
-    <p>Failed to fetch latest NuGet packages from default feed.</p>\r
-    <p><c:out value="${errorText}"/></p>\r
-    <p>Press <a href="#" onclick="BS.NuGet.Tools.InstallPopup.refreshForm()">Refresh</a> to try again.</p>\r
-    <script type="text/javascript">\r
-      BS.NuGet.Tools.InstallPopup.disableSubmit();\r
-    </script>\r
+  <div class="error" style="margin-left: 0">\r
+    <div>\r
+      Failed to fetch latest NuGet packages from default feed.\r
+    </div>\r
+    <div>\r
+      <c:out value="${errorText}"/>\r
+    </div>\r
   </div>\r
 </div>
\ No newline at end of file
diff --git a/nuget-server/resources/tool/installTool-loading.jsp b/nuget-server/resources/tool/installTool-loading.jsp
deleted file mode 100644 (file)
index 763c8bd..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-<%--\r
-  ~ Copyright 2000-2011 JetBrains s.r.o.\r
-  ~\r
-  ~ Licensed under the Apache License, Version 2.0 (the "License");\r
-  ~ you may not use this file except in compliance with the License.\r
-  ~ You may obtain a copy of the License at\r
-  ~\r
-  ~ http://www.apache.org/licenses/LICENSE-2.0\r
-  ~\r
-  ~ Unless required by applicable law or agreed to in writing, software\r
-  ~ distributed under the License is distributed on an "AS IS" BASIS,\r
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
-  ~ See the License for the specific language governing permissions and\r
-  ~ limitations under the License.\r
-  --%>\r
-<%@ include file="/include-internal.jsp" %>\r
-<div id="nugetInstallFormResreshInner">\r
-  <forms:saving style="float: left; display:block;"/>\r
-  Discovering available NuGet.exe Command Line versions\r
-  <script type="text/javascript">\r
-    BS.NuGet.Tools.InstallPopup.disableSubmit();\r
-  </script>\r
-</div>\r
-\r
index d6d171e7720124efde57b630ff66cf39dba92ee9..b780fd3092bf5bb6e705bbddd3424ba9814e8c87 100644 (file)
@@ -22,9 +22,6 @@
   <c:choose>\r
     <c:when test="${fn:length(available) eq 0}">\r
       No other NuGet.exe Command Line packages available\r
-      <script type="text/javascript">\r
-        BS.NuGet.Tools.InstallPopup.disableSubmit();\r
-      </script>\r
     </c:when>\r
     <c:otherwise>\r
       <table class="runnerFormTable">\r
@@ -51,4 +48,8 @@
       </table>\r
     </c:otherwise>\r
   </c:choose>\r
-</div>
\ No newline at end of file
+  <script type="text/javascript">\r
+    BS.NuGet.Tools.InstallPopup.enableSubmit();\r
+  </script>\r
+</div>\r
+\r
index 50dd7c5be6c92cc503a2f717c6367c9d157339f7..1e074dbcaeb27c29b0f00855e699cab1115d4bf2 100644 (file)
@@ -33,18 +33,21 @@ BS.NuGet.Tools = {
     },\r
 \r
     disableSubmit : function() {\r
-      $('installNuGetApplyButton').disabled = true;\r
+      $('installNuGetApplyButton').disabled = 'disabled';\r
     },\r
 \r
     enableSubmit : function() {\r
-      $('installNuGetApplyButton').disabled = false;\r
+      $('installNuGetApplyButton').disabled = '';\r
     },\r
 \r
-    refreshForm : function() {\r
-      var that = this;\r
-      that.enableSubmit();\r
-      $('nugetInstallFormResresh').refresh("nugetInstallLinkSaving", null, function() {\r
-        that.showCentered();\r
+    refreshForm : function(fresh) {\r
+      this.disableSubmit();\r
+      BS.Util.hide($('nugetInstallFormResresh'));\r
+      BS.Util.show($('nugetInstallFormLoading'));\r
+      $('nugetInstallFormResresh').refresh("nugetInstallLinkSaving", fresh ? "fresh=1": "", function() {\r
+        BS.Util.hide($('nugetInstallFormLoading'));\r
+        BS.Util.show($('nugetInstallFormResresh'));\r
+        BS.NuGet.Tools.InstallPopup.showCentered();\r
       });\r
       return false;\r
     },\r
@@ -67,9 +70,12 @@ BS.NuGet.Tools = {
           if (!wereErrors) {\r
             BS.NuGet.Tools.refreshPackagesList();\r
             form.close();\r
+          } else {\r
+            BS.Util.reenableForm(form.formElement());\r
           }\r
         }\r
       }));\r
+      return false;\r
     }\r
   }))\r
 };\r
index fda3666ee3b4cf2c7a80163e009b71e548ee680f..f1da916e63671a29487f13c80a970f1fa014c2cc 100644 (file)
         action="${actualInstallerUrl}"\r
         closeCommand="BS.NuGet.Tools.InstallPopup.close();"\r
         saveCommand="BS.NuGet.Tools.InstallPopup.save();">\r
+  <div id="nugetInstallFormLoading">\r
+    <forms:saving style="float: left; display:block;"/>\r
+    Discovering available NuGet.exe Command Line versions\r
+  </div>\r
+\r
   <bs:refreshable containerId="nugetInstallFormResresh" pageUrl="${actualInstallerUrl}">\r
-    <jsp:include page="installTool-loading.jsp"/>\r
+\r
   </bs:refreshable>\r
 \r
   <div class="popupSaveButtonsBlock">\r
     <a href="javascript://" onclick="BS.NuGet.Tools.InstallPopup.close();" class="cancel">Cancel</a>\r
-    <input class="submitButton" type="button" value="Install" id="installNuGetApplyButton" onclick="BS.NuGet.Tools.InstallPopup.save();"/>\r
+    <input class="submitButton" type="submit" value="Install" id="installNuGetApplyButton" />\r
+    <a href="javascript://" onclick="BS.NuGet.Tools.InstallPopup.refreshForm(true);" class="cancel">Refresh</a>\r
     <forms:saving id="installNuGetApplyProgress"/>\r
     <br clear="all"/>\r
   </div>\r
-</bs:modalDialog>
\ No newline at end of file
+</bs:modalDialog>\r
+\r
+<script type="text/javascript">\r
+  BS.NuGet.Tools.InstallPopup.disableSubmit();\r
+</script>\r
diff --git a/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/FetchException.java b/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/FetchException.java
new file mode 100644 (file)
index 0000000..7c74df2
--- /dev/null
@@ -0,0 +1,27 @@
+/*\r
+ * Copyright 2000-2011 JetBrains s.r.o.\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+package jetbrains.buildServer.nuget.server.toolRegistry;\r
+\r
+/**\r
+* Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
+* Date: 15.08.11 19:10\r
+*/\r
+public class FetchException extends Exception {\r
+  public FetchException(String message, Throwable cause) {\r
+    super(message, cause);\r
+  }\r
+}\r
index 6dd71bb27b400e0bbdc5f41b12282b8de717abae..e148b1bdb79fdf1caec61a2b8f7401de27b5e724 100644 (file)
@@ -38,14 +38,18 @@ public interface NuGetToolManager {
   Collection<NuGetInstallingTool> getInstallingTool();\r
 \r
   /**\r
+   * @param policy kind of packages to return\r
    * @return fetches the full list of available and supported nuget tools\r
+   * @throws FetchException on fetch error if it was called\r
    */\r
   @NotNull\r
-  Collection<NuGetTool> getAvailableTools();\r
+  Collection<NuGetTool> getAvailableTools(@NotNull final ToolsPolicy policy) throws FetchException;\r
 \r
   /**\r
    * Downloads and installs nuget tools for both server and agent\r
    * @param toolId tool id for tool to install\r
    */\r
   void installTool(@NotNull String toolId);\r
+\r
+\r
 }\r
diff --git a/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/ToolsPolicy.java b/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/ToolsPolicy.java
new file mode 100644 (file)
index 0000000..0df81dd
--- /dev/null
@@ -0,0 +1,26 @@
+/*\r
+ * Copyright 2000-2011 JetBrains s.r.o.\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+package jetbrains.buildServer.nuget.server.toolRegistry;\r
+\r
+/**\r
+* Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
+* Date: 15.08.11 19:12\r
+*/\r
+public enum ToolsPolicy {\r
+  ReturnCached,\r
+  FetchNew\r
+}\r
index 5abf9f397474f51c405bb9a5da2c8aae8586121e..5ccd41003b0979a4f8f81436b1b4cb13502b62bf 100644 (file)
@@ -19,7 +19,9 @@ package jetbrains.buildServer.nuget.server.toolRegistry.impl;
 import jetbrains.buildServer.nuget.server.feed.reader.FeedConstants;\r
 import jetbrains.buildServer.nuget.server.feed.reader.FeedPackage;\r
 import jetbrains.buildServer.nuget.server.feed.reader.NuGetFeedReader;\r
+import jetbrains.buildServer.nuget.server.toolRegistry.FetchException;\r
 import jetbrains.buildServer.nuget.server.toolRegistry.NuGetTool;\r
+import jetbrains.buildServer.nuget.server.toolRegistry.ToolsPolicy;\r
 import jetbrains.buildServer.util.CollectionsUtil;\r
 import jetbrains.buildServer.util.Converter;\r
 import jetbrains.buildServer.util.TimeService;\r
@@ -28,7 +30,6 @@ import org.jetbrains.annotations.NotNull;
 \r
 import java.io.IOException;\r
 import java.util.Collection;\r
-import java.util.Collections;\r
 \r
 /**\r
  * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
@@ -49,16 +50,19 @@ public class AvailableToolsState {
   }\r
 \r
   @NotNull\r
-  public Collection<NuGetTool> getAvailable() {\r
+  public Collection<NuGetTool> getAvailable(ToolsPolicy policy) throws FetchException {\r
     Collection<NuGetTool> nuGetTools = myTools;\r
-    if (nuGetTools == null || lastRequest + TIMEOUT < myTime.now()) {\r
+    if (policy == ToolsPolicy.FetchNew\r
+            || nuGetTools == null\r
+            || lastRequest + TIMEOUT < myTime.now()) {\r
+      myTools = null;\r
       myTools = nuGetTools = fetchAvailable();\r
       lastRequest = myTime.now();\r
     }\r
     return nuGetTools;\r
   }\r
 \r
-  private Collection<NuGetTool> fetchAvailable() {\r
+  private Collection<NuGetTool> fetchAvailable() throws FetchException {\r
     try {\r
       final Collection<FeedPackage> packages = myReader.queryPackageVersions(FeedConstants.FEED_URL, FeedConstants.NUGET_COMMANDLINE);\r
       return CollectionsUtil.filterAndConvertCollection(\r
@@ -92,9 +96,7 @@ public class AvailableToolsState {
       );\r
 \r
     } catch (IOException e) {\r
-      e.printStackTrace();\r
-      //TODO: handle exception\r
-      return Collections.emptyList();\r
+      throw new FetchException(e.getMessage(), e);\r
     }\r
   }\r
 \r
@@ -120,4 +122,5 @@ public class AvailableToolsState {
       return myPackage;\r
     }\r
   }\r
+\r
 }\r
index e064aab8fde9061e01855b660aa9665bb7d5005b..57914fa007a6a82022c99eb3d9f04199f1451166 100644 (file)
@@ -45,11 +45,10 @@ public class NuGetToolManagerImpl implements NuGetToolManager {
     return mockInstallingTools();\r
   }\r
 \r
-\r
   @NotNull\r
-  public Collection<NuGetTool> getAvailableTools() {\r
+  public Collection<NuGetTool> getAvailableTools(@NotNull ToolsPolicy policy) throws FetchException {\r
     //This must be cached to make if work faster!\r
-    return myAvailables.getAvailable();\r
+    return myAvailables.getAvailable(policy);\r
   }\r
 \r
   public void installTool(@NotNull String toolId) {\r
index d580eb7493e51012f625804b20f96bf376744bf1..9c48accca9a98421359e44dddc9739853083f256 100644 (file)
@@ -20,6 +20,7 @@ import com.intellij.openapi.diagnostic.Logger;
 import jetbrains.buildServer.controllers.*;\r
 import jetbrains.buildServer.nuget.server.toolRegistry.NuGetTool;\r
 import jetbrains.buildServer.nuget.server.toolRegistry.NuGetToolManager;\r
+import jetbrains.buildServer.nuget.server.toolRegistry.ToolsPolicy;\r
 import jetbrains.buildServer.serverSide.auth.AccessDeniedException;\r
 import jetbrains.buildServer.serverSide.auth.AuthorityHolder;\r
 import jetbrains.buildServer.util.StringUtil;\r
@@ -68,13 +69,17 @@ public class InstallToolController extends BaseFormXmlController {
     return myPath;\r
   }\r
 \r
-\r
   @Override\r
   protected ModelAndView doGet(HttpServletRequest request, HttpServletResponse response) {\r
     final Collection<NuGetTool> availableTools = new ArrayList<NuGetTool>();\r
 \r
+    final ToolsPolicy pol =\r
+            StringUtil.isEmptyOrSpaces(request.getParameter("fresh"))\r
+                    ? ToolsPolicy.ReturnCached\r
+                    : ToolsPolicy.FetchNew;\r
+\r
     try {\r
-      availableTools.addAll(myToolsManager.getAvailableTools());\r
+      availableTools.addAll(myToolsManager.getAvailableTools(pol));\r
     } catch (Exception e) {\r
       ModelAndView mv = new ModelAndView(myDescriptor.getPluginResourcesPath("tool/installTool-error.jsp"));\r
       mv.getModel().put("errorText", e.getMessage());\r