package com.vividsolutions.jump.workbench.ui.plugin;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import com.vividsolutions.jump.util.Blackboard;
import com.vividsolutions.jump.util.java2xml.Java2XML;
import com.vividsolutions.jump.util.java2xml.XML2Java;
import com.vividsolutions.jump.workbench.WorkbenchContext;
import com.vividsolutions.jump.workbench.plugin.AbstractPlugIn;
import com.vividsolutions.jump.workbench.plugin.PlugInContext;
public class PersistentBlackboardPlugIn extends AbstractPlugIn {
private static String persistenceDirectory = ".";
private static String fileName = "workbench-state.xml";
private static final String BLACKBOARD_KEY = PersistentBlackboardPlugIn.class
.getName()
+ " - BLACKBOARD";
public static Blackboard get(WorkbenchContext context) {
Blackboard blackboard = context.getBlackboard();
return get(blackboard);
}
public static Blackboard get(Blackboard blackboard) {
if (blackboard.get(BLACKBOARD_KEY) == null) {
blackboard.put(BLACKBOARD_KEY, new Blackboard());
}
return (Blackboard) blackboard.get(BLACKBOARD_KEY);
}
public static void setPersistenceDirectory(String value) {
persistenceDirectory = value;
}
public static void setFileName(String value) {
fileName = value;
}
public String getFilePath() {
return persistenceDirectory + "/" + fileName;
}
public void initialize(final PlugInContext context) throws Exception {
restoreState(context.getWorkbenchContext());
context.getWorkbenchFrame().addComponentListener(
new ComponentAdapter() {
public void componentHidden(ComponentEvent e) {
saveState(context.getWorkbenchContext());
}
});
}
private void restoreState(WorkbenchContext workbenchContext) {
if (!new File(getFilePath()).exists()) { return; }
try {
FileReader fileReader = new FileReader(getFilePath());
try {
BufferedReader bufferedReader = new BufferedReader(fileReader);
try {
get(workbenchContext).putAll(
((Blackboard) new XML2Java(workbenchContext
.getWorkbench().getPlugInManager()
.getClassLoader()).read(bufferedReader,
Blackboard.class)).getProperties());
} finally {
bufferedReader.close();
}
} finally {
fileReader.close();
}
} catch (Exception e) {
// Before we just ate exceptions. But this is confusing when
// there is a problem and we don't know that the cause is an
// exception [Jon Aquino 2005-03-11]
e.printStackTrace(System.err);
}
}
private void saveState(WorkbenchContext workbenchContext) {
try {
FileWriter fileWriter = new FileWriter(getFilePath(), false);
try {
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
try {
new Java2XML().write(get(workbenchContext),
"workbench-state", bufferedWriter);
bufferedWriter.flush();
fileWriter.flush();
} finally {
bufferedWriter.close();
}
} finally {
fileWriter.close();
}
} catch (Exception e) {
e.printStackTrace(System.err);
//Eat it. Persistence isn't critical. [Jon Aquino]
}
}
}