package comeon.ui.media; import comeon.core.Core; import comeon.ui.UI; import comeon.ui.media.metadata.ExternalMetadataTable; import comeon.ui.media.metadata.MediaMetadataTable; import comeon.ui.media.metadata.OtherMetadataTable; import org.apache.commons.beanutils.DynaBean; import javax.swing.*; import java.awt.*; import java.util.HashMap; import java.util.Map; final class MediaMetadataPanel extends JPanel { private static final long serialVersionUID = 1L; public static final int PREVIEW_WIDTH = (int) (UI.METADATA_PANEL_WIDTH * 0.9); public MediaMetadataPanel(final MediaPanels panels) { super(new BorderLayout()); this.setMinimumSize(new Dimension(UI.METADATA_PANEL_WIDTH, 0)); this.setMaximumSize(new Dimension(UI.METADATA_PANEL_WIDTH, Integer.MAX_VALUE)); this.setBackground(UI.NEUTRAL_GREY); this.setOpaque(true); final Dimension previewPanelDimension = new Dimension(UI.METADATA_PANEL_WIDTH, UI.METADATA_PANEL_WIDTH); final Dimension previewDimension; if (panels.getThumbnail().getWidth() >= panels.getThumbnail().getHeight()) { previewDimension = ConstrainedAxis.HORIZONTAL.getPreviewPanelDimension(panels.getThumbnail(), PREVIEW_WIDTH); } else { previewDimension = ConstrainedAxis.VERTICAL.getPreviewPanelDimension(panels.getThumbnail(), PREVIEW_WIDTH); } final MediaPreviewPanel previewPanel = new MediaPreviewPanel(panels, previewPanelDimension, (previewPanelDimension.width - previewDimension.width) / 2, (previewPanelDimension.height - previewDimension.height) / 2); this.add(previewPanel, BorderLayout.NORTH); final Box metadataBox = new Box(BoxLayout.Y_AXIS); final Map<String, Object> otherMetadata = new HashMap<>(); for (final Map.Entry<String, Object> dir : panels.getMedia().getMetadata().entrySet()) { if (dir.getValue() instanceof DynaBean) { final MediaMetadataTable table = new MediaMetadataTable(dir.getKey(), (DynaBean) dir.getValue()); metadataBox.add(table, 0); } else if (Core.EXTERNAL_METADATA_KEY.equals(dir.getKey())) { final ExternalMetadataTable table = new ExternalMetadataTable(UI.BUNDLE.getString("media.metadata.external"), dir.getValue()); metadataBox.add(table); } else { otherMetadata.put(dir.getKey(), dir.getValue()); } } if (!otherMetadata.isEmpty()) { metadataBox.add(new OtherMetadataTable(UI.BUNDLE.getString("media.metadata.other"), otherMetadata)); } final JScrollPane metadataScrollPane = new JScrollPane(metadataBox, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); this.add(metadataScrollPane, BorderLayout.CENTER); } }