Package anvil.server.file

Source Code of anvil.server.file.FileCitizen

/*
* $Id: FileCitizen.java,v 1.8 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.file;

import java.io.File;
import java.io.OutputStream;
import java.io.IOException;
import java.security.PermissionCollection;
import java.security.Permissions;
import java.security.Permission;
import java.util.Iterator;
import anvil.java.util.BindingEnumeration;
import anvil.core.Any;
import anvil.java.util.Hashlist;
import anvil.java.util.EnumerationToIterator;
import anvil.server.Zone;
import anvil.server.Realm;
import anvil.server.Tribe;
import anvil.server.Citizen;
import anvil.server.Realm;
import anvil.server.Tribe;
import anvil.server.Citizen;
import anvil.util.Conversions;
import anvil.java.security.PermissionCollectionCombiner;

/**
* interface FileCitizen
*
* @author: Jani Lehtim�ki
*/

public class FileCitizen extends PersistentFileNamespace
  implements FileEntity, Citizen
{

  private FileRealm _realm;
  private int       _id;
  private String    _name;
  private String    _credentials;
  private PermissionCollection _permissions = null;
  private PermissionCollection _combined = null;
  private boolean              _resolved = false;


  public FileCitizen(FileRealm realm, File file, int id, String name, String credentials)
  {
    super(realm.getZone(), name, file, realm.copyOnGet(),
      realm.copyOnSet(), realm.getMaxModifications());
    _realm = realm;
    _id = id;
    _name = name;
    _credentials = credentials;
  }
 
 
  public String toString()
  {
    return "FileCitizen("+_name+"@"+_file+")";
  }


  public int getId()
  {
    return _id;
  }


  public int hashCode()
  {
    return _id; 
  }
 
 
  public Realm getRealm()
  {
    return _realm;
  }
 
 
  public String getName()
  {
    return _name;
  }


  String getCredentials()
  {
    return _credentials;
  }
 

  public boolean verifyCredentials(String credentials)
  {
    return _credentials.equals(credentials);
  }
 
 
  public void setCredentials(String newCredentials)
  {
    _credentials = newCredentials;
  }


  public PermissionCollection getPermissions()
  {
    return _permissions;
  }
 
 
  private void getCombinedPermissions0(PermissionCollectionCombiner combiner, Tribe[] tribes)
  {
    int n = tribes.length;
    for(int i=0; i<n; i++) {
      Tribe tribe = tribes[i];
      combiner.combine(tribe.getPermissions());
      getCombinedPermissions0(combiner, tribe.getParents());
    }
  }

  public PermissionCollection getCombinedPermissions()
  {
    if (!_resolved) {
      synchronized(this) {
        _resolved = true;
        PermissionCollectionCombiner combiner = new PermissionCollectionCombiner();
        combiner.combine(_permissions);
        getCombinedPermissions0(combiner, getParents());
        _combined = combiner.getResult();       
      }
    }
    return _combined;
  }

 
  public void addPermission(Permission perm)
  {
    if (_permissions == null) {
      _permissions = new Permissions();
    }
    _permissions.add(perm);
  }


  public void removePermission(Permission perm)
  {
    //TODO
  }

  public Iterator listPermissions()
  {
    if (_permissions != null) {
      return new EnumerationToIterator(_permissions.elements());
    } else {
      return BindingEnumeration.EMPTY;
    }
  }


  public Tribe[] getParents()
  {
    return (Tribe[])_realm.getMappings(this, Tribe.class, true, true);
  }
   

  public void remove()
  {
    _realm.removeMappings(this);
    super.remove();
  }


  public void write(OutputStream out) throws IOException
  {
    out.write('c');
    out.write(':');
    out.write(' ');
    out.write(Conversions.getBytes(String.valueOf(_id)));
    out.write(',');
    out.write(' ');
    out.write('"');
    out.write(Conversions.getBytes(Conversions.URLEncode(_name)));
    out.write('"');
    out.write(',');
    out.write(' ');
    out.write('"');
    out.write(Conversions.getBytes(Conversions.URLEncode(_credentials)));
    out.write('"');
    out.write('\n')
   }


}
TOP

Related Classes of anvil.server.file.FileCitizen

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.