report package installation errors, simplify code
authorEugene.Petrenko <eugene.petrenko@gmail.com>
Mon, 22 Aug 2011 17:10:44 +0000 (19:10 +0200)
committerEugene.Petrenko <eugene.petrenko@gmail.com>
Mon, 22 Aug 2011 17:10:44 +0000 (19:10 +0200)
nuget-server/resources/tool/tools.js
nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/NuGetToolManager.java
nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/ToolException.java [new file with mode: 0644]
nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/impl/InstallLogger.java [deleted file]
nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/impl/NuGetToolManagerImpl.java
nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/impl/NuGetToolsInstaller.java
nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/tab/InstallToolController.java
nuget-tests/src/jetbrains/buildServer/nuget/tests/server/tools/NuGetToolsInstallerTest.java

index c991159ec232a06c77265de028bcbee2716ec643..c9901c722f02027583f4a0a6c56d7e2ede1a3963 100644 (file)
@@ -78,7 +78,6 @@ BS.NuGet.Tools = {
       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
index 2ef9de8c24c2732d80fb67bbacf0e609a6b30186..64fe056e560ad0146ff51e15da69dab104aeabb5 100644 (file)
@@ -49,15 +49,17 @@ public interface NuGetToolManager {
   /**\r
    * Downloads and installs nuget tools for both server and agent\r
    * @param toolId tool id for tool to install\r
+   * @throws ToolException on tool installation error\r
    */\r
-  void installTool(@NotNull String toolId);\r
+  void installTool(@NotNull String toolId) throws ToolException;\r
 \r
 \r
   /**\r
    * Removes tool from server and build agents\r
    * @param toolId tool id from {@link #getInstalledTools()} method\r
+   * @throws ToolException on tool installation error\r
    */\r
-  void removeTool(@NotNull String toolId);\r
+  void removeTool(@NotNull String toolId) throws ToolException;\r
 \r
   /**\r
    * Resolves path to NuGet.exe tool\r
diff --git a/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/ToolException.java b/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/ToolException.java
new file mode 100644 (file)
index 0000000..dbc6f4e
--- /dev/null
@@ -0,0 +1,31 @@
+/*\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
+ * @author Eugene Petrenko (eugene.petrenko@gmail.com)\r
+ *         Date: 22.08.11 18:32\r
+ */\r
+public class ToolException extends Exception {\r
+  public ToolException(String message) {\r
+    super(message);\r
+  }\r
+\r
+  public ToolException(String message, Throwable cause) {\r
+    super(message, cause);\r
+  }\r
+}\r
diff --git a/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/impl/InstallLogger.java b/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/impl/InstallLogger.java
deleted file mode 100644 (file)
index 09b18e0..0000000
+++ /dev/null
@@ -1,59 +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.impl;\r
-\r
-import jetbrains.buildServer.nuget.server.feed.reader.FeedPackage;\r
-import org.jetbrains.annotations.NotNull;\r
-import org.jetbrains.annotations.Nullable;\r
-\r
-import java.io.File;\r
-\r
-/**\r
-* Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
-* Date: 16.08.11 0:09\r
-*/\r
-public interface InstallLogger {\r
-  void started(@NotNull String packageId);\r
-\r
-  void packageNotFound(@NotNull String packageId);\r
-\r
-  void packageDownloadStarted(@NotNull FeedPackage tool);\r
-\r
-  void packageDownloadFinished(@NotNull FeedPackage tool);\r
-\r
-  void packageDownloadFailed(@NotNull FeedPackage tool, @NotNull Exception e);\r
-\r
-  void packageUnpackStarted(@NotNull FeedPackage tool, @NotNull File pkg);\r
-\r
-  void packageUnpackFailed(@NotNull FeedPackage tool, @NotNull File pkg, @Nullable File dest);\r
-\r
-  void packageUnpackFinished(@NotNull FeedPackage tool, @NotNull File pkg, @Nullable File dest);\r
-\r
-  void agentToolPackStarted(@NotNull FeedPackage tool, @NotNull File dest);\r
-\r
-  void agentToolPackFailed(@NotNull FeedPackage tool, @NotNull File dest, @NotNull Exception e);\r
-\r
-  void agentToolPackFinished(@NotNull FeedPackage tool);\r
-\r
-  void agentToolPublishStarted(@NotNull FeedPackage tool, @NotNull File agentTool);\r
-\r
-  void agentToolPublishFailed(@NotNull FeedPackage tool, @NotNull File agentTool, @NotNull Exception e);\r
-\r
-  void agentToolPublishFinished(@NotNull FeedPackage tool, @NotNull File agentTool);\r
-\r
-  void finished(@NotNull String packageId, @Nullable FeedPackage tool);\r
-}\r
index b54715e73e2e275fc677768a24d2366272cbe802..1d1546967be9a333beae2a1c912e8d2b61fea690 100644 (file)
@@ -24,9 +24,6 @@ import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;\r
 \r
 import java.io.File;\r
-import java.lang.reflect.InvocationHandler;\r
-import java.lang.reflect.Method;\r
-import java.lang.reflect.Proxy;\r
 import java.util.*;\r
 \r
 /**\r
@@ -76,22 +73,8 @@ public class NuGetToolManagerImpl implements NuGetToolManager {
     return available;\r
   }\r
 \r
-  public void installTool(@NotNull String toolId) {\r
-    myInstaller.installNuGet(\r
-            toolId,\r
-            (InstallLogger) Proxy.newProxyInstance(getClass().getClassLoader(),\r
-                    new Class<?>[]{InstallLogger.class},\r
-                    new InvocationHandler() {\r
-                      public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {\r
-                        StringBuilder sb = new StringBuilder();\r
-                        sb.append(method.getName());\r
-                        for (Object arg : args) {\r
-                          sb.append(" ").append(arg);\r
-                        }\r
-                        LOG.debug(sb.toString());\r
-                        return null;\r
-                      }\r
-                    }));\r
+  public void installTool(@NotNull String toolId) throws ToolException {\r
+    myInstaller.installNuGet(toolId);\r
   }\r
 \r
   public void removeTool(@NotNull String toolId) {\r
index 935c304e7833cb3b8c65cc26919b9babb7bc7291..66a7c638f770775fd8a40bca6f5d4db5231845ac 100644 (file)
@@ -19,6 +19,7 @@ package jetbrains.buildServer.nuget.server.toolRegistry.impl;
 import com.intellij.openapi.diagnostic.Logger;\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.ToolException;\r
 import jetbrains.buildServer.util.FileUtil;\r
 import org.jetbrains.annotations.NotNull;\r
 \r
@@ -47,38 +48,26 @@ public class NuGetToolsInstaller {
     myWatcher = watcher;\r
   }\r
 \r
-  public void installNuGet(@NotNull final String packageId, @NotNull final InstallLogger logger) {\r
-    logger.started(packageId);\r
+  public void installNuGet(@NotNull final String packageId) throws ToolException {\r
+    LOG.info("Start installing package " + packageId);\r
 \r
-    FeedPackage tool = null;\r
-    try {\r
-      tool = myState.findTool(packageId);\r
-      if (tool == null) {\r
-        logger.packageNotFound(packageId);\r
-        return;\r
-      }\r
+    final FeedPackage tool = myState.findTool(packageId);\r
+    if (tool == null) {\r
+      throw new ToolException("Failed to find package " + packageId);\r
+    }\r
 \r
-      logger.packageDownloadStarted(tool);\r
-      File dest = new File(myToolPaths.getPackages(), tool.getInfo().getId() + "." + tool.getInfo().getVersion() + ".nupkg");\r
-      try {\r
-        File tmp = File.createTempFile(dest.getName(), ".nupkg");\r
-        FileUtil.createParentDirs(tmp);\r
-        myClient.downloadPackage(tool, tmp);\r
-        if (!tmp.renameTo(dest)) {\r
-          throw new IOException("Failed to plug downloaded package to " + dest);\r
-        }\r
-      } catch (Exception e) {\r
-        LOG.warn("Failed to download package " + tool + ". " + e.getMessage(), e);\r
-        logger.packageDownloadFailed(tool, e);\r
-        return;\r
-      } finally {\r
-        logger.packageDownloadFinished(tool);\r
+    LOG.info("Downloading package from: " + tool.getDownloadUrl());\r
+    File dest = new File(myToolPaths.getPackages(), tool.getInfo().getId() + "." + tool.getInfo().getVersion() + ".nupkg");\r
+    try {\r
+      File tmp = File.createTempFile(dest.getName(), ".nupkg");\r
+      FileUtil.createParentDirs(tmp);\r
+      myClient.downloadPackage(tool, tmp);\r
+      if (!tmp.renameTo(dest)) {\r
+        throw new IOException("Failed to plug downloaded package to " + dest);\r
       }\r
-      myWatcher.checkNow();\r
     } catch (Exception e) {\r
-      LOG.warn("Failed to install NuGet.Commandline package. " + e.getMessage(), e);\r
-    } finally {\r
-      logger.finished(packageId, tool);\r
+      throw new ToolException("Failed to download package " + tool + ". " + e.getMessage(), e);\r
     }\r
+    myWatcher.checkNow();\r
   }\r
 }\r
index a033e1adeb2d8367e7c28eef00ac85e57f047ee3..2ed991255b4057eed2aa364d482ef7d0a42adb67 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.ToolException;\r
 import jetbrains.buildServer.nuget.server.toolRegistry.ToolsPolicy;\r
 import jetbrains.buildServer.serverSide.auth.AccessDeniedException;\r
 import jetbrains.buildServer.serverSide.auth.AuthorityHolder;\r
@@ -105,13 +106,19 @@ public class InstallToolController extends BaseFormXmlController {
     }\r
 \r
     final String whatToDo = request.getParameter("whatToDo");\r
-    if ("install".equals(whatToDo)) {\r
-      myToolsManager.installTool(toolId);\r
-      return;\r
-    }\r
+    try {\r
+      if ("install".equals(whatToDo)) {\r
+        myToolsManager.installTool(toolId);\r
+        return;\r
+      }\r
 \r
-    if ("remove".equals(whatToDo)) {\r
-      myToolsManager.removeTool(toolId);\r
+      if ("remove".equals(whatToDo)) {\r
+        myToolsManager.removeTool(toolId);\r
+      }\r
+    } catch (ToolException e) {\r
+      ActionErrors ae = new ActionErrors();\r
+      ae.addError("toolId", "Failed to install package: " + e.getMessage());\r
+      ae.serialize(xmlResponse);\r
     }\r
   }\r
 }\r
index 2f6c0028d51eeadb4c8f0a319740f0fb256f9bd7..79220fdc5200ac2689ed59021fb51469155d2d2d 100644 (file)
@@ -37,7 +37,6 @@ public class NuGetToolsInstallerTest extends BaseTestCase {
   private File myPluginsPath;\r
   private ToolPaths myPaths;\r
   private NuGetFeedReader myFeed;\r
-  private InstallLogger myLogger;\r
   private AvailableToolsState myState;\r
   private Mockery m;\r
 \r
@@ -49,7 +48,6 @@ public class NuGetToolsInstallerTest extends BaseTestCase {
     m = new Mockery();\r
     myPaths = m.mock(ToolPaths.class);\r
     myFeed = m.mock(NuGetFeedReader.class);\r
-    myLogger = m.mock(InstallLogger.class);\r
     myState = m.mock(AvailableToolsState.class);\r
 \r
     myInstaller = new NuGetToolsInstaller(\r