001 /*
002 * This file is part of the Jikes RVM project (http://jikesrvm.org).
003 *
004 * This file is licensed to You under the Eclipse Public License (EPL);
005 * You may not use this file except in compliance with the License. You
006 * may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/eclipse-1.0.php
009 *
010 * See the COPYRIGHT.txt file distributed with this work for information
011 * regarding copyright ownership.
012 */
013 package org.jikesrvm.mm.mmtk;
014
015 import java.io.BufferedInputStream;
016 import java.io.File;
017 import java.io.FileInputStream;
018 import java.io.FileNotFoundException;
019 import java.io.IOException;
020 import java.util.Properties;
021
022 import org.jikesrvm.VM;
023 import org.jikesrvm.mm.mminterface.Selected;
024
025 /**
026 * Read build-time configuration information for MMTk from a Java properties
027 * file. Properties read through this mechanism should be read at build time
028 * and saved in static final fields.
029 *
030 * This is a wrapper for a java.util.Properties object.
031 */
032 public class BuildTimeConfig extends org.mmtk.vm.BuildTimeConfig {
033
034 /**
035 * The underlying properties object
036 */
037 private Properties props;
038
039 public BuildTimeConfig(String property_file_property, String default_property_file) {
040 props = getProperties(property_file_property,default_property_file);
041 }
042
043 public BuildTimeConfig(String property_file_property) {
044 props = getProperties(property_file_property,null);
045 }
046
047 /**
048 * @param property_file_property The name of the property that sets
049 * the location of the properties file
050 * @param default_property_file The default properties file.
051 *
052 */
053 private Properties getProperties(String property_file_property, String default_property_file) {
054 Properties props = new Properties();
055 String propFileName;
056 if (default_property_file == null) {
057 propFileName = System.getProperty(property_file_property);
058 if (propFileName == null) {
059 System.err.println(property_file_property+" must specify a properties file");
060 VM.sysExit(1);
061 }
062 } else {
063 propFileName = System.getProperty(property_file_property, default_property_file);
064 }
065 File propFile = new File(propFileName);
066
067 try {
068 BufferedInputStream propFileStream = new BufferedInputStream(new FileInputStream(propFile));
069 props.load(propFileStream);
070 propFileStream.close();
071 } catch (FileNotFoundException e) {
072 if (!propFileName.equals(default_property_file)) {
073 System.err.println(propFileName+" not found.");
074 VM.sysExit(1);
075 }
076 } catch (IOException e) {
077 e.printStackTrace();
078 VM.sysExit(1);
079 }
080 return props;
081 }
082
083 @Override
084 public String getPlanName() {
085 return Selected.name;
086 }
087
088 @Override
089 public boolean getBooleanProperty(String name, boolean dflt) {
090 String value = props.getProperty(name,Boolean.toString(dflt));
091 return Boolean.valueOf(value);
092 }
093
094 @Override
095 public boolean getBooleanProperty(String name) {
096 String value = props.getProperty(name);
097 if (value == null)
098 throw new RuntimeException("Undefined property "+name);
099 return Boolean.valueOf(value);
100 }
101
102 @Override
103 public int getIntProperty(String name, int dflt) {
104 String value = props.getProperty(name,Integer.toString(dflt));
105 return Integer.valueOf(value);
106 }
107
108 @Override
109 public int getIntProperty(String name) {
110 String value = props.getProperty(name);
111 if (value == null)
112 throw new RuntimeException("Undefined property "+name);
113 return Integer.valueOf(value);
114 }
115
116 @Override
117 public String getStringProperty(String name, String dflt) {
118 return props.getProperty(name,dflt);
119 }
120
121 @Override
122 public String getStringProperty(String name) {
123 String value = props.getProperty(name);
124 if (value == null)
125 throw new RuntimeException("Undefined property "+name);
126 return value;
127 }
128
129
130 }