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    
021    package org.apache.directory.shared.dsmlv2.reponse;
022    
023    
024    import java.util.List;
025    
026    import org.apache.directory.shared.dsmlv2.DsmlDecorator;
027    import org.apache.directory.shared.dsmlv2.ParserUtils;
028    import org.apache.directory.shared.ldap.codec.LdapMessageCodec;
029    import org.apache.directory.shared.ldap.codec.LdapResultCodec;
030    import org.apache.directory.shared.ldap.util.LdapURL;
031    import org.apache.directory.shared.ldap.message.ResultCodeEnum;
032    import org.apache.directory.shared.ldap.name.DN;
033    import org.dom4j.Element;
034    
035    
036    /**
037     * DSML Decorator for the LdapResult class.
038     *
039     * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
040     * @version $Rev$, $Date$
041     */
042    public class LdapResultDsml implements DsmlDecorator
043    {
044        /** The LDAP Result to decorate */
045        private LdapResultCodec result;
046    
047        /** The associated LDAP Message */
048        private LdapMessageCodec message;
049    
050    
051        /**
052         * Creates a new instance of LdapResultDsml.
053         *
054         * @param result
055         *      the LdapResult to decorate
056         * @param message
057         *      the associated message
058         */
059        public LdapResultDsml( LdapResultCodec result, LdapMessageCodec message )
060        {
061            this.result = result;
062            this.message = message;
063        }
064    
065    
066        /* (non-Javadoc)
067         * @see org.apache.directory.shared.dsmlv2.reponse.DsmlDecorator#toDsml(org.dom4j.Element)
068         */
069        public Element toDsml( Element root )
070        {
071    
072            // RequestID
073            int requestID = message.getMessageId();
074            if ( requestID != 0 )
075            {
076                root.addAttribute( "requestID", "" + requestID );
077            }
078    
079            // Matched DN
080            String matchedDN = result.getMatchedDN();
081            if ( !matchedDN.equals( "" ) )
082            {
083                root.addAttribute( "matchedDN", matchedDN );
084            }
085    
086            // Controls
087            ParserUtils.addControls( root, message.getControls() );
088    
089            // ResultCode
090            Element resultCodeElement = root.addElement( "resultCode" );
091            resultCodeElement.addAttribute( "code", "" + result.getResultCode().getResultCode() );
092            resultCodeElement.addAttribute( "descr", LdapResultEnum.getResultCodeDescr( result.getResultCode() ) );
093    
094            // ErrorMessage
095            String errorMessage = ( result.getErrorMessage() );
096            if ( ( errorMessage != null ) && ( !errorMessage.equals( "" ) ) )
097            {
098                Element errorMessageElement = root.addElement( "errorMessage" );
099                errorMessageElement.addText( errorMessage );
100            }
101    
102            // Referals
103            List<LdapURL> referals = result.getReferrals();
104            if ( referals != null )
105            {
106                for ( int i = 0; i < referals.size(); i++ )
107                {
108                    Element referalElement = root.addElement( "referal" );
109                    referalElement.addText( referals.get( i ).toString() );
110                }
111            }
112    
113            return root;
114        }
115    
116    
117        /**
118         * Initialize the referrals list
119         */
120        public void initReferrals()
121        {
122            result.initReferrals();
123        }
124    
125    
126        /**
127         * Get the error message
128         * 
129         * @return Returns the errorMessage.
130         */
131        public String getErrorMessage()
132        {
133            return result.getErrorMessage();
134        }
135    
136    
137        /**
138         * Set the error message
139         * 
140         * @param errorMessage The errorMessage to set.
141         */
142        public void setErrorMessage( String errorMessage )
143        {
144            result.setErrorMessage( errorMessage );
145        }
146    
147    
148        /**
149         * Get the matched DN
150         * 
151         * @return Returns the matchedDN.
152         */
153        public String getMatchedDN()
154        {
155            return result.getMatchedDN();
156        }
157    
158    
159        /**
160         * Set the Matched DN
161         * 
162         * @param matchedDN The matchedDN to set.
163         */
164        public void setMatchedDN( DN matchedDN )
165        {
166            result.setMatchedDN( matchedDN );
167        }
168    
169    
170        /**
171         * Get the referrals
172         * 
173         * @return Returns the referrals.
174         */
175        public List<LdapURL> getReferrals()
176        {
177            return result.getReferrals();
178        }
179    
180    
181        /**
182         * Add a referral
183         * 
184         * @param referral The referral to add.
185         */
186        public void addReferral( LdapURL referral )
187        {
188            result.addReferral( referral );
189        }
190    
191    
192        /**
193         * Get the result code
194         * 
195         * @return Returns the resultCode.
196         */
197        public ResultCodeEnum getResultCode()
198        {
199            return result.getResultCode();
200        }
201    
202    
203        /**
204         * Set the result code
205         * 
206         * @param resultCode The resultCode to set.
207         */
208        public void setResultCode( ResultCodeEnum resultCode )
209        {
210            result.setResultCode( resultCode );
211        }
212    }