1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.directory.api.ldap.codec.actions.request.modifydn;
21
22
23 import org.apache.directory.api.asn1.DecoderException;
24 import org.apache.directory.api.asn1.ber.grammar.GrammarAction;
25 import org.apache.directory.api.asn1.ber.tlv.BerValue;
26 import org.apache.directory.api.asn1.ber.tlv.BooleanDecoder;
27 import org.apache.directory.api.asn1.ber.tlv.BooleanDecoderException;
28 import org.apache.directory.api.asn1.ber.tlv.TLV;
29 import org.apache.directory.api.i18n.I18n;
30 import org.apache.directory.api.ldap.codec.api.LdapMessageContainer;
31 import org.apache.directory.api.ldap.model.message.ModifyDnRequest;
32 import org.apache.directory.api.util.Strings;
33 import org.slf4j.Logger;
34 import org.slf4j.LoggerFactory;
35
36
37
38
39
40
41
42
43
44
45
46
47 public class StoreModifyDnRequestDeleteOldRdn extends GrammarAction<LdapMessageContainer<ModifyDnRequest>>
48 {
49
50 private static final Logger LOG = LoggerFactory.getLogger( StoreModifyDnRequestDeleteOldRdn.class );
51
52
53
54
55 public StoreModifyDnRequestDeleteOldRdn()
56 {
57 super( "Store ModifyDN request deleteOldRdn flag" );
58 }
59
60
61
62
63
64 @Override
65 public void action( LdapMessageContainer<ModifyDnRequest> container ) throws DecoderException
66 {
67 ModifyDnRequest modifyDnRequest = container.getMessage();
68
69 TLV tlv = container.getCurrentTLV();
70
71
72
73
74
75
76
77 BerValue value = tlv.getValue();
78
79 try
80 {
81 modifyDnRequest.setDeleteOldRdn( BooleanDecoder.parse( value ) );
82 }
83 catch ( BooleanDecoderException bde )
84 {
85 LOG.error( I18n
86 .err( I18n.ERR_05125_INVALID_OLD_RDN, Strings.dumpBytes( value.getData() ), bde.getMessage() ) );
87
88
89 throw new DecoderException( bde.getMessage(), bde );
90 }
91
92
93 container.setGrammarEndAllowed( true );
94
95 if ( LOG.isDebugEnabled() )
96 {
97 if ( modifyDnRequest.getDeleteOldRdn() )
98 {
99 LOG.debug( I18n.msg( I18n.MSG_05135_OID_RDN_ATT_WILL_BE_DELETED ) );
100 }
101 else
102 {
103 LOG.debug( I18n.msg( I18n.MSG_05136_OID_RDN_ATT_WILL_BE_RETAINED ) );
104 }
105 }
106 }
107 }