001/*
002 * Copyright (c) 2010 The Regents of the University of California.
003 * All rights reserved.
004 *
005 * '$Author: crawl $'
006 * '$Date: 2013-02-21 21:34:53 +0000 (Thu, 21 Feb 2013) $' 
007 * '$Revision: 31479 $'
008 * 
009 * Permission is hereby granted, without written agreement and without
010 * license or royalty fees, to use, copy, modify, and distribute this
011 * software and its documentation for any purpose, provided that the above
012 * copyright notice and the following two paragraphs appear in all copies
013 * of this software.
014 *
015 * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
016 * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
017 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
018 * THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
019 * SUCH DAMAGE.
020 *
021 * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
022 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
023 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
024 * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
025 * CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
026 * ENHANCEMENTS, OR MODIFICATIONS.
027 *
028 */
029
030package org.kepler.loader;
031
032import java.io.File;
033import java.io.FileInputStream;
034import java.io.FilenameFilter;
035import java.io.IOException;
036import java.io.InputStream;
037import java.net.URISyntaxException;
038import java.util.Enumeration;
039import java.util.Properties;
040
041import org.kepler.build.modules.Module;
042import org.kepler.build.modules.ModuleTree;
043import org.kepler.build.project.ProjectLocator;
044
045/**
046 * Created by David Welker. Date: Jul 31, 2008 Time: 4:18:10 PM
047 */
048public class SystemPropertyLoader
049{
050        public static void load() throws URISyntaxException, IOException
051        {
052                for (Module module : ModuleTree.instance())
053                {
054                        loadSystemPropertiesFromModule(module);
055                }
056                makeSubstitutes();
057        }
058
059        private static void loadSystemPropertiesFromModule(Module module) throws IOException
060        {
061                
062                File systemPropertiesDir = module.getSystemPropertiesDir();
063                if (!systemPropertiesDir.exists()) return;
064                File[] children = systemPropertiesDir.listFiles(new FilenameFilter()
065                {
066                        public boolean accept(File dir, String filename)
067                        {
068                                return filename.endsWith(".properties");
069                        }
070                });
071                for (File systemPropertiesFile : children)
072                        loadSystemProperties(systemPropertiesFile);
073        }
074
075        private static void makeSubstitutes()
076        {
077                Enumeration propertyNames = System.getProperties().propertyNames();
078                while (propertyNames.hasMoreElements())
079                {
080                        String name = (String) propertyNames.nextElement();
081                        String value = System.getProperty(name);
082                        //File projectDir = ProjectLocator.getProjectDir();
083                        // if( name.equals("KEPLER") && !value.endsWith("core") )
084                        // value = "${project.path}/kepler-1.0-jar-tag";
085                        if (value.contains("${project.path}"))
086                        {
087                                value = value.replace("${project.path}", ProjectLocator.getProjectDir().getAbsolutePath()).trim();
088                                System.setProperty(name, value);
089                        }
090                        if (value.contains("${user.home}"))
091                        {
092                                value = value.replace("${user.home}", System.getProperty("user.home")).trim();
093                                System.setProperty(name, value);
094                        }
095                }
096        }
097
098        private static void loadSystemProperties(File systemPropertiesFile) throws IOException
099        {
100                Properties systemProperties = new Properties(System.getProperties());
101                InputStream stream = null;
102                try {
103                        stream = new FileInputStream(systemPropertiesFile);
104                        systemProperties.load(stream);
105                } finally {
106                        if(stream != null) {
107                                stream.close();
108                        }
109                }
110                System.setProperties(systemProperties);
111        }
112
113        public static void main(String[] args) throws URISyntaxException, IOException
114        {
115                SystemPropertyLoader.load();
116        }
117
118}