Author: joern Date: Fri Oct 14 12:37:26 2011 New Revision: 1183331 URL: http://svn.apache.org/viewvc?rev=1183331&view=rev Log: UIMA-2261 Session preferences are now serialized and stored as persistent property on type system file.
Modified: uima/uimaj/trunk/uimaj-ep-cas-editor-ide/src/main/java/org/apache/uima/caseditor/ide/DefaultCasDocumentProvider.java Modified: uima/uimaj/trunk/uimaj-ep-cas-editor-ide/src/main/java/org/apache/uima/caseditor/ide/DefaultCasDocumentProvider.java URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-ep-cas-editor-ide/src/main/java/org/apache/uima/caseditor/ide/DefaultCasDocumentProvider.java?rev=1183331&r1=1183330&r2=1183331&view=diff ============================================================================== --- uima/uimaj/trunk/uimaj-ep-cas-editor-ide/src/main/java/org/apache/uima/caseditor/ide/DefaultCasDocumentProvider.java (original) +++ uima/uimaj/trunk/uimaj-ep-cas-editor-ide/src/main/java/org/apache/uima/caseditor/ide/DefaultCasDocumentProvider.java Fri Oct 14 12:37:26 2011 @@ -23,6 +23,7 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; +import java.nio.charset.Charset; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; @@ -52,9 +53,12 @@ import org.eclipse.core.runtime.CoreExce import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.QualifiedName; import org.eclipse.core.runtime.Status; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferenceStore; +import org.eclipse.jface.util.IPropertyChangeListener; +import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; @@ -116,6 +120,38 @@ public class DefaultCasDocumentProvider } } + private class SaveSessionPreferencesTrigger implements IPropertyChangeListener { + private Object element; + + SaveSessionPreferencesTrigger(Object element) { + this.element = element; + } + + public void propertyChange(PropertyChangeEvent event) { + IResource tsFile = ResourcesPlugin.getWorkspace().getRoot() + .findMember((getTypesystemId(element))); + + PreferenceStore prefStore = (PreferenceStore) getSessionPreferenceStore(element); + + ByteArrayOutputStream prefBytes = new ByteArrayOutputStream(); + try { + prefStore.save(prefBytes, ""); + } catch (IOException e) { + CasEditorIdePlugin.log(e); + } + + try { + tsFile.setPersistentProperty( + new QualifiedName("", CAS_EDITOR_SESSION_PROPERTIES), + new String(prefBytes.toByteArray(), Charset.forName("UTF-8"))); + } catch (CoreException e) { + CasEditorIdePlugin.log(e); + } + } + } + + private static final String CAS_EDITOR_SESSION_PROPERTIES = "CAS_EDITOR_SESSION_PROPERTIES"; + /** * This map resolved an opened document to its associated style object id. * @@ -282,6 +318,28 @@ public class DefaultCasDocumentProvider documentToTypeSystemMap.put(casFile.getFullPath().toPortableString(), typeSystemFile.getFullPath().toPortableString()); + + IPreferenceStore store = sessionPreferenceStores.get(getTypesystemId(element)); + + if (store == null) { + PreferenceStore newStore = new PreferenceStore(); + sessionPreferenceStores.put(getTypesystemId(element), newStore); + newStore.addPropertyChangeListener(new SaveSessionPreferencesTrigger(element)); + + String sessionPreferenceString = typeSystemFile.getPersistentProperty( + new QualifiedName("", CAS_EDITOR_SESSION_PROPERTIES)); + + if (sessionPreferenceString != null) { + try { + newStore.load(new ByteArrayInputStream( + sessionPreferenceString.getBytes(Charset.forName("UTF-8")))); + } catch (IOException e) { + CasEditorPlugin.log(e); + } + } + } + + // TODO: // Preferences are bound to the type system // Changed in one place, then it should change in all places @@ -426,16 +484,7 @@ public class DefaultCasDocumentProvider @Override public IPreferenceStore getSessionPreferenceStore(Object element) { - - // lookup one, and if it does not exist create a new one, and put it! - IPreferenceStore store = sessionPreferenceStores.get(getTypesystemId(element)); - - if (store == null) { - store = new PreferenceStore(); - sessionPreferenceStores.put(getTypesystemId(element), store); - } - - return store; + return sessionPreferenceStores.get(getTypesystemId(element)); } void setTypeSystem(String document, String typeSystem) {