/* * IIOPreferences.java * * Created on September 6, 2004, 4:37 PM */ package kiyut.ekspos.prefs; import java.util.*; import java.util.prefs.*; import javax.imageio.*; import javax.imageio.spi.*; import kiyut.ekspos.*; import kiyut.imageio.*; /** IIOPreferences * * @author Kiyut */ public class IIOPreferences extends AbstractPreferencesOption { private static IIOPreferences instance; // single instance public static final String PREFERENCES_NODE = PreferencesOption.ROOT_NODE + "/IIO"; protected static final String VALUE_SEPARATOR = "="; protected static final String READER_KEY = "reader"; private ImageReaderWriterPreferences readerWriterPrefs; /** * Returns the single instance, creating one if it's the * first time this method is called. * * @return IIOPreferences The single instance. */ static synchronized public IIOPreferences getInstance() { if (instance == null) { instance = new IIOPreferences(); } return instance; } /** Creates a new instance of IIOPreferences */ private IIOPreferences() { IIORegistry.getDefaultInstance().registerApplicationClasspathSpis(); readerWriterPrefs = new ImageReaderWriterPreferences(); load(); } /** {@inheritDoc} */ public void save() { Preferences prefs = Preferences.userRoot().node(PREFERENCES_NODE); try { prefs.clear(); } catch (BackingStoreException ex) { ex.printStackTrace(); } /////////////// // save reader /////////////// Map readerMap = readerWriterPrefs.getPreferredImageReaderSpi(); Iterator it = readerMap.entrySet().iterator(); int count = 0; while (it.hasNext()) { Map.Entry entry = (Map.Entry)it.next(); ImageReaderSpi spi = (ImageReaderSpi)entry.getValue(); String value = (String)entry.getKey() + VALUE_SEPARATOR + spi.getClass().getName(); prefs.put(READER_KEY+Integer.toString(count),value); count++; } } /** {@inheritDoc} */ public void load() { Preferences prefs = Preferences.userRoot().node(PREFERENCES_NODE); /////////////// // load reader /////////////// Map<String,ImageReaderSpi> readerMap = readerWriterPrefs.getPreferredImageReaderSpi(); int count = 0; while(true) { String value = prefs.get(READER_KEY+Integer.toString(count),null); if (value == null) { break; } count++; // split the value int index = value.indexOf(VALUE_SEPARATOR); if (index == -1) { continue; } String format = value.substring(0,index); String className = value.substring(index+1); try { Class classDefinition = Class.forName(className); ImageReaderSpi spi = (ImageReaderSpi)classDefinition.newInstance(); readerMap.put(format,spi); } catch (Exception ex) { System.err.println("unable to load Preferences reader: " + format); System.err.println(ex.getMessage()); } } } /** Return ImageReaderWriterPreferences. * @return ImageReaderWriterPreferences */ public ImageReaderWriterPreferences getImageReaderWriterPreferences() { return readerWriterPrefs; } }