001 /* 002 * Copyright (C) 2006-2007 the original author or authors. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017 package org.codehaus.gmaven.runtime.loader; 018 019 import org.codehaus.gmaven.feature.Provider; 020 import org.codehaus.gmaven.feature.ProviderRegistry; 021 import org.slf4j.Logger; 022 import org.slf4j.LoggerFactory; 023 024 import java.util.HashMap; 025 import java.util.Iterator; 026 import java.util.Map; 027 028 /** 029 * Default {@link ProviderRegistry}. 030 * 031 * @plexus.component role="org.codehaus.gmaven.feature.ProviderRegistry" 032 * 033 * @version $Id: DefaultProviderRegistry.java 21 2009-07-16 09:42:35Z user57 $ 034 * @author <a href="mailto:jason@planet57.com">Jason Dillon</a> 035 */ 036 public class DefaultProviderRegistry 037 implements ProviderRegistry 038 { 039 private final Logger log = LoggerFactory.getLogger(getClass()); 040 041 private final Map providers = new HashMap(); 042 043 public Map providers() { 044 return providers; 045 } 046 047 public Map providers(final boolean supported) { 048 Map selected = new HashMap(); 049 050 for (Iterator iter = providers().values().iterator(); iter.hasNext();) { 051 Provider provider = (Provider)iter.next(); 052 053 if (supported == provider.supported()) { 054 selected.put(provider.key(), provider); 055 } 056 } 057 058 return selected; 059 } 060 061 public Provider lookup(final String key) { 062 assert key != null; 063 064 log.trace("Lookup: {}", key); 065 066 return (Provider) providers().get(key); 067 } 068 069 public Provider register(final Provider provider) { 070 assert provider != null; 071 072 return register(provider.key(), provider); 073 } 074 075 private Provider register(final String key, final Provider provider) { 076 assert key != null; 077 assert provider != null; 078 079 log.trace("Register: {} -> {}", key, provider); 080 081 return (Provider) providers().put(key, provider); 082 } 083 084 public Provider deregister(final String key) { 085 assert key != null; 086 087 log.trace("Deregister: {}", key); 088 089 return (Provider) providers().remove(key); 090 } 091 }