Coverage Report - us.daveread.utility.formatcheck.util.Configuration
 
Classes in this File Line Coverage Branch Coverage Complexity
Configuration
80%
44/55
80%
8/10
2.625
 
 1  
 package us.daveread.utility.formatcheck.util;
 2  
 
 3  
 import java.util.*;
 4  
 import java.io.*;
 5  
 import org.apache.log4j.Logger;
 6  
 
 7  
 /**
 8  
  * <p>Description: Access to Property files used in the FormatCheck application
 9  
  * <p>Copyright: Copyright (c) 2006
 10  
  * <p>This program is free software; you can redistribute it and/or modify
 11  
  * it under the terms of the GNU General Public License as published by
 12  
  * the Free Software Foundation; either version 2 of the License, or
 13  
  * (at your option) any later version.
 14  
  * <p>This program is distributed in the hope that it will be useful,
 15  
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 16  
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 17  
  * GNU General Public License for more details.
 18  
  * <p>You should have received a copy of the GNU General Public License
 19  
  * along with this program; if not, write to the Free Software
 20  
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 21  
  * </p>
 22  
  *
 23  
  * @author David Read
 24  
  * @version $Id: Configuration.java,v 1.1 2006/06/14 23:36:47 daveread Exp $
 25  
  */
 26  
 public class Configuration extends Properties {
 27  
   private static Configuration config;
 28  2
   private static final Logger logger = Logger.getLogger(Configuration.class);
 29  
 
 30  
   private final static String PROPERTIES_DIRECTORY = "FormatCheck";
 31  
   private final static String FILENAME_PROPERTIES = "FormatCheck.Properties";
 32  
   private final static String PROP_SYSTEM_USERHOMEDIR = "user.home";
 33  
 
 34  
   private static String userHomeDirectory;
 35  
 
 36  1
   private Configuration() {
 37  1
     userHomeDirectory = System.getProperty(PROP_SYSTEM_USERHOMEDIR);
 38  
 
 39  1
     if (userHomeDirectory == null) {
 40  0
       userHomeDirectory = PROPERTIES_DIRECTORY;
 41  
     } else {
 42  1
       userHomeDirectory += "/" + PROPERTIES_DIRECTORY;
 43  1
       new File(userHomeDirectory).mkdirs();
 44  
     }
 45  1
   }
 46  
 
 47  
   public static synchronized Configuration instance() {
 48  3
     if (config == null) {
 49  1
       config = new Configuration();
 50  
     }
 51  
 
 52  3
     config.setupProperties();
 53  
 
 54  3
     return config;
 55  
   }
 56  
 
 57  
   public void store() {
 58  
     File configFile;
 59  
 
 60  1
     configFile = getFile(FILENAME_PROPERTIES);
 61  
 
 62  
     try {
 63  1
       store(new FileOutputStream(configFile, false), "FormatCheck Configuration");
 64  
     }
 65  0
     catch (Throwable any) {
 66  0
       logger.error("Unable to store properties file (" +
 67  
           configFile.getAbsolutePath() + ")", any);
 68  1
     }
 69  1
   }
 70  
 
 71  
   private void setupProperties() {
 72  
     File propFile;
 73  
 
 74  3
     propFile = getFile(FILENAME_PROPERTIES);
 75  
 
 76  
     try {
 77  3
       config.load(new FileInputStream(propFile));
 78  
     }
 79  0
     catch (Throwable any) {
 80  0
       logger.error("Unable to load properties file (" +
 81  
           propFile.getAbsolutePath() + ")", any);
 82  3
     }
 83  3
   }
 84  
 
 85  
   public File getFile(String fileName) {
 86  
     File configFile;
 87  
 
 88  8
     configFile = new File(getFilePath(fileName));
 89  8
     if (!configFile.exists()) {
 90  3
       userDefaultFile(fileName);
 91  
     }
 92  
 
 93  8
     return configFile;
 94  
   }
 95  
 
 96  
   private String getFilePath(String fileName) {
 97  8
     return userHomeDirectory + "/" + fileName;
 98  
   }
 99  
 
 100  
   private void userDefaultFile(String fileName) {
 101  
     File realFile, defaultFile;
 102  
 
 103  3
     realFile = new File(userHomeDirectory + "/" + fileName);
 104  3
     if (!realFile.exists()) {
 105  3
       defaultFile = new File(fileName + ".txt");
 106  3
       if (defaultFile.exists()) {
 107  1
         copyFile(defaultFile, realFile);
 108  
       }
 109  
     }
 110  3
   }
 111  
 
 112  
   private static void copyFile(File source, File dest) {
 113  
     BufferedReader in;
 114  
     PrintWriter out;
 115  
     String data;
 116  
 
 117  1
     in = null;
 118  1
     out = null;
 119  
 
 120  
     try {
 121  1
       in = new BufferedReader(new FileReader(source));
 122  1
       out = new PrintWriter(new FileWriter(dest));
 123  
 
 124  3
       while ((data = in.readLine()) != null) {
 125  2
         out.println(data);
 126  
       }
 127  1
     }
 128  0
     catch (Throwable any) {
 129  0
       logger.warn("Unable to copy default file (" + source.getAbsolutePath() +
 130  
           ") to configuration file (" + dest.getAbsolutePath() + ")", any);
 131  0
     }
 132  
     finally {
 133  0
       if (in != null) {
 134  
         try {
 135  1
           in.close();
 136  
         }
 137  0
         catch (Throwable any) {
 138  
 
 139  1
         }
 140  
       }
 141  1
       if (out != null) {
 142  
         try {
 143  1
           out.close();
 144  
         }
 145  0
         catch (Throwable any) {
 146  
 
 147  2
         }
 148  
       }
 149  1
     }
 150  1
   }
 151  
 }