1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 package org.exolab.castor.dsml.jndi;
37
38 import javax.naming.NamingException;
39 import javax.naming.NameNotFoundException;
40 import javax.naming.NamingEnumeration;
41 import javax.naming.directory.SearchControls;
42 import javax.naming.directory.DirContext;
43 import javax.naming.directory.SearchResult;
44
45 import org.xml.sax.DocumentHandler;
46 import org.xml.sax.SAXException;
47 import org.castor.core.util.Messages;
48 import org.exolab.castor.dsml.Consumer;
49 import org.exolab.castor.dsml.Exporter;
50 import org.exolab.castor.dsml.SearchDescriptor;
51 import org.exolab.castor.dsml.ImportExportException;
52
53
54
55
56
57 public class JNDIExporter extends Exporter {
58 private DirContext _ctx;
59
60 public JNDIExporter(final DirContext ctx) {
61 _ctx = ctx;
62 }
63
64 protected Consumer createConsumer() {
65 return new JNDIConsumer();
66 }
67
68 public void export(final DocumentHandler docHandler, final boolean serverSchema,
69 final boolean importPolicy) throws ImportExportException {
70 NamingEnumeration<SearchResult> enumeration;
71 String filter;
72 JNDIProducer producer;
73 SearchControls searchCtrl;
74
75 if (getSearchDescriptor() == null) {
76 throw new IllegalStateException(Messages.message("dsml.searchDescriptorRequired"));
77 }
78
79 filter = getSearchDescriptor().getFilter();
80 if (filter == null) {
81 filter = "()";
82 }
83 try {
84 searchCtrl = new SearchControls();
85 searchCtrl.setReturningAttributes(getSearchDescriptor().getReturnAttrs());
86 switch (getSearchDescriptor().getScope()) {
87 case SearchDescriptor.Scope.BASE:
88 searchCtrl.setSearchScope(SearchControls.OBJECT_SCOPE);
89 break;
90 case SearchDescriptor.Scope.ONE_LEVEL:
91 searchCtrl.setSearchScope(SearchControls.ONELEVEL_SCOPE);
92 break;
93 case SearchDescriptor.Scope.SUB_TREE:
94 searchCtrl.setSearchScope(SearchControls.SUBTREE_SCOPE);
95 break;
96 default:
97 break;
98 }
99 enumeration = _ctx.search(getSearchDescriptor().getBaseDN(), filter, searchCtrl);
100 } catch (NameNotFoundException except) {
101 enumeration = null;
102 } catch (NamingException except) {
103 throw new ImportExportException(except);
104 }
105
106 try {
107 producer = new JNDIProducer(docHandler, false);
108 producer.startDocument();
109 if (enumeration != null) {
110 producer.produce(enumeration);
111 }
112 if (importPolicy && getImportDescriptor() != null) {
113 producer.produce(getImportDescriptor());
114 }
115 producer.endDocument();
116 } catch (SAXException except) {
117 throw new ImportExportException(except);
118 }
119 }
120 }