//
// $Id$
//
// ToyBox library - framework for matchmaking networked games
// Copyright (C) 2005 Three Rings Design, Inc., All Rights Reserved
// http://www.gamegardens.com/code/
//
// 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.toybox.data;

import com.threerings.crowd.chat.data.ChatCodes;
import com.threerings.crowd.data.BodyObject;

/**
 * Extends the {@link BodyObject} with some custom bits needed for ToyBox
 * (mainly permissions handling).
 */
public class ToyBoxUserObject extends BodyObject
{
    // AUTO-GENERATED: FIELDS START
    /** The field name of the <code>tokens</code> field. */
    public static final String TOKENS = "tokens";
    // AUTO-GENERATED: FIELDS END

    /** Indicates which access control tokens are held by this user. */
    public TokenRing tokens;

    // documentation inherited
    public String checkAccess (String feature, Object context)
    {
        if (ChatCodes.BROADCAST_ACCESS.equals(feature)) {
            return tokens.isAdmin() ? null : ChatCodes.ACCESS_DENIED;
        } else {
            return super.checkAccess(feature, context);
        }
    }

    // AUTO-GENERATED: METHODS START
    /**
     * Requests that the <code>tokens</code> field be set to the
     * specified value. The local value will be updated immediately and an
     * event will be propagated through the system to notify all listeners
     * that the attribute did change. Proxied copies of this object (on
     * clients) will apply the value change when they received the
     * attribute changed notification.
     */
    public void setTokens (TokenRing value)
    {
        TokenRing ovalue = this.tokens;
        requestAttributeChange(
            TOKENS, value, ovalue);
        this.tokens = value;
    }
    // AUTO-GENERATED: METHODS END
}

@@ -948,16 +948,65 @@
 .data;%0A%0A
+import com.threerings.presents.data.Permission;%0A%0A
 import c
@@ -1550,34 +1550,36 @@
     
-// documentation inherited
+@Override // from BodyObject
 %0A   
@@ -1610,22 +1610,23 @@
 ss (
-String feature
+Permission perm
 , Ob
@@ -1657,16 +1657,24 @@
     if (
+perm == 
 ChatCode
@@ -1695,24 +1695,8 @@
 CESS
-.equals(feature)
 ) %7B%0A
@@ -1823,15 +1823,12 @@
 ess(
-feature
+perm
 , co

Use new Permission object.