Plugins: Codecs
The AbstractDocumentCodec
and AbstractIndexCodec
classes have been introduced as an entry point to custom compression methods.
public abstract class AbstractDocumentCodec
{
public DocumentDatabase Database { get; set; }
public virtual void Initialize(DocumentDatabase database) { }
public virtual void Initialize() { }
public virtual void SecondStageInit() { }
public abstract Stream Encode(string key, RavenJObject data, RavenJObject metadata, Stream dataStream);
public abstract Stream Decode(string key, RavenJObject metadata, Stream dataStream);
}
public abstract class AbstractIndexCodec
{
public virtual void Initialize(DocumentDatabase database) { }
public virtual void SecondStageInit() { }
public abstract Stream Encode(string key, Stream dataStream);
public abstract Stream Decode(string key, Stream dataStream);
}
where:
* Encode is executed when the given document/index is written.
* Decode is executed when the provided document/index is read.
* Initialize and SecondStageInit are used to trigger initialization process.
Example - Compression
public class SimpleCompressionCodec : AbstractDocumentCodec
{
private readonly SimpleCompressor compressor = new SimpleCompressor();
public override Stream Encode(string key, RavenJObject data, RavenJObject metadata, Stream dataStream)
{
return compressor.Compress(key, data, metadata, dataStream);
}
public override Stream Decode(string key, RavenJObject metadata, Stream dataStream)
{
return compressor.Decompress(key, metadata, dataStream);
}
}
Example - Encryption
public class SimpleEncryptionCodec : AbstractDocumentCodec
{
private readonly SimpleEncryptor encryptor = new SimpleEncryptor();
public override Stream Encode(string key, RavenJObject data, RavenJObject metadata, Stream dataStream)
{
return encryptor.Encrypt(key, data, metadata, dataStream);
}
public override Stream Decode(string key, RavenJObject metadata, Stream dataStream)
{
return encryptor.Decrypt(key, metadata, dataStream);
}
}