| //===---------------------- BuildTimeConfig.java --------------------------===// |
| // |
| // The VMKit project |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| package org.j3.mmtk; |
| |
| import java.io.BufferedInputStream; |
| import java.io.File; |
| import java.io.FileInputStream; |
| import java.io.FileNotFoundException; |
| import java.io.IOException; |
| import java.util.Properties; |
| |
| import org.j3.runtime.VM; |
| import org.j3.config.Selected; |
| |
| /** |
| * Read build-time configuration information for MMTk from a Java properties |
| * file. Properties read through this mechanism should be read at build time |
| * and saved in static final fields. |
| * |
| * This is a wrapper for a java.util.Properties object. |
| */ |
| public final class BuildTimeConfig extends org.mmtk.vm.BuildTimeConfig { |
| |
| /** |
| * The underlying properties object |
| */ |
| private Properties props; |
| |
| public BuildTimeConfig(String property_file_property, String default_property_file) { |
| props = getProperties(property_file_property,default_property_file); |
| } |
| |
| public BuildTimeConfig(String property_file_property) { |
| props = getProperties(property_file_property,null); |
| } |
| |
| /** |
| * @param property_file_property The name of the property that sets |
| * the location of the properties file |
| * @param default_property_file The default properties file. |
| * |
| */ |
| private Properties getProperties(String property_file_property, String default_property_file) { |
| Properties props = new Properties(); |
| String propFileName; |
| if (default_property_file == null) { |
| propFileName = System.getProperty(property_file_property); |
| if (propFileName == null) { |
| //System.err.println(property_file_property+" must specify a properties file"); |
| VM.sysExit(1); |
| } |
| } else { |
| propFileName = System.getProperty(property_file_property, default_property_file); |
| } |
| File propFile = new File(propFileName); |
| |
| try { |
| BufferedInputStream propFileStream = new BufferedInputStream(new FileInputStream(propFile)); |
| props.load(propFileStream); |
| propFileStream.close(); |
| } catch (FileNotFoundException e) { |
| if (!propFileName.equals(default_property_file)) { |
| //System.err.println(propFileName+" not found."); |
| VM.sysExit(1); |
| } |
| } catch (IOException e) { |
| e.printStackTrace(); |
| VM.sysExit(1); |
| } |
| return props; |
| } |
| |
| @Override |
| public String getPlanName() { |
| return Selected.name; |
| } |
| |
| @Override |
| public boolean getBooleanProperty(String name, boolean dflt) { |
| String value = props.getProperty(name,Boolean.toString(dflt)); |
| return Boolean.valueOf(value); |
| } |
| |
| @Override |
| public boolean getBooleanProperty(String name) { |
| String value = props.getProperty(name); |
| if (value == null) |
| throw new RuntimeException("Undefined property "+name); |
| return Boolean.valueOf(value); |
| } |
| |
| @Override |
| public int getIntProperty(String name, int dflt) { |
| String value = props.getProperty(name,Integer.toString(dflt)); |
| return Integer.valueOf(value); |
| } |
| |
| @Override |
| public int getIntProperty(String name) { |
| String value = props.getProperty(name); |
| if (value == null) |
| throw new RuntimeException("Undefined property "+name); |
| return Integer.valueOf(value); |
| } |
| |
| @Override |
| public String getStringProperty(String name, String dflt) { |
| return props.getProperty(name,dflt); |
| } |
| |
| @Override |
| public String getStringProperty(String name) { |
| String value = props.getProperty(name); |
| if (value == null) |
| throw new RuntimeException("Undefined property "+name); |
| return value; |
| } |
| |
| |
| } |