package jadex.base.gui.componentviewer.dfservice; import jadex.base.fipa.IDFComponentDescription; import jadex.base.fipa.IDFServiceDescription; import jadex.bridge.IComponentIdentifier; import jadex.commons.Properties; import jadex.commons.Property; import jadex.commons.SGUI; import jadex.commons.jtable.TableSorter; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.Date; import javax.swing.AbstractAction; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.JTable; import javax.swing.UIDefaults; import javax.swing.table.TableColumn; import javax.swing.table.TableColumnModel; /** * This class serves for displaying component descriptions. */ public class DFComponentTable extends JTable { static final IDFComponentDescription[] EMPTY = new IDFComponentDescription[0]; /** The image icons. */ protected static final UIDefaults icons = new UIDefaults(new Object[] { "remove_component", SGUI.makeIcon(DFComponentTable.class, "/jadex/base/gui/images/new_remove_service.png"), }); //-------- attributes -------- /** The popup menu. */ protected JPopupMenu popup; /** The panel. */ protected DFBrowserPanel panel; //-------- constructors -------- /** * Constructor. */ public DFComponentTable(DFBrowserPanel panel) { super(new TableSorter(new ComponentTableModel())); this.panel = panel; TableSorter sorter = (TableSorter)getModel(); sorter.setTableHeader(getTableHeader()); setPreferredScrollableViewportSize(new Dimension(800, 70)); setDefaultRenderer(IComponentIdentifier.class, new ComponentIdentifierRenderer()); setDefaultRenderer(String[].class, new StringArrayRenderer()); setDefaultRenderer(IDFServiceDescription[].class, new ServiceDescriptionArrayRenderer()); setDefaultRenderer(Date.class, new LeaseTimeRenderer()); addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { if(e.isPopupTrigger()) { popup.show(DFComponentTable.this, e.getX(), e.getY()); } } public void mousePressed(MouseEvent e) { if(e.isPopupTrigger()) { popup.show(DFComponentTable.this, e.getX(), e.getY()); } } public void mouseReleased(MouseEvent e) { if(e.isPopupTrigger()) { popup.show(DFComponentTable.this, e.getX(), e.getY()); } } }); popup = new JPopupMenu(); addMenuItems(popup); } /** * Add the menu items. * @param menu The menu. */ protected void addMenuItems(JPopupMenu menu) { menu.add(new JMenuItem(new AbstractAction("Remove component description", icons.getIcon("remove_component")) { public void actionPerformed(ActionEvent e) { int selectedRow = getSelectedRow(); if(selectedRow >= 0) { TableSorter sorter = (TableSorter)getModel(); ComponentTableModel model = (ComponentTableModel)sorter.getTableModel(); panel.removeComponentRegistration(model.getComponentDescription(sorter.modelIndex(selectedRow))); } } })); } /** * Get the selected components. * @return the descriptions of selected components */ public IDFComponentDescription[] getSelectedComponents() { IDFComponentDescription[] ret = EMPTY; int count = getSelectedRowCount(); if(count>0) { TableSorter sorter = (TableSorter)getModel(); ComponentTableModel model = (ComponentTableModel)sorter.getTableModel(); ArrayList sa = new ArrayList(); int[] rows = getSelectedRows(); for(int i = 0; i < rows.length; i++) { sa.add(model.getComponentDescription(sorter.modelIndex(rows[i]))); } ret = (IDFComponentDescription[])sa.toArray(new IDFComponentDescription[sa.size()]); } return ret; } /** * Sets descriptions for this element. * @param ad The component description. */ public void setComponentDescriptions(IDFComponentDescription[] ad) { TableSorter sorter = (TableSorter)getModel(); ComponentTableModel model = (ComponentTableModel)sorter.getTableModel(); model.setComponentDescriptions(ad); } /** * Get the properties. * @param props The properties. */ public Properties getProperties() { Properties props = new Properties(); TableColumnModel cm = getColumnModel(); for(int i=0; i<cm.getColumnCount(); i++) { TableColumn column = cm.getColumn(i); props.addProperty(new Property("columnwidth", Integer.toString(column.getWidth()))); } return props; } /** * Set the properties. * @param props The properties. */ public void setProperties(Properties props) { Property[] columnprops = props.getProperties("columnwidth"); TableColumnModel cm = getColumnModel(); for(int i=0; i<cm.getColumnCount() && i<columnprops.length; i++) { cm.getColumn(i).setPreferredWidth(Integer.parseInt(columnprops[i].getValue())); } } }