package org.esa.snap.opendap.ui; import org.esa.snap.core.ui.DefaultAppContext; import org.esa.snap.opendap.datamodel.OpendapLeaf; import org.junit.Assume; import org.junit.Test; import thredds.catalog.InvAccessImpl; import thredds.catalog.InvCatalog; import thredds.catalog.InvCatalogImpl; import thredds.catalog.InvDataset; import thredds.catalog.InvDatasetImpl; import thredds.catalog.InvService; import ucar.nc2.constants.FeatureType; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeCellRenderer; import java.awt.Color; import java.awt.Component; import java.awt.Font; import java.awt.GraphicsEnvironment; import java.net.URI; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.List; import static org.junit.Assert.*; public class CatalogTree_simpleDifferentTests { @Test public void testThatGetComponentGetsAWellDefinedJTreeComponent() { Assume.assumeTrue(!GraphicsEnvironment.isHeadless()); final CatalogTree catalogTree = new CatalogTree(null, new DefaultAppContext(""), null); final Component component = catalogTree.getComponent(); assertNotNull(component); assertTrue(component instanceof JTree); final JTree tree = (JTree) component; assertEquals(false, tree.isRootVisible()); assertNotNull(tree.getModel()); assertEquals(true, tree.getModel() instanceof DefaultTreeModel); final DefaultTreeModel model = (DefaultTreeModel) tree.getModel(); assertNotNull(model.getRoot()); assertEquals(true, model.getRoot() instanceof DefaultMutableTreeNode); final DefaultMutableTreeNode rootNode = (DefaultMutableTreeNode) model.getRoot(); assertNotNull(rootNode.getUserObject()); assertEquals(true, rootNode.getUserObject() instanceof String); assertEquals("root", rootNode.getUserObject().toString()); } @Test public void testThatAWellDefinedRootNodeIsCreated() { final DefaultMutableTreeNode rootNode = CatalogTreeUtils.createRootNode(); assertNotNull(rootNode); final Object userObject = rootNode.getUserObject(); assertNotNull(userObject); assertTrue(userObject instanceof String); assertEquals("root", userObject.toString()); } @Test public void testThatCellRendererIsSet() { final JTree jTree = new JTree(); final TreeCellRenderer renderer1 = jTree.getCellRenderer(); assertNotNull(renderer1); assertEquals(true, renderer1 instanceof DefaultTreeCellRenderer); CatalogTreeUtils.addCellRenderer(jTree); final TreeCellRenderer renderer2 = jTree.getCellRenderer(); assertNotNull(renderer2); assertEquals(true, renderer2 instanceof DefaultTreeCellRenderer); assertNotSame(renderer1, renderer2); } @Test public void testThatRendererRendersDifferentTypes() { final JTree jTree = new JTree(); CatalogTreeUtils.addCellRenderer(jTree); final TreeCellRenderer dapCellRenderer = jTree.getCellRenderer(); final OpendapLeaf opendapLeaf = new OpendapLeaf("This is A dap Node", new InvDataset(null, "") { }); opendapLeaf.setDapAccess(true); final OpendapLeaf fileLeaf = new OpendapLeaf("This is A File Node", new InvDataset(null, "") { }); fileLeaf.setFileAccess(true); final Object dapNode = new DefaultMutableTreeNode(opendapLeaf); final Object fileNode = new DefaultMutableTreeNode(fileLeaf); final Object noDapNode = new DefaultMutableTreeNode("otherNode"); final Component component = dapCellRenderer.getTreeCellRendererComponent(jTree, noDapNode, false, false, true, 0, false); assertTrue(component instanceof DefaultTreeCellRenderer); final DefaultTreeCellRenderer tcr1 = (DefaultTreeCellRenderer) component; assertEquals("otherNode", tcr1.getText()); assertEquals(true, tcr1.getIcon() != null); final Color foreground = tcr1.getForeground(); final Color background = tcr1.getBackground(); final Font font = tcr1.getFont(); final Component component2 = dapCellRenderer.getTreeCellRendererComponent(jTree, dapNode, false, false, true, 0, false); assertSame(component, component2); assertTrue(component2 instanceof DefaultTreeCellRenderer); final DefaultTreeCellRenderer tcr2 = (DefaultTreeCellRenderer) component2; assertEquals("This is A dap Node", tcr2.getText()); assertEquals(true, tcr2.getIcon() != null); final Icon icon2 = tcr2.getIcon(); // todo change the expected icon to a realistic icon assertEquals("/DRsProduct16.png", icon2.toString().substring(icon2.toString().lastIndexOf("/"))); assertEquals(foreground, tcr2.getForeground()); assertEquals(background, tcr2.getBackground()); assertEquals(font, tcr2.getFont()); final Component component3 = dapCellRenderer.getTreeCellRendererComponent(jTree, fileNode, false, false, true, 0, false); assertSame(component, component3); assertTrue(component3 instanceof DefaultTreeCellRenderer); final DefaultTreeCellRenderer tcr3 = (DefaultTreeCellRenderer) component3; assertEquals("This is A File Node", tcr3.getText()); assertEquals(true, tcr3.getIcon() instanceof ImageIcon); final ImageIcon icon3 = (ImageIcon) tcr3.getIcon(); // todo change the expected icon to a realistic icon assertEquals("/FRsProduct16.png", icon3.getDescription().substring(icon3.getDescription().lastIndexOf("/"))); assertEquals(foreground, tcr3.getForeground()); assertEquals(background, tcr3.getBackground()); assertEquals(font, tcr3.getFont()); } @Test public void testGetLeaves() throws Exception { Assume.assumeTrue(!GraphicsEnvironment.isHeadless()); final CatalogTree catalogTree = new CatalogTree(null, new DefaultAppContext(""), null); List<InvDataset> datasets = new ArrayList<InvDataset>(); InvCatalog catalog = new InvCatalogImpl("catalogName", "1.0", new URI("http://x.y")); final InvDataset rootDataset = createDataset(catalog, "first", "OPENDAP"); rootDataset.getDatasets().add(createDataset(catalog, "second", "OPENDAP")); rootDataset.getDatasets().add(createDataset(catalog, "third", "OPENDAP")); datasets.add(rootDataset); catalogTree.setNewRootDatasets(datasets); OpendapLeaf[] leaves = catalogTree.getLeaves(); Arrays.sort(leaves, new Comparator<OpendapLeaf>() { @Override public int compare(OpendapLeaf o1, OpendapLeaf o2) { return o1.getName().compareTo(o2.getName()); } }); assertEquals(2, leaves.length); assertEquals("second", leaves[0].getName()); assertEquals("third", leaves[1].getName()); } private InvDataset createDataset(InvCatalog catalog, String datasetName, final String serviceName) { final InvDatasetImpl dapDataset = new InvDatasetImpl(null, datasetName, FeatureType.NONE, serviceName, "http://wherever.you.want.bc"); dapDataset.setCatalog(catalog); final InvService dapService = new InvService(serviceName, serviceName, "irrelevant", "irrelevant", "irrelevant"); dapDataset.addAccess(new InvAccessImpl(dapDataset, "http://y.z", dapService)); dapDataset.finish(); return dapDataset; } }