/*
* This file is part of Caliph & Emir.
*
* Caliph & Emir is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Caliph & Emir is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Caliph & Emir; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Copyright statement:
* --------------------
* (c) 2002-2005 by Mathias Lux (mathias@juggle.at)
* http://www.juggle.at, http://caliph-emir.sourceforge.net
*/
package at.lux.fotoretrieval;
import at.lux.retrieval.fdp.FDPParameters;
import java.util.Iterator;
import java.util.Properties;
import java.util.Set;
/**
* Date: 21.02.2005
* Time: 23:11:20
*
* @author Mathias Lux, mathias@juggle.at
*/
public class EmirConfiguration {
private static EmirConfiguration configuration = null;
private Properties props = new Properties();
private EmirConfiguration() {
// nothing to do here ... its a singleton.
}
/**
* Returns the current EmirConfiguration
* @return the current instance of the EmirConfiguration
*/
public static EmirConfiguration getInstance() {
if (configuration == null) {
configuration = new EmirConfiguration();
}
return configuration;
}
/**
* Returns the current EmirConfiguration by importing alle values given by properties
* @param properties Properties to import.
* @return current EmirConfiguration by importing alle values given by properties.
*/
public static EmirConfiguration getInstance(Properties properties) {
if (configuration == null) {
configuration = new EmirConfiguration();
}
if (properties == null) {
configuration.setProperties(new Properties());
} else {
configuration.setProperties(properties);
}
return configuration;
}
public void setProperties(Properties properties) {
setProperty("Retrieval.Result.Maximum", "30", properties);
setProperty("Retrieval.Cbir.useDerby", "false", properties);
setProperty("SpringEmbedder.Parameters.c1", "0", properties);
setProperty("SpringEmbedder.Parameters.c2", "0", properties);
setProperty("SpringEmbedder.Parameters.c3", "0", properties);
setProperty("SpringEmbedder.Parameters.c4", "0", properties);
setProperty("SpringEmbedder.Parameters.invisibleCenterNode", "false", properties);
setProperty("SpringEmbedder.Parameters.normalizeMovementVector", "false", properties);
setProperty("SpringEmbedder.Parameters.scaleDownSpace", "false", properties);
setProperty("MdsVisPanel.FDP.StepWait", "17", properties);
setProperty("MdsVisPanel.FDP.StopCondition", "0.015", properties);
setProperty("MdsVisPanel.FDP.StartWait", "200", properties);
setProperty("MdsVisPanel.ImageLoader.StepWait", "23", properties);
setProperty("MdsVisPanel.ImageLoader.StartWait", "700", properties);
setProperty("MdsVisPanel.ImageLoader.MaxImageSideLength", "50", properties);
setProperty("MdsVisPanel.ImageLoader.ShowPleaseWait", "true", properties);
setProperty("GraphConstructionPanel.EdgeOffset.x", "100", properties);
setProperty("GraphConstructionPanel.EdgeOffset.y", "50", properties);
setProperty("Algorithm.FDP.Parameters.r", "1", properties);
setProperty("Algorithm.FDP.Parameters.w", "1", properties);
setProperty("Algorithm.FDP.Parameters.d", "1", properties);
setProperty("Algorithm.FDP.Parameters.gravity", "0.3", properties);
setProperty("Algorithm.FDP.Parameters.minimumDistance", "0.0000001", properties);
setProperty("Metric.Clustering", "0", properties);
setProperty("Metric.FDP", "1", properties);
setProperty("Clustering.Algorithm", "1", properties);
//browser.linux=firefox {url}
//browser.windows=cmd.exe /c start "" "{url}"
//help.online=http://www.semanticmetadata.net/wiki/
//help.homepage=http://www.semanticmetadata.net/
setProperty("browser.linux", "firefox {url}", properties);
setProperty("browser.windows", "cmd.exe /c start \"\" \"{url}\"", properties);
setProperty("help.online", "http://www.semanticmetadata.net/wiki/", properties);
setProperty("help.homepage", "http://www.semanticmetadata.net/", properties);
setProperty("emir.demomode", "false", properties);
}
private void setProperty(String name, String defaultValue, Properties properties) {
props.setProperty(name, properties.getProperty(name, defaultValue));
}
public Properties saveProperties(Properties propsWhichAreSaved) {
Set keyEnumeration = props.keySet();
for (Object aKeyEnumeration : keyEnumeration) {
String key = (String) aKeyEnumeration;
propsWhichAreSaved.put(key, props.get(key));
}
return propsWhichAreSaved;
}
public float getFloat(String key) {
return new Float(props.getProperty(key));
}
public int getInt(String key) {
return new Integer(props.getProperty(key));
}
public double getDouble(String key) {
return new Double(props.getProperty(key));
}
/**
* Creates and returns a parameters object for FDP algorithm.
* @return the parameters for the FDP Algorithm.
* @see at.lux.retrieval.fdp.FDPParameters
*/
public FDPParameters getFDPParameters() {
double r = getDouble("Algorithm.FDP.Parameters.r");
double w = getDouble("Algorithm.FDP.Parameters.w");
double d = getDouble("Algorithm.FDP.Parameters.d");
double gravity = getDouble("Algorithm.FDP.Parameters.gravity");
float minimumDistance = getFloat("Algorithm.FDP.Parameters.minimumDistance");
FDPParameters params = new FDPParameters(d, gravity, minimumDistance, r, w);
return params;
}
public String getProperty(String key) {
return props.getProperty(key);
}
public void setProperty(String key, String value) {
props.setProperty(key, value);
}
public boolean getBoolean(String key) {
return Boolean.parseBoolean(props.getProperty(key));
}
}