Author: jstrachan
Date: Wed Apr 26 10:00:01 2006
New Revision: 397237

URL: http://svn.apache.org/viewcvs?rev=397237&view=rev
Log:
added a message detail page

Added:
    
incubator/activemq/trunk/activemq-web-console/src/main/java/org/apache/activemq/web/MessageQuery.java
      - copied, changed from r397217, 
incubator/activemq/trunk/activemq-web-console/src/main/java/org/apache/activemq/web/MessageFacade.java
    
incubator/activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/tags/form/forEachMapEntry.tag
    
incubator/activemq/trunk/activemq-web-console/src/main/webapp/styles/layouttable.css
   (with props)
Removed:
    
incubator/activemq/trunk/activemq-web-console/src/main/java/org/apache/activemq/web/MessageFacade.java
    
incubator/activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/tags/jms/body.tag
Modified:
    
incubator/activemq/trunk/activemq-web-console/src/main/java/org/apache/activemq/web/QueueBrowseQuery.java
    
incubator/activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/applicationContext.xml
    incubator/activemq/trunk/activemq-web-console/src/main/webapp/browse.jsp
    incubator/activemq/trunk/activemq-web-console/src/main/webapp/message.jsp
    
incubator/activemq/trunk/activemq-web-console/src/main/webapp/styles/sorttable.css

Copied: 
incubator/activemq/trunk/activemq-web-console/src/main/java/org/apache/activemq/web/MessageQuery.java
 (from r397217, 
incubator/activemq/trunk/activemq-web-console/src/main/java/org/apache/activemq/web/MessageFacade.java)
URL: 
http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-web-console/src/main/java/org/apache/activemq/web/MessageQuery.java?p2=incubator/activemq/trunk/activemq-web-console/src/main/java/org/apache/activemq/web/MessageQuery.java&p1=incubator/activemq/trunk/activemq-web-console/src/main/java/org/apache/activemq/web/MessageFacade.java&r1=397217&r2=397237&rev=397237&view=diff
==============================================================================
--- 
incubator/activemq/trunk/activemq-web-console/src/main/java/org/apache/activemq/web/MessageFacade.java
 (original)
+++ 
incubator/activemq/trunk/activemq-web-console/src/main/java/org/apache/activemq/web/MessageQuery.java
 Wed Apr 26 10:00:01 2006
@@ -17,27 +17,99 @@
 package org.apache.activemq.web;
 
 import org.apache.activemq.broker.BrokerService;
-import org.apache.activemq.command.ActiveMQMessage;
 
+import javax.jms.JMSException;
+import javax.jms.MapMessage;
 import javax.jms.Message;
+import javax.jms.ObjectMessage;
+import javax.jms.TextMessage;
+
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
 
 /**
- *
+ * Allow the user to browse a message on a queue by its ID
+ * 
  * @version $Revision$
  */
-public class MessageFacade extends BrokerFacade {
+public class MessageQuery extends QueueBrowseQuery {
 
     private String id;
-    private ActiveMQMessage message;
-    
-    public MessageFacade(BrokerService brokerService) {
-        super(brokerService);
+    private Message message;
+
+    public MessageQuery(BrokerService brokerService, SessionPool sessionPool) 
throws JMSException {
+        super(brokerService, sessionPool);
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public void setMessage(Message message) {
+        this.message = message;
     }
 
-    public ActiveMQMessage getMessage() {
-        if (message != null) {
-            // TODO ??
+    public Message getMessage() throws JMSException {
+        if (message == null) {
+            if (id != null) {
+                Enumeration iter = getBrowser().getEnumeration();
+                while (iter.hasMoreElements()) {
+                    Message item = (Message) iter.nextElement();
+                    if (id.equals(item.getJMSMessageID())) {
+                        message = item;
+                        break;
+                    }
+                }
+            }
+
         }
         return message;
+    }
+
+    public Object getBody() throws JMSException {
+        Message message = getMessage();
+        if (message instanceof TextMessage) {
+            return ((TextMessage) message).getText();
+        }
+        if (message instanceof ObjectMessage) {
+            return ((ObjectMessage) message).getObject();
+        }
+        if (message instanceof MapMessage) {
+            return createMapBody((MapMessage) message);
+        }
+        return null;
+    }
+
+    public Map getPropertiesMap() throws JMSException {
+        Map answer = new HashMap();
+        Message aMessage = getMessage();
+        Enumeration iter = aMessage.getPropertyNames();
+        while (iter.hasMoreElements()) {
+            String name = (String) iter.nextElement();
+            Object value = aMessage.getObjectProperty(name);
+            if (value != null) {
+                answer.put(name, value);
+            }
+        }
+        return answer;
+    }
+
+    protected Map createMapBody(MapMessage mapMessage) throws JMSException {
+        Map answer = new HashMap();
+        Enumeration iter = mapMessage.getMapNames();
+        while (iter.hasMoreElements()) {
+            String name = (String) iter.nextElement();
+            Object value = mapMessage.getObject(name);
+            if (value != null) {
+                answer.put(name, value);
+            }
+        }
+        return answer;
     }
 }

Modified: 
incubator/activemq/trunk/activemq-web-console/src/main/java/org/apache/activemq/web/QueueBrowseQuery.java
URL: 
http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-web-console/src/main/java/org/apache/activemq/web/QueueBrowseQuery.java?rev=397237&r1=397236&r2=397237&view=diff
==============================================================================
--- 
incubator/activemq/trunk/activemq-web-console/src/main/java/org/apache/activemq/web/QueueBrowseQuery.java
 (original)
+++ 
incubator/activemq/trunk/activemq-web-console/src/main/java/org/apache/activemq/web/QueueBrowseQuery.java
 Wed Apr 26 10:00:01 2006
@@ -39,7 +39,7 @@
         super(brokerService);
         this.sessionPool = sessionPool;
         this.session = sessionPool.borrowSession();
-
+        setJMSDestinationType("query");
     }
 
     public void destroy() throws Exception {

Modified: 
incubator/activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/applicationContext.xml
URL: 
http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/applicationContext.xml?rev=397237&r1=397236&r2=397237&view=diff
==============================================================================
--- 
incubator/activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/applicationContext.xml
 (original)
+++ 
incubator/activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/applicationContext.xml
 Wed Apr 26 10:00:01 2006
@@ -11,7 +11,8 @@
 
   <bean id="sessionPool" class="org.apache.activemq.web.SessionPool"/>
   
-  <bean id="brokerQuery" class="org.apache.activemq.web.BrokerFacade" 
autowire='constructor'/>
+  <bean id="brokerQuery" class="org.apache.activemq.web.BrokerFacade" 
autowire='constructor' singleton="false"/>
   <bean id="queueBrowser" class="org.apache.activemq.web.QueueBrowseQuery" 
autowire='constructor' singleton="false"/>
+  <bean id="messageQuery" class="org.apache.activemq.web.MessageQuery" 
autowire='constructor' singleton="false"/>
 
 </beans>

Added: 
incubator/activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/tags/form/forEachMapEntry.tag
URL: 
http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/tags/form/forEachMapEntry.tag?rev=397237&view=auto
==============================================================================
--- 
incubator/activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/tags/form/forEachMapEntry.tag
 (added)
+++ 
incubator/activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/tags/form/forEachMapEntry.tag
 Wed Apr 26 10:00:01 2006
@@ -0,0 +1,13 @@
+<%@ attribute name="var" type="java.lang.String" required="true"  %>
+<%@ attribute name="items" type="java.util.Map" required="true"  %>
+<%@ tag import="java.util.Iterator" %>
+<%
+  Iterator iter = items.entrySet().iterator();
+  while (iter.hasNext()) {
+                request.setAttribute(var, iter.next());
+%>
+<jsp:doBody/>
+<%
+       }
+%>       
+    
\ No newline at end of file

Modified: 
incubator/activemq/trunk/activemq-web-console/src/main/webapp/browse.jsp
URL: 
http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-web-console/src/main/webapp/browse.jsp?rev=397237&r1=397236&r2=397237&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-web-console/src/main/webapp/browse.jsp 
(original)
+++ incubator/activemq/trunk/activemq-web-console/src/main/webapp/browse.jsp 
Wed Apr 26 10:00:01 2006
@@ -26,8 +26,8 @@
 ---%>
 <jms:forEachMessage queueBrowser="${requestContext.queueBrowser.browser}" 
var="row">
 <tr>
-<jms:body message="${row}" var="body"/>
-<td><a href="message.jsp?id=${row.JMSMessageID}" 
title="${body}">${row.JMSMessageID}</a></td>
+<td><a 
href="message.jsp?id=${row.JMSMessageID}&JMSDestination=${requestContext.queueBrowser.JMSDestination}"
 
+    title="${row.properties}">${row.JMSMessageID}</a></td>
 <td>${row.JMSCorrelationID}</td>
 <td><jms:persistent message="${row}"/></td>
 <td>${row.JMSPriority}</td>

Modified: 
incubator/activemq/trunk/activemq-web-console/src/main/webapp/message.jsp
URL: 
http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-web-console/src/main/webapp/message.jsp?rev=397237&r1=397236&r2=397237&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-web-console/src/main/webapp/message.jsp 
(original)
+++ incubator/activemq/trunk/activemq-web-console/src/main/webapp/message.jsp 
Wed Apr 26 10:00:01 2006
@@ -1,57 +1,121 @@
 <html>
 <head>
-<title>Message ${requestContext.messageBrowser.id}</title>
+<c:set var="row" value="${requestContext.messageQuery.message}"/>
+<title>Message ${requestContext.messageQuery.id}</title>
 </head>
 <body>
 
-<table id="message" class="sortable autostripe">
-<thead>
-<tr>
-<th>
-    Message Details
-</th>
-</tr>
-</thead>
-
-<tbody>
-<tr>
-<td class="label">Message ID</td>
-<td>${row.JMSMessageID</td>
-</tr>
-<tr>
-<td class="label">Destination</td>
-<td>${row.JMSDestination}</td>
-</tr>
-<tr>
-<td class="label">Correlation ID</td>
-<td>${row.JMSCorrelationID}</td>
-</tr>
-<tr>
-<td class="label">Persistence</td>
-<td><jms:persistent message="${row}"/></td>
-</tr>
-<tr>
-<td class="label">Priority</td>
-<td>${row.JMSPriority}</td>
-</tr>
-<tr>
-<td class="label">Redelivered</td>
-<td>${row.JMSRedelivered}</td>
-</tr>
-<tr>
-<td class="label">Reply To</td>
-<td>${row.JMSReplyTo}</td>
-</tr>
-<tr>
-<td class="label">Timestamp</td>
-<td>${row.JMSTimestamp}</td>
-</tr>
-<tr>
-<td class="label">Type</td>
-<td>${row.JMSType}</td>
-</tr>
-</tbody>
+
+<c:choose>
+<c:when test="${empty row}">
+
+<div>
+No message could be found for ID ${requestContext.messageQuery.JMSMessageID}
+</div>
+
+</c:when>
+
+<c:otherwise>
+
+<table class="layout">
+       <tr>
+               <td class="layout"  valign="top">
+                       <table id="header" class="sortable autostripe">
+                               <thead>
+                                       <tr>
+                                               <th colspan="2">
+                                                   Headers
+                                               </th>
+                                       </tr>
+                               </thead>
+                               <tbody>
+                                       <tr>
+                                               <td class="label">Message 
ID</td>
+                                               <td>${row.JMSMessageID}</td>
+                                       </tr>
+                                       <tr>
+                                               <td 
class="label">Destination</td>
+                                               <td>${row.JMSDestination}</td>
+                                       </tr>
+                                       <tr>
+                                               <td class="label">Correlation 
ID</td>
+                                               <td>${row.JMSCorrelationID}</td>
+                                       </tr>
+                                       <tr>
+                                               <td 
class="label">Persistence</td>
+                                               <td><jms:persistent 
message="${row}"/></td>
+                                       </tr>
+                                       <tr>
+                                               <td class="label">Priority</td>
+                                               <td>${row.JMSPriority}</td>
+                                       </tr>
+                                       <tr>
+                                               <td 
class="label">Redelivered</td>
+                                           <td>${row.JMSRedelivered}</td>
+                                       </tr>
+                                       <tr>
+                                               <td class="label">Reply To</td>
+                                               <td>${row.JMSReplyTo}</td>
+                                       </tr>
+                                       <tr>
+                                               <td class="label">Timestamp</td>
+                                               <td>${row.JMSTimestamp}</td>
+                                       </tr>
+                                       <tr>
+                                               <td class="label">Type</td>
+                                               <td>${row.JMSType}</td>
+                                       </tr>
+                               </tbody>
+                       </table>
+        </td>
+
+        <td  class="layout" valign="top">
+                       <table id="properties" class="sortable autostripe">
+                               <thead>
+                                       <tr>
+                                               <th colspan="2">
+                                                   Properties
+                                               </th>
+                                       </tr>
+                               </thead>
+                               <tbody>
+                   <form:forEachMapEntry 
items="${requestContext.messageQuery.propertiesMap}" var="row">
+                                               <tr>
+                                                       <td 
class="label">${row.key}</td>
+                                                       <td>${row.value}</td>
+                                               </tr>
+                                               <tr>
+                                       </form:forEachMapEntry>
+                               </tbody>
+                       </table>
+               </td>
+       </tr>
+       <tr>
+               <td class="layout" colspan="2">
+                       <table id="body" width="100%">
+                               <thead>
+                                       <tr>
+                                               <th>
+                                                   Message Details
+                                               </th>
+                                       </tr>
+                               </thead>
+                               <tbody>
+                                       <tr>
+                                               
<td>${requestContext.messageQuery.body}</td>
+                                       </tr>
+                               </tbody>
+                       </table>
+               </td>
+       </tr>
 </table>
+
+
+</c:otherwise>
+</c:choose>
+
+
+
 
 
 </body>

Added: 
incubator/activemq/trunk/activemq-web-console/src/main/webapp/styles/layouttable.css
URL: 
http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-web-console/src/main/webapp/styles/layouttable.css?rev=397237&view=auto
==============================================================================
    (empty)

Propchange: 
incubator/activemq/trunk/activemq-web-console/src/main/webapp/styles/layouttable.css
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/activemq/trunk/activemq-web-console/src/main/webapp/styles/layouttable.css
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: 
incubator/activemq/trunk/activemq-web-console/src/main/webapp/styles/layouttable.css
------------------------------------------------------------------------------
    svn:mime-type = text/css

Modified: 
incubator/activemq/trunk/activemq-web-console/src/main/webapp/styles/sorttable.css
URL: 
http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-web-console/src/main/webapp/styles/sorttable.css?rev=397237&r1=397236&r2=397237&view=diff
==============================================================================
--- 
incubator/activemq/trunk/activemq-web-console/src/main/webapp/styles/sorttable.css
 (original)
+++ 
incubator/activemq/trunk/activemq-web-console/src/main/webapp/styles/sorttable.css
 Wed Apr 26 10:00:01 2006
@@ -7,9 +7,8 @@
   border-right: 1px solid #aaa;
   margin-bottom: 1em;
   
-width: 80%;
-margin: 1em auto;
-border-collapse: collapse;
+ margin: 1em auto;
+ border-collapse: collapse;
 }
 
 th {
@@ -19,13 +18,15 @@
        background-color: #cccccc;
 }
 
-tfoot td {
+tfoot {
        border-top: 1px solid black;
 }
 
 td {
        padding: 0.5em;
         border: 1px solid black;
+       
+       /** border-top: 1px solid black; */
 }
 
        
@@ -46,4 +47,15 @@
 /** forms using table layout */
 td.label {
        background-color: #f3f3f3;
+}
+
+table.layout {
+  border-bottom: solid white;
+  border-right:  solid white;
+  margin-bottom: solid white;
+}
+
+td.layout {
+       border-top: 1px solid black;
+        border: solid white;
 }


Reply via email to