View Javadoc

1   /*
2    * ManualUserGroup.java
3    *
4    * Created on May 25, 2004, 4:48 PM
5    */
6   
7   package gov.bnl.gums.userGroup;
8   
9   import java.util.Set;
10  
11  import javax.persistence.Entity;
12  import javax.persistence.Transient;
13  
14  import org.apache.log4j.Logger;
15  
16  import gov.bnl.gums.GridUser;
17  import gov.bnl.gums.configuration.Configuration;
18  import gov.bnl.gums.util.URIToolkit;
19  
20  
21  /** 
22   * A user group that is defined by a list of users stored in some way, allowing
23   * to add and remove users. The persistance layer is implemented through an
24   * interface, allowing different storage frameworks (i.e. database, LDAP, file)
25   * <p>
26   * This class will provide also configurable data caching.
27   *
28   * @author Gabriele Carcassi, Jay Packard
29   */
30  @Entity
31  public class ManualUserGroup extends UserGroup {
32      private Logger log = Logger.getLogger(ManualUserGroup.class);
33      
34      // persistent variables
35  	protected String membersUri;
36  	protected String nonMembersUri;
37      
38      public ManualUserGroup() {
39      	super();
40      }
41      
42  	public ManualUserGroup(Configuration configuration, String name) {
43  		super(configuration, name);
44  	}
45  
46  	public void clearCachedItems() {
47  	}
48  	
49      public String getMembersUri() {
50      	return membersUri;
51      }
52  
53      public String getNonMembersUri() {
54      	return nonMembersUri;
55      }
56         
57  	@ConfigFieldAnnotation(label="Members URI", example="file:///etc/grid-security/banned_users", help="optional")
58      public void setMembersUri(String membersUri) {
59      	this.membersUri = membersUri;
60      }
61  
62  	@ConfigFieldAnnotation(label="Non-members URI", example="file:///etc/grid-security/unbanned_users", help="optional")
63      public void setNonMembersUri(String nonMembersUri) {
64      	this.nonMembersUri = nonMembersUri;
65      }
66  
67  	public void addMember(GridUser gridUser) {
68      	try {
69      		synchronized(members) {
70      			gridUser.setUserGroup(this);
71      			members.add(gridUser);
72      		}
73  	        refreshPatternList();
74      	}
75      	catch(Exception e) {
76      		log.error(e);
77      	}
78      }
79      
80  	public boolean removeMember(GridUser gridUser) {
81      	boolean value = false;
82      	try {
83      		synchronized(members) {
84      			value = members.remove(gridUser);
85      		}
86      		refreshPatternList();
87  		}
88  		catch(Exception e) {
89  			log.error(e);
90  		}
91          return value;
92      }
93  	
94      protected Set<GridUser> retrieveMembers() {
95      	// add to or remove from members and nonmembers URI
96      	synchronized(members) {
97  	    	try {
98  		    	if (membersUri!=null && membersUri.length()>0) {
99  		    		String str = URIToolkit.parseUri(membersUri, null);
100 		    		String[] lines = str.split("\n");
101 		    		for (String line: lines) {
102 		    			if (line.length()==0)
103 		    				continue;
104 		    			String[] elements = line.split(",");
105 		    			GridUser user = new GridUser();
106 		    			user.initialize(elements);
107 		    			if (!members.contains(user)) {
108 		    				log.info("Added user "+user+" to "+getName()+" user group");
109 		    				members.add(user);
110 		    			}
111 		    		}
112 		    	}
113 		    } catch (Throwable e) {
114 		    	String message = "Couldn't retrieve users from URI " + membersUri + ": ";
115 		        log.error(message, e);
116 		        throw new RuntimeException(message + ": " + e.getMessage());
117 		    }
118 		    
119 		    try {
120 		    	if (nonMembersUri!=null && nonMembersUri.length()>0) {
121 		    		String str = URIToolkit.parseUri(nonMembersUri, null);
122 		    		String[] lines = str.split("\n");
123 		    		for (String line: lines) {
124 		    			if (line.length()==0)
125 		    				continue;
126 		    			String[] elements = line.split(",");
127 		    			GridUser user = new GridUser();
128 		    			user.initialize(elements);
129 		    			if (members.contains(user)) {
130 		    				log.info("Removed user "+user+" from "+getName()+" user group");
131 		    				members.remove(user);
132 		    			}
133 		    		}
134 		    	}
135 		    } catch (Throwable e) {
136 		    	String message = "Couldn't retrieve users from URI " + nonMembersUri + ": ";
137 		        log.error(message, e);
138 		        throw new RuntimeException(message + ": " + e.getMessage());
139 		    }
140 		}
141 		return members;
142     }
143 }