@Override public boolean canPersist(Object object) { if (object instanceof Mask) { Mask mask = (Mask) object; if(mask.getImageType() == Mask.BandMathsType.INSTANCE) { return true; } } return false; }
@Override public boolean canPersist(Object object) { if (object instanceof Mask) { Mask mask = (Mask) object; if(mask.getImageType() == Mask.RangeType.INSTANCE) { return true; } } return false; }
private static boolean canCopyDefinition(Mask[] masks, Product targetProduct) { boolean canCopyDef = true; for (Mask mask : masks) { boolean canTransferMask = mask.getImageType().canTransferMask(mask, targetProduct); canCopyDef = canCopyDef && canTransferMask; } return canCopyDef; }
/** * Calls {@link ImageType#createImage(Mask) createImage(this)} in this mask's image type. * * @return The mask's source image. * * @see #getImageType() */ @Override protected RenderedImage createSourceImage() { final MultiLevelImage image = getImageType().createImage(this); if (isMaskImageInvalid(image)) { throw new IllegalStateException("Invalid mask image."); } return image; }
/** * {@inheritDoc} */ @Override public void updateExpression(final String oldExternalName, final String newExternalName) { getImageType().handleRename(this, oldExternalName, newExternalName); super.updateExpression(oldExternalName, newExternalName); }
private static void copyMaskDefinition(Mask[] selectedMasks, Product[] maskPixelTargetProducts) { for (Product targetProduct : maskPixelTargetProducts) { for (Mask selectedMask : selectedMasks) { ImageType imageType = selectedMask.getImageType(); if (imageType.canTransferMask(selectedMask, targetProduct)) { imageType.transferMask(selectedMask, targetProduct); } } } }
ExpectedMask(Mask mask) { this(mask.getName(), mask.getImageType().getClass(), mask.getImageColor(), mask.getDescription()); }
private void addMaskToProductIfPossible(Mask mask, Product product) throws Exception { if (mask.getImageType().canTransferMask(mask, product)) { product.getMaskGroup().add(mask); } else { throw new Exception(String.format("Cannot add mask '%s' to selected product.", mask.getName())); } } }
private Mask getMask(VectorDataNode sourceNode) { final Mask[] masks = maskGroup.toArray(new Mask[maskGroup.getNodeCount()]); for (final Mask mask : masks) { if (mask.getImageType() == Mask.VectorDataType.INSTANCE) { if (Mask.VectorDataType.getVectorData(mask) == sourceNode) { return mask; } } } return null; }
private static List<RasterDataNode> getReferencedMasks(final RasterDataNode node) { final Product product = node.getProduct(); final List<RasterDataNode> rasterList = new ArrayList<RasterDataNode>(); if (product != null) { final ProductNodeGroup<Mask> maskGroup = product.getMaskGroup(); final Mask[] masks = maskGroup.toArray(new Mask[maskGroup.getNodeCount()]); for (final Mask mask : masks) { final String expression; if (mask.getImageType() == Mask.BandMathsType.INSTANCE) { expression = Mask.BandMathsType.getExpression(mask); } else if (mask.getImageType() == Mask.RangeType.INSTANCE) { expression = Mask.RangeType.getRasterName(mask); } else { expression = null; } if (isNodeReferencedByExpression(node, expression)) { rasterList.add(mask); } } } return rasterList; }
@Override public final Element createXmlFromObject(Object object) { final Mask mask = (Mask) object; final Element root = new Element(TAG_MASK); root.setAttribute(ATTRIB_TYPE, mask.getImageType().getName()); final PropertyContainer config = mask.getImageConfig(); root.addContent(createElement(TAG_NAME, mask.getName())); root.addContent(createElement(TAG_DESCRIPTION, mask.getDescription())); final Element colorElement = new Element(TAG_COLOR); final Color color = (Color) config.getValue(Mask.ImageType.PROPERTY_NAME_COLOR); colorElement.setAttribute(ATTRIB_RED, String.valueOf(color.getRed())); colorElement.setAttribute(ATTRIB_GREEN, String.valueOf(color.getGreen())); colorElement.setAttribute(ATTRIB_BLUE, String.valueOf(color.getBlue())); colorElement.setAttribute(ATTRIB_ALPHA, String.valueOf(color.getAlpha())); root.addContent(colorElement); Object transparencyValue = config.getValue(Mask.ImageType.PROPERTY_NAME_TRANSPARENCY); final String transparency = String.valueOf(transparencyValue); root.addContent(createElement(TAG_TRANSPARENCY, transparency)); configureElement(root, mask); return root; }
private static Map<Mask, Mask> transferReferredMasks(String expression, Product sourceProduct, Product targetProduct) { final Map<Mask, Mask> translationMap = new HashMap<Mask, Mask>(); final RasterDataNode[] rasters; try { rasters = BandArithmetic.getRefRasters(expression, sourceProduct); } catch (ParseException e) { return translationMap; } for (RasterDataNode raster : rasters) { if (raster instanceof Mask && !targetProduct.getMaskGroup().contains(raster.getName())) { Mask refMask = (Mask) raster; Mask newMask = refMask.getImageType().transferMask(refMask, targetProduct); translationMap.put(refMask, newMask); } } return translationMap; }
/** * Copies the {@link Mask}s from the source product to the target product. * <p/> * IMPORTANT NOTE: This method should only be used, if it is known that all masks * in the source product will also be valid in the target product. This method does * <em>not</em> copy overlay masks from the source bands to the target bands. Also * note that a source mask is not copied to the target product, when there already * is a mask in the target product with the same name as the source mask. * * @param sourceProduct the source product * @param targetProduct the target product */ public static void copyMasks(Product sourceProduct, Product targetProduct) { final ProductNodeGroup<Mask> sourceMaskGroup = sourceProduct.getMaskGroup(); for (int i = 0; i < sourceMaskGroup.getNodeCount(); i++) { final Mask mask = sourceMaskGroup.get(i); if (!targetProduct.getMaskGroup().contains(mask.getName()) && mask.getImageType().canTransferMask(mask, targetProduct)) { mask.getImageType().transferMask(mask, targetProduct); } } }
private void handleMaskAdded(ProductNodeEvent event) { // TODO - move code to where masks are created final Mask mask = (Mask) event.getSourceNode(); if (StringUtils.isNullOrEmpty(mask.getDescription()) && mask.getImageType() == Mask.BandMathsType.INSTANCE) { String expression = Mask.BandMathsType.getExpression(mask); mask.setDescription(getSuitableBitmaskDefDescription(expression)); } }
@Test public void testMaskCreation() throws IOException, JDOMException { final DimapPersistable persistable = new BandMathsMaskPersistable(); final InputStream resourceStream = getClass().getResourceAsStream("BandMathMask.xml"); final Document document = new SAXBuilder().build(resourceStream); final Product product = new Product("P", "T", 10, 10); final Mask maskFromXml = (Mask) persistable.createObjectFromXml(document.getRootElement(), product); assertNotNull(maskFromXml); assertEquals(Mask.BandMathsType.class, maskFromXml.getImageType().getClass()); assertEquals("Bibo", maskFromXml.getName()); assertEquals("A big yellow bird is in the pixel.", maskFromXml.getDescription()); assertEquals(0.7, maskFromXml.getImageTransparency(), 0.0); assertEquals(new Color(17, 11, 67), maskFromXml.getImageColor()); assertEquals("false", maskFromXml.getImageConfig().getValue(Mask.BandMathsType.PROPERTY_NAME_EXPRESSION)); }
@Test public void testMaskCreation() throws IOException, JDOMException { final DimapPersistable persistable = new TestMaskPersistable(); final InputStream resourceStream = getClass().getResourceAsStream("TestMask.xml"); final Document document = new SAXBuilder().build(resourceStream); final Product product = new Product("P", "T", 10, 10); final Mask maskFromXml = (Mask) persistable.createObjectFromXml(document.getRootElement(), product); assertNotNull(maskFromXml); assertEquals(TestImageType.class, maskFromXml.getImageType().getClass()); assertEquals(10, maskFromXml.getSceneRasterWidth()); assertEquals(10, maskFromXml.getSceneRasterHeight()); assertEquals("Bibo", maskFromXml.getName()); assertEquals("A big yellow bird is in the pixel.", maskFromXml.getDescription()); assertEquals(0.7, maskFromXml.getImageTransparency(), 0.0); assertEquals(new Color(17, 11, 67), maskFromXml.getImageColor()); }
@Override public Object getValueAt(int rowIndex, int columnIndex) { final ProductNodeGroup<Mask> maskGroup = getMaskGroup(); Mask mask = maskGroup.get(rowIndex); int column = modeIdxs[columnIndex]; if (column == IDX_VISIBILITY) { if (visibleBand.getOverlayMaskGroup().contains(mask)) { return Boolean.TRUE; } else { return Boolean.FALSE; } } else if (column == IDX_NAME) { return mask.getName(); } else if (column == IDX_TYPE) { return mask.getImageType().getName(); } else if (column == IDX_COLOR) { return mask.getImageColor(); } else if (column == IDX_TRANSPARENCY) { return mask.getImageTransparency(); } else if (column == IDX_DESCRIPTION) { return mask.getDescription(); } return null; }
@Test public void createMaskFromXml() throws IOException, JDOMException { final DimapPersistable persistable = new RangeTypeMaskPersistable(); final InputStream resourceStream = getClass().getResourceAsStream("RangeMask.xml"); final Document document = new SAXBuilder().build(resourceStream); final Product product = new Product("P", "T", 10, 10); final Mask maskFromXml = (Mask) persistable.createObjectFromXml(document.getRootElement(), product); assertNotNull(maskFromXml); assertEquals(Mask.RangeType.class, maskFromXml.getImageType().getClass()); assertEquals("myRange", maskFromXml.getName()); assertEquals("Carefully defined range", maskFromXml.getDescription()); assertEquals(0.78, maskFromXml.getImageTransparency(), 0.0); assertEquals(new Color(0, 255, 0, 128), maskFromXml.getImageColor()); assertEquals(0.35, (double)maskFromXml.getImageConfig().getValue(Mask.RangeType.PROPERTY_NAME_MINIMUM), 1.0e-6); assertEquals(0.76, (double)maskFromXml.getImageConfig().getValue(Mask.RangeType.PROPERTY_NAME_MAXIMUM), 1.0e-6); assertEquals("reflectance_13", maskFromXml.getImageConfig().getValue(Mask.RangeType.PROPERTY_NAME_RASTER)); }
@Override public void actionPerformed(ActionEvent e) { Mask selectedMask = getMaskForm().getSelectedMask(); final Mask mask = createNewMask(selectedMask.getImageType()); mask.setName("Copy_of_" + selectedMask.getName()); mask.setDescription(selectedMask.getDescription()); PropertyContainer selectedConfig = selectedMask.getImageConfig(); Property[] models = selectedConfig.getProperties(); for (Property model : models) { mask.getImageConfig().setValue(model.getDescriptor().getName(), model.getValue()); } getMaskForm().addMask(mask); }
@Test public void testMask() { Mask.ImageType imageType = new BufferedImageType(); Mask mask = new Mask("WATER", 256, 128, imageType); assertEquals("WATER", mask.getName()); assertEquals(256, mask.getRasterWidth()); assertEquals(128, mask.getRasterHeight()); assertSame(imageType, mask.getImageType()); PropertyContainer imageConfig = mask.getImageConfig(); assertNotNull(imageConfig); assertEquals(Color.RED, mask.getImageConfig().getValue("color")); assertEquals(0.5, (double)mask.getImageConfig().getValue("transparency"), 1.0e-6); MultiLevelImage image = mask.getSourceImage(); assertNotNull(image); assertSame(image, mask.getGeophysicalImage()); assertSame(null, mask.getValidMaskImage()); }