azkaban-developers

Details

diff --git a/src/java/azkaban/webapp/AzkabanWebServer.java b/src/java/azkaban/webapp/AzkabanWebServer.java
index 21c6163..9b22f42 100644
--- a/src/java/azkaban/webapp/AzkabanWebServer.java
+++ b/src/java/azkaban/webapp/AzkabanWebServer.java
@@ -1011,6 +1011,7 @@ public class AzkabanWebServer extends AzkabanServer {
 			
 			String pluginName = pluginProps.getString("viewer.name");
 			String pluginWebPath = pluginProps.getString("viewer.path");
+			String pluginJobType = pluginProps.getString("viewer.jobtype", null);
 			int pluginOrder = pluginProps.getInt("viewer.order", 0);
 			boolean pluginHidden = pluginProps.getBoolean("viewer.hidden", false);
 			List<String> extLibClasspath = pluginProps.getStringList("viewer.external.classpaths", (List<String>)null);
@@ -1114,7 +1115,12 @@ public class AzkabanWebServer extends AzkabanServer {
 			
 			AbstractAzkabanServlet avServlet = (AbstractAzkabanServlet)obj;
 			root.addServlet(new ServletHolder(avServlet), "/" + pluginWebPath + "/*");
-			installedViewerPlugins.add(new ViewerPlugin(pluginName, pluginWebPath, pluginOrder, pluginHidden));
+			installedViewerPlugins.add(new ViewerPlugin(
+						pluginName, 
+						pluginWebPath, 
+						pluginOrder, 
+						pluginHidden,
+						pluginJobType));
 		}
 		
 		// Velocity needs the jar resource paths to be set.
diff --git a/src/java/azkaban/webapp/plugin/PluginRegistry.java b/src/java/azkaban/webapp/plugin/PluginRegistry.java
index 943e865..63e0726 100644
--- a/src/java/azkaban/webapp/plugin/PluginRegistry.java
+++ b/src/java/azkaban/webapp/plugin/PluginRegistry.java
@@ -16,6 +16,8 @@
 
 package azkaban.webapp.plugin;
 
+import java.util.List;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -23,16 +25,41 @@ public class PluginRegistry {
 
   private static PluginRegistry registry;
 
-  public Map<String, ViewerPlugin> plugins;
+  public Map<String, ViewerPlugin> viewerPlugins;
 
-  private PluginRegistry() {
+	public Map<String, List<ViewerPlugin>> jobTypeViewerPlugins;
 
+  private PluginRegistry() {
+		viewerPlugins = new HashMap<String, ViewerPlugin>();
+		jobTypeViewerPlugins = new HashMap<String, List<ViewerPlugin>>();
   }
 
   public void register(ViewerPlugin plugin) {
-
+		viewerPlugins.put(plugin.getPluginName(), plugin);
+		String jobType = plugin.getJobType();
+		if (jobType == null) {
+			return;
+		}
+		List<ViewerPlugin> plugins = null;
+		if (!jobTypeViewerPlugins.containsKey(jobType)) {
+			plugins = new ArrayList<ViewerPlugin>();
+			plugins.add(plugin);
+			jobTypeViewerPlugins.put(jobType, plugins);
+		}
+		else {
+			plugins = jobTypeViewerPlugins.get(jobType);
+			plugins.add(plugin);
+		}
   }
 
+	public List<ViewerPlugin> getViewerPlugins() {
+		return new ArrayList<ViewerPlugin>(viewerPlugins.values());
+	}
+
+	public List<ViewerPlugin> getViewerPluginsForJobType(String jobType) {
+		return jobTypeViewerPlugins.get(jobType);
+	}
+
   public static PluginRegistry getRegistry() {
     if (registry == null) {
       registry = new PluginRegistry();
diff --git a/src/java/azkaban/webapp/plugin/TriggerPlugin.java b/src/java/azkaban/webapp/plugin/TriggerPlugin.java
index 608c07a..6d51ab4 100644
--- a/src/java/azkaban/webapp/plugin/TriggerPlugin.java
+++ b/src/java/azkaban/webapp/plugin/TriggerPlugin.java
@@ -18,6 +18,8 @@ package azkaban.webapp.plugin;
 
 import azkaban.trigger.TriggerAgent;
 
+import azkaban.webapp.servlet.AbstractAzkabanServlet;
+
 public interface TriggerPlugin {
 	
 //	public TriggerPlugin(String pluginName, Props props, AzkabanWebServer azkabanWebApp) {
diff --git a/src/java/azkaban/webapp/plugin/ViewerPlugin.java b/src/java/azkaban/webapp/plugin/ViewerPlugin.java
index 43f83a1..4fd5fce 100644
--- a/src/java/azkaban/webapp/plugin/ViewerPlugin.java
+++ b/src/java/azkaban/webapp/plugin/ViewerPlugin.java
@@ -19,14 +19,21 @@ package azkaban.webapp.plugin;
 public class ViewerPlugin {
 	private final String pluginName;
 	private final String pluginPath;
+	private final String jobType;
 	private final int order;
 	private boolean hidden;
 	
-	public ViewerPlugin(String pluginName, String pluginPath, int order, boolean hidden) {
+	public ViewerPlugin(
+			String pluginName, 
+			String pluginPath, 
+			int order, 
+			boolean hidden,
+			String jobType) {
 		this.pluginName = pluginName;
 		this.pluginPath = pluginPath;
 		this.order = order;
 		this.setHidden(hidden);
+		this.jobType = jobType;
 	}
 
 	public String getPluginName() {
@@ -48,4 +55,8 @@ public class ViewerPlugin {
 	public void setHidden(boolean hidden) {
 		this.hidden = hidden;
 	}
+
+	public String getJobType() {
+		return jobType;
+	}
 }
diff --git a/src/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java b/src/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java
index 8ac470e..3d41e2c 100644
--- a/src/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java
+++ b/src/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java
@@ -39,6 +39,8 @@ import azkaban.utils.Props;
 import azkaban.webapp.AzkabanServer;
 import azkaban.webapp.AzkabanWebServer;
 import azkaban.webapp.session.Session;
+import azkaban.webapp.plugin.ViewerPlugin;
+import azkaban.webapp.plugin.TriggerPlugin;
 
 /**
  * Base Servlet for pages