/**
* XpsTest.java
* Created On 2007, Oct 16, 2007 2:13:32 PM
* @author E. Rajasekar
*/
package app.astrosoft.xps.yoga.test;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.StatefulSession;
import org.drools.audit.WorkingMemoryFileLogger;
import org.drools.compiler.DroolsParserException;
import org.drools.compiler.PackageBuilder;
import org.drools.event.DebugAgendaEventListener;
import org.drools.event.DebugWorkingMemoryEventListener;
import org.drools.rule.Package;
import org.drools.rule.Rule;
import app.astrosoft.beans.PlanetCharacter;
import app.astrosoft.consts.Planet;
import app.astrosoft.consts.Varga;
import app.astrosoft.core.Horoscope;
import app.astrosoft.test.SampleHoroscopes;
import app.astrosoft.util.Timer;
import app.astrosoft.xps.XpsUtil;
import app.astrosoft.xps.beans.PlanetChart;
import app.astrosoft.xps.beans.YogaFacts;
import app.astrosoft.xps.yoga.YogaResults;
import static app.astrosoft.consts.Varga.*;
public class YogasTest {
private static String RULE_FILE = "YogaCombinations.dslr";
//private static String RULE_FILE = "astrosoft.drl";
private static String DSL_FILE = "YogaCombinations.dsl";
public static final void main(final String[] args) throws Exception {
final Package pkg = buildPackage();
final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
ruleBase.addPackage( pkg );
/*for (Rule r :pkg.getRules() ){
System.out.println(r.getLhs());
}*/
System.out.println("Raja -->" + findYogas(ruleBase, SampleHoroscopes.getMyHoroscope()));
System.out.println("Elango -->" + findYogas(ruleBase, SampleHoroscopes.getElangoHoroscope()));
System.out.println("Mani -->" + findYogas(ruleBase, SampleHoroscopes.getManiHoroscope()));
System.out.println("Muthu -->" + findYogas(ruleBase, SampleHoroscopes.getMuthuHoroscope()));
System.out.println("Suba -->" + findYogas(ruleBase, SampleHoroscopes.getSubaHoroscope()));
}
public static YogaResults findYogas(RuleBase ruleBase, Horoscope h){
Timer t = new Timer();
final StatefulSession session = ruleBase.newStatefulSession();
registerListener(session);
final WorkingMemoryFileLogger logger = new WorkingMemoryFileLogger( session );
logger.setFileName( "C:/Astrosoft/helloworld" );
loadFacts(h,session);
session.fireAllRules();
logger.writeToDisk();
YogaResults yogas = (YogaResults) session.getGlobal("yogas");
session.dispose();
t.print("FindYoga Execution time for " + h.getPersonName());
return yogas;
}
private static void loadFacts(Horoscope h, StatefulSession session) {
YogaResults yogas = new YogaResults();
session.setGlobal("yogas", yogas);
PlanetCharacter character = new PlanetCharacter(h.getPlanetaryInfo().getPlanetCharacter());
YogaFacts facts = new YogaFacts();
facts.setCharacter(character);
facts.setPowerfulPlanets(h.getShadBala().getStrengthPer());
session.setGlobal("$facts", facts);
//session.insert(yogas);
PlanetChart chart = new PlanetChart(Varga.Rasi, h.getPlanetaryInfo());
/*Map<Planet,Integer> m = new HashMap<Planet,Integer>();
m.put(Planet.Sun, 3);
m.put(Planet.Moon, 2);
m.put(Planet.Mars, 3);
session.insert(m);*/
session.insert(chart);
}
private static void registerListener(StatefulSession session) {
session.addEventListener( new DebugAgendaEventListener() );
session.addEventListener( new DebugWorkingMemoryEventListener() );
}
private static Package buildPackage() throws DroolsParserException, IOException {
final Reader rule = new InputStreamReader( XpsUtil.getRuleAsStream(RULE_FILE));
final Reader dsl = new InputStreamReader( XpsUtil.getRuleAsStream(DSL_FILE));
final PackageBuilder builder = new PackageBuilder();
//builder.addPackageFromDrl( rule );
builder.addPackageFromDrl( rule,dsl );
// Check the builder for errors
if ( builder.hasErrors() ) {
System.out.println( builder.getErrors().toString() );
throw new RuntimeException( "Compilation Errors in " + RULE_FILE);
}
return builder.getPackage();
}
}