merge feed reader api
authorEugene Petrenko <eugene.petrenko@gmail.com>
Fri, 12 Aug 2011 15:51:33 +0000 (19:51 +0400)
committerEugene Petrenko <eugene.petrenko@gmail.com>
Fri, 12 Aug 2011 15:51:33 +0000 (19:51 +0400)
Conflicts:
nuget-server/nuget-server.iml
nuget-server/src/META-INF/build-server-plugin-nuget.xml

23 files changed:
README
nuget-server/nuget-server.iml
nuget-server/resources/tool/installTool-loading.jsp [new file with mode: 0644]
nuget-server/resources/tool/installTool-show.jsp [new file with mode: 0644]
nuget-server/resources/tool/tools.css [new file with mode: 0644]
nuget-server/resources/tool/tools.js [new file with mode: 0644]
nuget-server/resources/tool/tools.jsp [new file with mode: 0644]
nuget-server/src/META-INF/build-server-plugin-nuget.xml
nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/ActionProgress.java [new file with mode: 0644]
nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/NuGetInstalledTool.java [new file with mode: 0644]
nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/NuGetInstallingTool.java [new file with mode: 0644]
nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/NuGetTool.java [new file with mode: 0644]
nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/NuGetToolManager.java [new file with mode: 0644]
nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/NuGetUserTool.java [new file with mode: 0644]
nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/impl/NuGetToolManagerImpl.java [new file with mode: 0644]
nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/tab/InstallToolController.java [new file with mode: 0644]
nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/tab/InstallableTool.java [new file with mode: 0644]
nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/tab/InstalledToolsController.java [new file with mode: 0644]
nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/tab/LocalTool.java [new file with mode: 0644]
nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/tab/LocalToolState.java [new file with mode: 0644]
nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/tab/PermissionChecker.java [new file with mode: 0644]
nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/tab/ServerSettingsTab.java [new file with mode: 0644]
nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/tab/ToolsModel.java [new file with mode: 0644]

diff --git a/README b/README
index 06d7faf301799bb458e187847d8ac06252dc0c57..78461250a04875806a67ba14cc1bb24da110bec2 100644 (file)
--- a/README
+++ b/README
@@ -36,6 +36,11 @@ API gaps TeamCity:
  - Consider reusing of Maven build trigger/project models\r
  - Make server-side PluginDescription contain getPluginRoot() to avoid cast to PluginInfo
  - Add CustomDataStorage to BuildTriggerDescriptor
+ - Tools server extension: 
+   - no way to provide own UI
+   - no way to implement custom downloader
+   - user may tweak download url to download malicious file instead of expected one => checkes required
+ - Add an API to provide pluginData path without use of ServerPaths class and specifying names explicitly
 
 API gaps NuGet:
  - Allow to call nuget.exe with plugins without installing them into %USERPROFILE%
index 0f769ff91571929f7496c248e83bf8a4be58b893..dc8180215bb7a0d392f81c45f7be404ec77508b8 100644 (file)
@@ -38,6 +38,7 @@
     <orderEntry type="library" name="Servlet Api" level="project" />\r
     <orderEntry type="module" module-name="nuget-common" />\r
     <orderEntry type="library" name="Common-Impl" level="project" />\r
+    <orderEntry type="library" name="TeamCity server runtime" level="project" />\r
     <orderEntry type="library" name="commons-http" level="project" />\r
   </component>\r
 </module>\r
diff --git a/nuget-server/resources/tool/installTool-loading.jsp b/nuget-server/resources/tool/installTool-loading.jsp
new file mode 100644 (file)
index 0000000..95dcf97
--- /dev/null
@@ -0,0 +1,21 @@
+<%--\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="display: block"/>\r
+  Discovering available NuGet.exe Command Line versions\r
+</div>\r
+\r
diff --git a/nuget-server/resources/tool/installTool-show.jsp b/nuget-server/resources/tool/installTool-show.jsp
new file mode 100644 (file)
index 0000000..2542db7
--- /dev/null
@@ -0,0 +1,50 @@
+<%--\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
+<%@ taglib prefix="props" tagdir="/WEB-INF/tags/props" %>\r
+<jsp:useBean id="available"\r
+             type="java.util.Collection<jetbrains.buildServer.nuget.server.toolRegistry.NuGetTool>"\r
+             scope="request"/>\r
+<div id="nugetInstallFormResreshInner">\r
+  <c:choose>\r
+    <c:when test="${fn:length(available) eq 0}">\r
+      No other NuGet.exe Command Line packages available\r
+    </c:when>\r
+    <c:otherwise>\r
+      <table class="runnerFormTable">\r
+        <tr>\r
+          <td colspan="2">\r
+            Select NuGet.exe Command Line to install:\r
+          </td>\r
+        </tr>\r
+        <tr>\r
+          <th><label for="tools">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
+              <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
+            <span class="smallNote">\r
+              Choose version of NuGet Commandline Tools to install.\r
+            </span>\r
+          </td>\r
+        </tr>\r
+      </table>\r
+    </c:otherwise>\r
+  </c:choose>\r
+</div>
\ No newline at end of file
diff --git a/nuget-server/resources/tool/tools.css b/nuget-server/resources/tool/tools.css
new file mode 100644 (file)
index 0000000..d03c327
--- /dev/null
@@ -0,0 +1,16 @@
+/*\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
diff --git a/nuget-server/resources/tool/tools.js b/nuget-server/resources/tool/tools.js
new file mode 100644 (file)
index 0000000..9b56c2b
--- /dev/null
@@ -0,0 +1,40 @@
+/*\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
+if (!BS) BS = {};\r
+\r
+if (!BS.NuGet) BS.NuGet = {};\r
+\r
+BS.NuGet.InstallPopup = OO.extend(BS.AbstractModalDialog, {\r
+  getContainer : function() {\r
+    return $('nugetInstallFormDialog');\r
+  },\r
+\r
+  show : function() {\r
+    var that = this;\r
+    that.showCentered();\r
+    $('nugetInstallFormResresh').refresh("nugetInstallLinkSaving", null, function() {\r
+      that.showCentered();\r
+    });\r
+\r
+    return false;\r
+  },\r
+\r
+  save : function() {\r
+    alert('save');\r
+  }\r
+});\r
+\r
diff --git a/nuget-server/resources/tool/tools.jsp b/nuget-server/resources/tool/tools.jsp
new file mode 100644 (file)
index 0000000..274dbc1
--- /dev/null
@@ -0,0 +1,88 @@
+<%--\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="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
+\r
+<c:set var="installedPluginsCount" value="${fn:length(tools)}"/>\r
+<p>\r
+  TeamCity NuGet plugin requires to configure NuGet.Exe Command Line clients.\r
+  There are\r
+  <strong><c:out value="${installedPluginsCount}"/></strong>\r
+  plugin<bs:s val="${installedPluginsCount}"/> installed.\r
+</p>\r
+\r
+<h2 class="noBorder">Installed NuGet Versions</h2>\r
+<c:choose>\r
+  <c:when test="${installedPluginsCount eq 0}">\r
+    <div>There are no installed NuGet.exe</div>\r
+  </c:when>\r
+  <c:otherwise>\r
+      <table class="dark borderBottom" cellpadding="0" cellspacing="0" style="width: 30em;">\r
+        <thead>\r
+        <tr>\r
+          <th class="header" style="width: 66%">Version</th>\r
+          <th class="header"></th>\r
+        </tr>\r
+        </thead>\r
+        <tbody>\r
+          <c:forEach var="tool" items="${tools}">\r
+            <tr>\r
+              <td><c:out value="${tool.version}"/></td>\r
+              <td>\r
+                <c:choose>\r
+                  <c:when test="${tool.state.installed}">\r
+                    <a href="#">Remove</a>\r
+                  </c:when>\r
+                  <c:when test="${tool.state.installing}">\r
+                    <bs:commentIcon text="Messages"/>\r
+                    Installing...\r
+                  </c:when>\r
+                </c:choose>\r
+              </td>\r
+            </tr>\r
+          </c:forEach>\r
+        </tbody>\r
+    </table>\r
+  </c:otherwise>\r
+</c:choose>\r
+\r
+<div class="addNew">\r
+  <a href="#" onclick="return BS.NuGet.InstallPopup.show();">\r
+    Install\r
+    <c:if test="${installedPluginsCount gt 0}">addintional versions of</c:if>\r
+    NuGet.exe Command Line\r
+    <forms:saving id="nugetInstallLinkSaving"/>\r
+  </a>\r
+</div>\r
+\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
+  <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
+    <br clear="all"/>\r
+  </div>\r
+</bs:modalDialog>
\ No newline at end of file
index 1244732783466105c614380d1418024a2911216e..7ed537ef34e84c18ef2ee7846e1e80455232fe30 100644 (file)
   <bean class="jetbrains.buildServer.nuget.server.publish.PublishRunType"/>\r
 \r
 \r
+
+  <bean class="jetbrains.buildServer.nuget.server.toolRegistry.tab.PermissionChecker"/>\r
+  <bean class="jetbrains.buildServer.nuget.server.toolRegistry.tab.ServerSettingsTab"/>\r
+  <bean class="jetbrains.buildServer.nuget.server.toolRegistry.tab.InstalledToolsController"/>\r
+  <bean class="jetbrains.buildServer.nuget.server.toolRegistry.tab.InstallToolController"/>\r
+\r
+\r
+  <bean class="jetbrains.buildServer.nuget.server.toolRegistry.impl.NuGetToolManagerImpl"/>\r
+
+
+
   <bean class="jetbrains.buildServer.nuget.server.feed.reader.impl.FeedHttpClientHolder" destroy-method="dispose"/>\r
   <bean class="jetbrains.buildServer.nuget.server.feed.reader.impl.NuGetFeedReaderImpl"/>\r
   <bean class="jetbrains.buildServer.nuget.server.feed.reader.impl.FeedGetMethodFactory"/>\r
   <bean class="jetbrains.buildServer.nuget.server.feed.reader.impl.PackagesFeedParserImpl"/>\r
   <bean class="jetbrains.buildServer.nuget.server.feed.reader.impl.UrlResolverImpl"/>\r
-\r
+
 </beans>
\ No newline at end of file
diff --git a/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/ActionProgress.java b/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/ActionProgress.java
new file mode 100644 (file)
index 0000000..9aae55d
--- /dev/null
@@ -0,0 +1,41 @@
+/*\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
+import org.jetbrains.annotations.NotNull;\r
+\r
+/**\r
+ * Interface for showing progress messages from\r
+ * log-working UI actions\r
+ *\r
+ * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
+ * Date: 10.08.11 20:26\r
+ */\r
+public interface ActionProgress {\r
+  /**\r
+   * Call this method from a task to provide user with new\r
+   * status message text\r
+   * @param kind message kind\r
+   * @param message text of message to show\r
+   */\r
+  void addProgressMessage(@NotNull Kind kind, @NotNull String message);\r
+\r
+  enum Kind {\r
+    ERROR,\r
+    NORMAL\r
+  }\r
+}\r
diff --git a/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/NuGetInstalledTool.java b/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/NuGetInstalledTool.java
new file mode 100644 (file)
index 0000000..da4443d
--- /dev/null
@@ -0,0 +1,30 @@
+/*\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
+import org.jetbrains.annotations.NotNull;\r
+\r
+import java.io.File;\r
+\r
+/**\r
+ * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
+ * Date: 10.08.11 20:25\r
+ */\r
+public interface NuGetInstalledTool extends NuGetTool {\r
+  @NotNull\r
+  File getPath();\r
+}\r
diff --git a/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/NuGetInstallingTool.java b/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/NuGetInstallingTool.java
new file mode 100644 (file)
index 0000000..af96e91
--- /dev/null
@@ -0,0 +1,30 @@
+/*\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
+import org.jetbrains.annotations.NotNull;\r
+\r
+import java.util.Collection;\r
+\r
+/**\r
+ * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
+ * Date: 11.08.11 14:01\r
+ */\r
+public interface NuGetInstallingTool extends NuGetTool {\r
+  @NotNull\r
+  Collection<String> getInstallMessages();\r
+}\r
diff --git a/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/NuGetTool.java b/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/NuGetTool.java
new file mode 100644 (file)
index 0000000..ff201dc
--- /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
+import org.jetbrains.annotations.NotNull;\r
+\r
+/**\r
+ * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
+ * Date: 10.08.11 20:22\r
+ */\r
+public interface NuGetTool {\r
+  @NotNull\r
+  String getId();\r
+\r
+  @NotNull\r
+  String getVersion();\r
+}\r
diff --git a/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/NuGetToolManager.java b/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/NuGetToolManager.java
new file mode 100644 (file)
index 0000000..f9b1634
--- /dev/null
@@ -0,0 +1,59 @@
+/*\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
+import org.jetbrains.annotations.NotNull;\r
+\r
+import java.util.Collection;\r
+\r
+/**\r
+ * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
+ * Date: 10.08.11 20:22\r
+ */\r
+public interface NuGetToolManager {\r
+  /**\r
+   * @return list of installed nuget tools\r
+   */\r
+  @NotNull\r
+  Collection<NuGetInstalledTool> getInstalledTools();\r
+\r
+  /**\r
+   * @return list of tools that are installing now\r
+   */\r
+  @NotNull\r
+  Collection<NuGetInstallingTool> getInstallingTool();\r
+\r
+  /**\r
+   * @return fetches the full list of available and supported nuget tools\r
+   */\r
+  @NotNull\r
+  Collection<NuGetTool> getAvailableTools();\r
+\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
+   */\r
+  void installTool(@NotNull NuGetTool tool, @NotNull ActionProgress progress);\r
+\r
+  /**\r
+   * Registers user-provided NuGet tool from given NuGetInstalledTool i\r
+   * @param tool tool description to install\r
+   * @param progress action progress callback\r
+   */\r
+  void registerCustomTool(@NotNull NuGetUserTool tool, @NotNull ActionProgress progress);\r
+}\r
diff --git a/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/NuGetUserTool.java b/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/NuGetUserTool.java
new file mode 100644 (file)
index 0000000..2b4cb9b
--- /dev/null
@@ -0,0 +1,34 @@
+/*\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
+import org.jetbrains.annotations.NotNull;\r
+\r
+import java.io.File;\r
+\r
+/**\r
+ * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
+ * Date: 10.08.11 20:31\r
+ */\r
+public interface NuGetUserTool extends NuGetTool {\r
+  /**\r
+   * installs nuget.exe and all necessary files to given folder\r
+   * @param toDir destination directory\r
+   * @param progress progress callback\r
+   */\r
+  void installNuGet(@NotNull File toDir, @NotNull ActionProgress progress);\r
+}\r
diff --git a/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/impl/NuGetToolManagerImpl.java b/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/impl/NuGetToolManagerImpl.java
new file mode 100644 (file)
index 0000000..481818b
--- /dev/null
@@ -0,0 +1,126 @@
+/*\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.toolRegistry.*;\r
+import org.jetbrains.annotations.NotNull;\r
+\r
+import java.io.File;\r
+import java.util.Arrays;\r
+import java.util.Collection;\r
+\r
+/**\r
+ * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
+ * Date: 11.08.11 1:07\r
+ */\r
+public class NuGetToolManagerImpl implements NuGetToolManager {\r
+  @NotNull\r
+  public Collection<NuGetInstalledTool> getInstalledTools() {\r
+    return Arrays.<NuGetInstalledTool>asList(\r
+            new NuGetInstalledTool() {\r
+              @NotNull\r
+              public File getPath() {\r
+                return new File(".");\r
+              }\r
+\r
+              @NotNull\r
+              public String getId() {\r
+                return "i1";\r
+              }\r
+\r
+              @NotNull\r
+              public String getVersion() {\r
+                return "i1.2.3.5";\r
+              }\r
+            },\r
+            new NuGetInstalledTool() {\r
+              @NotNull\r
+              public File getPath() {\r
+                return new File(".");\r
+              }\r
+\r
+              @NotNull\r
+              public String getId() {\r
+                return "i2";\r
+              }\r
+\r
+              @NotNull\r
+              public String getVersion() {\r
+                return "i2.4.5.7";\r
+              }\r
+            }\r
+    );\r
+  }\r
+\r
+  @NotNull\r
+  public Collection<NuGetInstallingTool> getInstallingTool() {\r
+    return Arrays.<NuGetInstallingTool>asList(\r
+            new NuGetInstallingTool() {\r
+              @NotNull\r
+              public Collection<String> getInstallMessages() {\r
+                return Arrays.asList("mgs1", "msg2", "msg3");\r
+              }\r
+\r
+              @NotNull\r
+              public String getId() {\r
+                return "ii-1";\r
+              }\r
+\r
+              @NotNull\r
+              public String getVersion() {\r
+                return "ii.1.2.43";\r
+              }\r
+            }\r
+    );\r
+  }\r
+\r
+  @NotNull\r
+  public Collection<NuGetTool> getAvailableTools() {\r
+    return Arrays.<NuGetTool>asList(\r
+            new NuGetTool() {\r
+              @NotNull\r
+              public String getId() {\r
+                return "a-1";\r
+              }\r
+\r
+              @NotNull\r
+              public String getVersion() {\r
+                return "a.3.5.6";\r
+              }\r
+            },\r
+            new NuGetTool() {\r
+              @NotNull\r
+              public String getId() {\r
+                return "a-2";\r
+              }\r
+\r
+              @NotNull\r
+              public String getVersion() {\r
+                return "a2.5.6.6";\r
+              }\r
+            }\r
+    );\r
+  }\r
+\r
+  public void installTool(@NotNull NuGetTool tool, @NotNull ActionProgress progress) {\r
+\r
+  }\r
+\r
+  public void registerCustomTool(@NotNull NuGetUserTool tool, @NotNull ActionProgress progress) {\r
+\r
+  }\r
+}\r
diff --git a/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/tab/InstallToolController.java b/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/tab/InstallToolController.java
new file mode 100644 (file)
index 0000000..7ef2424
--- /dev/null
@@ -0,0 +1,82 @@
+/*\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.controllers.AuthorizationInterceptor;\r
+import jetbrains.buildServer.controllers.BaseFormXmlController;\r
+import jetbrains.buildServer.controllers.BasePropertiesBean;\r
+import jetbrains.buildServer.controllers.RequestPermissionsChecker;\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.web.openapi.PluginDescriptor;\r
+import jetbrains.buildServer.web.openapi.WebControllerManager;\r
+import org.jdom.Element;\r
+import org.jetbrains.annotations.NotNull;\r
+import org.springframework.web.servlet.ModelAndView;\r
+\r
+import javax.servlet.http.HttpServletRequest;\r
+import javax.servlet.http.HttpServletResponse;\r
+import java.util.HashMap;\r
+\r
+/**\r
+ * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
+ * Date: 11.08.11 12:12\r
+ */\r
+public class InstallToolController extends BaseFormXmlController {\r
+  private final String myPath;\r
+  private final NuGetToolManager myToolsManager;\r
+  private final PluginDescriptor myDescriptor;\r
+\r
+  public InstallToolController(@NotNull final AuthorizationInterceptor auth,\r
+                               @NotNull final PermissionChecker checker,\r
+                               @NotNull final WebControllerManager web,\r
+                               @NotNull final NuGetToolManager toolsManager,\r
+                               @NotNull final PluginDescriptor descriptor) {\r
+    myToolsManager = toolsManager;\r
+    myDescriptor = descriptor;\r
+    myPath = descriptor.getPluginResourcesPath("tool/nuget-server-tab-install-tool.html");\r
+    auth.addPathBasedPermissionsChecker(myPath, new RequestPermissionsChecker() {\r
+      public void checkPermissions(@NotNull AuthorityHolder authorityHolder,\r
+                                   @NotNull HttpServletRequest request) throws AccessDeniedException {\r
+        checker.assertAccess(authorityHolder);\r
+      }\r
+    });\r
+    web.registerController(myPath, this);\r
+  }\r
+\r
+  @NotNull\r
+  public String getPath() {\r
+    return myPath;\r
+  }\r
+\r
+\r
+  @Override\r
+  protected ModelAndView doGet(HttpServletRequest request, HttpServletResponse response) {\r
+    ModelAndView mv = new ModelAndView(myDescriptor.getPluginResourcesPath("tool/installTool-show.jsp"));\r
+\r
+    mv.getModelMap().put("available", myToolsManager.getAvailableTools());\r
+    mv.getModelMap().put("propertiesBean", new BasePropertiesBean(new HashMap<String, String>()));\r
+\r
+    return mv;\r
+  }\r
+\r
+  @Override\r
+  protected void doPost(HttpServletRequest request, HttpServletResponse response, Element xmlResponse) {\r
+\r
+  }\r
+}\r
diff --git a/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/tab/InstallableTool.java b/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/tab/InstallableTool.java
new file mode 100644 (file)
index 0000000..748dbff
--- /dev/null
@@ -0,0 +1,49 @@
+/*\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 org.jetbrains.annotations.NotNull;\r
+\r
+/**\r
+ * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
+ * Date: 11.08.11 12:41\r
+ */\r
+public class InstallableTool {\r
+  private String myId;\r
+  private String myVersion;\r
+  private boolean myIsAllreadyInstalled;\r
+\r
+  public InstallableTool(String id, String version, boolean isAllreadyInstalled) {\r
+    myId = id;\r
+    myVersion = version;\r
+    myIsAllreadyInstalled = isAllreadyInstalled;\r
+  }\r
+\r
+  @NotNull\r
+  public String getId() {\r
+    return myId;\r
+  }\r
+\r
+  @NotNull\r
+  public String getVersion() {\r
+    return myVersion;\r
+  }\r
+\r
+  public boolean isAllreadyInstalled() {\r
+    return myIsAllreadyInstalled;\r
+  }\r
+}\r
diff --git a/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/tab/InstalledToolsController.java b/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/tab/InstalledToolsController.java
new file mode 100644 (file)
index 0000000..b81c15c
--- /dev/null
@@ -0,0 +1,104 @@
+/*\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.controllers.AuthorizationInterceptor;\r
+import jetbrains.buildServer.controllers.BaseController;\r
+import jetbrains.buildServer.controllers.RequestPermissionsChecker;\r
+import jetbrains.buildServer.nuget.server.toolRegistry.NuGetInstalledTool;\r
+import jetbrains.buildServer.nuget.server.toolRegistry.NuGetInstallingTool;\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.web.openapi.PluginDescriptor;\r
+import jetbrains.buildServer.web.openapi.WebControllerManager;\r
+import org.jetbrains.annotations.NotNull;\r
+import org.springframework.web.servlet.ModelAndView;\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.Collections;\r
+import java.util.List;\r
+\r
+/**\r
+ * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
+ * Date: 10.08.11 20:38\r
+ */\r
+public class InstalledToolsController extends BaseController {\r
+  private final String myPath;\r
+  private final NuGetToolManager myToolsManager;\r
+  private final InstallToolController myInstaller;\r
+  private final PluginDescriptor myDescriptor;\r
+\r
+  public InstalledToolsController(@NotNull final AuthorizationInterceptor auth,\r
+                                  @NotNull final PermissionChecker checker,\r
+                                  @NotNull final WebControllerManager web,\r
+                                  @NotNull final NuGetToolManager toolsManager,\r
+                                  @NotNull final InstallToolController installer,\r
+                                  @NotNull final PluginDescriptor descriptor) {\r
+    myToolsManager = toolsManager;\r
+    myInstaller = installer;\r
+    myDescriptor = descriptor;\r
+    myPath = descriptor.getPluginResourcesPath("tool/nuget-server-tools.html");\r
+    auth.addPathBasedPermissionsChecker(myPath, new RequestPermissionsChecker() {\r
+      public void checkPermissions(@NotNull AuthorityHolder authorityHolder, @NotNull HttpServletRequest request) throws AccessDeniedException {\r
+       checker.assertAccess(authorityHolder);\r
+      }\r
+    });\r
+    web.registerController(myPath, this);\r
+  }\r
+\r
+  @NotNull\r
+  public String getPath() {\r
+    return myPath;\r
+  }\r
+\r
+  @Override\r
+  protected ModelAndView doHandle(HttpServletRequest request, HttpServletResponse response) throws Exception {\r
+    ModelAndView mv = new ModelAndView(myDescriptor.getPluginResourcesPath("tool/tools.jsp"));\r
+    mv.getModelMap().put("tools", getModel());\r
+    mv.getModelMap().put("installerUrl", myInstaller.getPath());\r
+    return mv;\r
+  }\r
+\r
+  @NotNull\r
+  private Collection<LocalTool> getModel() {\r
+    final List<LocalTool> tools = new ArrayList<LocalTool>();\r
+\r
+    for (NuGetInstalledTool tool : myToolsManager.getInstalledTools()) {\r
+      tools.add(new LocalTool(\r
+              tool.getId(),\r
+              tool.getVersion(),\r
+              LocalToolState.INSTALLED, \r
+              Collections.<String>emptyList()\r
+      ));\r
+    }\r
+\r
+    for (NuGetInstallingTool tool : myToolsManager.getInstallingTool()) {\r
+      tools.add(new LocalTool(\r
+              tool.getId(),\r
+              tool.getVersion(),\r
+              LocalToolState.INSTALLING,\r
+              tool.getInstallMessages()\r
+      ));\r
+    }\r
+\r
+    return tools;\r
+  }\r
+}\r
diff --git a/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/tab/LocalTool.java b/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/tab/LocalTool.java
new file mode 100644 (file)
index 0000000..8e27362
--- /dev/null
@@ -0,0 +1,67 @@
+/*\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 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 13:57\r
+ */\r
+public class LocalTool {\r
+  private final String myId;\r
+  private final String myVersion;\r
+  private final LocalToolState myState;\r
+  private final Collection<String> myStateMessages;\r
+\r
+  public LocalTool(@NotNull String id,\r
+                   @NotNull String version,\r
+                   @NotNull LocalToolState state,\r
+                   @NotNull Collection<String> stateMessages) {\r
+    myId = id;\r
+    myVersion = version;\r
+    myState = state;\r
+    myStateMessages = Collections.unmodifiableCollection(stateMessages);\r
+  }\r
+\r
+  @NotNull\r
+  public String getId() {\r
+    return myId;\r
+  }\r
+\r
+  @NotNull\r
+  public String getVersion() {\r
+    return myVersion;\r
+  }\r
+\r
+  @NotNull\r
+  public LocalToolState getState() {\r
+    return myState;\r
+  }\r
+\r
+  public boolean getContainesMessages() {\r
+    return !myStateMessages.isEmpty();\r
+  }\r
+\r
+  @NotNull\r
+  public Collection<String> getStateMessages() {\r
+    return myStateMessages;\r
+  }\r
+}\r
diff --git a/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/tab/LocalToolState.java b/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/tab/LocalToolState.java
new file mode 100644 (file)
index 0000000..86cdfd0
--- /dev/null
@@ -0,0 +1,51 @@
+/*\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
+/**\r
+ * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
+ * Date: 11.08.11 13:57\r
+ */\r
+public enum LocalToolState {\r
+  INSTALLED("Installed", false),\r
+  INSTALLING("Installing", true),\r
+  ;\r
+\r
+  private final String myName;\r
+  private final boolean myContainsMessages;\r
+\r
+  LocalToolState(String name, boolean containsMessages) {\r
+    myName = name;\r
+    myContainsMessages = containsMessages;\r
+  }\r
+\r
+  public boolean isInstalled() {\r
+    return this == INSTALLED;\r
+  }\r
+\r
+  public boolean isInstalling() {\r
+    return this == INSTALLING;\r
+  }\r
+\r
+  public String getName() {\r
+    return myName;\r
+  }\r
+\r
+  public boolean isContainsMessages() {\r
+    return myContainsMessages;\r
+  }\r
+}\r
diff --git a/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/tab/PermissionChecker.java b/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/tab/PermissionChecker.java
new file mode 100644 (file)
index 0000000..5b03305
--- /dev/null
@@ -0,0 +1,46 @@
+/*\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.serverSide.auth.*;\r
+import org.jetbrains.annotations.NotNull;\r
+\r
+/**\r
+ * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
+ * Date: 10.08.11 20:51\r
+ */\r
+public class PermissionChecker {\r
+  private final SecurityContext myContext;\r
+\r
+  public PermissionChecker(@NotNull final SecurityContext context) {\r
+    myContext = context;\r
+  }\r
+\r
+  public boolean hasAccess(@NotNull AuthorityHolder authorityHolder) {\r
+    return AuthUtil.hasGlobalPermission(authorityHolder, Permission.CHANGE_SERVER_SETTINGS);\r
+  }\r
+\r
+  public boolean hasAccess() {\r
+    return hasAccess(myContext.getAuthorityHolder());\r
+  }\r
+\r
+  public void assertAccess(AuthorityHolder holder) {\r
+    if (!hasAccess(holder)) {\r
+      throw new AccessDeniedException(holder, "You do not have access to view or update nuget server settings.");\r
+    }\r
+  }\r
+}\r
diff --git a/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/tab/ServerSettingsTab.java b/nuget-server/src/jetbrains/buildServer/nuget/server/toolRegistry/tab/ServerSettingsTab.java
new file mode 100644 (file)
index 0000000..91a4c26
--- /dev/null
@@ -0,0 +1,49 @@
+/*\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.web.openapi.*;\r
+import org.jetbrains.annotations.NotNull;\r
+\r
+/**\r
+ * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
+ * Date: 10.08.11 20:35\r
+ */\r
+public class ServerSettingsTab extends SimpleCustomTab {\r
+  private final PermissionChecker myChecker;\r
+\r
+  public ServerSettingsTab(@NotNull final PagePlaces pagePlaces,\r
+                           @NotNull final PluginDescriptor descriptor,\r
+                           @NotNull final InstalledToolsController controller,\r
+                           @NotNull final PermissionChecker checker) {\r
+    super(pagePlaces,\r
+            PlaceId.ADMIN_SERVER_CONFIGURATION_TAB,\r
+            "nugetServerSettingsTab",\r
+            controller.getPath(),\r
+            "NuGet");\r
+    myChecker = checker;\r
+    setPosition(PositionConstraint.last());\r
+    addCssFile(descriptor.getPluginResourcesPath("tool/tools.css"));\r
+    addJsFile(descriptor.getPluginResourcesPath("tool/tools.js"));\r
+    register();\r
+  }\r
+\r
+  @Override\r
+  public boolean isVisible() {\r
+    return super.isVisible() && myChecker.hasAccess();\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
new file mode 100644 (file)
index 0000000..ca160a5
--- /dev/null
@@ -0,0 +1,35 @@
+/*\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