package comeon.ui.media.metadata; import org.apache.commons.beanutils.DynaBean; import org.apache.commons.beanutils.DynaProperty; import javax.swing.table.TableModel; public final class MediaMetadataTable extends AbstractMetadataTable<DynaBean> { private static final long serialVersionUID = 1L; public MediaMetadataTable(final String directoryName, final DynaBean directoryContent) { super(directoryName, directoryContent); } @Override protected TableModel getTableModel(final DynaBean content) { return new MediaMetadataTableModel(content); } private static final class MediaMetadataTableModel extends AbstractMetadataTableModel { private static final long serialVersionUID = 1L; private final DynaProperty[] properties; private final DynaBean content; private MediaMetadataTableModel(final DynaBean directoryContent) { this.properties = directoryContent.getDynaClass().getDynaProperties(); this.content = directoryContent; } @Override public int getRowCount() { return properties.length; } @Override public Object getValueAt(final int rowIndex, final int columnIndex) { final Object value; final DynaProperty property = this.properties[rowIndex]; switch (columnIndex) { case 0: value = property.getName(); break; case 1: value = content.get(property.getName()); break; default: throw new IndexOutOfBoundsException("No such column: " + columnIndex); } return value; } } }