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   *    http://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.modifyRequest;
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.TLV;
26  import org.apache.directory.api.i18n.I18n;
27  import org.apache.directory.api.ldap.codec.api.LdapMessageContainer;
28  import org.apache.directory.api.ldap.codec.api.ResponseCarryingException;
29  import org.apache.directory.api.ldap.codec.decorators.ModifyRequestDecorator;
30  import org.apache.directory.api.ldap.model.message.ModifyRequest;
31  import org.apache.directory.api.ldap.model.message.ModifyResponseImpl;
32  import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
33  import org.apache.directory.api.util.Strings;
34  import org.slf4j.Logger;
35  import org.slf4j.LoggerFactory;
36  
37  
38  /**
39   * The action used to store the ModificationRequest's attribute type
40   * <pre>
41   * ModifyRequest ::= [APPLICATION 6] SEQUENCE {
42   *     ...
43   *     modification SEQUENCE OF SEQUENCE {
44   *             ...
45   *         modification   AttributeTypeAndValues }
46   *
47   * AttributeTypeAndValues ::= SEQUENCE {
48   *     type AttributeDescription,
49   *     ...
50   * </pre>
51   * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
52   */
53  public class AddModifyRequestAttribute extends GrammarAction<LdapMessageContainer<ModifyRequestDecorator>>
54  {
55      /** The logger */
56      private static final Logger LOG = LoggerFactory.getLogger( AddModifyRequestAttribute.class );
57  
58      /** Speedup for logs */
59      private static final boolean IS_DEBUG = LOG.isDebugEnabled();
60  
61  
62      /**
63       * Instantiates a new action.
64       */
65      public AddModifyRequestAttribute()
66      {
67          super( "Store Modify request operation type" );
68      }
69  
70  
71      /**
72       * {@inheritDoc}
73       */
74      public void action( LdapMessageContainer<ModifyRequestDecorator> container ) throws DecoderException
75      {
76          ModifyRequestDecorator modifyRequestDecorator = container.getMessage();
77          ModifyRequest modifyRequest = modifyRequestDecorator.getDecorated();
78  
79          TLV tlv = container.getCurrentTLV();
80  
81          // Store the value. It can't be null
82          String type;
83  
84          if ( tlv.getLength() == 0 )
85          {
86              String msg = I18n.err( I18n.ERR_04083 );
87              LOG.error( msg );
88  
89              ModifyResponseImpl response = new ModifyResponseImpl( modifyRequest.getMessageId() );
90              throw new ResponseCarryingException( msg, response, ResultCodeEnum.INVALID_ATTRIBUTE_SYNTAX,
91                  modifyRequest.getName(), null );
92          }
93          else
94          {
95              type = Strings.utf8ToString( tlv.getValue().getData() );
96              modifyRequestDecorator.addAttributeTypeAndValues( type );
97          }
98  
99          if ( IS_DEBUG )
100         {
101             LOG.debug( "Modifying type : {}", type );
102         }
103     }
104 }