Package com.dtrules.samples.chipeligibility.app

Source Code of com.dtrules.samples.chipeligibility.app.EvaluateJobDTRules

package com.dtrules.samples.chipeligibility.app;

import java.io.FileOutputStream;
import java.io.OutputStream;

import com.dtrules.entity.IREntity;
import com.dtrules.infrastructure.RulesException;
import com.dtrules.interpreter.IRObject;
import com.dtrules.interpreter.RArray;
import com.dtrules.mapping.DataMap;
import com.dtrules.mapping.Mapping;
import com.dtrules.samples.chipeligibility.app.dataobjects.Case;
import com.dtrules.samples.chipeligibility.app.dataobjects.Client;
import com.dtrules.samples.chipeligibility.app.dataobjects.Income;
import com.dtrules.samples.chipeligibility.app.dataobjects.Job;
import com.dtrules.samples.chipeligibility.app.dataobjects.Relationship;
import com.dtrules.samples.chipeligibility.app.dataobjects.Result;
import com.dtrules.session.DTState;
import com.dtrules.session.IRSession;


public class EvaluateJobDTRules implements EvaluateJob {
 
  @Override
  public String getName() {
    return "dtrules";
  }
 
  String getJobName(Job job){
    int id = job.getId();
    String cnt = ""+id;
        for(;id<100000;id*=10)cnt = "0"+cnt;
        return "Job_"+cnt;
  }
 
  public String evaluate(int threadnum, ChipApp app, Job job) {
           
        try {
             IRSession      session    = app.rs.newSession();
            
             if(app.trace && (job.getId()%app.save == 0) ){
               OutputStream out = new FileOutputStream(
                   app.getOutputDirectory()+getJobName(job)+"_trace.xml");
               session.getState().setOutput(out, System.out);
               session.getState().setState(DTState.TRACE | DTState.DEBUG);
               session.getState().traceStart();
             }
            
             // Map the data from the job into the Rules Engine
             
             // First create a data map.
             Mapping     mapping  = session.getMapping();
           DataMap   datamap  = session.getDataMap(mapping,null);
          
           datamap.opentag(job,"job");
           datamap.readDO(job, "job");
          
             Case c = job.getCase();
             datamap.opentag(c,"case");
             datamap.readDO(c,"case");
               for(Client client : c.getClients()){
                 datamap.opentag(client,"client");
                 datamap.readDO(client,"client");
                   for(Income income : client.getIncomes()){
                    
                       datamap.readDO(income,"income");
                      
                   }
                 datamap.closetag();
               }
               for(Relationship r : c.getRelationships()){
                 datamap.opentag("relationship");
                   datamap.printdata("type", r.getType());
                   datamap.readDO(r.getSource(), "source");
                   datamap.readDO(r.getTarget(), "target");
                 datamap.closetag();
               }
             datamap.closetag();
            
           datamap.closetag();
          
             int    id  = job.getId();
            
             if(app.save >0 && id % app.save == 0){
               String cnt = ""+id;
                 for(;id<100000;id*=10)cnt = "0"+cnt;
                 try {
                   datamap.print(new FileOutputStream(app.getOutputDirectory()+"job_"+cnt+".xml"));
                 } catch (Exception e) {
                   System.out.println("Couldn't write to '"+app.getOutputDirectory()+"job_"+cnt+".xml'");
                 }
             }
            
           mapping.loadData(session, datamap);
          
           // Once the data is loaded, execute the rules.
             session.execute(app.getDecisionTableName());
        
             if(app.trace && (job.getId()%app.save == 0)){
                 session.getState().traceEnd();
             }
            
            
             printReport(threadnum, app, session);
          
           
         } catch ( Exception ex ) {
             System.out.print("<-ERR  ");
             ex.printStackTrace();
             return "\nAn Error occurred while running the example:\n"+ex+"\n";
         }
         return null;
     }
   
    public void printReport(int threadnum, ChipApp app, IRSession session) throws RulesException {
        IREntity   job     = session.getState().find("job.job").rEntityValue();
        RArray     results = job.get("job.results").rArrayValue();
        String      jobId   = job.get("id").stringValue();
        RArray      clients = session.getState().find("case.clients").rArrayValue();
     
        if(results.size()==0 && app.console){
          System.out.println("No results for job "+jobId);
        }
       
       
        int approved   = 0;
        int denied    = 0;
        for(IRObject r :results){
            IREntity result = r.rEntityValue();
           
            IREntity   client     = result.get("client").rEntityValue();
            String     clinetId   = client.get("id").stringValue();
            String     answer      = "";
            if(result.get("eligible").booleanValue()){
                answer = "Approved";
                approved++;
                app.getApprovedClients().add(Integer.parseInt(clinetId));
            }else{
              answer = "Denied";
              denied++;
                app.getDeniedClients().add(Integer.parseInt(clinetId));
            }
           
            if(app.console){
              String    notes    = "";
              RArray    ns      = result.get("notes").rArrayValue();
              for(IRObject n : ns){
                notes += "   "+n.stringValue() +"\n";
              }
              System.out.println();
              System.out.println("Job "+jobId+" Client "+clinetId+" was "+answer+"\n"+notes);
            }
           
            RArray notes = result.get("notes").rArrayValue();
            synchronized (app) {
                for(IRObject n : notes){
                    String note = n.stringValue();
                    Integer v = app.results.get(note);
                    if(v == null) v = 0;
                    app.results.put(note,v+1);
                }
            }
        }
       
        app.update(threadnum, clients.size(), approved, denied);
       
    }
}
TOP

Related Classes of com.dtrules.samples.chipeligibility.app.EvaluateJobDTRules

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.