//$Header: /cvsroot-fuse/mec-as2/39/mendelson/comm/as2/message/loggui/TableModelMessageOverview.java,v 1.1 2012/04/18 14:10:30 heller Exp $
package de.mendelson.comm.as2.message.loggui;
import de.mendelson.comm.as2.message.AS2Message;
import de.mendelson.comm.as2.message.AS2MessageInfo;
import de.mendelson.comm.as2.message.AS2Payload;
import de.mendelson.comm.as2.message.ResourceBundleAS2Message;
import de.mendelson.comm.as2.partner.Partner;
import de.mendelson.util.ImageUtil;
import de.mendelson.util.MecResourceBundle;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import javax.swing.ImageIcon;
import javax.swing.table.AbstractTableModel;
/*
* Copyright (C) mendelson-e-commerce GmbH Berlin Germany
*
* This software is subject to the license agreement set forth in the license.
* Please read and agree to all terms before using this software.
* Other product and brand names are trademarks of their respective owners.
*/
/**
* Model to display the message overview
* @author S.Heller
* @version $Revision: 1.1 $
*/
public class TableModelMessageOverview extends AbstractTableModel {
public static final ImageIcon ICON_IN = new ImageIcon(TableModelMessageOverview.class.getResource("/de/mendelson/comm/as2/message/loggui/in16x16.gif"));
public static final ImageIcon ICON_OUT = new ImageIcon(TableModelMessageOverview.class.getResource("/de/mendelson/comm/as2/message/loggui/out16x16.gif"));
public static final ImageIcon ICON_PENDING = new ImageIcon(TableModelMessageOverview.class.getResource("/de/mendelson/comm/as2/message/loggui/state_pending16x16.gif"));
public static final ImageIcon ICON_STOPPED = new ImageIcon(TableModelMessageOverview.class.getResource("/de/mendelson/comm/as2/message/loggui/state_stopped16x16.gif"));
public static final ImageIcon ICON_FINISHED = new ImageIcon(TableModelMessageOverview.class.getResource("/de/mendelson/comm/as2/message/loggui/state_finished16x16.gif"));
public static final ImageIcon ICON_RESEND_OVERLAY = new ImageIcon(TableModelMessageOverview.class.getResource("/de/mendelson/comm/as2/message/loggui/resend_overlay16x16.gif"));
/**ResourceBundle to localize the headers*/
private MecResourceBundle rb = null;
/**ResourceBundle to localize the enc/signature stuff*/
private MecResourceBundle rbMessage = null;
/**Stores all partner ids and the corresponding partner objects*/
private final Map<String, Partner> partnerMap = Collections.synchronizedMap(new HashMap<String, Partner>());
/**Data to display*/
private final List<AS2Message> data = Collections.synchronizedList(new ArrayList<AS2Message>());
/**Format the date display*/
private DateFormat format = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
private ImageUtil imageUtil = new ImageUtil();
/** Creates new LogTableModel
*/
public TableModelMessageOverview() {
//load resource bundle
try {
this.rb = (MecResourceBundle) ResourceBundle.getBundle(
ResourceBundleMessageOverview.class.getName());
this.rbMessage = (MecResourceBundle) ResourceBundle.getBundle(
ResourceBundleAS2Message.class.getName());
} //load up resourcebundle
catch (MissingResourceException e) {
throw new RuntimeException("Oops..resource bundle "
+ e.getClassName() + " not found.");
}
}
/**Passes a list of partner ot this table
**/
public void passPartner(Map<String, Partner> partnerMap) {
synchronized (this.partnerMap) {
this.partnerMap.putAll(partnerMap);
}
this.fireTableDataChanged();
}
/**Passes data to the model and fires a table data update*/
public void passNewData(List<AS2Message> newData) {
synchronized (this.data) {
this.data.clear();
this.data.addAll(newData);
}
((AbstractTableModel) this).fireTableDataChanged();
}
public void passPayload(AS2Message message, List<AS2Payload> payloads) {
int index = -1;
synchronized (this.data) {
index = this.data.indexOf(message);
if (index != -1) {
AS2Message foundMessage = this.data.get(index);
foundMessage.setPayloads(payloads);
}
}
if (index != -1) {
((AbstractTableModel) this).fireTableRowsUpdated(index, index);
}
}
/**Returns the data stored in the specific row
*@param row Row to look into*/
public AS2Message getRow(int row) {
synchronized (this.data) {
if (row > this.data.size() - 1) {
return (null);
}
return (this.data.get(row));
}
}
/**Returns the data stored in specific rows
*@param row Rows to look into*/
public AS2Message[] getRows(int[] row) {
AS2Message[] rows = new AS2Message[row.length];
synchronized (this.data) {
for (int i = 0; i < row.length; i++) {
rows[i] = this.data.get(row[i]);
}
return (rows);
}
}
/**Number of rows to display*/
@Override
public int getRowCount() {
synchronized (this.data) {
return (this.data.size());
}
}
/**Number of cols to display*/
@Override
public int getColumnCount() {
return (10);
}
/**Returns a value at a specific position in the grid
*/
@Override
public Object getValueAt(int row, int col) {
AS2Message overviewRow = null;
synchronized (this.data) {
overviewRow = this.data.get(row);
}
AS2MessageInfo info = (AS2MessageInfo) overviewRow.getAS2Info();
switch (col) {
case 0:
if (info.getState() == AS2Message.STATE_FINISHED) {
if( info.getResendCounter() == 0 ){
return (ICON_FINISHED);
}else{
return (this.imageUtil.mixImages(ICON_FINISHED, ICON_RESEND_OVERLAY));
}
} else if (info.getState() == AS2Message.STATE_STOPPED) {
if( info.getResendCounter() == 0 ){
return (ICON_STOPPED);
}else{
return (this.imageUtil.mixImages(ICON_STOPPED, ICON_RESEND_OVERLAY));
}
}
return (ICON_PENDING);
case 1:
if (info.getDirection() == AS2MessageInfo.DIRECTION_IN) {
return (ICON_IN);
} else {
return (ICON_OUT);
}
case 2:
return (info.getInitDate());
case 3:
if (info.getDirection() != AS2MessageInfo.DIRECTION_IN) {
String id = info.getSenderId();
synchronized (this.partnerMap) {
Partner sender = this.partnerMap.get(id);
if (sender != null) {
return (sender.getName());
} else {
return (id);
}
}
} else {
String id = info.getReceiverId();
synchronized (this.partnerMap) {
Partner receiver = this.partnerMap.get(id);
if (receiver != null) {
return (receiver.getName());
} else {
return (id);
}
}
}
case 4:
if (info.getDirection() == AS2MessageInfo.DIRECTION_IN) {
String id = info.getSenderId();
synchronized (this.partnerMap) {
Partner sender = this.partnerMap.get(id);
if (sender != null) {
return (sender.getName());
} else {
return (id);
}
}
} else {
String id = info.getReceiverId();
synchronized (this.partnerMap) {
Partner receiver = this.partnerMap.get(id);
if (receiver != null) {
return (receiver.getName());
} else {
return (id);
}
}
}
case 5:
return (info.getMessageId());
case 6:
if (overviewRow.getPayloadCount() == 0
|| (overviewRow.getPayloadCount() == 1 && overviewRow.getPayload(0).getOriginalFilename() == null)) {
return ("--");
} else if (overviewRow.getPayloadCount() == 1) {
return (overviewRow.getPayload(0).getOriginalFilename());
} else {
return (this.rb.getResourceString("number.of.attachments", String.valueOf(overviewRow.getPayloadCount())));
}
case 7:
return (this.rbMessage.getResourceString("encryption." + info.getEncryptionType()));
case 8:
return (this.rbMessage.getResourceString("signature." + info.getSignType()));
case 9:
if (info.requestsSyncMDN()) {
return ("SYNC");
} else {
return ("ASYNC");
}
}
return (null);
}
/**Returns the name of every column
* @param col Column to get the header name of
*/
@Override
public String getColumnName(int col) {
switch (col) {
case 0:
return (" ");
case 1:
return (" ");
case 2:
return (this.rb.getResourceString("header.timestamp"));
case 3:
return (this.rb.getResourceString("header.localstation"));
case 4:
return (this.rb.getResourceString("header.partner"));
case 5:
return (this.rb.getResourceString("header.messageid"));
case 6:
return (this.rb.getResourceString("header.payload"));
case 7:
return (this.rb.getResourceString("header.encryption"));
case 8:
return (this.rb.getResourceString("header.signature"));
case 9:
return (this.rb.getResourceString("header.mdn"));
}
return (null);
}
/**Set how to display the grid elements
* @param col requested column
*/
@Override
public Class getColumnClass(int col) {
return (new Class[]{
ImageIcon.class,
ImageIcon.class,
Date.class,
String.class,
String.class,
String.class,
String.class,
String.class,
String.class,
String.class
}[col]);
}
}