package name.abuchen.portfolio.bootstrap;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class IniFileManipulator
{
private static final String CLEAR_PERSISTED_STATE = "-clearPersistedState"; //$NON-NLS-1$
private List<String> lines = new ArrayList<String>();
private boolean isDirty = false;
public void load() throws IOException
{
lines = readAllLines(getIniFile());
}
public void save() throws IOException
{
write(getIniFile(), lines);
isDirty = false;
}
public File getIniFile()
{
String eclipseLauncher = System.getProperty("eclipse.launcher"); //$NON-NLS-1$
File path = new File(eclipseLauncher);
String executable = path.getName().toString();
int p = executable.lastIndexOf('.');
String iniFileName = (p > 0 ? executable.substring(0, p) : executable) + ".ini"; //$NON-NLS-1$
return new File(path.getParentFile(), iniFileName);
}
public void unsetClearPersistedState()
{
Iterator<String> iterator = lines.iterator();
while (iterator.hasNext())
{
String line = iterator.next();
if (line.trim().equals(CLEAR_PERSISTED_STATE))
{
iterator.remove();
isDirty = true;
return;
}
}
}
public boolean isDirty()
{
return isDirty;
}
private void write(File file, List<String> lines) throws IOException
{
BufferedWriter out = new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(file), Charset.defaultCharset()));
try
{
for (String line : lines)
{
out.write(line);
out.write('\n');
}
}
finally
{
out.close();
}
}
private List<String> readAllLines(File file) throws IOException
{
List<String> answer = new ArrayList<String>();
FileInputStream in = new FileInputStream(file);
BufferedReader reader = new BufferedReader(new InputStreamReader(in, Charset.defaultCharset()));
try
{
String line = null;
while ((line = reader.readLine()) != null)
answer.add(line);
}
finally
{
reader.close();
}
return answer;
}
}