--- /dev/null
+<%--\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
--%>\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
<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
\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
<%@ 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
\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
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
* 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
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
\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
\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
* 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
\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
\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
\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
* 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
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
+++ /dev/null
-/*\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