package net.sf.jasperreports.engine.util;

import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import net.sf.jasperreports.engine.JRException;

public class JRSaver {
  public static void saveObject(Object obj, String fileName) throws JRException {
    saveObject(obj, new File(fileName));
  }
  
  public static void saveObject(Object obj, File file) throws JRException {
    FileOutputStream fos = null;
    ObjectOutputStream oos = null;
    try {
      fos = new FileOutputStream(file);
      BufferedOutputStream bos = new BufferedOutputStream(fos);
      oos = new ObjectOutputStream(bos);
      oos.writeObject(obj);
      oos.flush();
      bos.flush();
      fos.flush();
    } catch (IOException e) {
      throw new JRException("Error saving file : " + file, e);
    } finally {
      if (oos != null)
        try {
          oos.close();
        } catch (IOException e) {} 
      if (fos != null)
        try {
          fos.close();
        } catch (IOException e) {} 
    } 
  }
  
  public static void saveObject(Object obj, OutputStream os) throws JRException {
    ObjectOutputStream oos = null;
    try {
      oos = new ObjectOutputStream(os);
      oos.writeObject(obj);
      oos.flush();
    } catch (IOException e) {
      throw new JRException("Error saving object to OutputStream", e);
    } finally {
      if (oos != null)
        try {
          oos.close();
        } catch (IOException e) {} 
    } 
  }
  
  public static void saveClassSource(String source, File file) throws JRException {
    FileWriter fwriter = null;
    try {
      fwriter = new FileWriter(file);
      BufferedWriter bufferedWriter = new BufferedWriter(fwriter);
      bufferedWriter.write(source);
      bufferedWriter.flush();
      fwriter.flush();
    } catch (IOException e) {
      throw new JRException("Error saving expressions class file : " + file, e);
    } finally {
      if (fwriter != null)
        try {
          fwriter.close();
        } catch (IOException e) {} 
    } 
  }
}
