001    package ca.uhn.hl7v2.util;
002    
003    import java.io.File;
004    
005    import org.slf4j.Logger;
006    import org.slf4j.LoggerFactory;
007    
008    /**
009     * Used to access the hapi.home system property.  Note that the property 
010     * is only checked (at most) once per session.  
011     * @author Bryan Tripp
012     */
013    public class Home {
014        
015        private static File home;
016        private static Logger log = LoggerFactory.getLogger(Home.class);
017        
018        /** Creates a new instance of Home */
019        public Home() {
020        }
021        
022        /**
023         * Returns a File object corresponding to the directory specified in 
024         * the system property hapi.home.  The property is only checked the 
025         * first time this method is called, so changes will not take place 
026         * until a new VM is started.  
027         * This method is guaranteed to return a directory.  If hapi.home is 
028         * not set, or is set to a non-directory path, the current working directory will 
029         * be used.  
030         */
031        public static File getHomeDirectory() {
032            if (home == null) 
033                setHomeDirectory();
034            
035            return home;
036        }
037        
038        private synchronized static void setHomeDirectory() {
039            String dir = System.getProperty("hapi.home", ".");
040            home = new File(dir);
041            
042            if (!home.isDirectory()) {
043                home = new File("."); 
044                log.warn("The system property hapi.home is not a valid directory: {}.  Using . instead", dir);
045            }
046             
047            log.info("hapi.home is set to " + home.getAbsolutePath());
048        }
049        
050        public static void main(String args[]) {
051            System.out.println("HOME: " + getHomeDirectory().getAbsolutePath());
052        }
053            
054    }