/*
* jMemorize - Learning made easy (and fun) - A Leitner flashcards tool
* Copyright(C) 2004-2006 Riad Djemili
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 1, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
import java.util.ArrayList;
import java.util.List;
import java.util.prefs.Preferences;
/**
* A simple data structure to store recent items (e.g. recent file in a menu or
* recent search text in a search dialog).
*
* @author djemili
*/
public class RecentItems
{
public interface RecentItemsObserver
{
void onRecentItemChange(RecentItems src);
}
public final static String RECENT_ITEM_STRING = "recent.item."; //$NON-NLS-1$
private int m_maxItems;
private Preferences m_prefNode;
private List<String> m_items = new ArrayList<String>();
private List<RecentItemsObserver> m_observers = new ArrayList<RecentItemsObserver>();
public RecentItems(int maxItems, Preferences prefNode)
{
m_maxItems = maxItems;
m_prefNode = prefNode;
loadFromPreferences();
}
public void push(String item)
{
m_items.remove(item);
m_items.add(0, item);
if (m_items.size() > m_maxItems)
{
m_items.remove(m_items.size() - 1);
}
update();
}
public void remove(Object item)
{
m_items.remove(item);
update();
}
public String get(int index)
{
return (String)m_items.get(index);
}
public List<String> getItems()
{
return m_items;
}
public int size()
{
return m_items.size();
}
public void addObserver(RecentItemsObserver observer)
{
m_observers.add(observer);
}
public void removeObserver(RecentItemsObserver observer)
{
m_observers.remove(observer);
}
private void update()
{
for (RecentItemsObserver observer : m_observers)
{
observer.onRecentItemChange(this);
}
storeToPreferences();
}
private void loadFromPreferences()
{
// load recent files from properties
for (int i = 0; i < m_maxItems; i++)
{
String val = m_prefNode.get(RECENT_ITEM_STRING+i, ""); //$NON-NLS-1$
if (!val.equals("")) //$NON-NLS-1$
{
m_items.add(val);
}
else
{
break;
}
}
}
private void storeToPreferences()
{
for (int i = 0; i < m_maxItems; i++)
{
if (i < m_items.size())
{
m_prefNode.put(RECENT_ITEM_STRING+i, (String)m_items.get(i));
}
else
{
m_prefNode.remove(RECENT_ITEM_STRING+i);
}
}
}
}
|