001    /*
002     *  Licensed to the Apache Software Foundation (ASF) under one
003     *  or more contributor license agreements.  See the NOTICE file
004     *  distributed with this work for additional information
005     *  regarding copyright ownership.  The ASF licenses this file
006     *  to you under the Apache License, Version 2.0 (the
007     *  "License"); you may not use this file except in compliance
008     *  with the License.  You may obtain a copy of the License at
009     *  
010     *    http://www.apache.org/licenses/LICENSE-2.0
011     *  
012     *  Unless required by applicable law or agreed to in writing,
013     *  software distributed under the License is distributed on an
014     *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015     *  KIND, either express or implied.  See the License for the
016     *  specific language governing permissions and limitations
017     *  under the License. 
018     *  
019     */
020    package org.apache.directory.shared.ldap.message;
021    
022    
023    import java.util.Arrays;
024    
025    import org.apache.directory.shared.ldap.message.internal.InternalAbstractResultResponse;
026    import org.apache.directory.shared.ldap.message.internal.InternalIntermediateResponse;
027    
028    /**
029     * IntermediateResponse implementation
030     * 
031     * @author <a href="mailto:dev@directory.apache.org"> Apache Directory Project</a>
032     * @version $Rev: 905344 $
033     */
034    public class IntermediateResponseImpl extends InternalAbstractResultResponse implements InternalIntermediateResponse
035    {
036        static final long serialVersionUID = -6646752766410531060L;
037    
038        /** ResponseName for the intermediate response */
039        protected String oid;
040    
041        /** Response Value for the intermediate response */
042        protected byte[] value;
043    
044    
045        // ------------------------------------------------------------------------
046        // Constructors
047        // ------------------------------------------------------------------------
048        public IntermediateResponseImpl( int id )
049        {
050            super( id, TYPE );
051        }
052    
053    
054        // ------------------------------------------------------------------------
055        // IntermediateResponse Interface Method Implementations
056        // ------------------------------------------------------------------------
057    
058        /**
059         * Gets the reponseName specific encoded
060         * 
061         * @return the response value
062         */
063        public byte[] getResponseValue()
064        {
065            if ( value == null )
066            {
067                return null;
068            }
069    
070            final byte[] copy = new byte[ value.length ];
071            System.arraycopy( value, 0, copy, 0, value.length );
072            return copy;
073        }
074    
075    
076        /**
077         * Sets the response value
078         * 
079         * @param value the response value.
080         */
081        public void setResponseValue( byte[] value )
082        {
083            if ( value != null )
084            {
085                this.value = new byte[ value.length ];
086                System.arraycopy( value, 0, this.value, 0, value.length );
087            } else {
088                this.value = null;
089            }
090        }
091        
092        
093        /**
094         * Gets the OID uniquely identifying this Intemediate response (a.k.a. its
095         * name).
096         * 
097         * @return the OID of the Intemediate response type.
098         */
099        public String getResponseName()
100        {
101            return oid;
102        }
103    
104    
105        /**
106         * Sets the OID uniquely identifying this Intemediate response (a.k.a. its
107         * name).
108         * 
109         * @param oid the OID of the Intemediate response type.
110         */
111        public void setResponseName( String oid )
112        {
113            this.oid = oid;
114        }
115    
116    
117        /**
118         * Checks to see if an object equals this IntemediateResponse.
119         * 
120         * @param obj the object to be checked for equality
121         * @return true if the obj equals this IntemediateResponse, false otherwise
122         */
123        public boolean equals( Object obj )
124        {
125            if ( obj == this )
126            {
127                return true;
128            }
129    
130            if ( !super.equals( obj ) )
131            {
132                return false;
133            }
134            
135            if ( !( obj instanceof InternalIntermediateResponse ) )
136            {
137                return false;
138            }
139    
140            InternalIntermediateResponse resp = ( InternalIntermediateResponse ) obj;
141    
142            if ( ( oid != null ) && ( resp.getResponseName() == null ) )
143            {
144                return false;
145            }
146    
147            if ( ( oid == null ) && ( resp.getResponseName() != null ) )
148            {
149                return false;
150            }
151    
152            if ( ( oid != null ) && ( resp.getResponseName() != null ) )
153            {
154                if ( !oid.equals( resp.getResponseName() ) )
155                {
156                    return false;
157                }
158            }
159    
160            if ( ( value != null ) && ( resp.getResponseValue() == null ) )
161            {
162                return false;
163            }
164    
165            if ( ( value == null ) && ( resp.getResponseValue() != null ) )
166            {
167                return false;
168            }
169    
170            if ( ( value != null ) && ( resp.getResponseValue() != null ) )
171            {
172                if ( !Arrays.equals( value, resp.getResponseValue() ) )
173                {
174                    return false;
175                }
176            }
177    
178            return true;
179        }
180    }