From f34c344f008548906045be74eb656a177e561d7a Mon Sep 17 00:00:00 2001 From: Michael Scharf Date: Mon, 11 Dec 2006 22:15:14 +0000 Subject: [PATCH] FIXED - bug 165984: [terminal] store view data in memento and not in dialog settings https://bugs.eclipse.org/bugs/show_bug.cgi?id=165984 --- .../terminal/internal/view/SettingsStore.java | 84 +++++++++++++++++-- .../terminal/internal/view/TerminalView.java | 36 ++++---- 2 files changed, 93 insertions(+), 27 deletions(-) diff --git a/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/terminal/internal/view/SettingsStore.java b/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/terminal/internal/view/SettingsStore.java index 55a3b3d4011..7b53195e5d2 100644 --- a/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/terminal/internal/view/SettingsStore.java +++ b/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/terminal/internal/view/SettingsStore.java @@ -10,35 +10,101 @@ *******************************************************************************/ package org.eclipse.tm.terminal.internal.view; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.tm.terminal.ISettingsStore; +import org.eclipse.ui.IMemento; /** * A {@link IDialogSettings} based {@link ISettingsStore}. * + * Setting Store dased on IMemento. IMemento documentations says only alpha numeric + * values mey be used as keys. Therefore the implementation converts dots (.) into + * child elements of the memento. + * * @author Michael Scharf */ class SettingsStore implements ISettingsStore { - final private IDialogSettings fDialogSettings; - final private String fPrefix; - public SettingsStore(String terminalPartName) { - fDialogSettings=TerminalViewPlugin.getDefault().getDialogSettings(); - fPrefix=getClass().getName() + "." + terminalPartName + "."; //$NON-NLS-1$ //$NON-NLS-2$; + + private static final String KEYS = "_keys_"; + final private Map fMap=new HashMap(); + public SettingsStore(IMemento memento) { + if(memento==null) + return; + // load all keys ever used from the memento + String keys=memento.getString(KEYS); + if(keys!=null) { + String[] keyNames=keys.split(","); + for (int i = 0; i < keyNames.length; i++) { + String key=keyNames[i]; + if(!KEYS.equals(key)) { + // get the dot separated elements + String[] path=key.split("\\."); + IMemento m=memento; + // iterate over all but the last segment and get the children... + for(int iPath=0; m!=null && iPath+10) + buffer.append(","); + buffer.append(key); + } + // save the keys we have used. + memento.putString(KEYS, buffer.toString()); } } diff --git a/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/terminal/internal/view/TerminalView.java b/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/terminal/internal/view/TerminalView.java index 9f28f3ea597..985dc43bb31 100644 --- a/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/terminal/internal/view/TerminalView.java +++ b/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/terminal/internal/view/TerminalView.java @@ -53,6 +53,8 @@ import org.eclipse.tm.terminal.internal.actions.TerminalActionPaste; import org.eclipse.tm.terminal.internal.actions.TerminalActionSelectAll; import org.eclipse.tm.terminal.internal.actions.TerminalActionSettings; import org.eclipse.ui.IActionBars; +import org.eclipse.ui.IMemento; +import org.eclipse.ui.IViewSite; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkbenchPage; @@ -66,9 +68,6 @@ import org.eclipse.ui.part.ViewPart; public class TerminalView extends ViewPart implements ITerminalView, ITerminalListener { public static final String FONT_DEFINITION = "terminal.views.view.font.definition"; //$NON-NLS-1$ - protected static final String fSecondaryTerminalCountMutex = ""; //$NON-NLS-1$ - - protected static int fSecondaryTerminalCount = 0; protected ITerminalViewControl fCtlTerminal; @@ -96,7 +95,7 @@ public class TerminalView extends ViewPart implements ITerminalView, ITerminalLi protected boolean fMenuAboutToShow; - private ISettingsStore fStore; + private SettingsStore fStore; /** Remember the item with which we contributed the shortcut to unregister them again! */ private IContextActivation fRememberedContextActivation; @@ -214,7 +213,7 @@ public class TerminalView extends ViewPart implements ITerminalView, ITerminalLi // When the settings dialog is closed, we persist the Terminal settings. - saveSettings(); + saveSettings(dlgTerminalSettings.getConnector()); return dlgTerminalSettings.getConnector(); } @@ -348,9 +347,7 @@ public class TerminalView extends ViewPart implements ITerminalView, ITerminalLi IContextService ctxtService = (IContextService) getSite().getService(IContextService.class); fRememberedContextActivation = ctxtService.activateContext("org.eclipse.tm.terminal.TerminalPreferencePage"); //$NON-NLS-1$ - synchronized (fSecondaryTerminalCountMutex) { - setPartName(ViewMessages.PROP_TITLE + " " + fSecondaryTerminalCount++); //$NON-NLS-1$ - } + setPartName(ViewMessages.PROP_TITLE); setupControls(wndParent); setupActions(); @@ -412,31 +409,34 @@ public class TerminalView extends ViewPart implements ITerminalView, ITerminalLi protected void setupControls(Composite wndParent) { ITerminalConnector[] connectors=TerminalConnectorExtension.getTerminalConnectors(); fCtlTerminal = TerminalViewControlFactory.makeControl(this, wndParent, connectors); - String connectionType=getStore().get("ConnectionType"); //$NON-NLS-1$ + String connectionType=fStore.get("ConnectionType"); //$NON-NLS-1$ for (int i = 0; i < connectors.length; i++) { connectors[i].load(getStore(connectors[i])); if(connectors[i].getId().equals(connectionType)) fCtlTerminal.setConnector(connectors[i]); } } - private void saveSettings() { + private void saveSettings(ITerminalConnector connector) { ITerminalConnector[] connectors=fCtlTerminal.getConnectors(); for (int i = 0; i < connectors.length; i++) { connectors[i].save(getStore(connectors[i])); } - if(fCtlTerminal.getTerminalConnection()!=null) { - getStore().put("ConnectionType",fCtlTerminal.getTerminalConnection().getId()); //$NON-NLS-1$ + if(connector!=null) { + fStore.put("ConnectionType",connector.getId()); //$NON-NLS-1$ } } - private ISettingsStore getStore() { - if(fStore==null) - fStore=new SettingsStore(getPartName()); - return fStore; + public void init(IViewSite site, IMemento memento) throws PartInitException { + super.init(site, memento); + fStore=new SettingsStore(memento); + } + + public void saveState(IMemento memento) { + super.saveState(memento); + fStore.saveState(memento); } - private ISettingsStore getStore(ITerminalConnector connector) { - return new SettingStorePrefixDecorator(getStore(),connector.getClass().getName()+"."); //$NON-NLS-1$ + return new SettingStorePrefixDecorator(fStore,connector.getClass().getName()+"."); //$NON-NLS-1$ } protected void setupActions() {