package com.sample;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Iterator;
import java.util.Properties;

import org.drools.RuleBase;
import org.drools.WorkingMemory;
import org.drools.agent.RuleAgent;


public class DroolsTest5 {

	public static void main(String[] args) {
		Properties props = new Properties();
		props.setProperty("file", "/home/przemek/programs/bea/user_projects/workspaces/default/DroolsSandbox1/src/main/rules/Sample.drl");
		props.setProperty("poll", "5");
		
		RuleAgent ruleAgent = RuleAgent.newRuleAgent(props);
		
		Fact fact1 = new Fact("a","b");
		
		RuleBase ruleBase = ruleAgent.getRuleBase();
		WorkingMemory baseWm = ruleBase.newStatefulSession(false);
		baseWm.insert(fact1);
		
		Iterator iter1 = baseWm.iterateObjects();

		while (iter1.hasNext()) {
			System.out.println(iter1.next());
		}
		System.out.println("=====");
		
		try {
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			ObjectOutputStream oos = new ObjectOutputStream(baos);
			oos.writeObject(baseWm);
			oos.close();
			byte[] buf = baos.toByteArray();
			ByteArrayInputStream bais = new ByteArrayInputStream(buf);
			
			ObjectInputStream ois = new ObjectInputStream(bais);
			WorkingMemory wm = (WorkingMemory) ois.readObject();

			Iterator iter2 = wm.iterateObjects();

			while (iter2.hasNext()) {
				System.out.println(iter2.next());
			}
			System.out.println("=====");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static class Fact implements Serializable {
		
		private static final long serialVersionUID = 6634041550577507566L;

		String name;
		
		String id;

		public Fact(String _name, String _id) {
			name = _name;
			id = _id;
		}

		public String getId() {
			return id;
		}

		public String getName() {
			return name;
		}
		
		@Override
		public String toString() {
			return "Name: " + name + ", Id: " + id;
		}
	}
}
