private void addBandCheckBoxes(DefaultMutableTreeNode root, List<TreePath> selectedPaths, Map<String, Integer> groupNodeMap) { final Set<Map.Entry<Band, String>> allBands = allBandsMap.entrySet(); for (Map.Entry<Band, String> bandEntry : allBands) { final Band band = bandEntry.getKey(); if (autoGrouping != null) { final int bandIndex = autoGrouping.indexOf(band.getName()); if (bandIndex >= 0) { final String groupName = autoGrouping.get(bandIndex)[0]; final Integer index = groupNodeMap.get(groupName); final DefaultMutableTreeNode groupNode = (DefaultMutableTreeNode) root.getChildAt(index); final DefaultMutableTreeNode groupChild = new DefaultMutableTreeNode(bandEntry.getValue()); if (selectedBandsMap.containsValue(bandEntry.getValue())) { selectedPaths.add(new TreePath(new Object[]{root, groupNode, groupChild})); } groupNode.add(groupChild); } else { addToRoot(root, selectedPaths, bandEntry, band); } } else { addToRoot(root, selectedPaths, bandEntry, band); } } }
final Product.AutoGrouping autoGrouping = currentProduct.getAutoGrouping(); if (autoGrouping != null) { final int selectedSpectrumIndex = autoGrouping.indexOf(getCurrentView().getRaster().getName()); spectra = new DisplayableSpectrum[autoGrouping.size() + 1]; final Iterator<String[]> iterator = autoGrouping.iterator(); int i = 0; while (iterator.hasNext()) { for (SpectrumBand availableSpectralBand : availableSpectralBands) { final String bandName = availableSpectralBand.getName(); final int spectrumIndex = autoGrouping.indexOf(bandName); if (spectrumIndex != -1) { spectra[spectrumIndex].addBand(availableSpectralBand);
assertEquals(10, autoGrouping.size()); assertArrayEquals(new String[]{"L_1"}, autoGrouping.get(0)); assertArrayEquals(new String []{"L_1_err"}, autoGrouping.get(1)); assertArrayEquals(new String[]{"L_2"}, autoGrouping.get(2)); assertArrayEquals(new String[]{"L_2_err"}, autoGrouping.get(3)); assertArrayEquals(new String[]{"L_10"}, autoGrouping.get(4)); assertArrayEquals(new String[]{"L_10_err"}, autoGrouping.get(5)); assertArrayEquals(new String []{"L_11"}, autoGrouping.get(6)); assertArrayEquals(new String[]{"L_11_err"}, autoGrouping.get(7)); assertArrayEquals(new String[]{"L_21"}, autoGrouping.get(8)); assertArrayEquals(new String []{"L_21_err"}, autoGrouping.get(9)); assertEquals(0, autoGrouping.indexOf("L_1_CAM1")); assertEquals(0, autoGrouping.indexOf("L_1_CAM5")); assertEquals(1, autoGrouping.indexOf("L_1_err_CAM1")); assertEquals(1, autoGrouping.indexOf("L_1_err_CAM5")); assertEquals(2, autoGrouping.indexOf("L_2_CAM1")); assertEquals(2, autoGrouping.indexOf("L_2_CAM5")); assertEquals(3, autoGrouping.indexOf("L_2_err_CAM1")); assertEquals(3, autoGrouping.indexOf("L_2_err_CAM5")); assertEquals(4, autoGrouping.indexOf("L_10_CAM1")); assertEquals(4, autoGrouping.indexOf("L_10_CAM5")); assertEquals(5, autoGrouping.indexOf("L_10_err_CAM1")); assertEquals(5, autoGrouping.indexOf("L_10_err_CAM5")); assertEquals(6, autoGrouping.indexOf("L_11_CAM1")); assertEquals(6, autoGrouping.indexOf("L_11_CAM5")); assertEquals(7, autoGrouping.indexOf("L_11_err_CAM1")); assertEquals(7, autoGrouping.indexOf("L_11_err_CAM5"));
private static ProductNode group(ProductNodeGroup<? extends RasterDataNode> bandGroup, Product.AutoGrouping autoGrouping) { HashMap<String, ProductNodeGroup<ProductNode>> subGroupMap = new HashMap<String, ProductNodeGroup<ProductNode>>(); ProductNodeGroup<ProductNode> newGroup = new ProductNodeGroup<ProductNode>(null, bandGroup.getName(), false); newGroup.setDescription(bandGroup.getDescription()); final int count = bandGroup.getNodeCount(); for (int i = 0; i < count; i++) { RasterDataNode band = bandGroup.get(i); String bandName = band.getName(); int groupPathIndex = autoGrouping.indexOf(bandName); if (groupPathIndex >= 0) { // todo - this is still wrong, must support group separators ('/') for nested groups (nf 20100622) String subGroupName = createGroupName(autoGrouping.get(groupPathIndex)); ProductNodeGroup<ProductNode> subGroup = subGroupMap.get(subGroupName); if (subGroup == null) { subGroup = new ProductNodeGroup<ProductNode>(null, subGroupName, false); subGroupMap.put(subGroupName, subGroup); newGroup.add(subGroup); } subGroup.add(band); } else { newGroup.add(band); } } return newGroup; }
@Test public void testGetAndSetBandAutoGroupingProperty() { final Product product = new Product("A", "B", 10, 10); final MyProductNodeListener listener = new MyProductNodeListener(); product.addProductNodeListener(listener); listener.pname = ""; final String uv = "u:v"; product.setAutoGrouping(uv); final Product.AutoGrouping autoGrouping = product.getAutoGrouping(); assertEquals(2, autoGrouping.size()); assertEquals("u", autoGrouping.get(0)[0]); assertEquals("v", autoGrouping.get(1)[0]); assertEquals("autoGrouping", listener.pname); listener.pname = ""; product.setAutoGrouping(uv); assertEquals("", listener.pname); listener.pname = ""; product.setAutoGrouping("u:v"); assertEquals("", listener.pname); listener.pname = ""; product.setAutoGrouping("c"); assertEquals("autoGrouping", listener.pname); listener.pname = ""; product.setAutoGrouping(""); assertEquals("autoGrouping", listener.pname); listener.pname = ""; product.setAutoGrouping((Product.AutoGrouping) null); assertEquals("", listener.pname); }
private void addTiePointGridCheckBoxes(DefaultMutableTreeNode root, List<TreePath> selectedPaths, Map<String, Integer> groupNodeMap) { final Set<Map.Entry<TiePointGrid, String>> allGrids = allGridsMap.entrySet(); for (Map.Entry<TiePointGrid, String> gridEntry : allGrids) { final TiePointGrid grid = gridEntry.getKey(); if (autoGrouping != null) { final int gridIndex = autoGrouping.indexOf(grid.getName()); if (gridIndex >= 0) { final String groupName = autoGrouping.get(gridIndex)[0]; final Integer index = groupNodeMap.get(groupName); final DefaultMutableTreeNode groupNode = (DefaultMutableTreeNode) root.getChildAt(index); final DefaultMutableTreeNode groupChild = new DefaultMutableTreeNode(gridEntry.getValue()); if (selectedGridsMap.containsKey(grid)) { selectedPaths.add(new TreePath(new Object[]{root, groupNode, groupChild})); } groupNode.add(groupChild); } else { addToRoot(root, selectedPaths, gridEntry, grid); } } else { addToRoot(root, selectedPaths, gridEntry, grid); } } }
@Override public boolean equals(Object o) { if (this == o) { return true; } else if (o instanceof AutoGrouping) { AutoGrouping other = (AutoGrouping) o; if (other.size() != size()) { return false; } for (int i = 0; i < paths.length; i++) { String[] path = paths[i]; if (!ObjectUtils.equalObjects(path, other.get(i))) { return false; } } return true; } else { return false; } }
private void addBandToSpectra(Band band) { DisplayableSpectrum[] allSpectra = productToAllSpectraMap.get(getCurrentProduct()); Product.AutoGrouping autoGrouping = currentProduct.getAutoGrouping(); if (autoGrouping != null) { final int bandIndex = autoGrouping.indexOf(band.getName()); final DisplayableSpectrum spectrum; if (bandIndex != -1) { spectrum = allSpectra[bandIndex]; } else { spectrum = allSpectra[allSpectra.length - 1]; } spectrum.addBand(new SpectrumBand(band, spectrum.isSelected())); } else { allSpectra[0].addBand(new SpectrumBand(band, true)); } }
@Test public void testAutoGrouping() throws Exception { final Product sp = createTestProduct(100, 100); sp.setAutoGrouping("radiance"); final String[] bandNames = {"radiance_1", "radiance_3"}; SubsetOp op = new SubsetOp(); op.setSourceProduct(sp); op.setBandNames(bandNames); Product tp = op.getTargetProduct(); assertEquals(2, tp.getNumBands()); Product.AutoGrouping autoGrouping = tp.getAutoGrouping(); assertNotNull(autoGrouping); assertEquals(1, autoGrouping.size()); assertArrayEquals(new String[]{"radiance"}, autoGrouping.get(0)); }
private void mergeAutoGrouping(Product srcProduct) { final Product.AutoGrouping srcAutoGrouping = srcProduct.getAutoGrouping(); if (srcAutoGrouping != null && !srcAutoGrouping.isEmpty()) { final Product.AutoGrouping targetAutoGrouping = targetProduct.getAutoGrouping(); if (targetAutoGrouping == null) { targetProduct.setAutoGrouping(srcAutoGrouping); } else { for (String[] grouping : srcAutoGrouping) { if (!targetAutoGrouping.contains(grouping)) { targetProduct.setAutoGrouping(targetAutoGrouping.toString() + ":" + srcAutoGrouping); } } } } }