@Test public void testParse() throws Exception { Function f = FunctionFactory.parse(new ConfigThingy("test", ""), funcLib, dialogLib, context); assertTrue(f instanceof StringLiteralFunction); f = FunctionFactory.parse(new ConfigThingy("AND", "\"true\""), funcLib, dialogLib, context); assertTrue(f instanceof AndFunction); f = FunctionFactory.parse(new ConfigThingy("NOT", "\"true\""), funcLib, dialogLib, context); assertTrue(f instanceof NotFunction); f = FunctionFactory.parse(new ConfigThingy("OR", "\"true\""), funcLib, dialogLib, context); assertTrue(f instanceof OrFunction); f = FunctionFactory.parse(new ConfigThingy("VALUE", "\"true\""), funcLib, dialogLib, context); assertTrue(f instanceof ValueFunction); f = FunctionFactory.parse(new ConfigThingy("MATCH", "\"abs\" \"abc\""), funcLib, dialogLib, context); assertTrue(f instanceof MatchFunction); f = FunctionFactory.parse(new ConfigThingy("REPLACE", "\"abc\" \"abc\" \"def\""), funcLib, dialogLib, context); assertTrue(f instanceof ReplaceFunction); f = FunctionFactory.parse(new ConfigThingy("SPLIT", "\"abc\" \"b\" \"0\""), funcLib, dialogLib, context); assertTrue(f instanceof SplitFunction); f = FunctionFactory.parse(new ConfigThingy("IF", "\"true\""), funcLib, dialogLib, context); assertTrue(f instanceof IfFunction); f = FunctionFactory.parse( new ConfigThingy("EXTERN", "URL \"java:de.muenchen.allg.itd51.wollmux.func.FunctionFactoryTest.extMethod\""), funcLib, dialogLib, context); assertTrue(f instanceof ExternalFunctionFunction); f = FunctionFactory.parse(new ConfigThingy("DIALOG", "\"dialog\" \"value1\""), funcLib, dialogLib, context); assertTrue(f instanceof DialogFunction); f = FunctionFactory.parse(new ConfigThingy("BIND", "FUNCTION \"func\""), funcLib, dialogLib, context); assertTrue(f instanceof BindFunction); f = FunctionFactory.parse(new ConfigThingy("SELECT", "\"test\""), funcLib, dialogLib, context); assertTrue(f instanceof SelectFunction); f = FunctionFactory.parse(new ConfigThingy("CAT", "\"abc\""), funcLib, dialogLib, context); assertTrue(f instanceof CatFunction); f = FunctionFactory.parse(new ConfigThingy("THEN", "\"abc\""), funcLib, dialogLib, context); assertTrue(f instanceof CatFunction); f = FunctionFactory.parse(new ConfigThingy("ELSE", "\"abc\""), funcLib, dialogLib, context); assertTrue(f instanceof CatFunction); f = FunctionFactory.parse(new ConfigThingy("LENGTH", "\"abc\""), funcLib, dialogLib, context); assertTrue(f instanceof LengthFunction); f = FunctionFactory.parse(new ConfigThingy("FORMAT", "\"5\""), funcLib, dialogLib, context); assertTrue(f instanceof DivideFunction); f = FunctionFactory.parse(new ConfigThingy("DIVIDE", "\"5\" BY \"1\" MAX \"1\" MIN \"1\""), funcLib, dialogLib, context); assertTrue(f instanceof DivideFunction); f = FunctionFactory.parse(new ConfigThingy("MINUS", "\"5\""), funcLib, dialogLib, context); assertTrue(f instanceof MinusFunction); f = FunctionFactory.parse(new ConfigThingy("SUM", "\"5\""), funcLib, dialogLib, context); assertTrue(f instanceof SumFunction); f = FunctionFactory.parse(new ConfigThingy("DIFF", "\"5\""), funcLib, dialogLib, context); assertTrue(f instanceof DiffFunction); f = FunctionFactory.parse(new ConfigThingy("PRODUCT", "\"5\""), funcLib, dialogLib, context); assertTrue(f instanceof ProductFunction); f = FunctionFactory.parse(new ConfigThingy("ABS", "\"5\""), funcLib, dialogLib, context); assertTrue(f instanceof AbsFunction); f = FunctionFactory.parse(new ConfigThingy("SIGN", "\"5\""), funcLib, dialogLib, context); assertTrue(f instanceof SignFunction); f = FunctionFactory.parse(new ConfigThingy("LT", "\"5\" \"2\""), funcLib, dialogLib, context); assertTrue(f instanceof NumberCompareFunction); f = FunctionFactory.parse(new ConfigThingy("LE", "\"5\" \"2\""), funcLib, dialogLib, context); assertTrue(f instanceof NumberCompareFunction); f = FunctionFactory.parse(new ConfigThingy("GT", "\"5\" \"2\""), funcLib, dialogLib, context); assertTrue(f instanceof NumberCompareFunction); f = FunctionFactory.parse(new ConfigThingy("GE", "\"5\" \"2\""), funcLib, dialogLib, context); assertTrue(f instanceof NumberCompareFunction); f = FunctionFactory.parse(new ConfigThingy("NUMCMP", "\"5\" \"2\""), funcLib, dialogLib, context); assertTrue(f instanceof NumberCompareFunction); f = FunctionFactory.parse(new ConfigThingy("STRCMP", "\"abc\" \"def\""), funcLib, dialogLib, context); assertTrue(f instanceof StrCmpFunction); f = FunctionFactory.parse(new ConfigThingy("ISERROR", "\"test\""), funcLib, dialogLib, context); assertTrue(f instanceof IsErrorFunction); f = FunctionFactory.parse(new ConfigThingy("ISERRORSTRING", "\"test\""), funcLib, dialogLib, context); assertTrue(f instanceof IsErrorFunction); assertThrows(ConfigurationErrorException.class, () -> FunctionFactory.parse(new ConfigThingy("", "\"true\""), funcLib, dialogLib, context)); assertThrows(ConfigurationErrorException.class, () -> FunctionFactory.parse(new ConfigThingy("unknown", "\"true\""), funcLib, dialogLib, context)); }
public static Function parse(ConfigThingy conf, FunctionLibrary funcLib, DialogLibrary dialogLib, Map<Object, Object> context) { String name = conf.getName(); if (conf.count() == 0) return new StringLiteralFunction(name); if (name.equals("AND")) { return new AndFunction(conf, funcLib, dialogLib, context); } else if (name.equals("NOT")) { return new NotFunction(conf, funcLib, dialogLib, context); } else if (name.equals("OR")) { return new OrFunction(conf, funcLib, dialogLib, context); } else if (name.equals("VALUE")) { return parseVALUE(conf, funcLib, dialogLib, context); } else if (name.equals("MATCH")) { return parseMATCH(conf, funcLib, dialogLib, context); } else if (name.equals("REPLACE")) { return parseREPLACE(conf, funcLib, dialogLib, context); } else if (name.equals("SPLIT")) { return parseSPLIT(conf, funcLib, dialogLib, context); } else if (name.equals("IF")) { return parseIF(conf, funcLib, dialogLib, context); } else if (name.equals("EXTERN")) { return new ExternalFunctionFunction(conf); } else if (name.equals("DIALOG")) { return parseDIALOG(conf, dialogLib, context); } else if (name.equals("BIND")) { return parseBIND(conf, funcLib, dialogLib, context); } else if (name.equals("SELECT")) { return new SelectFunction(conf, funcLib, dialogLib, context); } else if (name.equals("CAT") || name.equals("THEN") || name.equals("ELSE")) { return new CatFunction(conf, funcLib, dialogLib, context); } else if (name.equals("LENGTH")) { return new LengthFunction(conf, funcLib, dialogLib, context); } else if (name.equals("FORMAT") || name.equals("DIVIDE")) { return parseDIVIDE(conf, funcLib, dialogLib, context); } else if (name.equals("MINUS")) { return new MinusFunction(conf, funcLib, dialogLib, context); } else if (name.equals("SUM")) { return new SumFunction(conf, funcLib, dialogLib, context); } else if (name.equals("DIFF")) { return new DiffFunction(conf, funcLib, dialogLib, context); } else if (name.equals("PRODUCT")) { return new ProductFunction(conf, funcLib, dialogLib, context); } else if (name.equals("ABS")) { return new AbsFunction(conf, funcLib, dialogLib, context); } else if (name.equals("SIGN")) { return new SignFunction(conf, funcLib, dialogLib, context); } else if (name.equals("LT")) { return new NumberCompareFunction(0, 1, "true", conf, funcLib, dialogLib, context); } else if (name.equals("LE")) { return new NumberCompareFunction(1, 1, "true", conf, funcLib, dialogLib, context); } else if (name.equals("GT")) { return new NumberCompareFunction(0, -1, "true", conf, funcLib, dialogLib, context); } else if (name.equals("GE")) { return new NumberCompareFunction(-1, -1, "true", conf, funcLib, dialogLib, context); } else if (name.equals("NUMCMP")) { return new NumberCompareFunction(Integer.MAX_VALUE, Integer.MAX_VALUE, null, conf, funcLib, dialogLib, context); } else if (name.equals("STRCMP")) { return new StrCmpFunction(conf, funcLib, dialogLib, context); } else if (name.equals("ISERROR")) { return new IsErrorFunction(true, conf, funcLib, dialogLib, context); } else if (name.equals("ISERRORSTRING")) { return new IsErrorFunction(false, conf, funcLib, dialogLib, context); } if (name.length() == 0) { throw new ConfigurationErrorException( L.m("Öffnende Klammer ohne voranstehenden Funktionsnamen gefunden. ") + outputErrorPosition(conf)); } else { throw new ConfigurationErrorException(L.m( "\"%1\" ist keine unterstützte Grundfunktion. ", name) + outputErrorPosition(conf)); } }
FunctionFactory { public static Function parse(ConfigThingy conf, FunctionLibrary funcLib, DialogLibrary dialogLib, Map<Object, Object> context) { String name = conf.getName(); if (conf.count() == 0) return new StringLiteralFunction(name); if (name.equals("AND")) { return new AndFunction(conf, funcLib, dialogLib, context); } else if (name.equals("NOT")) { return new NotFunction(conf, funcLib, dialogLib, context); } else if (name.equals("OR")) { return new OrFunction(conf, funcLib, dialogLib, context); } else if (name.equals("VALUE")) { return parseVALUE(conf, funcLib, dialogLib, context); } else if (name.equals("MATCH")) { return parseMATCH(conf, funcLib, dialogLib, context); } else if (name.equals("REPLACE")) { return parseREPLACE(conf, funcLib, dialogLib, context); } else if (name.equals("SPLIT")) { return parseSPLIT(conf, funcLib, dialogLib, context); } else if (name.equals("IF")) { return parseIF(conf, funcLib, dialogLib, context); } else if (name.equals("EXTERN")) { return new ExternalFunctionFunction(conf); } else if (name.equals("DIALOG")) { return parseDIALOG(conf, dialogLib, context); } else if (name.equals("BIND")) { return parseBIND(conf, funcLib, dialogLib, context); } else if (name.equals("SELECT")) { return new SelectFunction(conf, funcLib, dialogLib, context); } else if (name.equals("CAT") || name.equals("THEN") || name.equals("ELSE")) { return new CatFunction(conf, funcLib, dialogLib, context); } else if (name.equals("LENGTH")) { return new LengthFunction(conf, funcLib, dialogLib, context); } else if (name.equals("FORMAT") || name.equals("DIVIDE")) { return parseDIVIDE(conf, funcLib, dialogLib, context); } else if (name.equals("MINUS")) { return new MinusFunction(conf, funcLib, dialogLib, context); } else if (name.equals("SUM")) { return new SumFunction(conf, funcLib, dialogLib, context); } else if (name.equals("DIFF")) { return new DiffFunction(conf, funcLib, dialogLib, context); } else if (name.equals("PRODUCT")) { return new ProductFunction(conf, funcLib, dialogLib, context); } else if (name.equals("ABS")) { return new AbsFunction(conf, funcLib, dialogLib, context); } else if (name.equals("SIGN")) { return new SignFunction(conf, funcLib, dialogLib, context); } else if (name.equals("LT")) { return new NumberCompareFunction(0, 1, "true", conf, funcLib, dialogLib, context); } else if (name.equals("LE")) { return new NumberCompareFunction(1, 1, "true", conf, funcLib, dialogLib, context); } else if (name.equals("GT")) { return new NumberCompareFunction(0, -1, "true", conf, funcLib, dialogLib, context); } else if (name.equals("GE")) { return new NumberCompareFunction(-1, -1, "true", conf, funcLib, dialogLib, context); } else if (name.equals("NUMCMP")) { return new NumberCompareFunction(Integer.MAX_VALUE, Integer.MAX_VALUE, null, conf, funcLib, dialogLib, context); } else if (name.equals("STRCMP")) { return new StrCmpFunction(conf, funcLib, dialogLib, context); } else if (name.equals("ISERROR")) { return new IsErrorFunction(true, conf, funcLib, dialogLib, context); } else if (name.equals("ISERRORSTRING")) { return new IsErrorFunction(false, conf, funcLib, dialogLib, context); } if (name.length() == 0) { throw new ConfigurationErrorException( L.m("Öffnende Klammer ohne voranstehenden Funktionsnamen gefunden. ") + outputErrorPosition(conf)); } else { throw new ConfigurationErrorException(L.m( "\"%1\" ist keine unterstützte Grundfunktion. ", name) + outputErrorPosition(conf)); } } }
FunctionFactory { public static Function parse(ConfigThingy conf, FunctionLibrary funcLib, DialogLibrary dialogLib, Map<Object, Object> context) { String name = conf.getName(); if (conf.count() == 0) return new StringLiteralFunction(name); if (name.equals("AND")) { return new AndFunction(conf, funcLib, dialogLib, context); } else if (name.equals("NOT")) { return new NotFunction(conf, funcLib, dialogLib, context); } else if (name.equals("OR")) { return new OrFunction(conf, funcLib, dialogLib, context); } else if (name.equals("VALUE")) { return parseVALUE(conf, funcLib, dialogLib, context); } else if (name.equals("MATCH")) { return parseMATCH(conf, funcLib, dialogLib, context); } else if (name.equals("REPLACE")) { return parseREPLACE(conf, funcLib, dialogLib, context); } else if (name.equals("SPLIT")) { return parseSPLIT(conf, funcLib, dialogLib, context); } else if (name.equals("IF")) { return parseIF(conf, funcLib, dialogLib, context); } else if (name.equals("EXTERN")) { return new ExternalFunctionFunction(conf); } else if (name.equals("DIALOG")) { return parseDIALOG(conf, dialogLib, context); } else if (name.equals("BIND")) { return parseBIND(conf, funcLib, dialogLib, context); } else if (name.equals("SELECT")) { return new SelectFunction(conf, funcLib, dialogLib, context); } else if (name.equals("CAT") || name.equals("THEN") || name.equals("ELSE")) { return new CatFunction(conf, funcLib, dialogLib, context); } else if (name.equals("LENGTH")) { return new LengthFunction(conf, funcLib, dialogLib, context); } else if (name.equals("FORMAT") || name.equals("DIVIDE")) { return parseDIVIDE(conf, funcLib, dialogLib, context); } else if (name.equals("MINUS")) { return new MinusFunction(conf, funcLib, dialogLib, context); } else if (name.equals("SUM")) { return new SumFunction(conf, funcLib, dialogLib, context); } else if (name.equals("DIFF")) { return new DiffFunction(conf, funcLib, dialogLib, context); } else if (name.equals("PRODUCT")) { return new ProductFunction(conf, funcLib, dialogLib, context); } else if (name.equals("ABS")) { return new AbsFunction(conf, funcLib, dialogLib, context); } else if (name.equals("SIGN")) { return new SignFunction(conf, funcLib, dialogLib, context); } else if (name.equals("LT")) { return new NumberCompareFunction(0, 1, "true", conf, funcLib, dialogLib, context); } else if (name.equals("LE")) { return new NumberCompareFunction(1, 1, "true", conf, funcLib, dialogLib, context); } else if (name.equals("GT")) { return new NumberCompareFunction(0, -1, "true", conf, funcLib, dialogLib, context); } else if (name.equals("GE")) { return new NumberCompareFunction(-1, -1, "true", conf, funcLib, dialogLib, context); } else if (name.equals("NUMCMP")) { return new NumberCompareFunction(Integer.MAX_VALUE, Integer.MAX_VALUE, null, conf, funcLib, dialogLib, context); } else if (name.equals("STRCMP")) { return new StrCmpFunction(conf, funcLib, dialogLib, context); } else if (name.equals("ISERROR")) { return new IsErrorFunction(true, conf, funcLib, dialogLib, context); } else if (name.equals("ISERRORSTRING")) { return new IsErrorFunction(false, conf, funcLib, dialogLib, context); } if (name.length() == 0) { throw new ConfigurationErrorException( L.m("Öffnende Klammer ohne voranstehenden Funktionsnamen gefunden. ") + outputErrorPosition(conf)); } else { throw new ConfigurationErrorException(L.m( "\"%1\" ist keine unterstützte Grundfunktion. ", name) + outputErrorPosition(conf)); } } private  FunctionFactory(); }
FunctionFactory { public static Function parse(ConfigThingy conf, FunctionLibrary funcLib, DialogLibrary dialogLib, Map<Object, Object> context) { String name = conf.getName(); if (conf.count() == 0) return new StringLiteralFunction(name); if (name.equals("AND")) { return new AndFunction(conf, funcLib, dialogLib, context); } else if (name.equals("NOT")) { return new NotFunction(conf, funcLib, dialogLib, context); } else if (name.equals("OR")) { return new OrFunction(conf, funcLib, dialogLib, context); } else if (name.equals("VALUE")) { return parseVALUE(conf, funcLib, dialogLib, context); } else if (name.equals("MATCH")) { return parseMATCH(conf, funcLib, dialogLib, context); } else if (name.equals("REPLACE")) { return parseREPLACE(conf, funcLib, dialogLib, context); } else if (name.equals("SPLIT")) { return parseSPLIT(conf, funcLib, dialogLib, context); } else if (name.equals("IF")) { return parseIF(conf, funcLib, dialogLib, context); } else if (name.equals("EXTERN")) { return new ExternalFunctionFunction(conf); } else if (name.equals("DIALOG")) { return parseDIALOG(conf, dialogLib, context); } else if (name.equals("BIND")) { return parseBIND(conf, funcLib, dialogLib, context); } else if (name.equals("SELECT")) { return new SelectFunction(conf, funcLib, dialogLib, context); } else if (name.equals("CAT") || name.equals("THEN") || name.equals("ELSE")) { return new CatFunction(conf, funcLib, dialogLib, context); } else if (name.equals("LENGTH")) { return new LengthFunction(conf, funcLib, dialogLib, context); } else if (name.equals("FORMAT") || name.equals("DIVIDE")) { return parseDIVIDE(conf, funcLib, dialogLib, context); } else if (name.equals("MINUS")) { return new MinusFunction(conf, funcLib, dialogLib, context); } else if (name.equals("SUM")) { return new SumFunction(conf, funcLib, dialogLib, context); } else if (name.equals("DIFF")) { return new DiffFunction(conf, funcLib, dialogLib, context); } else if (name.equals("PRODUCT")) { return new ProductFunction(conf, funcLib, dialogLib, context); } else if (name.equals("ABS")) { return new AbsFunction(conf, funcLib, dialogLib, context); } else if (name.equals("SIGN")) { return new SignFunction(conf, funcLib, dialogLib, context); } else if (name.equals("LT")) { return new NumberCompareFunction(0, 1, "true", conf, funcLib, dialogLib, context); } else if (name.equals("LE")) { return new NumberCompareFunction(1, 1, "true", conf, funcLib, dialogLib, context); } else if (name.equals("GT")) { return new NumberCompareFunction(0, -1, "true", conf, funcLib, dialogLib, context); } else if (name.equals("GE")) { return new NumberCompareFunction(-1, -1, "true", conf, funcLib, dialogLib, context); } else if (name.equals("NUMCMP")) { return new NumberCompareFunction(Integer.MAX_VALUE, Integer.MAX_VALUE, null, conf, funcLib, dialogLib, context); } else if (name.equals("STRCMP")) { return new StrCmpFunction(conf, funcLib, dialogLib, context); } else if (name.equals("ISERROR")) { return new IsErrorFunction(true, conf, funcLib, dialogLib, context); } else if (name.equals("ISERRORSTRING")) { return new IsErrorFunction(false, conf, funcLib, dialogLib, context); } if (name.length() == 0) { throw new ConfigurationErrorException( L.m("Öffnende Klammer ohne voranstehenden Funktionsnamen gefunden. ") + outputErrorPosition(conf)); } else { throw new ConfigurationErrorException(L.m( "\"%1\" ist keine unterstützte Grundfunktion. ", name) + outputErrorPosition(conf)); } } private  FunctionFactory(); static Function alwaysTrueFunction(); static Function parseGrandchildren(ConfigThingy conf,
      FunctionLibrary funcLib, DialogLibrary dialogLib, Map<Object, Object> context); static Function parseChildren(ConfigThingy conf, FunctionLibrary funcLib,
      DialogLibrary dialogLib, Map<Object, Object> context); static Function parse(ConfigThingy conf, FunctionLibrary funcLib,
      DialogLibrary dialogLib, Map<Object, Object> context); static FunctionLibrary parseFunctions(ConfigThingy conf,
      DialogLibrary dialogLib, Map<Object, Object> context, FunctionLibrary baselib); static FunctionLibrary parseFunctions(FunctionLibrary funcs,
      ConfigThingy conf, String section, DialogLibrary dialogLib,
      Map<Object, Object> context); static Map<String, Function> parseTrafos(ConfigThingy trafoConf, String nodeName, FunctionLibrary funcLib, DialogLibrary dialogLib,
      Map<Object, Object> context); }
FunctionFactory { public static Function parse(ConfigThingy conf, FunctionLibrary funcLib, DialogLibrary dialogLib, Map<Object, Object> context) { String name = conf.getName(); if (conf.count() == 0) return new StringLiteralFunction(name); if (name.equals("AND")) { return new AndFunction(conf, funcLib, dialogLib, context); } else if (name.equals("NOT")) { return new NotFunction(conf, funcLib, dialogLib, context); } else if (name.equals("OR")) { return new OrFunction(conf, funcLib, dialogLib, context); } else if (name.equals("VALUE")) { return parseVALUE(conf, funcLib, dialogLib, context); } else if (name.equals("MATCH")) { return parseMATCH(conf, funcLib, dialogLib, context); } else if (name.equals("REPLACE")) { return parseREPLACE(conf, funcLib, dialogLib, context); } else if (name.equals("SPLIT")) { return parseSPLIT(conf, funcLib, dialogLib, context); } else if (name.equals("IF")) { return parseIF(conf, funcLib, dialogLib, context); } else if (name.equals("EXTERN")) { return new ExternalFunctionFunction(conf); } else if (name.equals("DIALOG")) { return parseDIALOG(conf, dialogLib, context); } else if (name.equals("BIND")) { return parseBIND(conf, funcLib, dialogLib, context); } else if (name.equals("SELECT")) { return new SelectFunction(conf, funcLib, dialogLib, context); } else if (name.equals("CAT") || name.equals("THEN") || name.equals("ELSE")) { return new CatFunction(conf, funcLib, dialogLib, context); } else if (name.equals("LENGTH")) { return new LengthFunction(conf, funcLib, dialogLib, context); } else if (name.equals("FORMAT") || name.equals("DIVIDE")) { return parseDIVIDE(conf, funcLib, dialogLib, context); } else if (name.equals("MINUS")) { return new MinusFunction(conf, funcLib, dialogLib, context); } else if (name.equals("SUM")) { return new SumFunction(conf, funcLib, dialogLib, context); } else if (name.equals("DIFF")) { return new DiffFunction(conf, funcLib, dialogLib, context); } else if (name.equals("PRODUCT")) { return new ProductFunction(conf, funcLib, dialogLib, context); } else if (name.equals("ABS")) { return new AbsFunction(conf, funcLib, dialogLib, context); } else if (name.equals("SIGN")) { return new SignFunction(conf, funcLib, dialogLib, context); } else if (name.equals("LT")) { return new NumberCompareFunction(0, 1, "true", conf, funcLib, dialogLib, context); } else if (name.equals("LE")) { return new NumberCompareFunction(1, 1, "true", conf, funcLib, dialogLib, context); } else if (name.equals("GT")) { return new NumberCompareFunction(0, -1, "true", conf, funcLib, dialogLib, context); } else if (name.equals("GE")) { return new NumberCompareFunction(-1, -1, "true", conf, funcLib, dialogLib, context); } else if (name.equals("NUMCMP")) { return new NumberCompareFunction(Integer.MAX_VALUE, Integer.MAX_VALUE, null, conf, funcLib, dialogLib, context); } else if (name.equals("STRCMP")) { return new StrCmpFunction(conf, funcLib, dialogLib, context); } else if (name.equals("ISERROR")) { return new IsErrorFunction(true, conf, funcLib, dialogLib, context); } else if (name.equals("ISERRORSTRING")) { return new IsErrorFunction(false, conf, funcLib, dialogLib, context); } if (name.length() == 0) { throw new ConfigurationErrorException( L.m("Öffnende Klammer ohne voranstehenden Funktionsnamen gefunden. ") + outputErrorPosition(conf)); } else { throw new ConfigurationErrorException(L.m( "\"%1\" ist keine unterstützte Grundfunktion. ", name) + outputErrorPosition(conf)); } } private  FunctionFactory(); static Function alwaysTrueFunction(); static Function parseGrandchildren(ConfigThingy conf,
      FunctionLibrary funcLib, DialogLibrary dialogLib, Map<Object, Object> context); static Function parseChildren(ConfigThingy conf, FunctionLibrary funcLib,
      DialogLibrary dialogLib, Map<Object, Object> context); static Function parse(ConfigThingy conf, FunctionLibrary funcLib,
      DialogLibrary dialogLib, Map<Object, Object> context); static FunctionLibrary parseFunctions(ConfigThingy conf,
      DialogLibrary dialogLib, Map<Object, Object> context, FunctionLibrary baselib); static FunctionLibrary parseFunctions(FunctionLibrary funcs,
      ConfigThingy conf, String section, DialogLibrary dialogLib,
      Map<Object, Object> context); static Map<String, Function> parseTrafos(ConfigThingy trafoConf, String nodeName, FunctionLibrary funcLib, DialogLibrary dialogLib,
      Map<Object, Object> context);  }