package hermes.browser.dialog.message;
import hermes.swing.PropertyRow;
import hermes.swing.PropertyType;
import hermes.util.TextUtils;
import java.awt.BorderLayout;
import java.util.Enumeration;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.swing.JLabel;
import com.jgoodies.forms.factories.Borders;
public class MapMessagePayloadPanel extends MessageWriter {
private PanelImpl panel;
public MapMessagePayloadPanel() throws JMSException {
this(null, true);
}
public MapMessagePayloadPanel(MapMessage message, boolean editable) throws JMSException {
panel = new PanelImpl(message, editable);
setLayout(new BorderLayout());
if (false) {
JLabel label = new JLabel("Edit the MapMessage");
label.setBorder(Borders.EMPTY_BORDER);
add(label, BorderLayout.NORTH);
}
add(panel, BorderLayout.CENTER);
}
class PanelImpl extends GenericPropertyPanel {
public PanelImpl(MapMessage message, boolean editable) throws JMSException {
super(editable);
if (message != null) {
for (Enumeration<String> e = message.getMapNames(); e.hasMoreElements();) {
PropertyRow row = new PropertyRow();
row.name = e.nextElement();
row.value = message.getObject(row.name);
row.type = PropertyType.fromObject(row.value);
model.addRow(row);
}
}
}
public void setProperties(MapMessage message) throws NumberFormatException, JMSException {
for (int i = 0; i < model.getRowCount(); i++) {
PropertyRow row = model.getRow(i);
if (!TextUtils.isEmpty(row.name)) {
switch (row.type) {
case INT:
message.setInt(row.name, Integer.decode(row.value.toString()));
break;
case DOUBLE:
message.setDouble(row.name, Double.parseDouble(row.value.toString()));
break;
case LONG:
message.setLong(row.name, Long.decode(row.value.toString()));
break;
case BOOLEAN:
message.setBoolean(row.name, Boolean.parseBoolean(row.value.toString()));
break;
case STRING:
message.setString(row.name, row.value.toString());
break;
case CHAR:
message.setChar(row.name, row.value.toString().charAt(0));
break;
case BYTE:
message.setByte(row.name, Byte.parseByte(row.value.toString()));
break;
}
}
}
}
}
@Override
void onMessage(Message message) throws JMSException {
panel.setProperties((MapMessage) message);
}
@Override
boolean supports(MessageType type) {
return type == MessageType.MapMessage;
}
}