001: package net.sourceforge.squirrel_sql.fw.util;
002:
003: /*
004: * Copyright (C) 2001-2003 Colin Bell
005: * colbell@users.sourceforge.net
006: *
007: * This library is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU Lesser General Public
009: * License as published by the Free Software Foundation; either
010: * version 2.1 of the License, or (at your option) any later version.
011: *
012: * This library is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this library; if not, write to the Free Software
019: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
020: */
021: import java.util.Iterator;
022:
023: import net.sourceforge.squirrel_sql.fw.id.IHasIdentifier;
024: import net.sourceforge.squirrel_sql.fw.id.IIdentifier;
025:
026: /**
027: * This interface defines a the behaviour of an object cache.
028: *
029: * @author <A HREF="mailto:colbell@users.sourceforge.net">Colin Bell</A>
030: */
031: public interface IObjectCache<E extends IHasIdentifier> {
032: /**
033: * Retrieve a stored object.
034: *
035: * @param objClass The class of the object to be retrieved.
036: * @param id The <CODE>IIdentifier</CODE> that identifies
037: * the object to be retrieved.
038: *
039: * @return The <CODE>IHasIdentifier</CODE> retrieved or <CODE>null</CODE>
040: * if no object exists for <CODE>id</CODE>.
041: */
042: IHasIdentifier get(Class<E> objClass, IIdentifier id);
043:
044: /**
045: * Store an object.
046: *
047: * @param obj Object to be stored.
048: *
049: * @exception DuplicateObjectException
050: * Thrown if an object of the same class as <CODE>obj</CODE>
051: * and with the same identifier is already in the cache.
052: */
053: void add(E obj) throws DuplicateObjectException;
054:
055: /**
056: * Remove an object.
057: *
058: * @param objClass Class of object to be removed.
059: * @param id Identifier for object to be removed.
060: */
061: void remove(Class<E> objClass, IIdentifier id);
062:
063: /**
064: * Return an array of <CODE>Class</CODE objects that represent all the
065: * different types of objects stored.
066: *
067: * @return Class[] of all classes stored.
068: */
069: Class<E>[] getAllClasses();
070:
071: /**
072: * Return an <CODE>Iterator</CODE> of all objects stored for the
073: * passed class.
074: *
075: * @param objClass Class to return objects for.
076: *
077: * @return <CODE>Iterator</CODE> over all objects.
078: */
079: Iterator<E> getAllForClass(Class<E> objClass);
080:
081: /**
082: * Adds a listener for changes to the cache entry for the passed class.
083: *
084: * @param lis a IObjectCacheChangeListener that will be notified
085: * when objects are added or removed from this cache
086: * entry.
087: * @param objClass The class of objects whose cache we want to listen
088: * to.
089: */
090: void addChangesListener(IObjectCacheChangeListener lis,
091: Class<E> objClass);
092:
093: /**
094: * Removes a listener for changes to the cache entry for the passed class.
095: *
096: * @param lis a IObjectCacheChangeListener that will be notified
097: * when objects are added or removed from this cache
098: * entry.
099: * @param objClass The class of objects whose cache we want to listen
100: * to.
101: */
102: void removeChangesListener(IObjectCacheChangeListener lis,
103: Class<E> objClass);
104: }
|