8afd0316ec
required some serious bending and folding of the generic type system, but for the most part we managed to avoid any mutilating. The gendobj task now generates properly typed "addToXXX" and "updateXXX" DSet methods based on the parameterized type of the DSet. This might cause unrecompiled code to break, but I don't think there are many cases in the base toolkit where people call DSet adders or updaters. We'll see and I'll add backwards compatibility versions for cases where we need them to support GG games (everything else we can just recompile). git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4245 542714f4-19e9-0310-aa3c-eee0fc999fb1
119 lines
3.6 KiB
Java
119 lines
3.6 KiB
Java
//
|
|
// $Id$
|
|
//
|
|
// Narya library - tools for developing networked games
|
|
// Copyright (C) 2002-2004 Three Rings Design, Inc., All Rights Reserved
|
|
// http://www.threerings.net/code/narya/
|
|
//
|
|
// This library is free software; you can redistribute it and/or modify it
|
|
// under the terms of the GNU Lesser General Public License as published
|
|
// by the Free Software Foundation; either version 2.1 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// This library 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
|
|
// Lesser General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU Lesser General Public
|
|
// License along with this library; if not, write to the Free Software
|
|
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
package com.threerings.presents.dobj;
|
|
|
|
import com.threerings.presents.Log;
|
|
|
|
/**
|
|
* An entry removed event is dispatched when an entry is removed from a
|
|
* {@link DSet} attribute of a distributed object. It can also be
|
|
* constructed to request the removal of an entry from a set and posted to
|
|
* the dobjmgr.
|
|
*
|
|
* @see DObjectManager#postEvent
|
|
*/
|
|
public class EntryRemovedEvent<T extends DSet.Entry> extends NamedEvent
|
|
{
|
|
/**
|
|
* Constructs a new entry removed event on the specified target object
|
|
* with the supplied set attribute name and entry key to remove.
|
|
*
|
|
* @param targetOid the object id of the object from whose set we will
|
|
* remove an entry.
|
|
* @param name the name of the attribute from which to remove the
|
|
* specified entry.
|
|
* @param key the entry key that identifies the entry to remove.
|
|
* @param oldEntry the previous value of the entry.
|
|
*/
|
|
public EntryRemovedEvent (int targetOid, String name, Comparable key,
|
|
T oldEntry)
|
|
{
|
|
super(targetOid, name);
|
|
_key = key;
|
|
_oldEntry = oldEntry;
|
|
}
|
|
|
|
/**
|
|
* Constructs a blank instance of this event in preparation for
|
|
* unserialization from the network.
|
|
*/
|
|
public EntryRemovedEvent ()
|
|
{
|
|
}
|
|
|
|
/**
|
|
* Returns the key that identifies the entry that has been removed.
|
|
*/
|
|
public Comparable getKey ()
|
|
{
|
|
return _key;
|
|
}
|
|
|
|
/**
|
|
* Returns the entry that was in the set prior to being updated.
|
|
*/
|
|
public T getOldEntry ()
|
|
{
|
|
return _oldEntry;
|
|
}
|
|
|
|
/**
|
|
* Applies this event to the object.
|
|
*/
|
|
public boolean applyToObject (DObject target)
|
|
throws ObjectAccessException
|
|
{
|
|
if (_oldEntry == UNSET_OLD_ENTRY) {
|
|
DSet<T> set = target.getSet(_name);
|
|
// remove, fetch the previous value for interested callers
|
|
_oldEntry = set.removeKey(_key);
|
|
if (_oldEntry == null) {
|
|
// complain if there was actually nothing there
|
|
Log.warning("No matching entry to remove [key=" + _key +
|
|
", set=" + set + "].");
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
// documentation inherited
|
|
protected void notifyListener (Object listener)
|
|
{
|
|
if (listener instanceof SetListener) {
|
|
((SetListener)listener).entryRemoved(this);
|
|
}
|
|
}
|
|
|
|
// documentation inherited
|
|
protected void toString (StringBuilder buf)
|
|
{
|
|
buf.append("ELREM:");
|
|
super.toString(buf);
|
|
buf.append(", key=").append(_key);
|
|
}
|
|
|
|
protected Comparable _key;
|
|
@SuppressWarnings("unchecked")
|
|
protected transient T _oldEntry = (T)UNSET_OLD_ENTRY;
|
|
}
|