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.ldapResult;
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.IntegerDecoder;
27 import org.apache.directory.api.asn1.ber.tlv.IntegerDecoderException;
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.LdapResult;
32 import org.apache.directory.api.ldap.model.message.LdapResultImpl;
33 import org.apache.directory.api.ldap.model.message.Message;
34 import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
35 import org.apache.directory.api.ldap.model.message.ResultResponse;
36 import org.apache.directory.api.util.Strings;
37 import org.slf4j.Logger;
38 import org.slf4j.LoggerFactory;
39
40
41
42
43
44
45
46
47
48
49
50 public class StoreResultCode extends GrammarAction<LdapMessageContainer<Message>>
51 {
52
53 private static final Logger LOG = LoggerFactory.getLogger( StoreResultCode.class );
54
55
56
57
58 public StoreResultCode()
59 {
60 super( "Store resultCode" );
61 }
62
63
64
65
66
67 @Override
68 public void action( LdapMessageContainer<Message> container ) throws DecoderException
69 {
70
71
72 TLV tlv = container.getCurrentTLV();
73
74 BerValue value = tlv.getValue();
75 ResultCodeEnum resultCode = ResultCodeEnum.SUCCESS;
76
77 try
78 {
79 resultCode = ResultCodeEnum.getResultCode( IntegerDecoder.parse( value, 0,
80 ResultCodeEnum.E_SYNC_REFRESH_REQUIRED
81 .getResultCode() ) );
82 }
83 catch ( IntegerDecoderException ide )
84 {
85 LOG.error( I18n.err( I18n.ERR_05108_INVALID_RESULT_CODE, Strings.dumpBytes( value.getData() ), ide.getMessage() ) );
86
87 throw new DecoderException( ide.getMessage(), ide );
88 }
89
90 if ( LOG.isDebugEnabled() )
91 {
92 LOG.debug( I18n.msg( I18n.MSG_05109_RESULT_CODE_IS, resultCode ) );
93 }
94
95 ResultResponse response = ( ResultResponse ) container.getMessage();
96
97 LdapResult ldapResult;
98
99 if ( response == null )
100 {
101 ldapResult = new LdapResultImpl();
102 }
103 else
104 {
105 ldapResult = response.getLdapResult();
106 }
107
108 container.setLdapResult( ldapResult );
109 ldapResult.setResultCode( resultCode );
110 }
111 }