public <T extends OccupantInfo> boolean updateOccupantInfo (
        int bodyOid, OccupantInfo.Updater<T> updater)
    {
        @SuppressWarnings("unchecked") T info = (T)_occInfo.get(bodyOid);
        if (info == null || !updater.update(info)) {
            return false;
        }
        // update the canonical copy
        _occInfo.put(info.getBodyOid(), info);
        // clone the canonical copy and send an event updating the distributed set with that clone
        _plobj.updateOccupantInfo(info.clone());
        return true;
    }
public < T extends OccupantInfo > boolean updateOccupantInfo ( int bodyOid , OccupantInfo . Updater < T > updater ) { @ SuppressWarnings ( "unchecked" ) T info = ( T ) _occInfo . get ( bodyOid ) ; if ( info == null || ! updater . update ( info ) ) { return false ; } _occInfo . put ( info . getBodyOid ( ) , info ) ; _plobj . updateOccupantInfo ( info . clone ( ) ) ; return true ; }
Calls the supplied updater on the canonical occupant info record for the specified body
(which must be an occupant of this place) and broadcasts the update to all other occupants.

@return true if the updater was called and the update sent, false if the body could not be
located (was not an occupant of this place) or the updater made no modifications.

@exception ClassCastException thrown if the type of the supplied updater does not match the
type of {@link OccupantInfo} record used for the occupant. Caveat utilitor.