polish install tool IU
authorEugene Petrenko <eugene.petrenko@gmail.com>
Mon, 15 Aug 2011 14:46:02 +0000 (18:46 +0400)
committerEugene Petrenko <eugene.petrenko@gmail.com>
Mon, 15 Aug 2011 14:46:02 +0000 (18:46 +0400)
nuget-server/resources/tool/installTool-error.jsp [new file with mode: 0644]
nuget-server/resources/tool/installTool-loading.jsp
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/NuGetToolManager.java
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
nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/tab/InstalledToolsController.java
nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/tab/ToolsModel.java [deleted file]

diff --git a/nuget-server/resources/tool/installTool-error.jsp b/nuget-server/resources/tool/installTool-error.jsp
new file mode 100644 (file)
index 0000000..cc6f586
--- /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
+<%@ 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>\r
+</div>
\ No newline at end of file
index 95dcf97013e351228a96e7e6c4f349de72a883f2..763c8bda018bbcbe9457df01ba0edcb2bb6e3d9d 100644 (file)
   --%>\r
 <%@ include file="/include-internal.jsp" %>\r
 <div id="nugetInstallFormResreshInner">\r
-  <forms:saving style="display: block"/>\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 2542db78aac7531a9e22a731255267fb3ae539e0..d6d171e7720124efde57b630ff66cf39dba92ee9 100644 (file)
@@ -22,6 +22,9 @@
   <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
           </td>\r
         </tr>\r
         <tr>\r
-          <th><label for="tools">Version:<l:star/></label></th>\r
+          <th><label for="toolId">Version:<l:star/></label></th>\r
           <td>\r
-            <forms:select name="tools" style="width:15em;">\r
-              <forms:option value="">-- Please choose version --</forms:option>\r
+            <props:selectProperty name="toolId" style="width:15em;">\r
+              <props:option value="">-- Please choose version --</props:option>\r
               <c:forEach var="t" items="${available}">\r
                 <forms:option value="${t.id}"><c:out value="${t.version}"/></forms:option>\r
               </c:forEach>\r
-            </forms:select>\r
+            </props:selectProperty>\r
             <span class="smallNote">\r
               Choose version of NuGet Commandline Tools to install.\r
             </span>\r
+            <span class="error" id="error_toolId"></span>\r
           </td>\r
         </tr>\r
       </table>\r
index 9b56c2bd8eb94ab472c3c296f7c71a184c25640c..a573ab3f60df62f936fc67b613b1b5feff3117b1 100644 (file)
@@ -18,23 +18,63 @@ if (!BS) BS = {};
 \r
 if (!BS.NuGet) BS.NuGet = {};\r
 \r
-BS.NuGet.InstallPopup = OO.extend(BS.AbstractModalDialog, {\r
-  getContainer : function() {\r
-    return $('nugetInstallFormDialog');\r
+BS.NuGet.Tools = {\r
+  refreshPackagesList : function() {\r
+    $('nugetPackagesList').refresh();\r
   },\r
 \r
-  show : function() {\r
-    var that = this;\r
-    that.showCentered();\r
-    $('nugetInstallFormResresh').refresh("nugetInstallLinkSaving", null, function() {\r
+  InstallPopup : OO.extend(BS.PluginPropertiesForm, OO.extend(BS.AbstractModalDialog, {\r
+    getContainer : function() {\r
+      return $('nugetInstallFormDialog');\r
+    },\r
+\r
+    formElement : function() {\r
+      return $('nugetInstallForm');\r
+    },\r
+\r
+    disableSubmit : function() {\r
+      $('installNuGetApplyButton').disabled = true;\r
+    },\r
+\r
+    enableSubmit : function() {\r
+      $('installNuGetApplyButton').disabled = false;\r
+    },\r
+\r
+    refreshForm : function() {\r
+      var that = this;\r
+      that.enableSubmit();\r
+      $('nugetInstallFormResresh').refresh("nugetInstallLinkSaving", null, function() {\r
+        that.showCentered();\r
+      });\r
+      return false;\r
+    },\r
+\r
+    show : function() {\r
+      var that = this;\r
       that.showCentered();\r
-    });\r
+      that.refreshForm();\r
+      return false;\r
+    },\r
+\r
+    save : function() {\r
+\r
+      BS.Util.show($('installNuGetApplyProgress'));\r
+      BS.FormSaver.save(this, this.formElement().action, OO.extend(BS.ErrorsAwareListener, {\r
+        onCompleteSave: function(form, responseXML, err) {\r
+          BS.Util.hide($('installNuGetApplyProgress'));\r
+          var wereErrors = BS.XMLResponse.processErrors(responseXML, {}, form.propertiesErrorsHandler);\r
+          BS.ErrorsAwareListener.onCompleteSave(form, responseXML, err);\r
+\r
+          alert("wereError = " + wereErrors);\r
+          if (!wereErrors) {\r
+            BS.NuGet.Tools.refreshPackagesList();\r
+            //form.close();\r
+          }\r
+        }\r
+      }));\r
+    }\r
+  }))\r
+};\r
 \r
-    return false;\r
-  },\r
 \r
-  save : function() {\r
-    alert('save');\r
-  }\r
-});\r
 \r
index 274dbc1aa31d662c719a16e362f10cd9def36640..fda3666ee3b4cf2c7a80163e009b71e548ee680f 100644 (file)
 <%@ include file="/include-internal.jsp" %>\r
 <jsp:useBean id="tools" type="java.util.Collection<jetbrains.buildServer.nuget.server.toolRegistry.tab.LocalTool>" scope="request"/>\r
 <jsp:useBean id="installerUrl" type="java.lang.String" scope="request"/>\r
+<jsp:useBean id="updateUrl" type="java.lang.String" scope="request"/>\r
 \r
+<c:set var="actualUpdateUrl"><c:url value="${updateUrl}"/></c:set>\r
+<bs:refreshable containerId="nugetPackagesList" pageUrl="${actualUpdateUrl}">\r
 <c:set var="installedPluginsCount" value="${fn:length(tools)}"/>\r
 <p>\r
   TeamCity NuGet plugin requires to configure NuGet.Exe Command Line clients.\r
     </table>\r
   </c:otherwise>\r
 </c:choose>\r
+</bs:refreshable>\r
 \r
 <div class="addNew">\r
-  <a href="#" onclick="return BS.NuGet.InstallPopup.show();">\r
+  <a href="#" onclick="return BS.NuGet.Tools.InstallPopup.show();">\r
     Install\r
     <c:if test="${installedPluginsCount gt 0}">addintional versions of</c:if>\r
     NuGet.exe Command Line\r
   </a>\r
 </div>\r
 \r
+<c:set var="actualInstallerUrl"><c:url value="${installerUrl}"/></c:set>\r
 <bs:modalDialog\r
         formId="nugetInstallForm"\r
         title="Install NuGet.exe Command Line"\r
-        action="foo.html"\r
-        closeCommand="BS.NuGet.InstallPopup.close();"\r
-        saveCommand="BS.NuGet.InstallPopup.save();">\r
-  <c:set var="actualInstallerUrl"><c:url value="${installerUrl}"/></c:set>\r
+        action="${actualInstallerUrl}"\r
+        closeCommand="BS.NuGet.Tools.InstallPopup.close();"\r
+        saveCommand="BS.NuGet.Tools.InstallPopup.save();">\r
   <bs:refreshable containerId="nugetInstallFormResresh" pageUrl="${actualInstallerUrl}">\r
     <jsp:include page="installTool-loading.jsp"/>\r
   </bs:refreshable>\r
 \r
   <div class="popupSaveButtonsBlock">\r
-    <a href="javascript://" onclick="BS.NuGet.InstallPopup.close();" class="cancel">Cancel</a>\r
-    <input class="submitButton" type="button" value="Install" id="agentPoolNameApplyButton" onclick="BS.NuGet.InstallPopup.save();"/>\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
+    <forms:saving id="installNuGetApplyProgress"/>\r
     <br clear="all"/>\r
   </div>\r
 </bs:modalDialog>
\ No newline at end of file
index b211f77cb993de2898779d72af447da9c12a7569..6dd71bb27b400e0bbdc5f41b12282b8de717abae 100644 (file)
@@ -45,8 +45,7 @@ public interface NuGetToolManager {
 \r
   /**\r
    * Downloads and installs nuget tools for both server and agent\r
-   * @param tool tool to download\r
-   * @param progress callback for showing messages\r
+   * @param toolId tool id for tool to install\r
    */\r
-  void installTool(@NotNull NuGetTool tool, @NotNull ActionProgress progress);\r
+  void installTool(@NotNull String toolId);\r
 }\r
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
index 145d58bfa397793117e9d50d2e220b84020efa24..e064aab8fde9061e01855b660aa9665bb7d5005b 100644 (file)
@@ -52,8 +52,7 @@ public class NuGetToolManagerImpl implements NuGetToolManager {
     return myAvailables.getAvailable();\r
   }\r
 \r
-\r
-  public void installTool(@NotNull NuGetTool tool, @NotNull ActionProgress progress) {\r
+  public void installTool(@NotNull String toolId) {\r
 \r
   }\r
 \r
index 7ef2424dc477292cdcc45f78b28c67c2c761fba7..d580eb7493e51012f625804b20f96bf376744bf1 100644 (file)
 \r
 package jetbrains.buildServer.nuget.server.toolRegistry.tab;\r
 \r
-import jetbrains.buildServer.controllers.AuthorizationInterceptor;\r
-import jetbrains.buildServer.controllers.BaseFormXmlController;\r
-import jetbrains.buildServer.controllers.BasePropertiesBean;\r
-import jetbrains.buildServer.controllers.RequestPermissionsChecker;\r
+import com.intellij.openapi.diagnostic.Logger;\r
+import jetbrains.buildServer.controllers.*;\r
+import jetbrains.buildServer.nuget.server.toolRegistry.NuGetTool;\r
 import jetbrains.buildServer.nuget.server.toolRegistry.NuGetToolManager;\r
 import jetbrains.buildServer.serverSide.auth.AccessDeniedException;\r
 import jetbrains.buildServer.serverSide.auth.AuthorityHolder;\r
+import jetbrains.buildServer.util.StringUtil;\r
 import jetbrains.buildServer.web.openapi.PluginDescriptor;\r
 import jetbrains.buildServer.web.openapi.WebControllerManager;\r
 import org.jdom.Element;\r
@@ -31,6 +31,8 @@ import org.springframework.web.servlet.ModelAndView;
 \r
 import javax.servlet.http.HttpServletRequest;\r
 import javax.servlet.http.HttpServletResponse;\r
+import java.util.ArrayList;\r
+import java.util.Collection;\r
 import java.util.HashMap;\r
 \r
 /**\r
@@ -38,6 +40,8 @@ import java.util.HashMap;
  * Date: 11.08.11 12:12\r
  */\r
 public class InstallToolController extends BaseFormXmlController {\r
+  private static final Logger LOG = Logger.getInstance(InstallToolController.class.getName());\r
+\r
   private final String myPath;\r
   private final NuGetToolManager myToolsManager;\r
   private final PluginDescriptor myDescriptor;\r
@@ -67,9 +71,19 @@ public class InstallToolController extends BaseFormXmlController {
 \r
   @Override\r
   protected ModelAndView doGet(HttpServletRequest request, HttpServletResponse response) {\r
-    ModelAndView mv = new ModelAndView(myDescriptor.getPluginResourcesPath("tool/installTool-show.jsp"));\r
+    final Collection<NuGetTool> availableTools = new ArrayList<NuGetTool>();\r
 \r
-    mv.getModelMap().put("available", myToolsManager.getAvailableTools());\r
+    try {\r
+      availableTools.addAll(myToolsManager.getAvailableTools());\r
+    } catch (Exception e) {\r
+      ModelAndView mv = new ModelAndView(myDescriptor.getPluginResourcesPath("tool/installTool-error.jsp"));\r
+      mv.getModel().put("errorText", e.getMessage());\r
+      LOG.warn("Failed to fetch NuGet.Commandline package versions. " + e.getMessage(), e);\r
+      return mv;\r
+    }\r
+\r
+    ModelAndView mv = new ModelAndView(myDescriptor.getPluginResourcesPath("tool/installTool-show.jsp"));\r
+    mv.getModelMap().put("available", availableTools);\r
     mv.getModelMap().put("propertiesBean", new BasePropertiesBean(new HashMap<String, String>()));\r
 \r
     return mv;\r
@@ -77,6 +91,14 @@ public class InstallToolController extends BaseFormXmlController {
 \r
   @Override\r
   protected void doPost(HttpServletRequest request, HttpServletResponse response, Element xmlResponse) {\r
+    final String toolId = request.getParameter("prop:toolId");\r
+    if (StringUtil.isEmptyOrSpaces(toolId)) {\r
+      ActionErrors ae = new ActionErrors();\r
+      ae.addError("toolId", "Select NuGet.Commandline package version to install");\r
+      ae.serialize(xmlResponse);\r
+      return;\r
+    }\r
 \r
+    myToolsManager.installTool(toolId);\r
   }\r
 }\r
index b81c15cfb0bfa60876d090d196724f01e4aa89e6..1af7d4b6a61dfa1326a91ea5b8e68523f2490044 100644 (file)
@@ -16,6 +16,7 @@
 \r
 package jetbrains.buildServer.nuget.server.toolRegistry.tab;\r
 \r
+import com.intellij.openapi.diagnostic.Logger;\r
 import jetbrains.buildServer.controllers.AuthorizationInterceptor;\r
 import jetbrains.buildServer.controllers.BaseController;\r
 import jetbrains.buildServer.controllers.RequestPermissionsChecker;\r
@@ -41,6 +42,8 @@ import java.util.List;
  * Date: 10.08.11 20:38\r
  */\r
 public class InstalledToolsController extends BaseController {\r
+  private static final Logger LOG = Logger.getInstance(InstalledToolsController.class.getName());\r
+\r
   private final String myPath;\r
   private final NuGetToolManager myToolsManager;\r
   private final InstallToolController myInstaller;\r
@@ -74,6 +77,7 @@ public class InstalledToolsController extends BaseController {
     ModelAndView mv = new ModelAndView(myDescriptor.getPluginResourcesPath("tool/tools.jsp"));\r
     mv.getModelMap().put("tools", getModel());\r
     mv.getModelMap().put("installerUrl", myInstaller.getPath());\r
+    mv.getModelMap().put("updateUrl", this.getPath());\r
     return mv;\r
   }\r
 \r
diff --git a/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/tab/ToolsModel.java b/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/tab/ToolsModel.java
deleted file mode 100644 (file)
index ca160a5..0000000
+++ /dev/null
@@ -1,35 +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
-\r
-package jetbrains.buildServer.nuget.server.toolRegistry.tab;\r
-\r
-import jetbrains.buildServer.nuget.server.toolRegistry.NuGetInstalledTool;\r
-import jetbrains.buildServer.nuget.server.toolRegistry.NuGetTool;\r
-import org.jetbrains.annotations.NotNull;\r
-\r
-import java.util.Collection;\r
-import java.util.Collections;\r
-\r
-/**\r
- * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
- * Date: 11.08.11 0:58\r
- */\r
-public class ToolsModel {\r
-  @NotNull\r
-  public Collection<NuGetInstalledTool> getInstalled() {\r
-    return Collections.emptyList();\r
-  }\r
-}\r