package org.esa.snap.rcp.metadata; import org.esa.snap.core.datamodel.MetadataElement; import org.esa.snap.netbeans.docwin.DocumentTopComponent; import org.esa.snap.netbeans.docwin.WindowUtilities; import org.esa.snap.ui.product.metadata.MetadataTableInnerElement; import org.netbeans.swing.outline.Outline; import org.openide.explorer.ExplorerManager; import org.openide.explorer.view.OutlineView; import org.openide.nodes.Node; import javax.swing.table.TableColumnModel; import java.awt.BorderLayout; public class MetadataViewTopComponent extends DocumentTopComponent<MetadataElement, OutlineView> implements ExplorerManager.Provider { private static final String[] COLUMN_NAMES = new String[]{ "Value", "Value", "Type", "Type", "Unit", "Unit", "Description", "Description" }; private static final int[] COLUMN_WIDTHS = { 180, // 0 180, // 1 50, // 2 40, // 3 200 // 4 }; private static final String nodesColumnName = "Name"; private ExplorerManager em = new ExplorerManager(); private OutlineView outlineView; public MetadataViewTopComponent(MetadataElement element) { super(element); updateDisplayName(); setName(getDisplayName()); initView(); final MetadataTableInnerElement tableInnerElement = new MetadataTableInnerElement(element); em.setRootContext(tableInnerElement.createNode()); } @Override public OutlineView getView() { return outlineView; } private void initView() { setLayout(new BorderLayout()); outlineView = new OutlineView(nodesColumnName); outlineView.setPropertyColumns(COLUMN_NAMES); final Outline outline = outlineView.getOutline(); outline.setRootVisible(false); outline.setDefaultRenderer(Node.Property.class, new MetadataOutlineCellRenderer()); final TableColumnModel columnModel = outline.getColumnModel(); columnModel.getColumn(0).setCellRenderer(new MetadataOutlineCellRenderer()); final int[] columnWidths = COLUMN_WIDTHS; for (int i = 0; i < columnModel.getColumnCount(); i++) { columnModel.getColumn(i).setPreferredWidth(columnWidths[i]); } add(outlineView, BorderLayout.CENTER); } private void updateDisplayName() { setDisplayName(WindowUtilities.getUniqueTitle(getDocument().getDisplayName(), MetadataViewTopComponent.class)); } @Override public ExplorerManager getExplorerManager() { return em; } }