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