/*
 * Authority.java
 *
 * Created on March 27, 2006, 9:41 AM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package fileprocessing;

import java.util.BitSet;
import java.util.StringTokenizer;

/**
 *
 * @author kerzner
 */
public class Authority {
    private BitSet authority = new BitSet();;
    
    public enum Area {
        People(0),
        Groups(1),
        Plans(2),
        Messages(3),
        Logs(4),
        Companies(5);
        
        private int area;
        Area(int area) {
            this.area = area;
        }
        public int area() {
            return area;
        }
    }
    
    public enum Permission {
        Read(0),
        Write(1),
        Execute(2);
        
        private int permission;
        Permission(int permission) {
            this.permission = permission;
        }
        public int permission() {
            return permission;
        }
    }
    /** Creates a new instance of Authority */
    public Authority() {
    }
    
    public boolean getAuthority(Area area, Permission permission) {        
        return authority.get(ind(area, permission));
    }
    
    public void setAuthority(Area area, Permission permission, boolean x) {        
        authority.set(ind(area, permission), x);
    }
    
    private int ind(Area area, Permission permission) {
        return Permission.values().length * area.area() + permission.permission();
    }
    
    public String toString() {
        return authority.toString();
    }
    public void fromString(String str) {
        authority = new BitSet();
        if (str == null || str.trim().length() == 0) {
            return;
        }
        if (!(str.startsWith("{") && str.endsWith("}"))) {
            return;
        }
        StringTokenizer strTok = new StringTokenizer(str.substring(1, str.length() - 1), " ,");
        while (strTok.hasMoreTokens()) {
            String tok = strTok.nextToken();
            authority.set(Integer.parseInt(tok));
        }
    }
    public void setAllAuthority(boolean x) {
        for (Permission p: Permission.values()) {
            for (Area a: Area.values()) {
                setAuthority(a, p, x);
            }
        }
    }
}
