Coverage Report - com.ctrip.apollo.spi.DefaultConfigFactory
 
Classes in this File Line Coverage Branch Coverage Complexity
DefaultConfigFactory
80%
21/26
100%
2/2
1.6
 
 1  
 package com.ctrip.apollo.spi;
 2  
 
 3  
 import com.ctrip.apollo.Config;
 4  
 import com.ctrip.apollo.core.utils.ClassLoaderUtil;
 5  
 import com.ctrip.apollo.internals.DefaultConfig;
 6  
 import com.ctrip.apollo.internals.LocalFileConfigRepository;
 7  
 import com.ctrip.apollo.internals.RemoteConfigRepository;
 8  
 import com.ctrip.apollo.util.ExceptionUtil;
 9  
 import com.dianping.cat.Cat;
 10  
 import com.dianping.cat.message.Message;
 11  
 import com.dianping.cat.message.Transaction;
 12  
 
 13  
 import org.slf4j.Logger;
 14  
 import org.slf4j.LoggerFactory;
 15  
 import org.unidal.lookup.annotation.Named;
 16  
 
 17  
 import java.io.File;
 18  
 import java.io.IOException;
 19  
 import java.nio.file.Files;
 20  
 
 21  
 /**
 22  
  * @author Jason Song(song_s@ctrip.com)
 23  
  */
 24  
 @Named(type = ConfigFactory.class, value = "default")
 25  
 public class DefaultConfigFactory implements ConfigFactory {
 26  1
   private static final Logger logger = LoggerFactory.getLogger(DefaultConfigFactory.class);
 27  
   private static final String CONFIG_DIR = "/config-cache";
 28  
   private File m_baseDir;
 29  
 
 30  
   /**
 31  
    * Create the config factory.
 32  
    */
 33  9
   public DefaultConfigFactory() {
 34  9
     m_baseDir = new File(ClassLoaderUtil.getClassPath() + CONFIG_DIR);
 35  9
     this.checkLocalConfigCacheDir(m_baseDir);
 36  9
   }
 37  
 
 38  
   private void checkLocalConfigCacheDir(File baseDir) {
 39  9
     if (baseDir.exists()) {
 40  8
       return;
 41  
     }
 42  1
     Transaction transaction = Cat.newTransaction("Apollo.ConfigService", "createLocalConfigDir");
 43  1
     transaction.addData("BaseDir", baseDir.getAbsolutePath());
 44  
     try {
 45  1
       Files.createDirectory(baseDir.toPath());
 46  1
       transaction.setStatus(Message.SUCCESS);
 47  0
     } catch (IOException ex) {
 48  0
       Cat.logError(ex);
 49  0
       transaction.setStatus(ex);
 50  0
       logger.warn(
 51  
           "Unable to create local config cache directory {}, reason: {}. Will not able to cache config file.",
 52  0
           baseDir, ExceptionUtil.getDetailMessage(ex));
 53  
     } finally {
 54  1
       transaction.complete();
 55  1
     }
 56  1
   }
 57  
 
 58  
   @Override
 59  
   public Config create(String namespace) {
 60  9
     DefaultConfig defaultConfig =
 61  9
         new DefaultConfig(namespace, createLocalConfigRepository(namespace));
 62  9
     return defaultConfig;
 63  
   }
 64  
 
 65  
   LocalFileConfigRepository createLocalConfigRepository(String namespace) {
 66  8
     LocalFileConfigRepository localFileConfigRepository =
 67  
         new LocalFileConfigRepository(m_baseDir, namespace);
 68  8
     localFileConfigRepository.setFallback(createRemoteConfigRepository(namespace));
 69  8
     return localFileConfigRepository;
 70  
   }
 71  
 
 72  
   RemoteConfigRepository createRemoteConfigRepository(String namespace) {
 73  8
     return new RemoteConfigRepository(namespace);
 74  
   }
 75  
 }