/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package de.cismet.cismap.commons.util; import java.util.HashMap; import java.util.Map; /** * DOCUMENT ME! * * @author therter * @version $Revision$, $Date$ */ public class SimpleCache<T> { //~ Instance fields -------------------------------------------------------- private String[] ids; private int index = 0; private Map<String, T> dataMap; //~ Constructors ----------------------------------------------------------- /** * Creates a new Cache object. * * @param size DOCUMENT ME! */ public SimpleCache(final int size) { init(size); } //~ Methods ---------------------------------------------------------------- /** * DOCUMENT ME! * * @param size DOCUMENT ME! */ private void init(final int size) { ids = new String[size]; index = 0; dataMap = new HashMap<String, T>(); } /** * DOCUMENT ME! */ public void clear() { ids = new String[ids.length]; index = 0; dataMap.clear(); } /** * DOCUMENT ME! * * @param id DOCUMENT ME! * @param data DOCUMENT ME! */ public void add(final String id, final T data) { if (ids[index] != null) { dataMap.remove(ids[index]); } ids[index] = id; increaseIndex(); dataMap.put(id, data); } /** * DOCUMENT ME! * * @param id DOCUMENT ME! * @param data DOCUMENT ME! */ public void add(final int id, final T data) { add(String.valueOf(id), data); } /** * DOCUMENT ME! * * @param id DOCUMENT ME! * * @return DOCUMENT ME! */ public T get(final String id) { final T res = dataMap.get(id); if (res != null) { while ((ids[index] == null) || (!ids[index].equals(id))) { increaseIndex(); } increaseIndex(); } return res; } /** * DOCUMENT ME! * * @param id DOCUMENT ME! * * @return DOCUMENT ME! */ public T get(final int id) { return get(String.valueOf(id)); } /** * DOCUMENT ME! * * @param size DOCUMENT ME! */ private void setSize(final int size) { init(size); } /** * DOCUMENT ME! */ private void increaseIndex() { ++index; if (index >= ids.length) { index = 0; } } }