/*
* Copyright 2003,2004,2005 Colin Crist
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package hermes.renderers;
import hermes.Domain;
import hermes.browser.ConfigDialogProxy;
import hermes.swing.SwingUtils;
import hermes.util.JMSUtils;
import java.util.Date;
import java.util.Enumeration;
import javax.jms.Message;
import javax.swing.JComponent;
import javax.swing.JScrollPane;
import javax.swing.table.DefaultTableModel;
import org.apache.log4j.Logger;
import com.jidesoft.grid.SortableTable;
/**
* A renderer that displays the JMS and user header properties in a sortable
* table.
*
* @author colincrist@hermesjms.com
* @version $Id: DefaultMessageHeaderRenderer.java,v 1.3 2006/07/13 07:35:31
* colincrist Exp $
*/
public class DefaultMessageHeaderRenderer extends AbstractMessageRenderer {
private static final Logger log = Logger.getLogger(DefaultMessageHeaderRenderer.class);
public DefaultMessageHeaderRenderer() {
super();
// TODO Auto-generated constructor stub
}
@Override
public JComponent render(JScrollPane parent, Message m) {
final SortableTable table = new SortableTable();
final DefaultTableModel tableModel = new DefaultTableModel() {
/**
*
*/
private static final long serialVersionUID = 5702541447000695825L;
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
};
tableModel.addColumn("Property");
tableModel.addColumn("Value");
//
// Header properties...
try {
tableModel.addRow(new Object[] { "JMSMessageID", m.getJMSMessageID() });
} catch (Exception ex) {
log.error("no JMSMessageID in message: " + ex.getMessage());
}
try {
tableModel.addRow(new Object[] { "JMSDestination", JMSUtils.getDestinationName(m.getJMSDestination()) });
} catch (Exception ex) {
log.error("no JMSDestination in message: " + ex.getMessage());
}
try {
tableModel.addRow(new Object[] { "JMSTimestamp", new Date(m.getJMSTimestamp()) });
} catch (Exception ex) {
tableModel.addRow(new Object[] { "JMSTimestamp", new Date() });
log.error("no JMSTimestamp in message: " + ex.getMessage());
}
try {
tableModel.addRow(new Object[] { "JMSType", m.getJMSType() });
} catch (Exception ex) {
log.error("no JMSType in message: " + ex.getMessage());
}
try {
tableModel.addRow(new Object[] { "JMSReplyTo", JMSUtils.getDestinationName(m.getJMSReplyTo()) + (m.getJMSReplyTo() != null ? " (" + Domain.getDomain(m.getJMSReplyTo()) + ")" : "") });
} catch (Exception ex) {
log.error("no JMSReplyTo in message: " + ex.getMessage());
}
try {
tableModel.addRow(new Object[] { "JMSCorrelationID", m.getJMSCorrelationID() });
} catch (Exception ex) {
log.error("no JMSCorrelationID in message: " + ex.getMessage());
}
try {
tableModel.addRow(new Object[] { "JMSExpiration", new Long(m.getJMSExpiration()) });
} catch (Exception ex) {
log.error("no JMSExpiration in message: " + ex.getMessage());
}
try {
tableModel.addRow(new Object[] { "JMSPriority", new Long(m.getJMSPriority()) });
} catch (Exception ex) {
log.error("no JMSPriority in message: " + ex.getMessage());
}
try {
if (m.getPropertyNames() != null) {
for (final Enumeration iter = m.getPropertyNames(); iter.hasMoreElements();) {
try {
final String propertyName = (String) iter.nextElement();
final Object propertyValue = m.getObjectProperty(propertyName);
final Object[] row = { propertyName, propertyValue };
tableModel.addRow(row);
} catch (RuntimeException ex) {
ex.printStackTrace();
}
}
}
} catch (Throwable e) {
final Object[] row = { "Error", e.getClass().getName() + ": " + e.getMessage() };
tableModel.addRow(row);
log.error(e.getMessage(), e);
}
table.setModel(tableModel);
return SwingUtils.createJScrollPane(table);
}
/**
* There are no configurable options on this renderer
*/
@Override
public JComponent getConfigPanel(ConfigDialogProxy dialogProxy) throws Exception {
return null;
}
/**
* Any JMS message is rederable.
*/
@Override
public boolean canRender(Message message) {
return true;
}
@Override
public String getDisplayName() {
return "Header";
}
}