001: /*
002: * $Id: AnyPermission.java,v 1.6 2002/09/16 08:05:03 jkl Exp $
003: *
004: * Copyright (c) 2002 Njet Communications Ltd. All Rights Reserved.
005: *
006: * Use is subject to license terms, as defined in
007: * Anvil Sofware License, Version 1.1. See LICENSE
008: * file, or http://njet.org/license-1.1.txt
009: */
010: package anvil.core.runtime;
011:
012: import java.io.IOException;
013: import java.util.Enumeration;
014: import anvil.java.util.BindingEnumeration;
015: import anvil.core.Serializer;
016: import anvil.core.Unserializer;
017: import anvil.core.UnserializationException;
018: import anvil.core.Any;
019: import anvil.core.AnyString;
020: import anvil.core.Array;
021: import anvil.core.AnyTuple;
022: import anvil.core.AnyList;
023: import anvil.core.AnyAbstractClass;
024: import java.security.Permission;
025: import anvil.script.Context;
026: import anvil.script.Type;
027:
028: /// @class Permission
029: /// Class for representing access to a system resource.
030:
031: /**
032: * class AnyPermission
033: *
034: * @author: Jani Lehtimäki
035: */
036: public class AnyPermission extends AnyAbstractClass {
037:
038: /// @constructor Permission
039: /// @synopsis Permission(string type, ..parameters)
040: public static final Object[] newInstance = { null, "parameters" };
041:
042: public static final Any newInstance(Context context, Any[] args) {
043: int n = args.length;
044: if (n == 0) {
045: throw context.NotEnoughParameters("Permission");
046: }
047: String[] s = new String[n];
048: for (int i = 0; i < n; i++) {
049: s[i] = args[i].toString();
050: }
051: try {
052: Permission p = anvil.server.PolicyPreferences
053: .createPermission(s);
054: if (p == null) {
055: throw context.BadParameter("Permission");
056: }
057: return new AnyPermission(p);
058: } catch (Throwable t) {
059: throw context.BadParameter("Permission: " + t.getMessage());
060: }
061: }
062:
063: private Permission _permission;
064: private Any _type = null;
065:
066: public AnyPermission(Permission perm) {
067: _permission = perm;
068: }
069:
070: public final anvil.script.ClassType classOf() {
071: return __class__;
072: }
073:
074: public Object toObject() {
075: return _permission;
076: }
077:
078: public int hashCode() {
079: return _permission.hashCode();
080: }
081:
082: public boolean equals(Object o) {
083: if (o instanceof AnyPermission) {
084: return _permission.equals(((AnyPermission) o)._permission);
085: }
086: return false;
087: }
088:
089: public String toString() {
090: return _permission.toString();
091: }
092:
093: public final void serialize(Serializer serializer)
094: throws IOException {
095: if (serializer.register(this )) {
096: return;
097: }
098: Permission perm = _permission;
099: serializer.write('P');
100: serializer.write(perm.getClass().getName());
101: serializer.write(perm.getName());
102: serializer.write(perm.getActions());
103: }
104:
105: public static final Any unserialize(Unserializer unserializer)
106: throws UnserializationException {
107: String[] args = new String[3];
108: unserializer.consume('s');
109: args[0] = unserializer.getUTF16String();
110: unserializer.consume('s');
111: args[1] = unserializer.getUTF16String();
112: unserializer.consume('s');
113: args[2] = unserializer.getUTF16String();
114: try {
115: AnyPermission perm = new AnyPermission(
116: anvil.server.PolicyPreferences
117: .createPermission(args));
118: unserializer.register(perm);
119: return perm;
120: } catch (Throwable t) {
121: throw new UnserializationException(t.toString());
122: }
123: }
124:
125: /// @method getType
126: /// Returns this permission's type.
127: /// @synopsis string getType()
128: public Any m_getType() {
129: if (_type == null) {
130: _type = Any.create(_permission.getClass().getName());
131: }
132: return _type;
133: }
134:
135: /// @method getName
136: /// Returns this permission's name.
137: /// @synopsis string getName()
138: public Any m_getName() {
139: return Any.create(_permission.getName());
140: }
141:
142: /// @method getActions
143: /// Returns this permissions actions.
144: /// @synopsis string getActions()
145: public Any m_getActions() {
146: return Any.create(_permission.getActions());
147: }
148:
149: /// @method implies
150: /// Checks if the specified permission's actions are "implied by"
151: /// this permissions's actions.
152: /// @synopsis boolean implies(Permission permission)
153: public static final Object[] p_implies = { null, "permission" };
154:
155: public Any m_implies(Context context, Any perm) {
156: if (!(perm instanceof AnyPermission)) {
157: throw context.BadParameter("Permission expected");
158: }
159: return _permission.implies((Permission) perm.toObject()) ? TRUE
160: : FALSE;
161: }
162:
163: public static final anvil.script.compiler.NativeClass __class__ = new anvil.script.compiler.NativeClass(
164: "Permission",
165: AnyPermission.class,
166: //DOC{{
167: ""
168: + " @class Permission\n"
169: + " Class for representing access to a system resource. \n"
170: + " @constructor Permission\n"
171: + " @synopsis Permission(string type, ..parameters)\n"
172: + " @method getType\n"
173: + " Returns this permission's type.\n"
174: + " @synopsis string getType()\n"
175: + " @method getName\n"
176: + " Returns this permission's name.\n"
177: + " @synopsis string getName()\n"
178: + " @method getActions\n"
179: + " Returns this permissions actions.\n"
180: + " @synopsis string getActions()\n"
181: + " @method implies\n"
182: + " Checks if the specified permission's actions are \"implied by\" \n"
183: + " this permissions's actions.\n"
184: + " @synopsis boolean implies(Permission permission)\n"
185: //}}DOC
186: );
187: static {
188: RuntimeModule.class.getName();
189: }
190:
191: }
|