import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.util.EnumSet;

import com.caucho.hessian.io.Hessian2Input;
import com.caucho.hessian.io.Hessian2Output;

/**
 * @author zehic
 *
 */
public class SerializationHessTest implements Serializable{
	public final static long serialVersionUID = -1L;
	
	enum DAYS {MON, TUE, WED, THU, FRI, SAT, SUN}
	
	public static class WeekPlan implements Serializable{
		private final  EnumSet<DAYS> allWorkDays;
		
		private final DAYS shoppingDay;
		
		public WeekPlan(EnumSet<DAYS> allWorkDays, DAYS shoppingDay) {
			this.allWorkDays = allWorkDays;
			this.shoppingDay = shoppingDay;
		}
		
		@Override
		public String toString() {
			StringBuffer sb = new StringBuffer("WeekPlan[ ");
			sb.append("allWorkDays=[").append(this.allWorkDays.toString()).append("], ");
			sb.append("shoppingDay=").append(this.shoppingDay).append(" ]");
			return sb.toString();
		}
	}
	
	public static void main(String[] args) {
		EnumSet<DAYS> awd = EnumSet.of(DAYS.MON, DAYS.TUE, DAYS.WED, DAYS.THU, DAYS.FRI);
		DAYS sd = DAYS.TUE;
		
		WeekPlan wp = new WeekPlan(awd, sd);
		
		System.out.println("Object to be serialized: " + wp.toString());
		
		OutputStream os = null;
		InputStream is = null;
		try {
			os = new FileOutputStream("weekPlan.xml");
			Hessian2Output out = new Hessian2Output(os);
			out.writeObject(wp);
			out.flushBuffer();
			out.close();
			
			is = new FileInputStream("weekPlan.xml");
			Hessian2Input in = new Hessian2Input(is);
			Object obj = in.readObject(WeekPlan.class);
			System.out.println("Deserialized object: " + obj.toString());
			in.close();			
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			if(os!=null) try {os.close();}catch(Exception ignore){}
			if(is!=null) try {is.close();}catch(Exception ignore){}
		}
	}
}
