KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > ldap > server > jndi > ObjStateFactoryTest


1 /*
2  * Copyright 2004 The Apache Software Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */

17 package org.apache.ldap.server.jndi;
18
19
20 import org.apache.ldap.server.AbstractCoreTest;
21
22 import javax.naming.Context JavaDoc;
23 import javax.naming.Name JavaDoc;
24 import javax.naming.NamingException JavaDoc;
25 import javax.naming.directory.*;
26 import javax.naming.spi.DirObjectFactory JavaDoc;
27 import javax.naming.spi.DirStateFactory JavaDoc;
28 import java.util.Hashtable JavaDoc;
29
30
31 /**
32  * Tests to make sure that object and state factories work.
33  *
34  * @author <a HREF="mailto:dev@directory.apache.org">Apache Directory Project</a>
35  * @version $Rev$
36  */

37 public class ObjStateFactoryTest extends AbstractCoreTest
38 {
39     public void testObjectFactory() throws NamingException JavaDoc
40     {
41         super.sysRoot.addToEnvironment( Context.OBJECT_FACTORIES, PersonObjectFactory.class.getName() );
42
43         Object JavaDoc obj = super.sysRoot.lookup( "uid=akarasulu, ou=users" );
44
45         Attributes attrs = super.sysRoot.getAttributes( "uid=akarasulu, ou=users" );
46
47         assertEquals( Person.class, obj.getClass() );
48
49         Person me = ( Person ) obj;
50
51         assertEquals( attrs.get( "sn" ).get(), me.getLastname() );
52
53         assertEquals( attrs.get( "cn" ).get(), me.getCn() );
54
55         assertEquals( attrs.get( "userPassword" ).get(), me.getPassword() );
56
57         assertEquals( attrs.get( "telephonenumber" ).get(), me.getTelephoneNumber() );
58
59         assertNull( me.getSeealso() );
60
61         assertNull( me.getDescription() );
62     }
63
64
65     public void testStateFactory() throws NamingException JavaDoc
66     {
67         super.sysRoot.addToEnvironment( Context.STATE_FACTORIES, PersonStateFactory.class.getName() );
68
69         Person p = new Person( "Rodriguez", "Mr. Kerberos", "noices", "555-1212", "erodriguez", "committer" );
70
71         super.sysRoot.bind( "uid=erodriguez, ou=users", p );
72
73         Attributes attrs = super.sysRoot.getAttributes( "uid=erodriguez, ou=users" );
74
75         assertEquals( "Rodriguez", attrs.get( "sn" ).get() );
76
77         assertEquals( "Mr. Kerberos", attrs.get( "cn" ).get() );
78
79         assertEquals( "noices", attrs.get( "userPassword" ).get() );
80
81         assertEquals( "555-1212", attrs.get( "telephonenumber" ).get() );
82
83         assertEquals( "erodriguez", attrs.get( "seealso" ).get() );
84
85         assertEquals( "committer", attrs.get( "description" ).get() );
86
87     }
88
89
90     public static class PersonStateFactory implements DirStateFactory JavaDoc
91     {
92         public Result getStateToBind( Object JavaDoc obj, Name JavaDoc name, Context JavaDoc nameCtx, Hashtable JavaDoc environment, Attributes inAttrs ) throws NamingException JavaDoc
93         {
94             // Only interested in Person objects
95
if ( obj instanceof Person )
96             {
97
98                 Attributes outAttrs;
99
100                 if ( inAttrs == null )
101                 {
102                     outAttrs = new BasicAttributes(true);
103                 }
104                 else
105                 {
106                     outAttrs = ( Attributes ) inAttrs.clone();
107                 }
108
109                 // Set up object class
110
if ( outAttrs.get( "objectclass" ) == null )
111                 {
112                     BasicAttribute oc = new BasicAttribute( "objectclass", "person" );
113
114                     oc.add( "top" );
115
116                     outAttrs.put( oc );
117                 }
118
119                 Person per = ( Person ) obj;
120
121                 // mandatory attributes
122
if ( per.getLastname() != null )
123                 {
124                     outAttrs.put( "sn", per.getLastname() );
125                 }
126                 else
127                 {
128                     throw new SchemaViolationException( "Person must have surname" );
129                 }
130
131                 if ( per.getCn() != null )
132                 {
133                     outAttrs.put( "cn", per.getCn() );
134                 }
135                 else
136                 {
137                     throw new SchemaViolationException( "Person must have common name" );
138                 }
139
140                 // optional attributes
141
if ( per.getPassword() != null )
142                 {
143                     outAttrs.put( "userPassword", per.getPassword() );
144                 }
145                 if ( per.getTelephoneNumber() != null )
146                 {
147                     outAttrs.put( "telephoneNumber", per.getTelephoneNumber() );
148                 }
149                 if ( per.getSeealso() != null )
150                 {
151                     outAttrs.put( "seeAlso", per.getSeealso() );
152                 }
153                 if ( per.getDescription() != null )
154                 {
155                     outAttrs.put( "description", per.getDescription() );
156                 }
157
158                 return new DirStateFactory.Result JavaDoc( null, outAttrs );
159             }
160
161             return null;
162         }
163
164
165         public Object JavaDoc getStateToBind( Object JavaDoc obj, Name JavaDoc name, Context JavaDoc nameCtx, Hashtable JavaDoc environment ) throws NamingException JavaDoc
166         {
167             throw new UnsupportedOperationException JavaDoc( "Please use directory support overload with Attributes argument." );
168         }
169     }
170
171     public static class PersonObjectFactory implements DirObjectFactory JavaDoc
172     {
173         public Object JavaDoc getObjectInstance( Object JavaDoc obj, Name JavaDoc name, Context JavaDoc nameCtx, Hashtable JavaDoc environment, Attributes attrs ) throws Exception JavaDoc
174         {
175             // Only interested in Attributes with "person" objectclass
176
// System.out.println("object factory: " + attrs);
177
Attribute oc = (attrs != null ? attrs.get("objectclass") : null);
178             if (oc != null && oc.contains("person")) {
179                 Attribute attr;
180             String JavaDoc passwd = null;
181
182             // Extract the password
183
attr = attrs.get("userPassword");
184             if (attr != null) {
185                 Object JavaDoc pw = attr.get();
186
187                 if ( pw instanceof String JavaDoc )
188                     passwd = ( String JavaDoc ) pw;
189                 else
190                     passwd = new String JavaDoc((byte[]) pw);
191             }
192                 Person per = new Person(
193                   (String JavaDoc)attrs.get("sn").get(),
194                   (String JavaDoc)attrs.get("cn").get(),
195               passwd,
196                   (attr=attrs.get("telephoneNumber")) != null ? (String JavaDoc)attr.get() : null,
197                   (attr=attrs.get("seealso")) != null ? (String JavaDoc)attr.get() : null,
198                   (attr=attrs.get("description")) != null ? (String JavaDoc)attr.get() : null);
199                 return per;
200             }
201             return null;
202         }
203
204
205         public Object JavaDoc getObjectInstance( Object JavaDoc obj, Name JavaDoc name, Context JavaDoc nameCtx, Hashtable JavaDoc environment ) throws Exception JavaDoc
206         {
207             throw new UnsupportedOperationException JavaDoc( "Please use directory support overload with Attributes argument." );
208         }
209     }
210
211
212     public static class Person
213     {
214         private String JavaDoc sn, cn, pwd, tele, seealso, desc;
215
216         public Person( String JavaDoc sn, String JavaDoc cn, String JavaDoc pwd, String JavaDoc tele, String JavaDoc seealso, String JavaDoc desc )
217         {
218             this.sn = sn;
219             this.cn = cn;
220             this.pwd = pwd;
221             this.tele = tele;
222             this.seealso = seealso;
223             this.desc = desc;
224         }
225
226
227         public String JavaDoc getLastname()
228         {
229             return sn;
230         }
231
232
233         public String JavaDoc getCn()
234         {
235             return cn;
236         }
237
238
239         public String JavaDoc getPassword()
240         {
241             return pwd;
242         }
243
244
245         public String JavaDoc getTelephoneNumber()
246         {
247             return tele;
248         }
249
250
251         public String JavaDoc getSeealso()
252         {
253             return seealso;
254         }
255
256
257         public String JavaDoc getDescription()
258         {
259             return desc;
260         }
261     }
262 }
263
Popular Tags