blob: 46d8e984f401e7a83979936d8b6aab0d1244989e [file] [log] [blame]
/*
* Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Eike Stepper - initial API and implementation
*/
package promoter.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties;
/**
* @author Eike Stepper
*/
public class Config
{
private final File file;
private Properties properties;
public Config(String filename)
{
this(new File(filename));
}
public Config(File file)
{
this.file = file;
}
public final File getFile()
{
return file;
}
public final synchronized Properties getProperties()
{
if (properties == null)
{
properties = loadProperties(file, true);
}
return properties;
}
public String getProperty(String key)
{
return getProperties().getProperty(key);
}
public String getProperty(String key, String defaultValue)
{
return getProperties().getProperty(key, defaultValue);
}
public File getDirectory(String key)
{
String path = getProperty(key);
if (path == null)
{
throw new IllegalStateException("Property " + key + " is undefined");
}
File directory = new File(path);
if (!directory.isDirectory())
{
throw new IllegalStateException(path + " does not exist or is not a directory");
}
return directory;
}
public static Properties loadProperties(File file, boolean failIfNotExists)
{
Properties properties = new Properties();
if (file.isFile())
{
try
{
InputStream in = null;
try
{
in = new FileInputStream(file);
properties.load(in);
}
finally
{
if (in != null)
{
in.close();
}
}
}
catch (Exception ex)
{
throw new RuntimeException("Problem while loading properties from " + file.getAbsolutePath(), ex);
}
}
else if (failIfNotExists)
{
throw new RuntimeException("Properties file missing: " + file.getAbsolutePath());
}
return properties;
}
}