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    }