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
21
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 }