Java API

This reference covers the core Java classes for integrating DTRules into your applications.

Core Classes

RulesDirectory

Entry point for loading rule configurations.

import com.dtrules.session.RulesDirectory;

// Load rules from DTRules.xml configuration
RulesDirectory rd = new RulesDirectory(path, "DTRules.xml");

// Get a rule set by name
RuleSet rs = rd.getRuleSet("MyRuleSet");

RuleSet

Represents a compiled set of rules.

import com.dtrules.session.RuleSet;

// Create a new session for execution
IRSession session = rs.newSession();

IRSession

The execution context for rules.

import com.dtrules.session.IRSession;

// Load input data
session.loadXml(inputStream, "mapping");

// Execute a decision table
session.execute("DecisionTableName");

// Execute with tracing
session.execute("DecisionTableName", true);

// Get entity state
EntityState state = session.getState();

// Print entity report
session.printEntityReport(outputStream, state, "results");

Data Loading

XML Data

// Load from file
FileInputStream input = new FileInputStream("data.xml");
session.loadXml(input, "mapping");
input.close();

// Load from string
String xmlData = "<data>...</data>";
session.loadXml(new ByteArrayInputStream(xmlData.getBytes()), "mapping");

Programmatic Data

// Get entity state
EntityState state = session.getState();

// Create an entity
IREntity person = state.createEntity("Person");

// Set attributes
person.set("name", "John Doe");
person.set("age", 35);
person.set("income", 50000.0);

// Add to an array
IREntity household = state.find("household");
household.addToArray("members", person);

Excel Compilation

Excel2XML

Compiles Excel decision tables to XML.

import com.dtrules.compiler.Excel2XML;

String path = System.getProperty("user.dir");

// Simple compilation
Excel2XML.compile(path, "DTRules.xml", "MyRuleSet");

// Compilation with options
Excel2XML compiler = new Excel2XML(path, "DTRules.xml", "MyRuleSet");
compiler.compileRuleSet(
    path,
    "DTRules.xml",
    "MyRuleSet",
    "repository",  // output directory
    maps,          // mapping configuration
    5              // max columns per table
);

Entity Access

// Get entity by name
IREntity app = state.find("application");

// Get attribute value
boolean eligible = (Boolean) app.get("eligible");
String status = (String) app.get("status");
double amount = (Double) app.get("benefit_amount");

// Get array attribute
List<IREntity> members = (List<IREntity>) app.get("members");

// Navigate relationships
IREntity household = (IREntity) app.get("household");
IREntity head = (IREntity) household.get("head");
String headName = (String) head.get("name");

Tracing and Debugging

// Enable tracing
session.setTrace(true);

// Execute with trace
session.execute("Main");

// Get trace output
String trace = session.getTraceOutput();
System.out.println(trace);

Example: Complete Integration

public class EligibilityService {

    private final RuleSet ruleSet;

    public EligibilityService(String configPath) throws Exception {
        RulesDirectory rd = new RulesDirectory(configPath, "DTRules.xml");
        this.ruleSet = rd.getRuleSet("Eligibility");
    }

    public EligibilityResult determine(Application app) throws Exception {
        // Create session
        IRSession session = ruleSet.newSession();

        // Load application data
        EntityState state = session.getState();
        IREntity appEntity = state.find("application");

        // Map application to entity
        mapApplicationToEntity(app, appEntity);

        // Execute rules
        session.execute("Determine_Eligibility");

        // Extract results
        boolean eligible = (Boolean) appEntity.get("eligible");
        String reason = (String) appEntity.get("reason_code");
        double benefit = (Double) appEntity.get("benefit_amount");

        return new EligibilityResult(eligible, reason, benefit);
    }

    private void mapApplicationToEntity(Application app, IREntity entity) {
        entity.set("applicant_name", app.getName());
        entity.set("applicant_age", app.getAge());
        entity.set("household_income", app.getHouseholdIncome());
        // ... additional mappings
    }
}

Maven Dependency

<dependency>
    <groupId>com.dtrules</groupId>
    <artifactId>dtrules-engine</artifactId>
    <version>1.0.0</version>
</dependency>

Next Steps