/*
* This file is part of JGAP.
*
* JGAP offers a dual license model containing the LGPL as well as the MPL.
*
* For licensing information please see the file license.txt included with JGAP
* or have a look at the top of class org.jgap.Chromosome which representatively
* includes the JGAP license policy applicable for any file delivered with JGAP.
*/
package org.jgap.data.config;
import java.util.*;
import java.io.*;
import javax.swing.*;
/**
* This class is a Singleton that generates a properties file from
* classes implementing IConfigInfo.
*
* @author Siddhartha Azad
* @since 2.3
* */
public final class ConfigWriter {
/** String containing the CVS revision. Read out via reflection!*/
private final static String CVS_REVISION = "$Revision: 1.8 $";
/**
* Singleton instance of ConfigWriter
*/
private static ConfigWriter m_cWriter;
// The configuration stored as Properties
private Properties m_config;
/**
* Method to create and access the Singleton ConfigWriter instance.
* @return a ConfigWriter Singleton instance.
*
* @author Siddhartha Azad
* @since 2.3
* */
public static ConfigWriter getInstance() {
if (m_cWriter == null) {
m_cWriter = new ConfigWriter();
}
return m_cWriter;
}
/**
* Constructor for the ConfigWriter Singleton
*
* @author Siddhartha Azad
* @since 2.3
*/
private ConfigWriter() {
m_config = new Properties();
}
/**
* Persist the configuration information as selected by the user.
* @param a_cInfo configuration Information to persist
*
* @author Siddhartha Azad
* @since 2.3
* */
public void write(final IConfigInfo a_cInfo) {
ConfigData cd = a_cInfo.getConfigData();
String nsPrefix = cd.getNS() + ".";
String name;
List values;
// construct name-value pairs from the information in the lists
for (int i = 0; i < cd.getNumLists(); i++) {
name = cd.getListNameAt(i);
values = cd.getListValuesAt(i);
int idx = 0;
for (Iterator iter = values.iterator(); iter.hasNext(); idx++) {
// append an index for same key elements
String tmpName = name + "[" + idx + "]";
tmpName = nsPrefix + tmpName;
m_config.setProperty(tmpName, (String) iter.next());
}
}
String value = "", tmpName = "";
for (int i = 0; i < cd.getNumTexts(); i++) {
name = cd.getTextNameAt(i);
value = cd.getTextValueAt(i);
tmpName = nsPrefix + name;
m_config.setProperty(tmpName, value);
}
try {
FileOutputStream out = new FileOutputStream(a_cInfo.getFileName());
try {
m_config.store(out, "---JGAP Configuration File---");
} finally {
out.close();
}
} catch (IOException ioEx) {
JOptionPane.showMessageDialog(null,
"Exception " + ioEx.getMessage(),
"Configuration Exception",
JOptionPane.INFORMATION_MESSAGE);
ioEx.printStackTrace();
}
}
}