Package anvil.server

Source Code of anvil.server.PolicyPreferences

/*
* $Id: PolicyPreferences.java,v 1.3 2002/09/16 08:05:06 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.server;

import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.Enumeration;
import java.security.Permissions;
import java.security.Permission;
import anvil.java.security.JavaPermission;

/**
* class PolicyPreferences
*
* @author: Jani Lehtim�ki
*/
public class PolicyPreferences extends Preferences
{

  private Permissions _permissions = new Permissions();
  private Permissions _localPermissions = new Permissions();


  public PolicyPreferences(Zone parent)
  {
    super(parent);
    parent.getDomain().enablePolicy();
  }
 

  protected void addPermission(Permissions permissions, String values)
  {
    String[] args = parseValues(values);
    if (args.length > 0) {
      Permission perm = null;
      try {
        perm = createPermission(args);
      } catch (Throwable t) {
        throw new ConfigurationError("Couldn't set permission '"+args[0]+"', reason: "+t);
      }
      if (perm == null) {
        throw new ConfigurationError("Invalid number of arguments for permission '"+args[0]+"'");
      }
      permissions.add(perm);
    }
  }
     
     
  public Permissions getPermissions()
  {
    return _permissions;
  }
 

  public Permissions getLocalPermissions()
  {
    return _localPermissions;
  }
   
 
  public int getType()
  {
    return POLICY;
  }

 
  public String[] getAdditionalPreferenceNames()
  {
    return new String[0];
  }
 
 
 
  public Object getPreference(String name)
  {
    return null;
  }
 
 
  public boolean setPreference(String name, String value)
  {
    if (name.equalsIgnoreCase("permission")) {
      addPermission(_permissions, value);
    } else if (name.equalsIgnoreCase("localpermission"))  {
      addPermission(_localPermissions, value);
    } else {
      return false;
    }
    return true;
  }
 
 
  public static final Permission createPermission(String[] args)
    throws Throwable
  {
    Permission perm = null;
    String name = args[0];
    int n = args.length;
    if (name.equals("file")) {
      if (n >= 3) {
        perm = new java.io.FilePermission(args[1], args[2]);
      }

    } else if (name.equals("socket")) {
      if (n >= 3) {
        perm = new java.net.SocketPermission(args[1], args[2]);
      }

    } else if (name.equals("java")) {
      perm = new JavaPermission(args[1]);

    } else if (name.equals("runtime")) {
      if (n > 2) {
        perm = new anvil.core.RuntimePermission(args[1], args[2]);
      } else {
        perm = new anvil.core.RuntimePermission(args[1]);
      }

    } else if (name.equals("import")) {
      perm = new anvil.script.ImportPermission(args[1]);

    } else if (name.equals("pool")) {
      perm = new anvil.database.ConnectionPoolPermission(args[1]);

    } else if (name.equals("realm")) {
      perm = new RealmPermission(args[1]);

    } else if (name.equals("namespace")) {
      if (n > 2) {
        perm = new NamespacePermission(args[1], args[2]);
      } else {
        perm = new NamespacePermission(args[1]);
      }

    } else if (name.equals("tool")) {
      if (n > 2) {
        perm = new anvil.core.ToolPermission(args[1], args[2]);
      } else {
        perm = new anvil.core.ToolPermission(args[1]);
      }

    } else if (name.equals("property")) {
      perm = new java.util.PropertyPermission(args[1], args[2]);

    } else if (name.equals("all")) {
      perm = new java.security.AllPermission();

    } else {
      Class cls = Class.forName(name);
      n--;
      Class[] params = new Class[n];
      for(int i=0; i<params.length; i++) {
        params[i] = String.class;
      }
      Constructor ctor = cls.getDeclaredConstructor(params);
      if (ctor != null) {
        String[] s = new String[n];
        System.arraycopy(args, 1, s, 0, n);
        perm = (Permission)ctor.newInstance(s);
      }

    }
    return perm;
  }


}
TOP

Related Classes of anvil.server.PolicyPreferences

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.