DataProtocolAbstractImpl.java

package eu.javaexperience.datareprez.abstractImpl;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import eu.javaexperience.datareprez.DataArray;
import eu.javaexperience.datareprez.DataCommonAbstractImpl;
import eu.javaexperience.datareprez.DataObject;
import eu.javaexperience.datareprez.DataReceiver;
import eu.javaexperience.datareprez.DataSender;
import eu.javaexperience.reflect.Mirror;

public abstract class DataProtocolAbstractImpl extends DataCommonAbstractImpl
{
	protected abstract DataProtocol getProtocolHandler();
	
	@Override
	public DataObject newObjectInstance()
	{
		return getProtocolHandler().newObjectInstance();
	}

	@Override
	public DataArray newArrayInstance()
	{
		return getProtocolHandler().newArrayInstance();
	}

	@Override
	public void sendDataObject(DataObject dat, OutputStream os) throws IOException
	{
		getProtocolHandler().sendPacket(dat.toBlob(), os);
	}

	@Override
	public DataObject receiveDataObject(InputStream is) throws IOException
	{
		DataProtocol proto = getProtocolHandler();
		byte[] data = proto.acquirePacket(is);
		return proto.objectFromBlob(data);
	}

	@Override
	public void sendDataArray(DataArray dat, OutputStream os) throws IOException
	{
		getProtocolHandler().sendPacket(dat.toBlob(), os);
	}

	@Override
	public DataArray receiveDataArray(InputStream is) throws IOException
	{
		DataProtocol proto = getProtocolHandler();
		byte[] data = proto.acquirePacket(is);
		return proto.arrayFromBlob(data);
	}

	@Override
	public DataSender newDataSender(OutputStream os) throws IOException
	{
		return new GenericDataSender(getProtocolHandler(), os);
	}

	@Override
	public DataReceiver newDataReceiver(InputStream is) throws IOException
	{
		return new GenericDataReceiver(getProtocolHandler(), is);
	}

	@Override
	public DataArray arrayFromBlob(byte[] data)
	{
		return getProtocolHandler().arrayFromBlob(data);
	}

	@Override
	public DataObject objectFromBlob(byte[] data)
	{
		return getProtocolHandler().objectFromBlob(data);
	}
	
	protected boolean isObjectNull(Object val)
	{
		return Mirror.equals(getProtocolHandler().getNullObject(), val);
	}
}