diff src/org/tmatesoft/hg/internal/FilterByteChannel.java @ 356:91d75e1bac9f

Consistent approach to deal with adaptable objects. Give adaptable precedence over instanceof to allow conditional response when classes do implement desired interface
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Tue, 06 Dec 2011 14:25:52 +0100
parents f2c11fe7f3e9
children
line wrap: on
line diff
--- a/src/org/tmatesoft/hg/internal/FilterByteChannel.java	Tue Dec 06 12:57:21 2011 +0100
+++ b/src/org/tmatesoft/hg/internal/FilterByteChannel.java	Tue Dec 06 14:25:52 2011 +0100
@@ -59,9 +59,11 @@
 	public <T> T getAdapter(Class<T> adapterClass) {
 		if (adapterClass == Preview.class) {
 			ArrayList<Preview> previewers = new ArrayList<Preview>(filters.length);
+			Adaptable.Factory<Preview> factory = new Adaptable.Factory<Preview>(Preview.class);
 			for (Filter f : filters) {
-				if (f instanceof Preview /*FIXME or getAdapter != null*/) {
-					previewers.add((Preview) f);
+				Preview p = factory.get(f);
+				if (p != null) {
+					previewers.add(p);
 				}
 			}
 			if (!previewers.isEmpty()) {
@@ -71,13 +73,7 @@
 			}
 			// fall through to let delegate answer
 		}
-		if (delegate instanceof Adaptable) {
-			return ((Adaptable) delegate).getAdapter(adapterClass);
-		}
-		if (adapterClass != null && adapterClass.isInstance(delegate)) {
-			return adapterClass.cast(delegate);
-		}
-		return null;
+		return Adaptable.Factory.getAdapter(delegate, adapterClass, null);
 	}
 
 	private static class PreviewSupport implements Preview {