View Javadoc
1   package org.argeo.people.core.imports;
2   
3   import static org.argeo.connect.util.ConnectUtils.notEmpty;
4   
5   import java.util.Dictionary;
6   import java.util.Map;
7   
8   import org.apache.commons.logging.Log;
9   import org.apache.commons.logging.LogFactory;
10  import org.argeo.connect.UserAdminService;
11  import org.argeo.connect.core.UserAdminServiceImpl;
12  import org.argeo.connect.util.ConnectJcrUtils;
13  import org.argeo.naming.LdapAttrs;
14  import org.argeo.util.CsvParserWithLinesAsMap;
15  import org.osgi.service.useradmin.Group;
16  import org.osgi.service.useradmin.Role;
17  import org.osgi.service.useradmin.User;
18  
19  /**
20   * Parse a CSV file and create corresponding groups. A UserTransaction must
21   * exists and it is the caller duty to commit it afterwards
22   */
23  public class GroupsCsvFileParser extends CsvParserWithLinesAsMap {
24  	private final static Log log = LogFactory.getLog(GroupsCsvFileParser.class);
25  
26  	private final UserAdminServiceImpl userAdminWrapper;
27  
28  	public GroupsCsvFileParser(UserAdminService userAdminWrapper) {
29  		this.userAdminWrapper = (UserAdminServiceImpl) userAdminWrapper;
30  	}
31  
32  	@SuppressWarnings({ "rawtypes", "unchecked" })
33  	@Override
34  	protected void processLine(Integer lineNumber, Map<String, String> line) {
35  
36  		String cn = line.get("commonName");
37  		String desc = line.get("description");
38  		String memberStr = line.get("members");
39  
40  		User existingUser = userAdminWrapper.getUserFromLocalId(cn);
41  		Group group = null;
42  		if (existingUser != null) {
43  			log.warn("Group " + cn + " already exists in the system, check if some user must yet be added");
44  			group = (Group) existingUser;
45  		} else {
46  			String dn = userAdminWrapper.buildDefaultDN(cn, Role.GROUP);
47  			group = (Group) userAdminWrapper.getUserAdmin().createRole(dn, Role.GROUP);
48  			Dictionary props = group.getProperties();
49  			if (notEmpty(desc))
50  				props.put(LdapAttrs.description.name(), desc);
51  		}
52  
53  		String[] members = ConnectJcrUtils.parseAndClean(memberStr, ",", true);
54  		for (String member : members) {
55  			User user = userAdminWrapper.getUserFromLocalId(member);
56  			if (user != null)
57  				group.addMember(user);
58  			else
59  				log.warn("Found no role for localId: " + member + ", cannot add to " + cn);
60  		}
61  	}
62  }