Added title and auther for AA classes.
[java-idp.git] / src / edu / internet2 / middleware / shibboleth / aa / ArpResource.java
1 package edu.internet2.middleware.shibboleth.aa;
2
3 /**
4  *  Attribute Authority & Release Policy
5  *  Resource (or URL) node in the ARP tree.
6  *
7  * @author     Parviz Dousti (dousti@cmu.edu)
8  * @created    June, 2002
9  */
10
11
12 import java.io.*;
13 import java.util.*;
14 import java.security.acl.*;
15
16 public class ArpResource extends ArpCore implements Serializable{
17
18     // Attributes
19     protected String name;
20
21     // Associations
22     protected TName tName;
23     protected Vector attributes;
24     protected AA_Acl acl;
25
26     // constructor
27     public ArpResource(String name) throws NotOwnerException{
28         this.name = name;
29         tName = new TName(name);
30         attributes = new Vector();
31         makeAcl("resourceAcl");
32     }
33
34     // Operations
35     public String toString() {
36         return name+" ["+tName+"]";
37     }
38
39
40     public boolean addAnAttribute(String name, boolean exclude)
41         throws AAPermissionException{
42
43         if(attributes.contains(new ArpAttribute(name, exclude)))
44             return false; // already there
45         if(! insertPermitted())
46             throw new AAPermissionException("No INSERT right for "+getCaller());
47         attributes.add(new ArpAttribute(name, exclude));
48         return true;
49     }
50
51     public boolean addAnAttribute(ArpAttribute attr)
52         throws AAPermissionException{
53         return addAnAttribute(attr, false);
54     }
55
56     /**
57      * Adds the given attribute to the attributes for this Resource.
58      * if force flag is true and attribute already exists
59      * then replaces the existing reource otherwise leaves the existing 
60      * attribute untouched.  
61      * returns false if reource already existed.
62      */
63     public boolean addAnAttribute(ArpAttribute attr, boolean force)
64         throws AAPermissionException {
65
66         if(attributes.contains(attr)){
67             if(force){
68                 if(! replacePermitted())
69                     throw new AAPermissionException("No replace right for "+getCaller());               
70                 attributes.remove(attr);
71                 attributes.add(attr);
72             }
73             return false; // already there
74         }
75         if(! insertPermitted())
76             throw new AAPermissionException("No INSERT right for "+getCaller());        
77         attributes.add(attr);
78         return true;
79     }
80
81     public boolean removeAnAttribute(String name)
82         throws AAPermissionException {
83
84         if(attributes.contains(new ArpAttribute(name, false))){
85             if(! insertPermitted())
86                 throw new AAPermissionException("No DELETE right for "+getCaller());        
87             attributes.remove(new ArpAttribute(name, false));
88             return true;
89         }
90         return false; // not found
91     }
92
93     public ArpAttribute getAttribute(String name) {
94         Enumeration en = attributes.elements();
95         while(en.hasMoreElements()){
96             ArpAttribute aAttribute = (ArpAttribute)en.nextElement();
97             if(aAttribute.getName().equals(name))
98                 return aAttribute;
99         }
100         return null;
101     }
102
103     public ArpAttribute[] getAttributes() {
104         int len = attributes.size();
105         ArpAttribute[] a = new ArpAttribute[len];
106         for(int i = 0; i < len; i++)
107             a[i] = (ArpAttribute)attributes.get(i);
108         return a;
109     }
110
111
112     public int fit(String resrcName) {
113         TName tn = new TName(resrcName);
114         return tName.compare(tn);
115     }
116
117     public TName getTName(){
118         return tName;
119     }
120
121     public String getName(){
122         return name;
123     }
124
125     public boolean equals(Object rsrc){
126         return name.equals(((ArpResource)rsrc).getName());
127     }
128
129 } /* end class ArpResource */