Mercurial > hg4j
diff src/org/tmatesoft/hg/internal/FilterByteChannel.java @ 157:d5268ca7715b
Merged branch wrap-data-access into default for resource-friendly data access. Updated API to promote that friendliness to clients (channels, not byte[]). More exceptions
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Wed, 09 Mar 2011 05:22:17 +0100 |
parents | 1a7a9a20e1f9 |
children | f2c11fe7f3e9 |
line wrap: on
line diff
--- a/src/org/tmatesoft/hg/internal/FilterByteChannel.java Wed Mar 02 01:06:09 2011 +0100 +++ b/src/org/tmatesoft/hg/internal/FilterByteChannel.java Wed Mar 09 05:22:17 2011 +0100 @@ -20,6 +20,7 @@ import java.nio.ByteBuffer; import java.util.Collection; +import org.tmatesoft.hg.util.Adaptable; import org.tmatesoft.hg.util.ByteChannel; import org.tmatesoft.hg.util.CancelledException; @@ -28,7 +29,7 @@ * @author Artem Tikhomirov * @author TMate Software Ltd. */ -public class FilterByteChannel implements ByteChannel { +public class FilterByteChannel implements ByteChannel, Adaptable { private final Filter[] filters; private final ByteChannel delegate; @@ -52,4 +53,14 @@ return buffer.position() - srcPos; // consumed as much from original buffer } + // adapters or implemented interfaces of the original class shall not be obfuscated by filter + public <T> T getAdapter(Class<T> adapterClass) { + if (delegate instanceof Adaptable) { + return ((Adaptable) delegate).getAdapter(adapterClass); + } + if (adapterClass != null && adapterClass.isInstance(delegate)) { + return adapterClass.cast(delegate); + } + return null; + } }