@Override public boolean canTransferMask(Mask mask, Product product) { final String expression = getExpression(mask); if (StringUtils.isNullOrEmpty(expression)) { return false; } try { if (mask.getProduct() != null) { for (RasterDataNode raster : BandArithmetic.getRefRasters(expression, mask.getProduct())) { if (raster instanceof Mask) { if (!product.getMaskGroup().contains(raster.getName())) { Mask refMask = (Mask) raster; if (!canTransferMask(refMask, product)) { return false; } } } else { if (!product.containsRasterDataNode(raster.getName())) { return false; } } } } else { // the mask has not been added to a product yet BandArithmetic.getRefRasters(expression, product); } } catch (ParseException e) { return false; } return true; }
@Override public Mask transferMask(Mask mask, Product product) { if (canTransferMask(mask, product)) { String expression = getExpression(mask); final Map<Mask, Mask> translationMap = transferReferredMasks(expression, mask.getProduct(), product); expression = translateExpression(translationMap, expression); final String originalMaskName = mask.getName(); final String maskName = getAvailableMaskName(originalMaskName, product.getMaskGroup()); return product.addMask(maskName, expression, mask.getDescription(), mask.getImageColor(), mask.getImageTransparency()); } return null; }