View Javadoc
1   /*
2    *  Licensed to the Apache Software Foundation (ASF) under one
3    *  or more contributor license agreements.  See the NOTICE file
4    *  distributed with this work for additional information
5    *  regarding copyright ownership.  The ASF licenses this file
6    *  to you under the Apache License, Version 2.0 (the
7    *  "License"); you may not use this file except in compliance
8    *  with the License.  You may obtain a copy of the License at
9    *
10   *    https://www.apache.org/licenses/LICENSE-2.0
11   *
12   *  Unless required by applicable law or agreed to in writing,
13   *  software distributed under the License is distributed on an
14   *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   *  KIND, either express or implied.  See the License for the
16   *  specific language governing permissions and limitations
17   *  under the License.
18   *
19   */
20  package org.apache.directory.api.ldap.codec.actions.request.search;
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.LdapCodecConstants;
31  import org.apache.directory.api.ldap.codec.api.LdapMessageContainer;
32  import org.apache.directory.api.ldap.model.message.SearchRequest;
33  import org.apache.directory.api.ldap.model.message.SearchScope;
34  import org.slf4j.Logger;
35  import org.slf4j.LoggerFactory;
36  
37  
38  /**
39   * The action used to store the SearchRequest scope
40   * <pre>
41   * SearchRequest ::= [APPLICATION 3] SEQUENCE {
42   *     ...
43   *     scope ENUMERATED {
44   *         baseObject   (0),
45   *         singleLevel  (1),
46   *         wholeSubtree (2) },
47   *     ...
48   * </pre>
49   * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
50   */
51  public class StoreSearchRequestScope extends GrammarAction<LdapMessageContainer<SearchRequest>>
52  {
53      /** The logger */
54      private static final Logger LOG = LoggerFactory.getLogger( StoreSearchRequestScope.class );
55  
56      /**
57       * Instantiates a new action.
58       */
59      public StoreSearchRequestScope()
60      {
61          super( "Store SearchRequest scope" );
62      }
63  
64  
65      /**
66       * {@inheritDoc}
67       */
68      public void action( LdapMessageContainer<SearchRequest> container ) throws DecoderException
69      {
70          SearchRequest searchRequest = container.getMessage();
71  
72          TLV tlv = container.getCurrentTLV();
73  
74          // We have to check that this is a correct scope
75          BerValue value = tlv.getValue();
76  
77          try
78          {
79              int scope = IntegerDecoder.parse( value, LdapCodecConstants.SCOPE_BASE_OBJECT,
80                  LdapCodecConstants.SCOPE_WHOLE_SUBTREE );
81              searchRequest.setScope( SearchScope.getSearchScope( scope ) );
82          }
83          catch ( IntegerDecoderException ide )
84          {
85              String msg = I18n.err( I18n.ERR_05149_BAD_SCOPE, value.toString() );
86              LOG.error( msg );
87              throw new DecoderException( msg, ide );
88          }
89  
90  
91          if ( LOG.isDebugEnabled() )
92          {
93              switch ( searchRequest.getScope() )
94              {
95                  case OBJECT :
96                      LOG.debug( I18n.msg( I18n.MSG_05162_SEARCHING_WITH_SCOPE, "BASE_OBJECT" ) );
97                      break;
98  
99                  case ONELEVEL :
100                     LOG.debug( I18n.msg( I18n.MSG_05162_SEARCHING_WITH_SCOPE, "SINGLE_LEVEL" ) );
101                     break;
102 
103                 case SUBTREE :
104                     LOG.debug( I18n.msg( I18n.MSG_05162_SEARCHING_WITH_SCOPE, "WHOLE_SUBTREE" ) );
105                     break;
106 
107                 default:
108                     LOG.debug( I18n.msg( I18n.MSG_05162_SEARCHING_WITH_SCOPE, "UNKNOWN" ) );
109             }
110         }
111     }
112 }