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.model.exception;
21  
22  
23  import java.util.ArrayList;
24  import java.util.Collection;
25  import java.util.Hashtable;
26  import java.util.List;
27  
28  import javax.naming.Context;
29  import javax.naming.NamingException;
30  
31  import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
32  import org.apache.directory.api.ldap.model.name.Dn;
33  import org.apache.directory.api.util.exception.NotImplementedException;
34  
35  
36  /**
37   * A {@link LdapOperationException} which associates a resultCode namely the
38   * {@link org.apache.directory.api.ldap.model.message.ResultCodeEnum#REFERRAL} resultCode with the exception.
39   * 
40   * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
41   */
42  public class LdapReferralException extends AbstractLdapReferralException
43  {
44      /** The serial version UUID */
45      static final long serialVersionUID = 1L;
46  
47      /** The list of referrals */
48      private final List<String> refs;
49  
50      /** The current index in the list of referrals */
51      private int index = 0;
52  
53      /** The remaining Dn */
54      private Dn remainingDn;
55  
56      /** TODO */
57      private Object resolvedObject;
58  
59  
60      /**
61       * 
62       * Creates a new instance of LdapReferralException.
63       *
64       * @param refs The list of referrals
65       */
66      public LdapReferralException( Collection<String> refs )
67      {
68          super( null );
69          this.refs = new ArrayList<String>( refs );
70      }
71  
72  
73      /**
74       * 
75       * Creates a new instance of LdapReferralException.
76       *
77       * @param refs The list of referrals
78       * @param explanation The associated error message
79       */
80      public LdapReferralException( Collection<String> refs, String explanation )
81      {
82          super( explanation );
83          this.refs = new ArrayList<String>( refs );
84      }
85  
86  
87      /**
88       * Always returns {@link ResultCodeEnum#REFERRAL}
89       * 
90       * @see LdapException#getResultCode()
91       */
92      public ResultCodeEnum getResultCode()
93      {
94          return ResultCodeEnum.REFERRAL;
95      }
96  
97  
98      /**
99       * @return The current Referral
100      */
101     public String getReferralInfo()
102     {
103         return refs.get( index );
104     }
105 
106 
107     public Context getReferralContext() throws NamingException
108     {
109         throw new NotImplementedException();
110     }
111 
112 
113     public Context getReferralContext( Hashtable<?, ?> arg ) throws NamingException
114     {
115         throw new NotImplementedException();
116     }
117 
118 
119     /**
120      * Move to the next referral
121      * @return true if there is some next referral
122      */
123     public boolean skipReferral()
124     {
125         index++;
126         return index < refs.size();
127     }
128 
129 
130     public void retryReferral()
131     {
132         throw new NotImplementedException();
133     }
134 
135 
136     /**
137      * @return the remainingDn
138      */
139     public Dn getRemainingDn()
140     {
141         return remainingDn;
142     }
143 
144 
145     /**
146      * @param remainingDn the remainingName to set
147      */
148     public void setRemainingDn( Dn remainingDn )
149     {
150         this.remainingDn = remainingDn;
151     }
152 
153 
154     /**
155      * @return the resolvedObject
156      */
157     public Object getResolvedObject()
158     {
159         return resolvedObject;
160     }
161 
162 
163     /**
164      * @param resolvedObject the resolvedObject to set
165      */
166     public void setResolvedObject( Object resolvedObject )
167     {
168         this.resolvedObject = resolvedObject;
169     }
170 }