package droolsRules.tests;

import java.io.File;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.io.Reader;
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.compiler.PackageBuilder;
import org.drools.compiler.PackageBuilderConfiguration;
import org.drools.rule.Package;
import org.drools.rule.builder.dialect.java.JavaDialectConfiguration;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

/**
 * This suite is the place to add Drools tests.
 * 
 * @author J. Michael Dean, M.D., M.B.A. (University of Utah)
 * Copyright 2005 - 2008.  All Rights Reserved.
 *
 */

@RunWith(Suite.class)
@SuiteClasses( { TestHypoglycemiaDetection.class })
public class AllDroolsRulesTests {
	public static RuleBase ruleBase;

	@BeforeClass
	public static void setUp() throws Exception {
		Reader source;
		PackageBuilderConfiguration pkgConfig = new PackageBuilderConfiguration(); //ERROR OCCURS HERE WHEN I USE MY MINIMAL DROOLS PLUGIN JAR
		JavaDialectConfiguration javaDialectConf = (JavaDialectConfiguration) pkgConfig.getDialectConfiguration("java");
		javaDialectConf.setCompiler(JavaDialectConfiguration.ECLIPSE);
		
		if (pkgConfig == null) {
			System.out.println("Error - null package configuration");
		} else {
			System.out.println("Package configuration is not null");
		}
		final PackageBuilder builder = new PackageBuilder(pkgConfig); // ERROR OCCURS HERE WHEN I USE DROOLS.ORG.ECLIPSE_4.0.3.JAR
		boolean exists = (new File("rules/GlucoseDroolRules00.drl")).exists();
		if (exists) {
			builder.addPackageFromDrl(new FileReader(
				"rules/GlucoseDroolRules00.drl"));
			System.out.println("Found the file!");
		} else {
			System.out.println("Cannot locate the file - will try as resource");
			source = new InputStreamReader(AllDroolsRulesTests.class
					.getResourceAsStream("GlucoseDroolRules00.drl"));
			if (source == null){
				System.out.println("Could not get input stream");
			} else {
				System.out.println("Opened the stream successfully");
			}
			builder.addPackageFromDrl(source);
		}
		if (builder.hasErrors()) {
			System.out.println(builder.getErrors().toString());
		}
		Package pkg = builder.getPackage();
		ruleBase = RuleBaseFactory.newRuleBase();
		ruleBase.addPackage(pkg);
	}

	@AfterClass
	public static void tearDown() throws Exception {
	}

	public static RuleBase getRuleBase() {
		return ruleBase;
	}
}
