tikhomirov@520: /* tikhomirov@520: * Copyright (c) 2012 TMate Software Ltd tikhomirov@520: * tikhomirov@520: * This program is free software; you can redistribute it and/or modify tikhomirov@520: * it under the terms of the GNU General Public License as published by tikhomirov@520: * the Free Software Foundation; version 2 of the License. tikhomirov@520: * tikhomirov@520: * This program is distributed in the hope that it will be useful, tikhomirov@520: * but WITHOUT ANY WARRANTY; without even the implied warranty of tikhomirov@520: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the tikhomirov@520: * GNU General Public License for more details. tikhomirov@520: * tikhomirov@520: * For information on how to redistribute this software under tikhomirov@520: * the terms of a license other than GNU General Public License tikhomirov@520: * contact TMate Software at support@hg4j.com tikhomirov@520: */ tikhomirov@520: package org.tmatesoft.hg.internal; tikhomirov@520: tikhomirov@520: import java.util.ArrayList; tikhomirov@520: import java.util.HashMap; tikhomirov@520: import java.util.List; tikhomirov@520: import java.util.Map; tikhomirov@520: tikhomirov@520: import org.tmatesoft.hg.util.Adaptable; tikhomirov@520: tikhomirov@520: /** tikhomirov@520: * Implementation of {@link Adaptable} that allows to add ("plug") tikhomirov@520: * adapters as needed tikhomirov@520: * tikhomirov@520: * @author Artem Tikhomirov tikhomirov@520: * @author TMate Software Ltd. tikhomirov@520: */ tikhomirov@520: public class AdapterPlug implements Adaptable { tikhomirov@520: private final Map, Object> adapters = new HashMap, Object>(); tikhomirov@520: private final List> adapterUses = new ArrayList>(); tikhomirov@520: tikhomirov@520: public void attachAdapter(Class adapterClass, T instance) { tikhomirov@520: adapters.put(adapterClass, instance); tikhomirov@520: } tikhomirov@520: tikhomirov@520: public T getAdapter(Class adapterClass) { tikhomirov@520: Object instance = adapters.get(adapterClass); tikhomirov@520: if (instance != null) { tikhomirov@520: adapterUses.add(adapterClass); tikhomirov@520: return adapterClass.cast(instance); tikhomirov@520: } tikhomirov@520: return null; tikhomirov@520: } tikhomirov@520: tikhomirov@520: public int getAdapterUse(Class adapterClass) { tikhomirov@520: int uses = 0; tikhomirov@520: for (Class c : adapterUses) { tikhomirov@520: if (c == adapterClass) { tikhomirov@520: uses++; tikhomirov@520: } tikhomirov@520: } tikhomirov@520: return uses; tikhomirov@520: } tikhomirov@520: }