Author: [log in to unmask]
Date: Thu Aug 20 13:02:26 2015
New Revision: 3382
Log:
Checkpoint current version of run db web app.
Added:
java/trunk/run-webapp/
java/trunk/run-webapp/pom.xml
java/trunk/run-webapp/src/
java/trunk/run-webapp/src/main/
java/trunk/run-webapp/src/main/java/
java/trunk/run-webapp/src/main/java/org/
java/trunk/run-webapp/src/main/java/org/hps/
java/trunk/run-webapp/src/main/java/org/hps/run/
java/trunk/run-webapp/src/main/java/org/hps/run/web/
java/trunk/run-webapp/src/main/java/org/hps/run/web/DatabaseUtilities.java
java/trunk/run-webapp/src/main/java/org/hps/run/web/EpicsDataServlet.java
java/trunk/run-webapp/src/main/java/org/hps/run/web/RunSummaryServlet.java
java/trunk/run-webapp/src/main/java/org/hps/run/web/RunsServlet.java
java/trunk/run-webapp/src/main/java/org/hps/run/web/ScalerDataServlet.java
java/trunk/run-webapp/src/main/resources/
java/trunk/run-webapp/src/main/webapp/
java/trunk/run-webapp/src/main/webapp/WEB-INF/
java/trunk/run-webapp/src/main/webapp/WEB-INF/context.xml
java/trunk/run-webapp/src/main/webapp/WEB-INF/web.xml
java/trunk/run-webapp/src/main/webapp/css/
java/trunk/run-webapp/src/main/webapp/css/style.css
java/trunk/run-webapp/src/main/webapp/html/
java/trunk/run-webapp/src/main/webapp/html/pager.html
java/trunk/run-webapp/src/main/webapp/html/tablesorter.html
java/trunk/run-webapp/src/main/webapp/images/
java/trunk/run-webapp/src/main/webapp/javascript/
java/trunk/run-webapp/src/main/webapp/runEpics.jsp
java/trunk/run-webapp/src/main/webapp/runScalers.jsp
java/trunk/run-webapp/src/main/webapp/runSummary.jsp
java/trunk/run-webapp/src/main/webapp/runTable.jsp
Added: java/trunk/run-webapp/pom.xml
=============================================================================
--- java/trunk/run-webapp/pom.xml (added)
+++ java/trunk/run-webapp/pom.xml Thu Aug 20 13:02:26 2015
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>hps-run-webapp</artifactId>
+ <name>run-webapp</name>
+ <description>run web app</description>
+ <packaging>war</packaging>
+ <parent>
+ <groupId>org.hps</groupId>
+ <artifactId>hps-parent</artifactId>
+ <relativePath>../parent/pom.xml</relativePath>
+ <version>3.4.0-SNAPSHOT</version>
+ </parent>
+ <scm>
+ <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/run-web/</url>
+ <connection>scm:svn:svn://svn.freehep.org/hps/java/trunk/run-web/</connection>
+ <developerConnection>scm:svn:svn://svn.freehep.org/hps/java/trunk/run-web/</developerConnection>
+ </scm>
+ <dependencies>
+ <dependency>
+ <groupId>org.hps</groupId>
+ <artifactId>hps-record-util</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <version>2.4</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>mysql</groupId>
+ <artifactId>mysql-connector-java</artifactId>
+ <version>5.1.28</version>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+ <build>
+ <finalName>hps-run-webapp</finalName>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.tomcat.maven</groupId>
+ <artifactId>tomcat7-maven-plugin</artifactId>
+ <version>2.2</version>
+ <configuration>
+ <url>http://localhost:8080/manager/text</url>
+ <server>local-tomcat-server</server>
+ <path>/hps-run-webapp</path>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
Added: java/trunk/run-webapp/src/main/java/org/hps/run/web/DatabaseUtilities.java
=============================================================================
--- java/trunk/run-webapp/src/main/java/org/hps/run/web/DatabaseUtilities.java (added)
+++ java/trunk/run-webapp/src/main/java/org/hps/run/web/DatabaseUtilities.java Thu Aug 20 13:02:26 2015
@@ -0,0 +1,23 @@
+package org.hps.run.web;
+
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import javax.sql.DataSource;
+
+public final class DatabaseUtilities {
+
+ private static String DATASOURCE_CONTEXT = "java:comp/env/jdbc/hps_run_db_dev";
+
+ public static DataSource getDataSource() {
+ DataSource dataSource = null;
+ try {
+ dataSource = (DataSource) new InitialContext().lookup(DATASOURCE_CONTEXT);
+ } catch (final NamingException e) {
+ throw new RuntimeException("Error creating data source.");
+ }
+ if (dataSource == null) {
+ throw new IllegalStateException("Data source not found");
+ }
+ return dataSource;
+ }
+}
Added: java/trunk/run-webapp/src/main/java/org/hps/run/web/EpicsDataServlet.java
=============================================================================
--- java/trunk/run-webapp/src/main/java/org/hps/run/web/EpicsDataServlet.java (added)
+++ java/trunk/run-webapp/src/main/java/org/hps/run/web/EpicsDataServlet.java Thu Aug 20 13:02:26 2015
@@ -0,0 +1,71 @@
+package org.hps.run.web;
+
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.sql.DataSource;
+
+import org.hps.record.epics.EpicsData;
+import org.hps.record.run.EpicsDataDao;
+import org.hps.record.run.EpicsDataDaoImpl;
+
+/**
+ * @author Jeremy McCormick, SLAC
+ */
+@SuppressWarnings("serial")
+public class EpicsDataServlet extends HttpServlet {
+
+ private final DataSource dataSource;
+
+ public EpicsDataServlet() {
+ this.dataSource = DatabaseUtilities.getDataSource();
+ }
+
+ @Override
+ public void doGet(final HttpServletRequest request, final HttpServletResponse response) throws ServletException,
+ IOException {
+ if (!request.getParameterMap().containsKey("run")) {
+ throw new RuntimeException("Missing required run parameter.");
+ }
+ final Integer run = Integer.parseInt(request.getParameterValues("run")[0]);
+ EpicsDataDao epicsDataDao = null;
+ Connection connection = null;
+ List<EpicsData> epicsDataList = null;
+
+ String epicsBankType = "2s";
+ if (request.getParameterMap().containsKey("epicsBankType")) {
+ epicsBankType = request.getParameter("epicsBankType");
+ if (!epicsBankType.equals("2s") && !epicsBankType.equals("20s")) {
+ throw new IllegalArgumentException("bad epics bank type: " + epicsBankType);
+ }
+ }
+
+ // List<String> variableNames = null;
+ try {
+ connection = dataSource.getConnection();
+ epicsDataDao = new EpicsDataDaoImpl(connection);
+ epicsDataList = epicsDataDao.getEpicsData(run);
+ } catch (final SQLException e) {
+ throw new IllegalStateException("Failed to setup data source connection.", e);
+ } finally {
+ if (connection != null) {
+ try {
+ connection.close();
+ } catch (final SQLException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ request.setAttribute("EpicsDataList", epicsDataList);
+ request.setAttribute("EpicsBankType", epicsBankType);
+ final RequestDispatcher dispatcher = this.getServletContext().getRequestDispatcher("/runEpics.jsp");
+ dispatcher.forward(request, response);
+ }
+}
Added: java/trunk/run-webapp/src/main/java/org/hps/run/web/RunSummaryServlet.java
=============================================================================
--- java/trunk/run-webapp/src/main/java/org/hps/run/web/RunSummaryServlet.java (added)
+++ java/trunk/run-webapp/src/main/java/org/hps/run/web/RunSummaryServlet.java Thu Aug 20 13:02:26 2015
@@ -0,0 +1,79 @@
+package org.hps.run.web;
+
+import java.io.IOException;
+import java.sql.Connection;
+
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.sql.DataSource;
+
+import org.hps.record.run.RunManager;
+import org.hps.record.run.RunSummary;
+
+/**
+ * @author Jeremy McCormick, SLAC
+ */
+public class RunSummaryServlet extends HttpServlet {
+
+ /**
+ * JSP target page.
+ */
+ private static final String JSP_TARGET = "/runSummary.jsp";
+
+ /**
+ * Attribute in the request which will have the run summary object.
+ */
+ private static final String RUN_SUMMARY_ATTRIBUTE = "RunSummary";
+
+ /**
+ * The data source with the database connection.
+ */
+ private final DataSource dataSource;
+
+ /**
+ * Create a new runs servlet.
+ * <p>
+ * This will initialize the data source with the db connection.
+ */
+ public RunSummaryServlet() {
+ this.dataSource = DatabaseUtilities.getDataSource();
+ }
+
+ /**
+ * Setup servlet state by loading the run summaries and then forward to the JSP page for display.
+ */
+ @Override
+ public void doGet(final HttpServletRequest request, final HttpServletResponse response) throws ServletException,
+ IOException {
+ if (!request.getParameterMap().containsKey("run")) {
+ throw new RuntimeException("Missing required run parameter.");
+ }
+ final Integer run = Integer.parseInt(request.getParameterValues("run")[0]);
+ final RunSummary runSummary = this.getRunSummary(run);
+ request.setAttribute(RUN_SUMMARY_ATTRIBUTE, runSummary);
+ final RequestDispatcher dispatcher = this.getServletContext().getRequestDispatcher(JSP_TARGET);
+ dispatcher.forward(request, response);
+ }
+
+ /**
+ * Get a run summary for the given run number.
+ *
+ * @param run the run number
+ * @return the run summary
+ */
+ private RunSummary getRunSummary(final Integer run) {
+ final RunManager runManager = new RunManager();
+ RunSummary runSummary = null;
+ try (Connection connection = this.dataSource.getConnection()) {
+ runManager.setConnection(connection);
+ runManager.setRun(run);
+ runSummary = runManager.getRunSummary();
+ } catch (final Exception e) {
+ throw new RuntimeException(e);
+ }
+ return runSummary;
+ }
+}
Added: java/trunk/run-webapp/src/main/java/org/hps/run/web/RunsServlet.java
=============================================================================
--- java/trunk/run-webapp/src/main/java/org/hps/run/web/RunsServlet.java (added)
+++ java/trunk/run-webapp/src/main/java/org/hps/run/web/RunsServlet.java Thu Aug 20 13:02:26 2015
@@ -0,0 +1,93 @@
+package org.hps.run.web;
+
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.sql.DataSource;
+
+import org.hps.record.run.RunSummary;
+import org.hps.record.run.RunSummaryDao;
+import org.hps.record.run.RunSummaryDaoImpl;
+
+/**
+ * Loads the list of {@link org.hps.record.run.RunSummary} objects to setup state for the <code>runTable.jsp</code>
+ * page.
+ *
+ * @author Jeremy McCormick, SLAC
+ */
+@SuppressWarnings("serial")
+public final class RunsServlet extends HttpServlet {
+
+ /**
+ * The JSP page to which the servlet will forward the request.
+ */
+ private static final String JSP_TARGET = "/runTable.jsp";
+
+ /**
+ * Attribute for list of run summaries that will set on the request object.
+ */
+ private static final String RUN_SUMMARIES_ATTRIBUTE = "RunSummaries";
+
+ /**
+ * The data source with the database connection.
+ */
+ private final DataSource dataSource;
+
+ /**
+ * Create a new runs servlet.
+ * <p>
+ * This will initialize the data source with the db connection.
+ */
+ public RunsServlet() {
+ this.dataSource = DatabaseUtilities.getDataSource();
+ }
+
+ /**
+ * Setup servlet state by loading the run summaries and then forward to the JSP page for display.
+ */
+ @Override
+ public void doGet(final HttpServletRequest request, final HttpServletResponse response) throws ServletException,
+ IOException {
+
+ final List<RunSummary> runSummaries = this.getRunSummaries();
+ request.setAttribute(RUN_SUMMARIES_ATTRIBUTE, runSummaries);
+ final RequestDispatcher dispatcher = this.getServletContext().getRequestDispatcher(JSP_TARGET);
+ dispatcher.forward(request, response);
+ }
+
+ /**
+ * Read the full list of run summaries from the db.
+ *
+ * @return the list of run summaries
+ */
+ private List<RunSummary> getRunSummaries() {
+ List<RunSummary> runSummaries = new ArrayList<RunSummary>();
+ Connection connection = null;
+ try {
+ connection = this.dataSource.getConnection();
+ final RunSummaryDao runSummaryDao = new RunSummaryDaoImpl(connection);
+
+ // This does a shallow read of all run summaries but does not load their complex state.
+ runSummaries = runSummaryDao.getRunSummaries();
+ } catch (final SQLException e) {
+ throw new RuntimeException(e);
+ } finally {
+ if (connection != null) {
+ try {
+ connection.close();
+ } catch (final Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ return runSummaries;
+ }
+}
Added: java/trunk/run-webapp/src/main/java/org/hps/run/web/ScalerDataServlet.java
=============================================================================
--- java/trunk/run-webapp/src/main/java/org/hps/run/web/ScalerDataServlet.java (added)
+++ java/trunk/run-webapp/src/main/java/org/hps/run/web/ScalerDataServlet.java Thu Aug 20 13:02:26 2015
@@ -0,0 +1,70 @@
+package org.hps.run.web;
+
+import java.io.IOException;
+import java.sql.Connection;
+import java.util.List;
+
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.sql.DataSource;
+
+import org.hps.record.run.ScalerDataDao;
+import org.hps.record.run.ScalerDataDaoImpl;
+import org.hps.record.scalers.ScalerData;
+
+/**
+ * @author Jeremy McCormick, SLAC
+ */
+@SuppressWarnings("serial")
+public class ScalerDataServlet extends HttpServlet {
+
+ /**
+ * JSP target page.
+ */
+ private static final String JSP_TARGET = "/runScalers.jsp";
+
+ /**
+ * Attribute in the request which will have the run summary object.
+ */
+ private static final String SCALAR_DATA_ATTRIBUTE = "ScalerDataList";
+
+ /**
+ * The data source with the database connection.
+ */
+ private final DataSource dataSource;
+
+ /**
+ * Create a new runs servlet.
+ * <p>
+ * This will initialize the data source with the db connection.
+ */
+ public ScalerDataServlet() {
+ this.dataSource = DatabaseUtilities.getDataSource();
+ }
+
+ /**
+ * Setup servlet state by loading the run summaries and then forward to the JSP page for display.
+ */
+ @Override
+ public void doGet(final HttpServletRequest request, final HttpServletResponse response) throws ServletException,
+ IOException {
+ if (!request.getParameterMap().containsKey("run")) {
+ throw new RuntimeException("Missing required run parameter.");
+ }
+ final Integer run = Integer.parseInt(request.getParameterValues("run")[0]);
+ List<ScalerData> scalerDataList = null;
+ try (Connection connection = this.dataSource.getConnection()) {
+ final ScalerDataDao scalarDataDao = new ScalerDataDaoImpl(connection);
+ scalerDataList = scalarDataDao.getScalerData(run);
+ } catch (final Exception e) {
+ throw new RuntimeException(e);
+ }
+ request.setAttribute(SCALAR_DATA_ATTRIBUTE, scalerDataList);
+ final RequestDispatcher dispatcher = this.getServletContext().getRequestDispatcher(JSP_TARGET);
+ dispatcher.forward(request, response);
+ }
+
+}
Added: java/trunk/run-webapp/src/main/webapp/WEB-INF/context.xml
=============================================================================
--- java/trunk/run-webapp/src/main/webapp/WEB-INF/context.xml (added)
+++ java/trunk/run-webapp/src/main/webapp/WEB-INF/context.xml Thu Aug 20 13:02:26 2015
@@ -0,0 +1,33 @@
+<Context>
+
+ <!-- maxActive: Maximum number of database connections in pool. Make sure you
+ configure your mysqld max_connections large enough to handle
+ all of your db connections. Set to -1 for no limit.
+ -->
+
+ <!-- maxIdle: Maximum number of idle database connections to retain in pool.
+ Set to -1 for no limit. See also the DBCP documentation on this
+ and the minEvictableIdleTimeMillis configuration parameter.
+ -->
+
+ <!-- maxWait: Maximum time to wait for a database connection to become available
+ in ms, in this example 10 seconds. An Exception is thrown if
+ this timeout is exceeded. Set to -1 to wait indefinitely.
+ -->
+
+ <!-- username and password: MySQL username and password for database connections -->
+
+ <!-- driverClassName: Class name for the old mm.mysql JDBC driver is
+ org.gjt.mm.mysql.Driver - we recommend using Connector/J though.
+ Class name for the official MySQL Connector/J driver is com.mysql.jdbc.Driver.
+ -->
+
+ <!-- url: The JDBC connection url for connecting to your MySQL database.
+ -->
+
+ <Resource name="jdbc/hps_run_db" auth="Container" type="javax.sql.DataSource"
+ maxActive="100" maxIdle="30" maxWait="10000"
+ username="hpsuser" password="darkphoton" driverClassName="com.mysql.jdbc.Driver"
+ url="jdbc:mysql://hpsdb.jlab.org/hps_run_db"/>
+
+</Context>
Added: java/trunk/run-webapp/src/main/webapp/WEB-INF/web.xml
=============================================================================
--- java/trunk/run-webapp/src/main/webapp/WEB-INF/web.xml (added)
+++ java/trunk/run-webapp/src/main/webapp/WEB-INF/web.xml Thu Aug 20 13:02:26 2015
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
+ version="2.4">
+
+ <display-name>HPS Run Web Application</display-name>
+
+ <resource-ref>
+ <description>DB Connection</description>
+ <res-ref-name>jdbc/hps_run_db</res-ref-name>
+ <res-type>javax.sql.DataSource</res-type>
+ <res-auth>Container</res-auth>
+ </resource-ref>
+
+ <description>
+ Application for showing information about runs of the HPS experiment.
+ </description>
+
+ <!-- Display full run table. -->
+
+ <servlet>
+ <servlet-name>RunsServlet</servlet-name>
+ <servlet-class>org.hps.run.web.RunsServlet</servlet-class>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>RunsServlet</servlet-name>
+ <url-pattern>/runs</url-pattern>
+ </servlet-mapping>
+
+ <!-- Display a run summary. -->
+
+ <servlet>
+ <servlet-name>RunSummaryServlet</servlet-name>
+ <servlet-class>org.hps.run.web.RunSummaryServlet</servlet-class>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>RunSummaryServlet</servlet-name>
+ <url-pattern>/run</url-pattern>
+ </servlet-mapping>
+
+ <!-- Display EPICS data -->
+
+ <servlet>
+ <servlet-name>EpicsDataServlet</servlet-name>
+ <servlet-class>org.hps.run.web.EpicsDataServlet</servlet-class>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>EpicsDataServlet</servlet-name>
+ <url-pattern>/epics</url-pattern>
+ </servlet-mapping>
+
+ <!-- Display scaler data -->
+
+ <servlet>
+ <servlet-name>ScalerDataServlet</servlet-name>
+ <servlet-class>org.hps.run.web.ScalerDataServlet</servlet-class>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>ScalerDataServlet</servlet-name>
+ <url-pattern>/scalers</url-pattern>
+ </servlet-mapping>
+
+</web-app>
Added: java/trunk/run-webapp/src/main/webapp/css/style.css
=============================================================================
--- java/trunk/run-webapp/src/main/webapp/css/style.css (added)
+++ java/trunk/run-webapp/src/main/webapp/css/style.css Thu Aug 20 13:02:26 2015
@@ -0,0 +1,7 @@
+hr {
+ border: 0;
+ height: 0;
+ border-top: 1px solid rgba(0, 0, 0, 0.1);
+ border-bottom: 1px solid
+ rgba(255, 255, 255, 0.3);
+}
Added: java/trunk/run-webapp/src/main/webapp/html/pager.html
=============================================================================
--- java/trunk/run-webapp/src/main/webapp/html/pager.html (added)
+++ java/trunk/run-webapp/src/main/webapp/html/pager.html Thu Aug 20 13:02:26 2015
@@ -0,0 +1,17 @@
+<!-- pager -->
+<div id="pager" class="pager">
+ <form>
+ <img src="http://tablesorter.com/addons/pager/icons/first.png" class="first"/>
+ <img src="http://tablesorter.com/addons/pager/icons/prev.png" class="prev"/>
+ <input type="text" class="pagedisplay"/>
+ <img src="http://tablesorter.com/addons/pager/icons/next.png" class="next"/>
+ <img src="http://tablesorter.com/addons/pager/icons/last.png" class="last"/>
+ <select class="pagesize">
+ <option selected="selected" value="10">10</option>
+ <option value="20">20</option>
+ <option value="30">30</option>
+ <option value="40">40</option>
+ <option value="50">50</option>
+ </select>
+ </form>
+</div>
Added: java/trunk/run-webapp/src/main/webapp/html/tablesorter.html
=============================================================================
--- java/trunk/run-webapp/src/main/webapp/html/tablesorter.html (added)
+++ java/trunk/run-webapp/src/main/webapp/html/tablesorter.html Thu Aug 20 13:02:26 2015
@@ -0,0 +1,4 @@
+<link rel="stylesheet" href="https://mottie.github.io/tablesorter/css/theme.blue.css" />
+<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.3.js"></script>
+<script type="text/javascript" src="https://mottie.github.io/tablesorter/js/jquery.tablesorter.js"></script>
+<script type="text/javascript" src="https://mottie.github.io/tablesorter/addons/pager/jquery.tablesorter.pager.js"></script>
Added: java/trunk/run-webapp/src/main/webapp/runEpics.jsp
=============================================================================
--- java/trunk/run-webapp/src/main/webapp/runEpics.jsp (added)
+++ java/trunk/run-webapp/src/main/webapp/runEpics.jsp Thu Aug 20 13:02:26 2015
@@ -0,0 +1,103 @@
+<%@ page contentType="text/html" import="java.util.*,java.text.SimpleDateFormat,org.hps.record.epics.*"%>
+<!DOCTYPE html>
+<html>
+<link rel="stylesheet" href="css/style.css" />
+
+<!-- include links and scripts for tablesorter jquery plugin -->
+<%@include file="html/tablesorter.html"%>
+
+<!-- sort the table after doc loads -->
+<script>
+ $(document).ready(function() {
+ $("#epics-table").tablesorter({
+ widthFixed : true,
+ widgets : [ 'zebra' ]
+ }).tablesorterPager({
+ container : $("#pager"),
+ size : 50
+ });
+ });
+</script>
+
+<body>
+ <%
+ // Get the run number.
+ int run = Integer.parseInt(request.getParameterValues("run")[0]);
+
+ // Get the EPICS variable names.
+ String epicsBankType = (String) request.getAttribute("EpicsBankType");
+ List<String> variableNames = null;
+ if (epicsBankType.equals("2s")) {
+ variableNames = new ArrayList<String>(Epics2sVariables.getVariables().keySet());
+ } else if (epicsBankType.equals("20s")) {
+ variableNames = new ArrayList<String>(Epics20sVariables.getVariables().keySet());
+ } else {
+ throw new RuntimeException("bad EpicsBankType attribute: " + request.getAttribute("EpicsBankType"));
+ }
+
+ // Get the list of EPICS data for this run.
+ List<EpicsData> epicsDataList = (List<EpicsData>) request.getAttribute("EpicsDataList");
+ %>
+ <h1>HPS Run <%= run %> - EPICS <%= epicsBankType %> Data</h1>
+ <hr />
+
+ <!--
+ TODO: put summary table here showing
+
+ -number of epics data blocks
+ -(last - first timestamp) = seconds
+ -min sequence number
+ -max sequence number
+
+ -for each variable....
+ -variable name
+ -number of occurrences
+ -mean value
+ -->
+
+ <!-- EPICS data table -->
+ <table id="epics-table" class="tablesorter-blue">
+ <thead>
+ <tr>
+ <th>Sequence</th>
+ <th>Timestamp</th>
+ <%
+ for (String variableName : variableNames) {
+ %>
+ <th><%= variableName %></th>
+ <%
+ }
+ %>
+ </tr>
+ </thead>
+ <tbody>
+ <%
+ for (EpicsData epicsData : epicsDataList) {
+ if (epicsData.hasKey(variableNames.get(0))) {
+ %>
+ <tr>
+ <td><%=epicsData.getEpicsHeader().getSequence()%></td>
+ <td><%=epicsData.getEpicsHeader().getTimestamp()%></td>
+ <%
+ for (String variableName : variableNames) {
+ %>
+ <td><%=epicsData.getValue(variableName)%></td>
+ <%
+ }
+ %>
+ </tr>
+ <%
+ }
+ %>
+ <%
+ }
+ %>
+
+ <tbody>
+ </table>
+
+ <!-- tablesorter paging container -->
+ <%@include file="html/pager.html"%>
+
+</body>
+</html>
Added: java/trunk/run-webapp/src/main/webapp/runScalers.jsp
=============================================================================
--- java/trunk/run-webapp/src/main/webapp/runScalers.jsp (added)
+++ java/trunk/run-webapp/src/main/webapp/runScalers.jsp Thu Aug 20 13:02:26 2015
@@ -0,0 +1,71 @@
+<%@ page contentType="text/html" import="java.util.*,java.text.SimpleDateFormat,org.hps.record.scalers.*"%>
+<!DOCTYPE html>
+<html>
+<link rel="stylesheet" href="css/style.css" />
+
+<!-- include links and scripts for tablesorter jquery plugin -->
+<%@include file="html/tablesorter.html"%>
+
+<!-- sort the table after doc loads -->
+<script>
+ $(document).ready(function() {
+ $("#scalers-table").tablesorter({
+ widthFixed : true,
+ widgets : [ 'zebra' ]
+ }).tablesorterPager({
+ container : $("#pager"),
+ size : 50
+ });
+ });
+</script>
+
+<body>
+ <%
+ // Get the run number.
+ int run = Integer.parseInt(request.getParameterValues("run")[0]);
+
+ // Get the list of EPICS data for this run.
+ List<ScalerData> scalerDataList = (List<ScalerData>) request.getAttribute("ScalerDataList");
+ %>
+ <h1>HPS Run <%= run %> - Scaler Data</h1>
+ <hr />
+
+ <!-- scaler data table -->
+ <table id="scalers-table" class="tablesorter-blue">
+ <thead>
+ <tr>
+ <th>Event ID</th>
+ <%
+ for (ScalerDataIndex index : ScalerDataIndex.values()) {
+ %>
+ <th><%= index.toString().replace("_", " ") %></th>
+ <%
+ }
+ %>
+ </tr>
+ </thead>
+ <tbody>
+ <%
+ for (ScalerData scalerData : scalerDataList) {
+ %>
+ <tr>
+ <td><%= scalerData.getEventId() %>
+ <%
+ for (ScalerDataIndex index : ScalerDataIndex.values()) {
+ %>
+ <td><%= scalerData.getValue(index.index()) %></td>
+ <%
+ }
+ %>
+ </tr>
+ <%
+ }
+ %>
+ <tbody>
+ </table>
+
+ <!-- tablesorter paging container -->
+ <%@include file="html/pager.html"%>
+
+</body>
+</html>
Added: java/trunk/run-webapp/src/main/webapp/runSummary.jsp
=============================================================================
--- java/trunk/run-webapp/src/main/webapp/runSummary.jsp (added)
+++ java/trunk/run-webapp/src/main/webapp/runSummary.jsp Thu Aug 20 13:02:26 2015
@@ -0,0 +1,33 @@
+<%@ page contentType="text/html" import="java.util.*,org.hps.record.run.RunSummary,java.text.SimpleDateFormat"%>
+<!DOCTYPE html>
+<html>
+<link rel="stylesheet" href="css/style.css" />
+<body>
+ <h1>HPS Run Summary</h1>
+ <hr />
+ <%
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
+ dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
+ RunSummary runSummary = (RunSummary) request.getAttribute("RunSummary");
+ %>
+ <p>run: <%= runSummary.getRun() %></p>
+ <p>start: <%= dateFormat.format(runSummary.getStartDate()) %></p>
+ <p>end: <%= dateFormat.format(runSummary.getEndDate()) %></p>
+ <p>events: <%= runSummary.getTotalEvents() %></p>
+ <p>files: <%= runSummary.getTotalFiles() %></p>
+ <p>end okay: <%= runSummary.getEndOkay() %></p>
+ <p>run okay: <%= runSummary.getRunOkay() %></p>
+ <p>updated: <%= dateFormat.format(runSummary.getUpdated()) %></p>
+ <p>created: <%= dateFormat.format(runSummary.getCreated()) %></p>
+ <hr/>
+ <p>
+ <a href="epics?run=<%= runSummary.getRun() %>&epicsBankType=2s">EPICS 2s Data</a>
+ </p>
+ <p>
+ <a href="epics?run=<%= runSummary.getRun() %>&epicsBankType=20s">EPICS 20s Data</a>
+ </p>
+ <p>
+ <a href="scalers?run=<%= runSummary.getRun() %>">Scaler Data</a>
+ </p>
+</body>
+</html>
Added: java/trunk/run-webapp/src/main/webapp/runTable.jsp
=============================================================================
--- java/trunk/run-webapp/src/main/webapp/runTable.jsp (added)
+++ java/trunk/run-webapp/src/main/webapp/runTable.jsp Thu Aug 20 13:02:26 2015
@@ -0,0 +1,69 @@
+<%@ page contentType="text/html" import="java.util.*,org.hps.record.run.RunSummary,java.text.SimpleDateFormat"%>
+<!DOCTYPE html>
+<html>
+
+<!-- application stylesheet -->
+<link rel="stylesheet" href="css/style.css" />
+
+<!-- include links and scripts for tablesorter jquery plugin -->
+<%@include file="html/tablesorter.html" %>
+
+<!-- sort the table after doc loads -->
+<script>
+ $(document).ready(function()
+ {
+ $("#run-table")
+ .tablesorter({widthFixed: true, widgets: ['zebra']})
+ .tablesorterPager({container: $("#pager"), size: 20});
+ }
+ );
+</script>
+
+<body>
+ <h1>HPS Run Table</h1>
+ <hr/>
+
+ <!-- full run table with tablesorter theme, sorting and pagination -->
+ <table id="run-table" class="tablesorter-blue">
+ <thead>
+ <tr>
+ <th>Run</th>
+ <th>Start Time UTC</th>
+ <th>End Time UTC</th>
+ <th>Events</th>
+ <th>Files</th>
+ <th>End Okay</th>
+ <th>Run Okay</th>
+ <th>Updated</th>
+ <th>Created</th>
+ </tr>
+ </thead>
+ <tbody>
+ <!-- get the list of run summaries from the request and create a table row for each one -->
+ <%
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
+ List<RunSummary> runSummaries = (List<RunSummary>) request.getAttribute("RunSummaries");
+ for (RunSummary runSummary : runSummaries) {
+ %>
+ <!-- table row links to its run summary page -->
+ <tr onclick="document.location.href='run?run=<%= runSummary.getRun() %>';">
+ <td><%= runSummary.getRun() %></td>
+ <td><%= dateFormat.format(runSummary.getStartDate()) %></td>
+ <td><%= dateFormat.format(runSummary.getEndDate()) %></td>
+ <td><%= runSummary.getTotalEvents() %></td>
+ <td><%= runSummary.getTotalFiles() %></td>
+ <td><%= runSummary.getEndOkay() %></td>
+ <td><%= runSummary.getRunOkay() %></td>
+ <td><%= dateFormat.format(runSummary.getUpdated()) %></td>
+ <td><%= dateFormat.format(runSummary.getCreated()) %></td>
+ </tr>
+ <% } %>
+ <tbody>
+ </table>
+
+ <!-- tablesorter paging container -->
+ <%@include file="html/pager.html" %>
+
+</body>
+</html>
|