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;
+	}
 }