package eu.dnetlib.efg1914.commons.utils;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

import eu.dnetlib.efg1914.commons.domain.XMLResource;
import eu.dnetlib.efg1914.commons.store.XMLStoreException;

public class Serializer<D extends XMLResource> {
	public byte[] Serialize(D obj) throws XMLStoreException {
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
		ObjectOutputStream objectOutputStream;
		try {
			objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
			objectOutputStream.writeObject(obj);
			objectOutputStream.close();
			return byteArrayOutputStream.toByteArray();
		} catch (IOException e1) {
			throw new XMLStoreException("Serialization failed", e1);
		}

	}

	public D DeSerialize(byte[] obj) throws XMLStoreException {

		try {
			ObjectInputStream objectInputStream = new ObjectInputStream(
					new ByteArrayInputStream(obj));
			D object = ((D) objectInputStream.readObject());
			return object;

		} catch (IOException e1) {
			throw new XMLStoreException("De Serialization failed", e1);
		} catch (ClassNotFoundException e) {
			throw new XMLStoreException("DeSerialization failed", e);
		}

	}
}
