package org.pentaho.reporting.engine.classic.core.modules.misc.connections;
import org.pentaho.database.model.IDatabaseConnection;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class SerializedConnection {
private byte[] connection;
public SerializedConnection( final IDatabaseConnection connection ) throws DatasourceMgmtServiceException {
try {
final ByteArrayOutputStream bout = new ByteArrayOutputStream();
final ObjectOutputStream out = new ObjectOutputStream( bout );
out.writeObject( connection );
out.close();
this.connection = bout.toByteArray();
} catch ( IOException ioe ) {
throw new DatasourceMgmtServiceException( ioe );
}
}
public IDatabaseConnection getConnection() {
try {
// return a copy, by deserializing the result.
final ByteArrayInputStream bin = new ByteArrayInputStream( connection );
final ObjectInputStream in = new ObjectInputStream( bin );
return (IDatabaseConnection) in.readObject();
} catch ( IOException e ) {
throw new DatasourceMgmtServiceException( "Unable to deserialize database connections.", e );
} catch ( ClassNotFoundException e ) {
throw new DatasourceMgmtServiceException( "Unable to deserialize database connections.", e );
}
}
}