1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.directory.server.core.api.sp;
21
22
23 import java.util.List;
24
25 import javax.naming.directory.SearchControls;
26
27 import org.apache.directory.api.ldap.model.constants.SchemaConstants;
28 import org.apache.directory.api.ldap.model.cursor.Cursor;
29 import org.apache.directory.api.ldap.model.entry.Entry;
30 import org.apache.directory.api.ldap.model.entry.Value;
31 import org.apache.directory.api.ldap.model.exception.LdapException;
32 import org.apache.directory.api.ldap.model.filter.EqualityNode;
33 import org.apache.directory.api.ldap.model.filter.ExprNode;
34 import org.apache.directory.api.ldap.model.message.AliasDerefMode;
35 import org.apache.directory.api.ldap.model.message.SearchScope;
36 import org.apache.directory.api.ldap.model.name.Dn;
37 import org.apache.directory.api.ldap.model.schema.AttributeType;
38 import org.apache.directory.server.core.api.CoreSession;
39 import org.apache.directory.server.core.api.entry.ClonedServerEntry;
40 import org.apache.directory.server.i18n.I18n;
41
42
43
44
45
46
47
48
49 public class StoredProcExecutionManager
50 {
51 private final String storedProcContainer;
52
53 private final List<StoredProcEngineConfig> storedProcEngineConfigs;
54
55
56
57
58
59
60
61
62 public StoredProcExecutionManager( final String storedProcContainer,
63 final List<StoredProcEngineConfig> storedProcEngineConfigs )
64 {
65 this.storedProcContainer = storedProcContainer;
66 this.storedProcEngineConfigs = storedProcEngineConfigs;
67 }
68
69
70
71
72
73
74
75
76
77
78
79 public Entry findStoredProcUnit( CoreSession session, String fullSPName ) throws Exception
80 {
81 SearchControls controls = new SearchControls();
82 controls.setReturningAttributes( SchemaConstants.ALL_USER_ATTRIBUTES_ARRAY );
83 controls.setSearchScope( SearchControls.SUBTREE_SCOPE );
84 String spUnitName = StoredProcUtils.extractStoredProcUnitName( fullSPName );
85
86 AttributeType storeProcUnitNamAT = session.getDirectoryService()
87 .getSchemaManager().lookupAttributeTypeRegistry( "storedProcUnitName" );
88 ExprNode filter = new EqualityNode<String>( storeProcUnitNamAT,
89 new Value( storeProcUnitNamAT, spUnitName ) );
90 Dn dn = session.getDirectoryService().getDnFactory().create( storedProcContainer );
91 Cursor<Entry> results = session.search( dn, SearchScope.SUBTREE, filter,
92 AliasDerefMode.DEREF_ALWAYS );
93
94 if ( results.first() )
95 {
96 Entry entry = results.get();
97 results.close();
98
99 return entry;
100 }
101
102 return null;
103 }
104
105
106
107
108
109
110
111
112
113
114 public StoredProcEngine getStoredProcEngineInstance( Entry spUnitEntry ) throws LdapException
115 {
116 String spLangId = ( ( ClonedServerEntry ) spUnitEntry ).getOriginalEntry().get( "storedProcLangId" )
117 .getString();
118
119 for ( StoredProcEngineConfig engineConfig : storedProcEngineConfigs )
120 {
121 if ( engineConfig.getStoredProcLangId().equalsIgnoreCase( spLangId ) )
122 {
123 Class<? extends StoredProcEngine> engineType = engineConfig.getStoredProcEngineType();
124 StoredProcEngine engine;
125
126 try
127 {
128 engine = engineType.newInstance();
129 }
130 catch ( InstantiationException | IllegalAccessException e )
131 {
132 LdapException ne = new LdapException( e.getMessage(), e );
133 ne.initCause( e );
134 throw ne;
135 }
136
137 engine.setSPUnitEntry( ( Entry ) ( ( ClonedServerEntry ) spUnitEntry ).getOriginalEntry() );
138 return engine;
139 }
140
141 }
142
143 throw new LdapException( I18n.err( I18n.ERR_294, spLangId ) );
144
145 }
146
147 }