package comeon.ui.media.metadata; import org.apache.commons.beanutils.BeanUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.swing.table.TableModel; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; public final class ExternalMetadataTable extends AbstractMetadataTable<Object> { private static final long serialVersionUID = 1L; public ExternalMetadataTable(final String title, final Object content) { super(title, content); } @Override protected TableModel getTableModel(final Object content) { return new ExternalMetadataTableModel(content); } private static final class ExternalMetadataTableModel extends SimpleMetadataTableModel<Object> { private static final long serialVersionUID = 1L; private static final Logger LOGGER = LoggerFactory.getLogger(ExternalMetadataTableModel.class); private static final String CLASS_PROPERTY_NAME = "class"; public ExternalMetadataTableModel(final Object content) { super(content); } @Override protected List<Entry> getValues(Object content) { List<Entry> values; try { final Map<String, String> properties = BeanUtils.describe(content); properties.remove(CLASS_PROPERTY_NAME); values = new ArrayList<>(properties.size()); for (final Map.Entry<String, String> property : properties.entrySet()) { final String propertyName = property.getKey(); final String propertyValue = BeanUtils.getProperty(content, propertyName); values.add(new Entry(propertyName, propertyValue)); } } catch (final IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { LOGGER.warn("Could not extract properties", e); values = Collections.emptyList(); } return values; } } }