Coverage Report - com.ctrip.framework.apollo.spi.DefaultConfigFactoryManager
 
Classes in this File Line Coverage Branch Coverage Complexity
DefaultConfigFactoryManager
100%
15/15
100%
6/6
7
 
 1  
 package com.ctrip.framework.apollo.spi;
 2  
 
 3  
 import com.google.common.collect.Maps;
 4  
 
 5  
 import org.unidal.lookup.ContainerHolder;
 6  
 import org.unidal.lookup.LookupException;
 7  
 import org.unidal.lookup.annotation.Inject;
 8  
 import org.unidal.lookup.annotation.Named;
 9  
 
 10  
 import java.util.Map;
 11  
 
 12  
 /**
 13  
  * @author Jason Song(song_s@ctrip.com)
 14  
  */
 15  
 @Named(type = ConfigFactoryManager.class)
 16  16
 public class DefaultConfigFactoryManager extends ContainerHolder implements ConfigFactoryManager {
 17  
   @Inject
 18  
   private ConfigRegistry m_registry;
 19  
 
 20  16
   private Map<String, ConfigFactory> m_factories = Maps.newConcurrentMap();
 21  
 
 22  
   @Override
 23  
   public ConfigFactory getFactory(String namespace) {
 24  
     // step 1: check hacked factory
 25  17
     ConfigFactory factory = m_registry.getFactory(namespace);
 26  
 
 27  17
     if (factory != null) {
 28  3
       return factory;
 29  
     }
 30  
 
 31  
     // step 2: check cache
 32  14
     factory = m_factories.get(namespace);
 33  
 
 34  14
     if (factory != null) {
 35  1
       return factory;
 36  
     }
 37  
 
 38  
     // step 3: check declared config factory
 39  
     try {
 40  13
       factory = lookup(ConfigFactory.class, namespace);
 41  9
     } catch (LookupException ex) {
 42  
       // ignore it
 43  4
     }
 44  
 
 45  
     // step 4: check default config factory
 46  13
     if (factory == null) {
 47  9
       factory = lookup(ConfigFactory.class);
 48  
     }
 49  
 
 50  13
     m_factories.put(namespace, factory);
 51  
 
 52  
     // factory should not be null
 53  13
     return factory;
 54  
   }
 55  
 }