/* ================================================================== * FactoryHelper.java - Mar 23, 2012 3:13:48 PM * * Copyright 2007-2012 SolarNetwork.net Dev Team * * 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; either version 2 of * the License, or (at your option) any later version. * * 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. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA * 02111-1307 USA * ================================================================== * $Id$ * ================================================================== */ package net.solarnetwork.node.settings.ca; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeMap; import net.solarnetwork.node.settings.SettingSpecifierProvider; import net.solarnetwork.node.settings.SettingSpecifierProviderFactory; /** * Helper class for managing factory providers. * * @author matt * @version $Revision$ */ public class FactoryHelper { private final SettingSpecifierProviderFactory factory; private final Map<String, List<SettingSpecifierProvider>> instanceMap = new TreeMap<String, List<SettingSpecifierProvider>>(); public FactoryHelper(SettingSpecifierProviderFactory factory) { super(); this.factory = factory; } public SettingSpecifierProviderFactory getFactory() { return factory; } /** * Get a list of providers for a given instance ID, creating an empty list * if one doesn't exist yet. * * @param instanceUID * the ID of the instance to get the list of providers for * @return instance list, never <em>null</em> */ public List<SettingSpecifierProvider> getInstanceProviders(String instanceUID) { synchronized (instanceMap) { List<SettingSpecifierProvider> results = instanceMap.get(instanceUID); if ( results == null ) { results = new ArrayList<SettingSpecifierProvider>(5); instanceMap.put(instanceUID, results); } return results; } } public Set<Map.Entry<String, List<SettingSpecifierProvider>>> instanceEntrySet() { return instanceMap.entrySet(); } public void removeProvider(SettingSpecifierProvider provider) { synchronized (instanceMap) { for ( List<SettingSpecifierProvider> providerList : instanceMap.values() ) { for ( Iterator<SettingSpecifierProvider> itr = providerList.iterator(); itr .hasNext(); ) { SettingSpecifierProvider oneProvider = itr.next(); if ( oneProvider.equals(provider) ) { itr.remove(); return; } } } } } }