/** * Creates a namespace to be used by parsers for band arithmetic expressions. * The namespace created comprises all tie-point grids, bands and flags of this product. * * @return a namespace, never null */ public WritableNamespace createBandArithmeticDefaultNamespace() { return BandArithmetic.createDefaultNamespace(new Product[]{this}, 0); }
/** * Creates a default namespace for the product(s) given in an array. The resulting namespace contains symbols for * all tie-point grids, bands and single flag values. if the array contains more then one product, the symbol's name * will have a prefix according to each product's reference number. * * @param products the array of input products * @param defaultProductIndex the index of the product for which also symbols without the * product prefix <code>$<i>ref-no</i></code> are registered in the namespace * @return a default namespace, never <code>null</code> */ public static WritableNamespace createDefaultNamespace(Product[] products, int defaultProductIndex) { return createDefaultNamespace(products, defaultProductIndex, new ProductPrefixProvider() { @Override public String getPrefix(Product product) { return getProductNodeNamePrefix(product); } }); }
private boolean isValidExpression() { final Product[] products = getCompatibleProducts(); if (products.length == 0 || getExpression().isEmpty()) { return false; } final int defaultIndex = Arrays.asList(products).indexOf(targetProduct); final Namespace namespace = BandArithmetic.createDefaultNamespace(products, defaultIndex == -1 ? 0 : defaultIndex); final Parser parser = new ParserImpl(namespace, false); try { parser.parse(getExpression()); } catch (ParseException e) { return false; } return true; }
protected void init() { Namespace namespace = BandArithmetic.createDefaultNamespace(products, defaultIndex == -1 ? 0 : defaultIndex);
/** * Parses the given expression. * * @param expression the expression * @param products the array of input products * @param defaultProductIndex the index of the product for which also symbols without the * product prefix <code>$<i>ref-no</i></code> are registered in the namespace * @return the compiled expression * @throws ParseException if a parse error occurs */ public static Term parseExpression(String expression, Product[] products, int defaultProductIndex) throws ParseException { Assert.notNull(expression, null); final Namespace namespace = createDefaultNamespace(products, defaultProductIndex); final Parser parser = new ParserImpl(namespace, false); return parser.parse(expression); }
private Namespace createNamespace() { WritableNamespace namespace = BandArithmetic.createDefaultNamespace(sourceProducts, 0, new SourceProductPrefixProvider()); if (variables != null) { for (Variable variable : variables) { if (ProductData.isFloatingPointType(ProductData.getType(variable.type))) { Symbol symbol = SymbolFactory.createConstant(variable.name, Double.parseDouble(variable.value)); namespace.registerSymbol(symbol); } else if (ProductData.isIntType(ProductData.getType(variable.type))) { Symbol symbol = SymbolFactory.createConstant(variable.name, Long.parseLong(variable.value)); namespace.registerSymbol(symbol); } else if ("boolean".equals(variable.type)) { Symbol symbol = SymbolFactory.createConstant(variable.name, Boolean.parseBoolean(variable.value)); namespace.registerSymbol(symbol); } } } return namespace; }
Product[] products = getCompatibleProducts(rasterDataNode); int defaultProductIndex = Arrays.asList(products).indexOf(product); final WritableNamespace namespace = BandArithmetic.createDefaultNamespace(products, defaultProductIndex); namespace.registerSymbol(SymbolFactory.createConstant(paramName.getValueAsText(), 0));
private boolean isTargetBandReferencedInExpression() { final Product[] products = getCompatibleProducts(); final int defaultIndex = Arrays.asList(products).indexOf(visatApp.getSelectedProduct()); final Namespace namespace = BandArithmetic.createDefaultNamespace(products, defaultIndex == -1 ? 0 : defaultIndex); final Parser parser = new ParserImpl(namespace, false); try { final Term term = parser.parse(getExpression()); final RasterDataSymbol[] refRasterDataSymbols = BandArithmetic.getRefRasterDataSymbols(term); String bName = getBandName(); if (targetProduct.containsRasterDataNode(bName)) { for (final RasterDataSymbol refRasterDataSymbol : refRasterDataSymbols) { final String refRasterName = refRasterDataSymbol.getRaster().getName(); if (bName.equalsIgnoreCase(refRasterName)) { return true; } } } } catch (ParseException e) { return false; } return false; }
final MosaicOp.Condition[] conditions = mosaicModel.getConditions(); for (Map.Entry<String, Product> entry : sourceProductMap.entrySet()) { Namespace namespace = BandArithmetic.createDefaultNamespace(new Product[]{entry.getValue()}, 0); if (conditions != null) { for (MosaicOp.Variable variable : variables) {
public void testGetRefRasterDataSymbols() throws ParseException { final Product[] products = new Product[]{_product1, _product2}; final Parser parser = new ParserImpl(BandArithmetic.createDefaultNamespace(products, 0), false); String[] expectedSymbols = new String[]{"b1", "$2.b1"}; final Term term = parser.parse("b1 + $2.b1"); final RasterDataSymbol[] rasterSymbols = BandArithmetic.getRefRasterDataSymbols(term); assertEquals(2, rasterSymbols.length); for (int i = 0; i < expectedSymbols.length; i++) { String expectedSymbol = expectedSymbols[i]; boolean found = false; for (int j = 0; j < rasterSymbols.length; j++) { RasterDataSymbol rasterSymbol = rasterSymbols[j]; if (expectedSymbol.equals(rasterSymbol.getName())) { found = true; break; } } if (!found) { fail("Expected symbol {" + expectedSymbol + "} not found"); } } } }
public void testCreateDefaultNamespaceWithOneProduct() { final Namespace namespace = BandArithmetic.createDefaultNamespace(new Product[]{_product1}, 0); final Symbol symbol = namespace.resolveSymbol("b1"); assertNotNull(symbol); assertEquals("b1", symbol.getName()); assertNull(namespace.resolveSymbol("$1.b1")); assertNull(namespace.resolveSymbol("fails")); }
public void testCreateDefaultNamespaceWithMultipleProducts() { final Namespace namespace = BandArithmetic.createDefaultNamespace(new Product[]{_product1, _product2}, 0); final Symbol symbolP1 = namespace.resolveSymbol("$1.b1"); assertNotNull(symbolP1); assertTrue(symbolP1 instanceof RasterDataSymbol); assertEquals("$1.b1", symbolP1.getName()); final Symbol symbolWithoutPrefix = namespace.resolveSymbol("b1"); assertNotNull(symbolWithoutPrefix); assertTrue(symbolP1 instanceof RasterDataSymbol); assertEquals("b1", symbolWithoutPrefix.getName()); final RasterDataNode[] refRasters = BandArithmetic.getRefRasters(new RasterDataSymbol[]{ (RasterDataSymbol) symbolWithoutPrefix, (RasterDataSymbol) symbolP1 }); assertEquals(1, refRasters.length); final Symbol symbolP2 = namespace.resolveSymbol("$2.b1"); assertNotNull(symbolP2); assertEquals("$2.b1", symbolP2.getName()); final Symbol symbolNotFound = namespace.resolveSymbol("fails"); assertNull(symbolNotFound); }