/*
* $Id: AnyPermission.java,v 1.6 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.runtime;
import java.io.IOException;
import java.util.Enumeration;
import anvil.java.util.BindingEnumeration;
import anvil.core.Serializer;
import anvil.core.Unserializer;
import anvil.core.UnserializationException;
import anvil.core.Any;
import anvil.core.AnyString;
import anvil.core.Array;
import anvil.core.AnyTuple;
import anvil.core.AnyList;
import anvil.core.AnyAbstractClass;
import java.security.Permission;
import anvil.script.Context;
import anvil.script.Type;
/// @class Permission
/// Class for representing access to a system resource.
/**
* class AnyPermission
*
* @author: Jani Lehtim�ki
*/
public class AnyPermission extends AnyAbstractClass
{
/// @constructor Permission
/// @synopsis Permission(string type, ..parameters)
public static final Object[] newInstance = { null, "parameters" };
public static final Any newInstance(Context context, Any[] args)
{
int n = args.length;
if (n == 0) {
throw context.NotEnoughParameters("Permission");
}
String[] s = new String[n];
for(int i=0; i<n; i++) {
s[i] = args[i].toString();
}
try {
Permission p = anvil.server.PolicyPreferences.createPermission(s);
if (p == null) {
throw context.BadParameter("Permission");
}
return new AnyPermission(p);
} catch (Throwable t) {
throw context.BadParameter("Permission: "+t.getMessage());
}
}
private Permission _permission;
private Any _type = null;
public AnyPermission(Permission perm)
{
_permission = perm;
}
public final anvil.script.ClassType classOf()
{
return __class__;
}
public Object toObject()
{
return _permission;
}
public int hashCode()
{
return _permission.hashCode();
}
public boolean equals(Object o)
{
if (o instanceof AnyPermission) {
return _permission.equals(((AnyPermission)o)._permission);
}
return false;
}
public String toString()
{
return _permission.toString();
}
public final void serialize(Serializer serializer) throws IOException
{
if (serializer.register(this)) {
return;
}
Permission perm = _permission;
serializer.write('P');
serializer.write(perm.getClass().getName());
serializer.write(perm.getName());
serializer.write(perm.getActions());
}
public static final Any unserialize(Unserializer unserializer) throws UnserializationException
{
String[] args = new String[3];
unserializer.consume('s');
args[0] = unserializer.getUTF16String();
unserializer.consume('s');
args[1] = unserializer.getUTF16String();
unserializer.consume('s');
args[2] = unserializer.getUTF16String();
try {
AnyPermission perm = new AnyPermission(anvil.server.PolicyPreferences.createPermission(args));
unserializer.register(perm);
return perm;
} catch (Throwable t) {
throw new UnserializationException(t.toString());
}
}
/// @method getType
/// Returns this permission's type.
/// @synopsis string getType()
public Any m_getType()
{
if (_type == null) {
_type = Any.create(_permission.getClass().getName());
}
return _type;
}
/// @method getName
/// Returns this permission's name.
/// @synopsis string getName()
public Any m_getName()
{
return Any.create(_permission.getName());
}
/// @method getActions
/// Returns this permissions actions.
/// @synopsis string getActions()
public Any m_getActions()
{
return Any.create(_permission.getActions());
}
/// @method implies
/// Checks if the specified permission's actions are "implied by"
/// this permissions's actions.
/// @synopsis boolean implies(Permission permission)
public static final Object[] p_implies = { null, "permission" };
public Any m_implies(Context context, Any perm)
{
if (!(perm instanceof AnyPermission)) {
throw context.BadParameter("Permission expected");
}
return _permission.implies((Permission)perm.toObject()) ? TRUE : FALSE;
}
public static final anvil.script.compiler.NativeClass __class__ =
new anvil.script.compiler.NativeClass("Permission", AnyPermission.class,
//DOC{{
""+
" @class Permission\n" +
" Class for representing access to a system resource. \n" +
" @constructor Permission\n" +
" @synopsis Permission(string type, ..parameters)\n" +
" @method getType\n" +
" Returns this permission's type.\n" +
" @synopsis string getType()\n" +
" @method getName\n" +
" Returns this permission's name.\n" +
" @synopsis string getName()\n" +
" @method getActions\n" +
" Returns this permissions actions.\n" +
" @synopsis string getActions()\n" +
" @method implies\n" +
" Checks if the specified permission's actions are \"implied by\" \n" +
" this permissions's actions.\n" +
" @synopsis boolean implies(Permission permission)\n"
//}}DOC
);
static {
RuntimeModule.class.getName();
}
}