Esse lance de trabalhar com DSL’s e JBoss Rules é viciante, você vai criando as coisas e a medida que as coisas vão ganhando forma, você percebe uma necessidade nova, foi assim o que aconteceu quando o Raphael “MPC” me explicou a necessidade do cliente dele, pois ele precisava ter expressões que usassem tanto atributos do POJO de regras, como variáveis dinâmicas.
A classe que resolveu nossos problemas usa basicamente expressões regulares (Java RegExp), da mesma forma que podemos usar para IDE’s syntax hightlighters e code-completions, usamos um para RegularExpressionTokenizer para filtrar de um texto o que é um atributo e uma variável.
Usando para convenção que *atributo* está entre (*), e uma variável está entre <>, então vou deixar aqui algumas dicas caso algum leitor queira fazer algo similar:
[java]
/**
* @author Edgar Silva (edgar@summ-tech.com)
* @since 1.0
*/
public class RulesParser {
/**
* RegExp Java for Attributes *atr*
*/
public static final
String patternForAttributes = “\\*(?:.|[\\n\\r])*?\\*”;
/**
* RegExp Java for Vars
*/
public static final
String patternForDynamicVariables = “\\< (?:.|[\\n\\r])*?\\>“;
[/java]
Para caputarar as variáveis de uma expressão:
[java]
public List getVariablesFromExpression(String anExpression) {
// Create the tokenizer
Iterator tokenizer = new RegularExpressionTokenizer(anExpression,
patternForDynamicVariables, false);
List result = new ArrayList();
// Get the tokens (and delimiters)
for (; tokenizer.hasNext();) {
String varFound = (String) tokenizer.next();
result.add(varFound.substring(1, varFound.length() - 1));
}
return result;
}
[/java]
Testando da forma mais simples de toda, a boa velha main():
[java]
public static void main(String[] args) {
List vars = new RulesParser()
.getVariablesFromExpression(”E ai como vai ser “);
for (String string : vars) {
System.out.println(string);
}
}
[/java]
Acredito que isso possa ajudá-lo de alguma forma.
[]’s


Entries (RSS)
March 6th, 2007 at 12:25 pm
Estou realmente vendo que você está empolgado com o JBoss Rules! Estou gostando dos artigos que você está escrevendo. Até então só tinha ouvido falar nele, mas agora vou dar uma olhada para ver se compreendo melhor sua animação! Parabéns e continue escrevendo/dando dicas sobre ele!