blob: 9f90b8eafefaed0d729472fb25d5838f82a7820c [file] [log] [blame]
//===---------------------- 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;
}
}