1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.bremersee.dccon.repository.ldap;
18
19 import static org.bremersee.data.ldaptive.LdaptiveEntryMapper.getAttributeValue;
20 import static org.bremersee.data.ldaptive.LdaptiveEntryMapper.setAttribute;
21 import static org.bremersee.data.ldaptive.LdaptiveEntryMapper.setAttributes;
22 import static org.bremersee.dccon.repository.ldap.DomainGroupLdapConstants.DESCRIPTION;
23 import static org.bremersee.dccon.repository.ldap.DomainGroupLdapConstants.MEMBER;
24 import static org.bremersee.dccon.repository.ldap.DomainGroupLdapConstants.NAME;
25 import static org.bremersee.dccon.repository.ldap.DomainGroupLdapConstants.OBJECT_SID;
26 import static org.bremersee.dccon.repository.ldap.DomainGroupLdapConstants.SAM_ACCOUNT_NAME;
27
28 import java.util.ArrayList;
29 import java.util.List;
30 import org.bremersee.data.ldaptive.LdaptiveEntryMapper;
31 import org.bremersee.dccon.config.DomainControllerProperties;
32 import org.bremersee.dccon.model.DomainGroup;
33 import org.bremersee.dccon.repository.ldap.transcoder.GroupMemberValueTranscoder;
34 import org.bremersee.dccon.repository.ldap.transcoder.SidValueTranscoder;
35 import org.ldaptive.AttributeModification;
36 import org.ldaptive.LdapEntry;
37 import org.ldaptive.io.StringValueTranscoder;
38
39
40
41
42
43
44 public class DomainGroupLdapMapper extends AbstractLdapMapper
45 implements LdaptiveEntryMapper<DomainGroup> {
46
47 private static final StringValueTranscoder STRING_VALUE_TRANSCODER = new StringValueTranscoder();
48
49 private GroupMemberValueTranscoder groupMemberValueTranscoder;
50
51 private SidValueTranscoder sidValueTranscoder;
52
53
54
55
56
57
58 public DomainGroupLdapMapper(DomainControllerProperties properties) {
59 super(properties);
60 this.groupMemberValueTranscoder = new GroupMemberValueTranscoder(properties);
61 this.sidValueTranscoder = new SidValueTranscoder(properties);
62 }
63
64 @Override
65 public String[] getObjectClasses() {
66 return new String[0];
67 }
68
69 @Override
70 public String mapDn(final DomainGroup domainGroup) {
71 return createDn(
72 getProperties().getGroupRdn(),
73 domainGroup.getName(),
74 getProperties().getGroupBaseDn());
75 }
76
77 @Override
78 public DomainGroup map(final LdapEntry ldapEntry) {
79 if (ldapEntry == null) {
80 return null;
81 }
82 final DomainGroup destination = new DomainGroup();
83 map(ldapEntry, destination);
84 return destination;
85 }
86
87 @Override
88 public void map(
89 final LdapEntry ldapEntry,
90 final DomainGroup domainGroup) {
91 if (ldapEntry == null) {
92 return;
93 }
94 mapCommonAttributes(ldapEntry, domainGroup);
95 domainGroup.setSid(getAttributeValue(ldapEntry, OBJECT_SID, sidValueTranscoder, null));
96 domainGroup.setName(getAttributeValue(ldapEntry, NAME, STRING_VALUE_TRANSCODER, null));
97 domainGroup
98 .setDescription(getAttributeValue(ldapEntry, DESCRIPTION, STRING_VALUE_TRANSCODER, null));
99 domainGroup.setMembers(LdaptiveEntryMapper.getAttributeValuesAsList(
100 ldapEntry,
101 MEMBER,
102 groupMemberValueTranscoder));
103 domainGroup.getMembers().sort(String::compareToIgnoreCase);
104 }
105
106 @Override
107 public AttributeModification[] mapAndComputeModifications(
108 final DomainGroup source,
109 final LdapEntry destination) {
110 final List<AttributeModification> modifications = new ArrayList<>();
111 setAttribute(destination,
112 NAME, source.getName(), false, STRING_VALUE_TRANSCODER, modifications);
113 setAttribute(destination,
114 SAM_ACCOUNT_NAME, source.getName(), false, STRING_VALUE_TRANSCODER, modifications);
115 setAttribute(destination,
116 DESCRIPTION, source.getDescription(), false, STRING_VALUE_TRANSCODER, modifications);
117 setAttributes(
118 destination,
119 MEMBER,
120 source.getMembers(),
121 false,
122 groupMemberValueTranscoder,
123 modifications);
124 return modifications.toArray(new AttributeModification[0]);
125 }
126
127 }
128