[metcat] r203 committed - added property Search support for dashboard

1 view
Skip to first unread message

metcat.apach...@codespot.com

unread,
Aug 29, 2012, 6:53:11 AM8/29/12
to metca...@googlegroups.com
Revision: 203
Author: mail.ha...@gmail.com
Date: Wed Aug 29 03:52:49 2012
Log: added property Search support for dashboard
http://code.google.com/a/apache-extras.org/p/metcat/source/detail?r=203

Added:

/trunk/metcat-dashboard/src/main/java/org/apache/airavata/metcat/dashboard/servlets/GetWorkflowPropertyListServlet.java
/trunk/metcat-dashboard/src/main/webapp/searchproperty.jsp
Modified:
/trunk/metcat-dashboard/src/main/webapp/WEB-INF/web.xml
/trunk/metcat-dashboard/src/main/webapp/index.jsp

=======================================
--- /dev/null
+++
/trunk/metcat-dashboard/src/main/java/org/apache/airavata/metcat/dashboard/servlets/GetWorkflowPropertyListServlet.java
Wed Aug 29 03:52:49 2012
@@ -0,0 +1,169 @@
+package org.apache.airavata.metcat.dashboard.servlets;
+
+import org.apache.airavata.metcat.dashboard.NonBlockingInvoker;
+import org.apache.airavata.metcat.dashboard.Utils;
+import org.apache.axiom.om.OMElement;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+
+public class GetWorkflowPropertyListServlet extends HttpServlet {
+
+ // Services and payload
+ private final static String SERVICE_GET_WORKFLOW_PROPERTY_LIST
= "getWorkflowPropertyNames";
+ private final static String SERVICE_GET_EVENT_PROPERTY_LIST
= "getEventPropertyNames";
+
+ private final static String SERVICE_SEARCH_BY_WORKFLOW_PROPERTY
= "getWorkflowIDsOfGivenWorkflowPropertyAndValue";
+ private final static String SERVICE_SEARCH_BY_EVENT_PROPERTY
= "getEventIDsOfGivenEventPropertyAndValue";
+
+// //Service Prams
+// private final static String SERVICE_SEARCH_BY_TIME_SPAN_VAR1 = "t1";
+// private final static String SERVICE_SEARCH_BY_TIME_SPAN_VAR2 = "t2";
+// private final static String SERVICE_SEARCH_BY_STATE_VAR = "state";
+// private final static String SERVICE_SEARCH_SHOW_LATEST
= "showLatest";
+// private final static String SERVICE_SEARCH_SHOW_RESULTS = "noRows";
+// //Request
+// private final static String REQUEST_SEARCH_BY_TIME_SPAN_VAR1 = "t1";
+// private final static String REQUEST_SEARCH_BY_TIME_SPAN_VAR2 = "t2";
+// private final static String REQUEST_SEARCH_BY_STATE_VAR = "state";
+// private final static String REQUEST_SEARCH_TYPE = "view";
+// private final static String REQUEST_SEARCH_RESULTS_LIMIT = "results";
+
+
+ private final static String GET_PARAMETER_LIST = "parameter";
+ private final static String GET_DATA_ = "data";
+
+ protected void doGet(HttpServletRequest request,
+ HttpServletResponse response) throws
ServletException, IOException {
+ dispatchQuery(request, response);
+ }
+
+ protected void doPost(HttpServletRequest request,
+ HttpServletResponse response) throws
ServletException, IOException {
+ dispatchQuery(request, response);
+ }
+
+ private void dispatchQuery(HttpServletRequest request,
HttpServletResponse response) throws IOException {
+
+ String query = request.getParameter(CommonData.REQUEST_QUERY);
+ try {
+ if (GET_PARAMETER_LIST.equalsIgnoreCase(query)) {
+ getWorkflowPropertyList(request, response);
+ } else if (GET_DATA_.equalsIgnoreCase(query)) {
+ getPropertyData(request, response);
+ }
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void getWorkflowPropertyList(HttpServletRequest request,
HttpServletResponse response) throws IOException, JSONException {
+
+ HttpSession session = request.getSession(true);
+ String metcatHost = (String)
session.getAttribute(CommonData.SESSION_METCAT_HOST_URL);
+ String serviceURL = metcatHost + "/" +
SERVICE_GET_WORKFLOW_PROPERTY_LIST;
+
+ OMElement requestElement =
Utils.createPayLoad(SERVICE_GET_WORKFLOW_PROPERTY_LIST,
+ new String[]{},
+ new String[]{});
+
+ NonBlockingInvoker invoker = new NonBlockingInvoker(serviceURL,
requestElement);
+ invoker.invoke();
+ JSONArray totalResultArray = new
JSONArray(Utils.getResults(invoker.getResponse()));
+ PrintWriter out = response.getWriter();
+ out.println("<select id=\"propertyType\">\n");
+ for (int i = 0; i < totalResultArray.length(); i++) {
+ out.println("<option value=\"wf-" + totalResultArray.get(i)
+ "\">[Workflow] " + totalResultArray.get(i) + "</option>\n");
+ }
+ String serviceURL2 = metcatHost + "/" +
SERVICE_GET_EVENT_PROPERTY_LIST;
+ OMElement requestElement2 =
Utils.createPayLoad(SERVICE_GET_EVENT_PROPERTY_LIST,
+ new String[]{},
+ new String[]{});
+
+ NonBlockingInvoker invoker2 = new NonBlockingInvoker(serviceURL2,
requestElement2);
+ invoker2.invoke();
+ JSONArray totalResultArray2 = new
JSONArray(Utils.getResults(invoker2.getResponse()));
+
+
+ for (int i = 0; i < totalResultArray2.length(); i++) {
+ out.println("<option value=\"ev-" + totalResultArray2.get(i)
+ "\">[Event] " + totalResultArray2.get(i) + "</option>\n");
+ }
+ out.println("</select>\n");
+ }
+
+
+ private void getPropertyData(HttpServletRequest request,
HttpServletResponse response) throws IOException, JSONException {
+
+ String value = request.getParameter("value");
+ String propertyType = request.getParameter("propertyType");
+ NonBlockingInvoker invoker = null;
+ HttpSession session = request.getSession(true);
+ String metcatHost = (String)
session.getAttribute(CommonData.SESSION_METCAT_HOST_URL);
+ String serviceURL = "";
+ OMElement requestElement = null;
+ PrintWriter out = response.getWriter();
+ boolean useWorkflowSearch = false;
+ if (propertyType.startsWith("wf-")) {
+ serviceURL = metcatHost + "/" +
SERVICE_SEARCH_BY_WORKFLOW_PROPERTY;
+ requestElement =
Utils.createPayLoad(SERVICE_SEARCH_BY_WORKFLOW_PROPERTY,
+ new String[]{"propertyName", "propertyValue"},
+ new String[]{propertyType.substring(3), value});
+ useWorkflowSearch = true;
+ } else if (propertyType.startsWith("ev-")) {
+ serviceURL = metcatHost + "/" +
SERVICE_SEARCH_BY_EVENT_PROPERTY;
+ requestElement =
Utils.createPayLoad(SERVICE_SEARCH_BY_EVENT_PROPERTY,
+ new String[]{"propertyName", "propertyValue"},
+ new String[]{propertyType.substring(3), value});
+ } else {
+ out.println("");
+ return;
+ }
+ invoker = new NonBlockingInvoker(serviceURL, requestElement);
+ invoker.invoke();
+ JSONArray totalResultArray = new
JSONArray(Utils.getResults(invoker.getResponse()));
+ out.println("<div style=\"color:black; font-size:12px;\"
align=\"left\"> Total Search Results found : " + totalResultArray.length()
+ "</div><br/>");
+ if (totalResultArray.length() > 0) {
+ out.println(generateTableHeader(totalResultArray.length(),
useWorkflowSearch));
+ for (int i = 0; i < totalResultArray.length(); i++) {
+ out.println(generateWorkflowDiv((String)
totalResultArray.get(i), i + 1, useWorkflowSearch));
+ }
+ out.println("</tbody>\n" +
+ "</table></div>");
+ }
+ }
+
+ private String generateTableHeader(int resultSize, boolean
useWorkflowSearch) {
+ if (useWorkflowSearch) {
+ return "<div
class=\"datagrid\"><table><thead><tr><th></th><th>Workflow ID</th></thead>"
+
+ "<tfoot><tr><td colspan=\"2\">Showing Results: " +
resultSize + " </td></tr></tfoot><tbody>";
+ }
+ return "<div
class=\"datagrid\"><table><thead><tr><th></th><th>Event
Name</th><th>Workflow ID</th><th>TimeStamp</th></tr></thead>" +
+ "<tfoot><tr><td colspan=\"2\">Showing Results: " +
resultSize + " </td></tr></tfoot><tbody>";
+ }
+
+ private String generateWorkflowDiv(String data, int i, boolean
useWorkflowSearch) throws UnsupportedEncodingException {
+ String alt = "";
+ if (i % 2 == 0) {
+ alt = "class=\"alt\"";
+ }
+ if (useWorkflowSearch) {
+ return "<tr " + alt + " ><td>" + i + "</td><td
class='modelWorkflow'><a href='workflow.jsp?id=" +
URLEncoder.encode(data, "UTF-8") + "' target='_blank' >" + data
+ "</a></td></tr>";
+ }
+ String[] eventID = data.split("::");
+ String eventName = eventID[0];
+ String timeStamp = eventID[1];
+ String workflowID = eventID[2];
+ return "<tr " + alt + " ><td>" + i + "</td><td>" + eventName
+ "</td><td>" + workflowID + "</td><td>" + timeStamp + "</td></tr>";
+ }
+}
+
=======================================
--- /dev/null
+++ /trunk/metcat-dashboard/src/main/webapp/searchproperty.jsp Wed Aug 29
03:52:49 2012
@@ -0,0 +1,95 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8"
+ pageEncoding="UTF-8" %>
+<%@ page import="org.apache.airavata.metcat.dashboard.Utils" %>
+<%@ include file="WEB-INF/jspf/session.jspf" %>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+
+ <link href="css/style.css" rel="stylesheet" type="text/css"
media="all"/>
+ <link href="css/message.css" rel="stylesheet" type="text/css"
media="all"/>
+ <link href="css/workflow.css" rel="stylesheet" type="text/css"
media="all"/>
+ <link href="css/base/jquery.ui.all.css" rel="stylesheet"
type="text/css" media="all"/>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>MetCat Quick Start Dashboard - Search Properties</title>
+
+ <script type="text/javascript">
+ function getPropertyList() {
+ document.getElementById("propertyList").innerHTML
= "Loading...";
+ var searchval = "query=parameter";
+ var xmlhttp;
+ if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome,
Opera, Safari
+ xmlhttp = new XMLHttpRequest();
+ }
+ else {// code for IE6, IE5
+ xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
+ }
+ xmlhttp.onreadystatechange = function() {
+ if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
+
+ document.getElementById("propertyList").innerHTML =
xmlhttp.responseText;
+ }
+ }
+ xmlhttp.open("Get", "getPropertyData?" + searchval, true);
+ xmlhttp.send();
+ }
+
+ function searchPropertyValue() {
+ document.getElementById("results").innerHTML = "<h2>
Processing data</h2 > <br/><img src = \"images/animation/processing.gif\" /
>";
+ var searchval = "query=data&propertyType=" +
encodeURIComponent(document.getElementById('propertyType').value) +
+ "&value=" +
encodeURIComponent(document.getElementById('value').value);
+ var xmlhttp;
+ if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome,
Opera, Safari
+ xmlhttp = new XMLHttpRequest();
+ }
+ else {// code for IE6, IE5
+ xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
+ }
+ xmlhttp.onreadystatechange = function() {
+ if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
+
+ document.getElementById("results").innerHTML =
xmlhttp.responseText;
+ }
+ }
+ xmlhttp.open("Get", "getPropertyData?" + searchval, true);
+ xmlhttp.send();
+ }
+ </script>
+</head>
+<body>
+<%@ include file="WEB-INF/jspf/header.jspf" %>
+
+<div id="content">
+ <div class="contentBox">
+ <div align="left">
+ <div class="back"><a href="index.jsp"><img
src="images/icons/back.png" alt=""/><br/>
+ Back</a></div>
+ <div class="optionPanel">
+ <div>
+ <table width="80%">
+ <tbody>
+ <tr>
+ <td width="20%"><strong>Search
Property:</strong></td>
+ <td><div id="propertyList"></div></td>
+ <td width="60%"><input type="text" id="value"
value="" ></td>
+ <td><input type="button"
onclick="searchPropertyValue();" value="Search"></td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div id="resultView" align="center">
+ <div id="results">
+ </div>
+ </div>
+ <div class="push"></div>
+ <script type="text/javascript">
+ window.onload = getPropertyList;
+</script>
+</div>
+<!-- End of content -->
+<%@ include file="WEB-INF/jspf/footer.jspf" %>
+</body>
+</html>
=======================================
--- /trunk/metcat-dashboard/src/main/webapp/WEB-INF/web.xml Mon Aug 6
18:19:48 2012
+++ /trunk/metcat-dashboard/src/main/webapp/WEB-INF/web.xml Wed Aug 29
03:52:49 2012
@@ -16,6 +16,10 @@

<servlet-name>org.apache.airavata.metcat.dashboard.servlets.GetWorkflowDataServlet</servlet-name>

<servlet-class>org.apache.airavata.metcat.dashboard.servlets.GetWorkflowDataServlet</servlet-class>
</servlet>
+ <servlet>
+
<servlet-name>org.apache.airavata.metcat.dashboard.servlets.GetWorkflowPropertyListServlet</servlet-name>
+
<servlet-class>org.apache.airavata.metcat.dashboard.servlets.GetWorkflowPropertyListServlet</servlet-class>
+ </servlet>
<servlet-mapping>

<servlet-name>org.apache.airavata.metcat.dashboard.servlets.ConnectionServlet</servlet-name>
<url-pattern>/CheckConnection</url-pattern>
@@ -24,8 +28,12 @@

<servlet-name>org.apache.airavata.metcat.dashboard.servlets.GetWorkflowListServlet</servlet-name>
<url-pattern>/getWorkflows</url-pattern>
</servlet-mapping>
- <servlet-mapping>
+ <servlet-mapping>

<servlet-name>org.apache.airavata.metcat.dashboard.servlets.GetWorkflowDataServlet</servlet-name>
<url-pattern>/getWorkflowData</url-pattern>
</servlet-mapping>
+ <servlet-mapping>
+
<servlet-name>org.apache.airavata.metcat.dashboard.servlets.GetWorkflowPropertyListServlet</servlet-name>
+ <url-pattern>/getPropertyData</url-pattern>
+ </servlet-mapping>
</web-app>
=======================================
--- /trunk/metcat-dashboard/src/main/webapp/index.jsp Tue Aug 28 01:56:38
2012
+++ /trunk/metcat-dashboard/src/main/webapp/index.jsp Wed Aug 29 03:52:49
2012
@@ -34,6 +34,14 @@
</span> <br>
</span>
</div>
+ <div class="menudiv">
+ <span> <a href="searchworkflow.jsp"> <img
+ src="images/icons/search.png" alt=""></a>
+ </span> <span> <span> <a href="searchproperty.jsp"> Search
+ Properties</a>
+ </span> <br>
+ </span>
+ </div>

<div class="block"></div>
<h4>Model Experiment/Workflow/Data products</h4>
Reply all
Reply to author
Forward
0 new messages