Details
diff --git a/src/java/azkaban/webapp/AzkabanWebServer.java b/src/java/azkaban/webapp/AzkabanWebServer.java
index 01261a8..79a6b63 100644
--- a/src/java/azkaban/webapp/AzkabanWebServer.java
+++ b/src/java/azkaban/webapp/AzkabanWebServer.java
@@ -26,6 +26,8 @@ import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.List;
import java.util.Properties;
import java.util.TimeZone;
@@ -448,9 +450,9 @@ public class AzkabanWebServer implements AzkabanServer {
File viewerPluginPath = new File(pluginPath);
ClassLoader parentLoader = AzkabanWebServer.class.getClassLoader();
+ File[] pluginDirs = viewerPluginPath.listFiles();
ArrayList<String> jarPaths = new ArrayList<String>();
- for (String plug: plugins) {
- File pluginDir = new File(viewerPluginPath, plug);
+ for (File pluginDir: pluginDirs) {
if (!pluginDir.exists()) {
logger.error("Error viewer plugin path " + pluginDir.getPath() + " doesn't exist.");
continue;
@@ -474,6 +476,8 @@ public class AzkabanWebServer implements AzkabanServer {
String pluginName = pluginProps.getString("viewer.name");
String pluginWebPath = pluginProps.getString("viewer.path");
+ int pluginOrder = pluginProps.getInt("viewer.order", 0);
+ boolean pluginHidden = pluginProps.getBoolean("viewer.hidden", false);
String pluginClass = pluginProps.getString("viewer.servlet.class");
if (pluginClass == null) {
logger.error("Viewer class is not set.");
@@ -538,13 +542,22 @@ public class AzkabanWebServer implements AzkabanServer {
AbstractAzkabanServlet avServlet = (AbstractAzkabanServlet)obj;
root.addServlet(new ServletHolder(avServlet), "/" + pluginWebPath + "/*");
- installedViewerPlugins.add(new ViewerPlugin(pluginName, pluginWebPath));
+ installedViewerPlugins.add(new ViewerPlugin(pluginName, pluginWebPath, pluginOrder, pluginHidden));
}
+ // Velocity needs the jar resource paths to be set.
String jarResourcePath = StringUtils.join(jarPaths, ", ");
logger.info("Setting jar resource path " + jarResourcePath);
ve.addProperty("jar.resource.loader.path", jarResourcePath);
+ // Sort plugins based on order
+ Collections.sort(installedViewerPlugins, new Comparator<ViewerPlugin>() {
+ @Override
+ public int compare(ViewerPlugin o1, ViewerPlugin o2) {
+ return o1.getOrder() - o2.getOrder();
+ }
+ });
+
return installedViewerPlugins;
}
diff --git a/src/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java b/src/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java
index 9817b56..a2820d3 100644
--- a/src/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java
+++ b/src/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java
@@ -342,9 +342,9 @@ public abstract class AbstractAzkabanServlet extends HttpServlet {
//@TODO, allow more than one type of viewer. For time sake, I only install the first one
if (viewerPlugins != null && !viewerPlugins.isEmpty()) {
page.add("viewers", viewerPlugins);
- ViewerPlugin plugin = viewerPlugins.get(0);
- page.add("viewerName", plugin.getPluginName());
- page.add("viewerPath", plugin.getPluginPath());
+// ViewerPlugin plugin = viewerPlugins.get(0);
+// page.add("viewerName", plugin.getPluginName());
+// page.add("viewerPath", plugin.getPluginPath());
}
return page;
diff --git a/src/java/azkaban/webapp/servlet/velocity/nav.vm b/src/java/azkaban/webapp/servlet/velocity/nav.vm
index 2cc9206..8019467 100644
--- a/src/java/azkaban/webapp/servlet/velocity/nav.vm
+++ b/src/java/azkaban/webapp/servlet/velocity/nav.vm
@@ -28,10 +28,12 @@
<li id="executing-jobs-tab" #if($current_page == 'executing')class="selected"#end onClick="navMenuClick('$!context/executor')"><a href="$!context/executor">Executing</a></li>
<li id="history-jobs-tab" #if($current_page == 'history')class="selected"#end onClick="navMenuClick('$!context/history')"><a href="$!context/history">History</a></li>
- #if ($viewers)
- <li id="viewer-tab" #if($current_page == 'viewer') class="selected"#end onClick="navMenuClick('$!context/$viewerPath')">
- <a href="$!context/$viewerPath">$viewerName</a>
+ #foreach($viewer in $viewers)
+ #if(!$viewer.hidden)
+ <li #if($current_page == $viewer.pluginName) class="selected"#end onClick="navMenuClick('$!context/$viewer.pluginPath')">
+ <a href="$!context/$viewer.pluginPath">$viewer.pluginName</a>
</li>
+ #end
#end
</ul>
diff --git a/src/java/azkaban/webapp/servlet/ViewerPlugin.java b/src/java/azkaban/webapp/servlet/ViewerPlugin.java
index 725473f..e54c4aa 100644
--- a/src/java/azkaban/webapp/servlet/ViewerPlugin.java
+++ b/src/java/azkaban/webapp/servlet/ViewerPlugin.java
@@ -3,10 +3,14 @@ package azkaban.webapp.servlet;
public class ViewerPlugin {
private final String pluginName;
private final String pluginPath;
+ private final int order;
+ private boolean hidden;
- public ViewerPlugin(String pluginName, String pluginPath) {
+ public ViewerPlugin(String pluginName, String pluginPath, int order, boolean hidden) {
this.pluginName = pluginName;
this.pluginPath = pluginPath;
+ this.order = order;
+ this.setHidden(hidden);
}
public String getPluginName() {
@@ -16,4 +20,16 @@ public class ViewerPlugin {
public String getPluginPath() {
return pluginPath;
}
+
+ public int getOrder() {
+ return order;
+ }
+
+ public boolean isHidden() {
+ return hidden;
+ }
+
+ public void setHidden(boolean hidden) {
+ this.hidden = hidden;
+ }
}