Intérprete de conjunto de reglas

CER contiene un intérprete que puede ejecutar conjuntos de reglas definidos dinámicamente.

A continuación se proporciona código de ejemplo que utiliza el intérprete de conjunto de reglas de CER para ejecutar reglas de un HelloWorldRuleSet.

Figura 1. Ejecución de reglas con el intérprete de conjunto de reglas de CER
package curam.creole.example;

import junit.framework.TestCase;
import curam.creole.execution.RuleObject;
import curam.creole.execution.session.InterpretedRuleObjectFactory;
import curam.creole.execution.session.RecalculationsProhibited;
import curam.creole.execution.session.Session;
import curam.creole.execution.session.Session_Factory;
import curam.creole.parser.RuleSetXmlReader;
import curam.creole.ruleitem.RuleSet;
import curam.creole.storage.inmemory.InMemoryDataStorage;

public class TestHelloWorldInterpreted extends TestCase {

  /**
   * Ejecuta la clase como aplicación Java autónoma.
   */
  public static void main(final String[] args) {

    final TestHelloWorldInterpreted testHelloWorld =
        new TestHelloWorldInterpreted();
    testHelloWorld.testUsingInterpreter();
  }

  /**
   * Lee HelloWorldRuleSet del archivo de origen XML.
   */
  private RuleSet getRuleSet() {

    /* La vía de acceso relativa al archivo de origen de conjunto de reglas */
    final String ruleSetRelativePath = "./rules/HelloWorld.xml";

    /* leer en el origen de conjunto de reglas */
    final RuleSetXmlReader ruleSetXmlReader =
        new RuleSetXmlReader(ruleSetRelativePath);

    /* volcar los problemas */
    ruleSetXmlReader.validationProblemCollection().printProblems(
        System.err);

    /* fallar si hay errores en el conjunto de reglas */
    assertTrue(!ruleSetXmlReader.validationProblemCollection()
        .containsErrors());

    /* devolver el conjunto de reglas del lector */
    return ruleSetXmlReader.ruleSet();
  }

  /**
   * Un caso de prueba simple, utilizando el intérprete de conjunto de reglas CER
   * totalmente dinámico.
   */
  public void testUsingInterpreter() {

    /* leer en el conjunto de reglas */
    final RuleSet ruleSet = getRuleSet();

    /* iniciar una sesión que crea objetos de regla interpretados */
    final Session session =
        Session_Factory.getFactory().newInstance(
            new RecalculationsProhibited(),
            new InMemoryDataStorage(
                new InterpretedRuleObjectFactory()));

    /* crear una instancia de objeto de regla de la clase de regla necesaria */
    final RuleObject helloWorld =
        session.createRuleObject(ruleSet.findClass("HelloWorld"));

    /*
     * Acceder al atributo de regla de saludo ("greeting") en el objeto de regla
     * el resultado se debe convertir al tipo esperado (String)
     */
    final String greeting =
        (String) helloWorld.getAttributeValue("greeting")
            .getValue();

    System.out.println(greeting);
    assertEquals("Hello, world!", greeting);
  }

}

Ahora puede ejecutar esta clase de ejemplo como una aplicación Java autónoma (es decir, a través de su método principal) o como una prueba JUnit. Estas dos maneras de ejecutar esta clase se proporcionan sólo por comodidad, de modo que cuando escriba su propio código para ejecutar los conjuntos de reglas, elija el que mejor se adapte a sus necesidades.

Ahora vamos a profundizar en los detalles de este código. El método de prueba testUsingInterpreter realiza estas funciones clave: