/*
* $Id: AnyCitizen.java,v 1.21 2002/09/16 08:05:03 jkl Exp $
*
* Copyright (c) 2002 Njet Communications Ltd. All Rights Reserved.
*
* Use is subject to license terms, as defined in
* Anvil Sofware License, Version 1.1. See LICENSE
* file, or http://njet.org/license-1.1.txt
*/
package anvil.core.net;
import anvil.Log;
import anvil.core.Any;
import anvil.core.AnyTuple;
import anvil.core.AnyAbstractClass;
import anvil.core.AnyBindingEnumeration;
import anvil.core.runtime.AnyPermission;
import anvil.script.Context;
import anvil.server.Citizen;
import anvil.server.Tribe;
import anvil.server.Tribe;
import anvil.server.Citizen;
import anvil.server.OperationFailedException;
import anvil.java.util.BindingEnumeration;
import java.util.ArrayList;
import java.util.Enumeration;
import java.security.Permission;
///
/// @class Citizen
/**
* class AnyCitizen
*/
public class AnyCitizen extends AnyAbstractClass
{
public static anvil.core.RuntimePermission CAN_READ = new anvil.core.RuntimePermission("anvil.net.Citizen", false);
public static anvil.core.RuntimePermission CAN_WRITE = new anvil.core.RuntimePermission("anvil.net.Citizen", true);
private Citizen _citizen;
public AnyCitizen(Citizen citizen)
{
_citizen = citizen;
}
public final anvil.script.ClassType classOf()
{
return __class__;
}
public int hashCode()
{
return _citizen.hashCode();
}
public boolean equals(Object obj)
{
if (this == obj) {
return true;
}
if (obj instanceof AnyCitizen) {
return _citizen.equals(((AnyCitizen)obj)._citizen);
}
return false;
}
public Object toObject()
{
return _citizen;
}
public Any getAttribute(anvil.script.Context context, String attribute)
{
Any value = _citizen.getVariable(attribute);
if (value != null) {
return value;
} else {
return Any.UNDEFINED;
}
}
public Any checkAttribute(anvil.script.Context context, String attribute)
{
return getAttribute(context, attribute);
}
public Any setAttribute(anvil.script.Context context, String attribute, Any value)
{
context.checkAccess(CAN_WRITE);
return _citizen.setVariable(attribute, value);
}
public boolean deleteAttribute(anvil.script.Context context, String attribute)
{
context.checkAccess(CAN_WRITE);
return _citizen.deleteVariable(attribute);
}
public Any getReference(anvil.script.Context context, Any index)
{
return getAttribute(context, index.toString());
}
public Any checkReference(anvil.script.Context context, Any index)
{
return checkAttribute(context, index.toString());
}
public Any setReference(anvil.script.Context context, Any index, Any value)
{
return setAttribute(context, index.toString(), value);
}
public boolean deleteReference(anvil.script.Context context, Any index)
{
return deleteAttribute(context, index.toString());
}
public BindingEnumeration enumeration()
{
return _citizen.getVariables();
}
/// @method getName
/// Returns the name of citizen.
/// @synopsis string getName()
public Any m_getName()
{
return Any.create(_citizen.getName());
}
/// @method verifyCredentials
/// Checks if given crendentials matches this citizen's crendentials.
/// @synopsis boolean verifyCredentials(string password)
public static final Object[] p_verifyCredentials = new Object[] { "credentials" };
public Any m_verifyCredentials(String credentials)
{
return Any.create(_citizen.verifyCredentials(credentials));
}
/// @method setCredentials
/// Sets this citizens crendentials.
/// @synopsis boolean setCredentials(string newCredentials)
/// @throws AccessDenied If security policy denies this operation
public static final Object[] p_setCredentials = new Object[] { null, "newCredentials" };
public Any m_setCredentials(Context context, String newc)
{
context.checkAccess(CAN_WRITE);
try {
_citizen.setCredentials(newc);
return this;
} catch (OperationFailedException e) {
throw context.exception(e);
}
}
/// @method commit
/// Commits changes made to this citizen.
/// @synopsis citizen commit()
/// @throws OperationFailed If operation failed
/// @throws AccessDenied If security policy denies this operation
public Any m_commit(Context context)
{
context.checkAccess(CAN_WRITE);
try {
_citizen.commit();
return this;
} catch (OperationFailedException e) {
throw context.exception(e);
}
}
/// @method getTribes
/// Returns list of tribe into which this citizen belongs to.
/// @synopsis list getTribes()
/// @throws AccessDenied If security policy denies this operation
public Any m_getTribes(Context context)
{
context.checkAccess(AnyTribe.CAN_READ);
Tribe[] tribes = _citizen.getParents();
int n = tribes.length;
Any[] list = new Any[n];
for(int i=0; i<n; i++) {
list[i] = new AnyTribe(tribes[i]);
}
return new AnyTuple(list);
}
/// @method getParents
/// Returns list of tribe into which this citizen belongs to.
/// @synopsis list getParents()
/// @throws AccessDenied If security policy denies this operation
public Any m_getParents(Context context)
{
return m_getTribes(context);
}
/// @method remove
/// Removes this citizen
/// @synopsis void remove()
/// @throws OperationFailed If operation failed
/// @throws AccessDenied If security policy denies this operation
public Any m_remove(Context context)
{
context.checkAccess(CAN_WRITE);
try {
_citizen.remove();
return this;
} catch (OperationFailedException e) {
throw context.exception(e);
}
}
/// @method getPermissions
/// Returns permissions that this user has.
/// @synopsis enumeration getPermissions()
/// @throws AccessDenied If security policy denies this operation
public Any m_getPermissions(Context context)
{
context.checkAccess(AnyRealm.CAN_READ);
Enumeration enu = _citizen.getPermissions().elements();
ArrayList list = new ArrayList();
while (enu.hasMoreElements()) {
list.add( new AnyPermission((Permission)enu.nextElement()) );
}
return new AnyTuple( (Any[])list.toArray(new Any[list.size()]) );
}
/// @method getCombinedPermissions
/// Returns permissions that this user has (including permissions inherited from groups).
/// @synopsis enumeration getCombinedPermissions()
/// @throws AccessDenied If security policy denies this operation
public Any m_getCombinedPermissions(Context context)
{
context.checkAccess(AnyRealm.CAN_READ);
Enumeration enu = _citizen.getCombinedPermissions().elements();
ArrayList list = new ArrayList();
while (enu.hasMoreElements()) {
list.add( new AnyPermission((Permission)enu.nextElement()) );
}
return new AnyTuple( (Any[])list.toArray(new Any[list.size()]) );
}
/// @method addPermission
/// Adds permission to citizen's security policy. You may have to call
/// commit() for the citizen to save modification to persistent store
/// (depenging on realm implementation)
/// @synopsis void addPermission(permission)
/// @throws OperationFailed If error occured file saving to persistent
public static final Object[] p_addPermission = { null, "permission" };
public Any m_addPermission(Context context, Any permission)
{
context.checkAccess(CAN_WRITE);
if (!(permission instanceof AnyPermission)) {
throw context.BadParameter("Permission expected");
}
try {
_citizen.addPermission((Permission)permission.toObject());
} catch (OperationFailedException e) {
throw context.exception(e);
}
return this;
}
/// @method removePermission
/// Removes permission from citizen's security policy. You may have to call
/// commit() for the citizen to save modification to persistent store
/// (depenging on realm implementation)
/// @synopsis void removePermission(permission)
/// @throws OperationFailed If error occured file removing from persistent
public static final Object[] p_removePermission = { null, "permission" };
public Any m_removePermission(Context context, Any permission)
{
context.checkAccess(CAN_WRITE);
if (!(permission instanceof AnyPermission)) {
throw context.BadParameter("Permission expected");
}
try {
_citizen.removePermission( (Permission)permission.toObject() );
} catch (OperationFailedException e) {
throw context.exception(e);
}
return this;
}
/// @method listPermissions
/// Returns enumeration of permissions held by this citizen.
/// @synopsis enumeration listPermissions()
public Any m_listPermissions()
{
return new AnyBindingEnumeration(_citizen.listPermissions());
}
/// @method getRealm
/// Returns the realm into which this citizen belongs to.
/// @synopsis Realm getRealm()
/// @throws AccessDenied If security policy denies this operation
public Any m_getRealm(Context context)
{
context.checkAccess(AnyRealm.CAN_READ);
return new AnyRealm(_citizen.getRealm());
}
public static final anvil.script.compiler.NativeClass __class__ =
new anvil.script.compiler.NativeClass("Citizen", AnyCitizen.class,
//DOC{{
""+
"\n" +
" @class Citizen\n" +
" @method getName\n" +
" Returns the name of citizen.\n" +
" @synopsis string getName()\n" +
" @method verifyCredentials\n" +
" Checks if given crendentials matches this citizen's crendentials.\n" +
" @synopsis boolean verifyCredentials(string password)\n" +
" @method setCredentials\n" +
" Sets this citizens crendentials.\n" +
" @synopsis boolean setCredentials(string newCredentials)\n" +
" @throws AccessDenied If security policy denies this operation\n" +
" @method commit\n" +
" Commits changes made to this citizen.\n" +
" @synopsis citizen commit()\n" +
" @throws OperationFailed If operation failed\n" +
" @throws AccessDenied If security policy denies this operation\n" +
" @method getTribes\n" +
" Returns list of tribe into which this citizen belongs to.\n" +
" @synopsis list getTribes()\n" +
" @throws AccessDenied If security policy denies this operation\n" +
" @method getParents\n" +
" Returns list of tribe into which this citizen belongs to.\n" +
" @synopsis list getParents()\n" +
" @throws AccessDenied If security policy denies this operation\n" +
" @method remove\n" +
" Removes this citizen\n" +
" @synopsis void remove()\n" +
" @throws OperationFailed If operation failed\n" +
" @throws AccessDenied If security policy denies this operation\n" +
" @method getPermissions\n" +
" Returns permissions that this user has.\n" +
" @synopsis enumeration getPermissions()\n" +
" @throws AccessDenied If security policy denies this operation\n" +
" @method getCombinedPermissions\n" +
" Returns permissions that this user has (including permissions inherited from groups).\n" +
" @synopsis enumeration getCombinedPermissions()\n" +
" @throws AccessDenied If security policy denies this operation\n" +
" @method addPermission\n" +
" Adds permission to citizen's security policy. You may have to call\n" +
" commit() for the citizen to save modification to persistent store\n" +
" (depenging on realm implementation)\n" +
" @synopsis void addPermission(permission)\n" +
" @throws OperationFailed If error occured file saving to persistent\n" +
" @method removePermission\n" +
" Removes permission from citizen's security policy. You may have to call\n" +
" commit() for the citizen to save modification to persistent store\n" +
" (depenging on realm implementation)\n" +
" @synopsis void removePermission(permission)\n" +
" @throws OperationFailed If error occured file removing from persistent\n" +
" @method listPermissions\n" +
" Returns enumeration of permissions held by this citizen.\n" +
" @synopsis enumeration listPermissions()\n" +
" @method getRealm\n" +
" Returns the realm into which this citizen belongs to.\n" +
" @synopsis Realm getRealm()\n" +
" @throws AccessDenied If security policy denies this operation\n"
//}}DOC
);
static {
NetModule.class.getName();
}
}