Initail Version
[java-idp.git] / src / edu / internet2 / middleware / shibboleth / aa / ArpShar.java
1 package aa;
2
3 import java.io.*;
4 import java.util.*;
5 import java.security.acl.*;
6
7 public class ArpShar extends ArpCore implements Serializable{
8
9     // Attributes
10     protected String name;
11     protected boolean isDefault;
12
13     // Associations
14     protected Vector  resources;
15     protected AA_Acl acl;
16
17     // Construstor
18     public ArpShar(String name, boolean isDefault)throws NotOwnerException{
19         this.name = name;
20         this.isDefault = isDefault;
21         resources  = new Vector();
22         makeAcl("sharAcl");
23     }
24
25     // Operations
26     public String toString() {
27         return name+(isDefault?"(default)":"");
28     }
29
30     public boolean isDefault(){
31         return isDefault;
32     }
33
34     public boolean addAResource(String url)
35         throws NotOwnerException,AAPermissionException{
36
37         if(resources.contains(new ArpResource(url)))
38             return false; // already there
39
40         if(! insertPermitted())
41             throw new AAPermissionException("No INSERT right for "+getCaller());
42
43         resources.add(new ArpResource(url));
44         return true;
45     }
46
47     /**
48      * Adds a given resource to the resources for this Shar.
49      * Does not replace if resource already exists.
50      * returns false if resource already exists.
51      */
52
53     public boolean addAResource(ArpResource rsrc) 
54         throws AAPermissionException{
55         return addAResource(rsrc, false);
56     }
57
58     /**
59      * Adds the given resource to the resources for this Shar.
60      * if force flag is true and resource already exists
61      * then replaces the existing reource otherwise leaves the existing 
62      * resource untouched.  
63      * returns false if reource already existed.
64      */
65     public boolean addAResource(ArpResource rsrc, boolean force)
66         throws AAPermissionException{
67
68         if(resources.contains(rsrc)){
69             if(force){
70                 if(! replacePermitted())
71                     throw new AAPermissionException("No replace right for "+getCaller());
72                 resources.remove(rsrc);
73                 resources.add(rsrc);
74             }
75             return false; // already there
76         }
77         if(! insertPermitted())
78             throw new AAPermissionException("No INSERT right for "+getCaller());
79         resources.add(rsrc);
80         return true;
81     }
82
83     public boolean removeAResource(String url)
84         throws NotOwnerException, AAPermissionException{
85         if(resources.contains(new ArpResource(url))){
86             if(! removePermitted())
87                 throw new AAPermissionException("No DELETE right for "+getCaller());
88             resources.remove(new ArpResource(url));
89             return true;
90         }
91         return false; // not found
92     }
93
94     public ArpResource getResource(String url) {
95         Enumeration en = resources.elements();
96         while(en.hasMoreElements()){
97             ArpResource aResource = (ArpResource)en.nextElement();
98             if(aResource.getName().equals(url))
99                 return aResource;
100         }
101         return null;
102     }
103
104     public ArpResource[] getResources() {
105         int len = resources.size();
106         ArpResource[] a = new ArpResource[len];
107         for(int i = 0; i < len; i++)
108             a[i] = (ArpResource)resources.get(i);
109         return a;
110     }
111
112
113     /**
114      * Go throu all resource objects and find the one that
115      * best matches the given url.  This is based on comparison 
116      * of TNames of urls provided by fit method of ArpResource.
117      *
118      * returns an ArpResource or null if no match found;
119      */
120     public ArpResource bestFit(String url) {
121
122         ArpResource[] ara = new ArpResource[resources.size()];
123         ara = (ArpResource[])resources.toArray(ara);
124         int bestScore = 0;
125         ArpResource bestResource = null;
126         for(int i=0; i < ara.length; i++){
127             int score =  ara[i].fit(url);
128             if(score > bestScore){
129                 bestScore = score;
130                 bestResource = ara[i];
131             }
132         }
133         return bestResource;
134     }
135
136     public String getName(){
137         return name;
138     }
139
140     public boolean equals(Object shar){
141         return name.equals(((ArpShar)shar).getName());
142     }
143
144 } /* end class ArpShar */