/**
* Copyright (c) 20015 by Brainwy Software Ltda. All Rights Reserved.
* Licensed under the terms of the Eclipse Public License (EPL).
* Please see the license.txt included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
package org.python.pydev.shared_ui.search;
import java.util.Iterator;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.python.pydev.shared_core.structure.OrderedSet;
public class SearchIndexDataHistory {
private static final String PAGE_NAME = "SearchIndexPage";
private static final String STORE_HISTORY = "HISTORY";
private static final String STORE_HISTORY_SIZE = "HISTORY_SIZE";
private static final int HISTORY_SIZE = 15;
private OrderedSet<SearchIndexData> fPreviousSearchPatterns = new OrderedSet<>();
/**
* This is always the last one added (the one to make current in a reload).
*/
private SearchIndexData last = null;
private IDialogSettings settings;
public SearchIndexDataHistory(AbstractUIPlugin plugin) {
IDialogSettings dialogSettings = plugin.getDialogSettings();
IDialogSettings section = dialogSettings.getSection(PAGE_NAME);
if (section == null) {
section = dialogSettings.addNewSection(PAGE_NAME);
}
this.settings = section;
}
public SearchIndexData getLast() {
return last;
}
public void add(SearchIndexData data) {
fPreviousSearchPatterns.remove(data); // remove from where it was
fPreviousSearchPatterns.add(data); // add it to the end
if (fPreviousSearchPatterns.size() > HISTORY_SIZE) {
final Iterator<SearchIndexData> it = fPreviousSearchPatterns.iterator();
it.next();
it.remove();
}
last = data;
}
/**
* Initializes itself from the stored page settings.
*/
public void readConfiguration() {
try {
IDialogSettings s = settings;
int historySize = s.getInt(STORE_HISTORY_SIZE);
for (int i = 0; i < historySize; i++) {
IDialogSettings histSettings = s.getSection(STORE_HISTORY + i);
if (histSettings != null) {
SearchIndexData data = SearchIndexData.create(histSettings);
if (data != null) {
last = data;
fPreviousSearchPatterns.add(data);
}
}
}
} catch (NumberFormatException e) {
// ignore
}
}
/**
* Stores it current configuration in the dialog store.
*/
public void writeConfiguration() {
IDialogSettings s = settings;
int historySize = Math.min(fPreviousSearchPatterns.size(), HISTORY_SIZE);
s.put(STORE_HISTORY_SIZE, historySize);
Iterator<SearchIndexData> it = fPreviousSearchPatterns.iterator();
for (int i = 0; i < historySize; i++) {
IDialogSettings histSettings = s.addNewSection(STORE_HISTORY + i);
SearchIndexData data = (it.next());
data.store(histSettings);
}
}
}