diff src/org/tmatesoft/hg/internal/AdapterPlug.java @ 520:1ee452f31187

Experimental support for inverse direction history walking. Refactored/streamlined cancellation in HgLogCommand and down the stack
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Fri, 21 Dec 2012 21:20:26 +0100
parents
children 90df078d6418
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/tmatesoft/hg/internal/AdapterPlug.java	Fri Dec 21 21:20:26 2012 +0100
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2012 TMate Software Ltd
+ *  
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * For information on how to redistribute this software under
+ * the terms of a license other than GNU General Public License
+ * contact TMate Software at support@hg4j.com
+ */
+package org.tmatesoft.hg.internal;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.tmatesoft.hg.util.Adaptable;
+
+/**
+ * Implementation of {@link Adaptable} that allows to add ("plug")
+ * adapters as needed
+ * 
+ * @author Artem Tikhomirov
+ * @author TMate Software Ltd.
+ */
+public class AdapterPlug implements Adaptable {
+	private final Map<Class<?>, Object> adapters = new HashMap<Class<?>, Object>();
+	private final List<Class<?>> adapterUses = new ArrayList<Class<?>>();
+	
+	public <T> void attachAdapter(Class<T> adapterClass, T instance) {
+		adapters.put(adapterClass, instance);
+	}
+
+	public <T> T getAdapter(Class<T> adapterClass) {
+		Object instance = adapters.get(adapterClass);
+		if (instance != null) {
+			adapterUses.add(adapterClass);
+			return adapterClass.cast(instance);
+		}
+		return null;
+	}
+	
+	public int getAdapterUse(Class<?> adapterClass) {
+		int uses = 0;
+		for (Class<?> c : adapterUses) {
+			if (c == adapterClass) {
+				uses++;
+			}
+		}
+		return uses;
+	}
+}
\ No newline at end of file