changeset 42:65a26b38bf43

Some debug output, and work toward neatening the jsp &c
author Chris Cannam
date Tue, 25 Feb 2014 16:46:12 +0000
parents 65338d2507bc
children eda40f334135
files .hgignore INSTALL.txt WebContent/WEB-INF/README.txt WebContent/WEB-INF/classes/log4j.properties WebContent/WEB-INF/logs/.keep WebContent/header_bg.jpg WebContent/index.jsp WebContent/screen.css WebContent/soton-logo.png hrir_final.mat src/HumanEchoServlet.java
diffstat 10 files changed, 175 insertions(+), 118 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.hgignore	Tue Feb 25 16:46:12 2014 +0000
@@ -0,0 +1,2 @@
+syntax: glob
+*.class
--- a/INSTALL.txt	Fri Feb 14 15:24:09 2014 +0000
+++ b/INSTALL.txt	Tue Feb 25 16:46:12 2014 +0000
@@ -40,7 +40,7 @@
 
 == Building the Web Application (echoapp.war) ==
 
-3. Run 'ant build.xml'. This should create the echoapp.war file. In case this fails, follow "Compiling and Generating the echoapp.war file" instructions below.
+3. Run 'ant -f build.xml'. This should create the echoapp.war file. In case this fails, follow "Compiling and Generating the echoapp.war file" instructions below.
 
 4. Copy the echoapp.war file to your web server's webapps folder:
 
@@ -55,7 +55,7 @@
 
 == Compiling and Generating the echoapp.war file ==
 
-Note: You only need to follow this instructions if run 'ant build.xml' correctly and you were unable to generate the echoapp.war file. The steps described in this section assume that you already have a working version of the isvr.jar package. The isvr.jar file should be located in WebContent/WEB-INF/lib/isvr.jar.
+Note: You only need to follow this instructions if run 'ant -f build.xml' correctly and you were unable to generate the echoapp.war file. The steps described in this section assume that you already have a working version of the isvr.jar package. The isvr.jar file should be located in WebContent/WEB-INF/lib/isvr.jar.
 
 1. Copy the deployed component from the scratch folder to the web applications lib folder .\WebContent\WEB-INF\lib
 
@@ -82,7 +82,7 @@
 
 You can only compile the isvr.jar if you have MATLAB and the JavaBuilder toolbox: please check this with you systems administrator.
 
-To compile isvr.jar, simply run 'ant build-isvr.xml'. If this fails you can recompile the MATLAB component by running the following MCC command:
+To compile isvr.jar, simply run 'ant -f build-isvr.xml'. If this fails you can recompile the MATLAB component by running the following MCC command:
 
     /Applications/MATLAB_R2013b.app/bin/mcc -W "java:uk.ac.soton.isvr,HumanEcho" -d ./scratch -T "link:lib" -v "class{HumanEcho:./WebContent/WEB-INF/mcode/gen_echo.m}"
 
--- a/WebContent/WEB-INF/README.txt	Fri Feb 14 15:24:09 2014 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-You need to copy the following files to this folder: 
-
-Copy the javabuilder.jar file from your MATLAB or MCR install root in
-the directory /toolbox/javabuilder/jar/javabuilder.jar to the web
-applications lib folder ./webapp/WEB-INF/lib
-
-
-
-You should copy the generated JAR file here: 
-
-cp ./scratch/examples.jar ./webapp/WEB-INF/lib 
-
-
-
--- a/WebContent/WEB-INF/classes/log4j.properties	Fri Feb 14 15:24:09 2014 +0000
+++ b/WebContent/WEB-INF/classes/log4j.properties	Tue Feb 25 16:46:12 2014 +0000
@@ -1,5 +1,5 @@
 log4j.appender.file=org.apache.log4j.FileAppender
-log4j.appender.file.File=${appRootPath}WEB-INF/logs/EchoWebApp.log
+log4j.appender.file.File=${appRootPath}/WEB-INF/logs/EchoWebApp.log
 log4j.appender.file.layout=org.apache.log4j.PatternLayout
 log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1} - %m%n
 log4j.appender.file.append=true
@@ -7,4 +7,4 @@
 # log levels
 log4j.rootCategory=ALL, file
 log4j.logger.com.saral=debug
-log4j.logger.org.eclipse=debug
\ No newline at end of file
+log4j.logger.org.eclipse=debug
Binary file WebContent/header_bg.jpg has changed
--- a/WebContent/index.jsp	Fri Feb 14 15:24:09 2014 +0000
+++ b/WebContent/index.jsp	Tue Feb 25 16:46:12 2014 +0000
@@ -1,101 +1,112 @@
 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 <html>
-    <head>
-        <title>Human Echolocation</title>
-        <link rel="Stylesheet" type="text/css" media=all href="./StyleSheet.css" />
-        <link href="StyleSheet.css" rel="stylesheet" type="text/css" />
+  <head>
+    <title>Human Echolocation</title>
+    <link href="http://fonts.googleapis.com/css?family=Mako" rel="stylesheet" type="text/css">
+    <link href="screen.css" rel="stylesheet" type="text/css" />
 
-        <!-- no default value for distance -->
-        <c:choose>
-            <c:when test="${not empty param.dist}">
-                <c:set var="dist" value="${param.dist}" />
-                <c:set var="distSet" value="true" />
-            </c:when>
-            <c:otherwise>
-                <c:set var="distSet" value="false" />
-            </c:otherwise>
-        </c:choose>
+    <!-- no default value for distance -->
+    <c:choose>
+      <c:when test="${not empty param.dist}">
+        <c:set var="dist" value="${param.dist}" />
+        <c:set var="distSet" value="true" />
+      </c:when>
+      <c:otherwise>
+        <c:set var="distSet" value="false" />
+      </c:otherwise>
+    </c:choose>
 
-        <!-- Default values for remaining parameters -->
-        <c:set var="azim" value="0" />
-        <c:set var="dirweight" value="0.2" />
-        <c:set var="orient" value="horz" />
+    <!-- Default values for remaining parameters -->
+    <c:set var="azim" value="0" />
+    <c:set var="dirweight" value="0.2" />
+    <c:set var="orient" value="horz" />
 
-        <c:if test="${not empty param.azim}">
-            <c:set var="azim" value="${param.azim}" />
-        </c:if>
-        <c:if test="${not empty param.dirweight}">
-            <c:set var="dirweight" value="${param.dirweight}" />
-        </c:if>
-        <c:if test="${not empty param.orient}">
-            <c:set var="orient" value="${param.orient}" />
-        </c:if>
+    <c:if test="${not empty param.azim}">
+      <c:set var="azim" value="${param.azim}" />
+    </c:if>
+    <c:if test="${not empty param.dirweight}">
+      <c:set var="dirweight" value="${param.dirweight}" />
+    </c:if>
+    <c:if test="${not empty param.orient}">
+      <c:set var="orient" value="${param.orient}" />
+    </c:if>
 
-    </head>
+  </head>
 
-    <body>
-        <form action="index.jsp" method="get">
-            <div style="text-align: center">
-                <table width="760" cellpadding="0" cellspacing="0">
-                    <tr>
-                        <td><img src="header_bg.jpg" alt="Header Image Not Found"   width="779" height="72" /></td>
-                        </tr>
-                </table>
-                <br />
+  <body>
+    <!-- NB the form submits back to this very page -->
+    <form action="index.jsp" method="get">
+      <table width="100%" cellpadding="0" cellspacing="0">
+        <tr>
+          <td align="right"><img src="soton-logo.png" alt="University of Southampton"/></td>
+        </tr>
+      </table>
+      <br />
+      
+      <h1>Human Echolocation WebApp Test Page</h1>
+      
+      <h2>Simulated environment</h2>
+      <table>
+	<tr>
+	  <th>Distance<br>
+	    <span class="description">In metres. Typical value: 0.9</span>
+	  </th>
+	  <td><input type="text" name="dist" size="8" value="${dist}"></td>
+	</tr>
+	<tr>
+	  <th>Azimuth<br>
+	    <span class="description">-17 to +17</span>
+	  </th>
+          <td><input type="text" name="azim" size="8" value="${azim}" ></td>
+	</tr>
+	<tr>
+          <th>Orientation</th>
+	  <td>
+            <input type="radio" name="orient" value="horz" checked> Horizontal<br>
+            <input type="radio" name="orient" value="angled"> Angled
+	  </td>
+	</tr>
+	<tr>
+	  <th>Dirweight<br>
+            <span class="description">Controls how easy it is to distinguish whether the reflector is to the left or the right (the lower dirweight is, the easier).</span>
+	  </th>
+	  <td>
+            <input type="text" name="dirweight" size="8" value="${dirweight}">
+            <br />
+	  </td>
+	</tr>
+	<tr>
+	  <td></td>
+	  <td>
+            <input type="submit" value="Generate audio">
+	  </td>
+	</tr>
+      </table>
+    </form>
 
-                <h1>Human Echolocation WebApp Example Page</h1>
+    <div class="player">
+      <c:choose>
+        <c:when test="${distSet==true}">
+          <embed src="/echoapp/HumanEcho?dist=<c:out value="${dist}"/>&amp;azim=<c:out value="${azim}"/>&amp;dirweight=<c:out value="${dirweight}"/>&amp;orient=<c:out value="${orient}"/>" type="audio/x-wav"/>
+        </c:when>
+        <c:otherwise>
+          <c:out value="Please set the distance parameter and select 'Generate audio'"/>
+        </c:otherwise>
+      </c:choose>
+    </div>
+    <br />
 
-                Input parameters:
-                <br />
-                Distance (typical value: 0.9):
-                <input type="text" name="dist" size="8" value="${dist}">
-                <br />
-                Azimuth (-17 to +17):
-                <input type="text" name="azim" size="8" value="${azim}" >
-                <br />
+    <div class="debug">
+      <h3>Debug info</h3>
+      <p>
+        Distance: <c:out value="${dist}"/>;
+        Azim: <c:out value="${azim}"/>;
+        Dirweight: <c:out value="${dirweight}"/>;
+        Orient: <c:out value="${orient}"/>
+      </p>
+    </div>
 
-                Orientation:<br>
-                <div align="left"><br>
-                    <input type="radio" name="orient" value="horz" checked> Horizontal<br>
-                    <input type="radio" name="orient" value="angled"> Angled<br />
-                </div>
-
-
-                Dirweight ():
-                <input type="text" name="dirweight" size="8" value="${dirweight}">
-                <br />
-                <p class="description">Controls how easy it is to distinguish whether the reflector is to the left or the right (the lower .dirweight is, the easier).</p>
-
-                <input type="submit" value="Generate">
-                <br />
-
-                <br />
-            </div>
-        </form>
-
-        <div class="player">
-            <c:choose>
-                <c:when test="${distSet==true}">
-                    <embed src="/echoapp/HumanEcho?dist=<c:out value="${dist}"/>&amp;azim=<c:out value="${azim}"/>&amp;dirweight=<c:out value="${dirweight}"/>&amp;orient=<c:out value="${orient}"/>" type="audio/x-wav"/>
-                </c:when>
-                <c:otherwise>
-                    <c:out value="Cowardly refusing to generate a player without distance parameter..."/>
-                </c:otherwise>
-            </c:choose>
-        </div>
-        <br />
-
-        <div class="debug">
-            <h3>Debug info</h3>
-            <p>
-            Distance: <c:out value="${dist}"/>;
-            Azim: <c:out value="${azim}"/>;
-            Dirweight: <c:out value="${dirweight}"/>;
-            Orient: <c:out value="${orient}"/>
-            </p>
-        </div>
-
-    </body>
+  </body>
 </html>
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WebContent/screen.css	Tue Feb 25 16:46:12 2014 +0000
@@ -0,0 +1,46 @@
+body {
+    font-size: 14pt;
+    font-family: Mako, sans-serif;
+    background-color: '#fffefa';
+}
+
+.debug {
+    border: 0.5px dashed;
+    font-size: 9pt;
+    font-family: monospace;
+    padding: 10 18;
+}
+
+.player {
+    border: 0.25px solid;
+}
+
+h1 {
+    text-align: center;
+}
+
+h2 {
+    margin-left: 8%;
+}
+
+table {
+    width: 80%;
+    margin-left: 8%;
+}
+
+th {
+    vertical-align: top;
+    text-align: right;
+    width: 40%;
+}
+
+td {
+    vertical-align: top;
+    text-align: left;
+}
+
+th .description {
+    font-weight: normal;
+    font-size: 0.9em;
+}
+
Binary file WebContent/soton-logo.png has changed
Binary file hrir_final.mat has changed
--- a/src/HumanEchoServlet.java	Fri Feb 14 15:24:09 2014 +0000
+++ b/src/HumanEchoServlet.java	Tue Feb 25 16:46:12 2014 +0000
@@ -32,29 +32,39 @@
     private HumanEcho echo;
     private static Logger logger = Logger.getLogger(HumanEchoServlet.class);
 
-    private String tempdir = "";
     private String wavdir = "";
 
     public void init(ServletConfig config) throws ServletException {
         super.init(config);
 
-        // reading properties file
+	System.err.println("In init");
+
+	logger.error("java.library.path is " + 
+		     System.getProperty("java.library.path"));
+
         try {
+	    // Read directory properties
             Properties properties = new Properties();
-            properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("myapp.properties"));
+            properties.load
+		(Thread.currentThread().getContextClassLoader().
+		 getResourceAsStream("myapp.properties"));
 
-            //get the property value and print it out
-            tempdir = properties.getProperty("tmpdir");
             wavdir = properties.getProperty("outdir");
 
+	    System.err.println("WAV file directory is " + wavdir);
+
         } catch (IOException e) {
             e.printStackTrace();
         }
 
         try {
+	    // Test that we can construct one of the MATLAB objects
+	    
+	    long before = System.currentTimeMillis();
             echo = new HumanEcho();
-        }
-        catch(MWException e) {
+	    long after = System.currentTimeMillis();
+	    System.err.println("Created a HumanEcho object: it took " + (after - before) + " ms");
+        } catch (MWException e) {
             e.printStackTrace();
         }
     }
@@ -62,7 +72,7 @@
     public void destroy() {
         super.destroy();
 
-        if(echo!=null) {
+        if (echo != null) {
             echo.dispose();
         }
     }
@@ -75,20 +85,22 @@
         logger.info("String azim is: " + request.getParameter("azim"));
         Float azim = Float.parseFloat(request.getParameter("azim"));
 
-
-
-
         MWStructArray Input = null;
         HumanEcho echo;
 
         String outputfname = new String();
 
+	System.err.println("In doGet");
+
         try {
+	    //!!! erch, shouldn't be creating a new one on each request as well as a global one
             echo = new HumanEcho();
 
             logger.error("We are logging!");
             logger.warn(System.getProperty("catalina.base"));
 
+	    System.err.println("Done some logging");
+            System.err.println(System.getProperty("catalina.base"));
 
             // Matlab structure:
             // Input = struct('dist', 0.9, 'azim', 0, 'orient', 'horz', 'dirweight', 0.2, 'outputfname', 'foo.wav')