1 chuck 1.1.2.16 //%2003////////////////////////////////////////////////////////////////////////
2 //
3 // Copyright (c) 2000, 2001, 2002 BMC Software, Hewlett-Packard Development
4 // Company, L. P., IBM Corp., The Open Group, Tivoli Systems.
5 // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L. P.;
6 // IBM Corp.; EMC Corporation, The Open Group.
7 //
8 // Permission is hereby granted, free of charge, to any person obtaining a copy
9 // of this software and associated documentation files (the "Software"), to
10 // deal in the Software without restriction, including without limitation the
11 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
12 // sell copies of the Software, and to permit persons to whom the Software is
13 // furnished to do so, subject to the following conditions:
14 //
15 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
16 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
17 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
18 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
19 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
20 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
21 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22 chuck 1.1.2.16 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 //
24 //==============================================================================
25 //
26 // Authors: David Rosckes (rosckes@us.ibm.com)
27 // Bert Rivero (hurivero@us.ibm.com)
28 // Chuck Carmack (carmack@us.ibm.com)
29 // Brian Lucier (lucier@us.ibm.com)
30 //
31 // Modified By:
32 //
33 //%/////////////////////////////////////////////////////////////////////////////
34
|
35 humberto 1.1 #include "CQLFactory.h"
36
37 PEGASUS_NAMESPACE_BEGIN
|
38 humberto 1.1.2.11
39 struct CQLObjectPtr {
40 void* _ptr;
41 }_CQLObjectPtr;
42
43 #define PEGASUS_ARRAY_T CQLObjectPtr
44 #include <Pegasus/Common/ArrayImpl.h>
45 #undef PEGASUS_ARRAY_T
46
|
47 humberto 1.1.2.9 /*
48 CQLFactory::CQLFactory(){
|
49 humberto 1.1
|
50 humberto 1.1.2.9 }
|
51 humberto 1.1.2.13 */
|
52 humberto 1.1.2.9 CQLFactory::~CQLFactory(){
|
53 humberto 1.1.2.13 cleanup();
54 }
55
56 void CQLFactory::cleanup(){
57 cleanupArray(_makeObjectIdentifiers, Identifier);
58 cleanupArray(_makeObjectChainedIdentifiers, ChainedIdentifier);
59 cleanupArray(_makeObjectValues, Value);
60 cleanupArray(_makeObjectFunctions, Function);
61 cleanupArray(_makeObjectFactors, Factor);
62 cleanupArray(_makeObjectTerms, Term);
63 cleanupArray(_makeObjectExpressions, Expression);
64 cleanupArray(_makeObjectSimplePredicates, SimplePredicate);
65 cleanupArray(_makeObjectPredicates, Predicate);
66 cleanupArray(_getObjectIdentifiers, Identifier);
67 cleanupArray(_getObjectChainedIdentifiers, ChainedIdentifier);
68 cleanupArray(_getObjectValues, Value);
69 cleanupArray(_getObjectFunctions, Function);
70 cleanupArray(_getObjectFactors, Factor);
71 cleanupArray(_getObjectTerms, Term);
72 cleanupArray(_getObjectExpressions, Expression);
73 cleanupArray(_getObjectSimplePredicates, SimplePredicate);
74 humberto 1.1.2.13 cleanupArray(_getObjectPredicates, Predicate);
75 }
76 void CQLFactory::cleanupArray(Array<CQLObjectPtr>& arr, FactoryType type){
77 for(Uint32 i=0;i < arr.size(); i++){
78 if(arr[i]._ptr){
79 switch(type){
80 case Predicate:
81 delete (CQLPredicate*)(arr[i]._ptr);
82 break;
83 case SimplePredicate:
84 delete (CQLSimplePredicate*)(arr[i]._ptr);
85 break;
86 case Expression:
87 delete (CQLExpression*)(arr[i]._ptr);
88 break;
89 case Term:
90 delete (CQLTerm*)(arr[i]._ptr);
91 break;
92 case Factor:
93 delete (CQLFactor*)(arr[i]._ptr);
94 break;
95 humberto 1.1.2.13 case Function:
96 delete (CQLFunction*)(arr[i]._ptr);
97 break;
98 case Value:
99 delete (CQLValue*)(arr[i]._ptr);
100 break;
101 case ChainedIdentifier:
102 delete (CQLChainedIdentifier*)(arr[i]._ptr);
103 break;
104 case Identifier:
105 delete (CQLIdentifier*)(arr[i]._ptr);
106 break;
107 }
108 }
|
109 humberto 1.1.2.9 }
110 }
|
111 humberto 1.1.2.13
|
112 humberto 1.1 void* CQLFactory::makeObject(CQLIdentifier* obj, FactoryType target){
|
113 humberto 1.1.2.15 //printf("CQLFactory::makeObject(identifier)\n");
|
114 humberto 1.1.2.11 _CQLObjectPtr._ptr = new CQLChainedIdentifier(*obj);
115 _makeObjectChainedIdentifiers.append(_CQLObjectPtr);
|
116 humberto 1.1 switch(target){
117 case ChainedIdentifier:
|
118 humberto 1.1.2.11 return _makeObjectChainedIdentifiers[_makeObjectChainedIdentifiers.size()-1]._ptr;
|
119 humberto 1.1 break;
120 case Identifier:
121 return NULL;
122 break;
123 default:
|
124 humberto 1.1.2.11 return makeObject((CQLChainedIdentifier*)(_CQLObjectPtr._ptr), target);
|
125 humberto 1.1 break;
126 }
127 }
128 void* CQLFactory::makeObject(CQLChainedIdentifier* obj, FactoryType target){
|
129 humberto 1.1.2.15 //printf("CQLFactory::makeObject(chainedidentifier)\n");
|
130 humberto 1.1.2.11 _CQLObjectPtr._ptr = new CQLValue(*obj);
|
131 humberto 1.1.2.15 CQLValue* _val = (CQLValue*)_CQLObjectPtr._ptr;
|
132 humberto 1.1.2.11 _makeObjectValues.append(_CQLObjectPtr);
|
133 humberto 1.1 switch(target){
134 case Value:
|
135 humberto 1.1.2.11 return _makeObjectValues[_makeObjectValues.size()-1]._ptr;
|
136 humberto 1.1 break;
137 case ChainedIdentifier:
138 return NULL;
139 break;
140 default:
|
141 humberto 1.1.2.11 return makeObject((CQLValue*)(_CQLObjectPtr._ptr), target);
|
142 humberto 1.1 break;
143 }
144
145 }
146 void* CQLFactory::makeObject(CQLValue* obj, FactoryType target){
|
147 humberto 1.1.2.15 //printf("CQLFactory::makeObject(value)\n");
|
148 humberto 1.1.2.11 _CQLObjectPtr._ptr = new CQLFactor(*obj);
149 _makeObjectFactors.append(_CQLObjectPtr);
|
150 humberto 1.1 switch(target){
151 case Factor:
|
152 humberto 1.1.2.11 return _makeObjectFactors[_makeObjectFactors.size()-1]._ptr;
|
153 humberto 1.1 break;
154 case Value:
155 return NULL;
156 break;
157 default:
|
158 humberto 1.1.2.11 return makeObject((CQLFactor*)(_CQLObjectPtr._ptr), target);
|
159 humberto 1.1 break;
160 }
161
162 }
|
163 humberto 1.1.2.7 void* CQLFactory::makeObject(CQLFunction* obj, FactoryType target){
|
164 humberto 1.1.2.15 //printf("CQLFactory::makeObject(function)\n");
|
165 humberto 1.1.2.11 _CQLObjectPtr._ptr = new CQLFactor(*obj);
166 _makeObjectFactors.append(_CQLObjectPtr);
|
167 humberto 1.1.2.7 switch(target){
168 case Factor:
|
169 humberto 1.1.2.11 return _makeObjectFactors[_makeObjectFactors.size()-1]._ptr;
|
170 humberto 1.1.2.7 break;
171 default:
|
172 humberto 1.1.2.11 return makeObject((CQLFactor*)(_CQLObjectPtr._ptr), target);
|
173 humberto 1.1.2.7 break;
174 }
175 }
|
176 humberto 1.1 void* CQLFactory::makeObject(CQLFactor* obj, FactoryType target){
|
177 humberto 1.1.2.15 //printf("CQLFactory::makeObject(factor)\n");
|
178 humberto 1.1.2.11 _CQLObjectPtr._ptr = new CQLTerm(*obj);
179 _makeObjectTerms.append(_CQLObjectPtr);
|
180 humberto 1.1 switch(target){
181 case Term:
|
182 humberto 1.1.2.11 return _makeObjectTerms[_makeObjectTerms.size()-1]._ptr;
|
183 humberto 1.1 break;
184 case Factor:
185 return NULL;
186 break;
187 default:
|
188 humberto 1.1.2.11 return makeObject((CQLTerm*)(_CQLObjectPtr._ptr), target);
|
189 humberto 1.1 break;
190 }
191
192 }
193 void* CQLFactory::makeObject(CQLTerm* obj, FactoryType target){
|
194 humberto 1.1.2.15 //printf("CQLFactory::makeObject(term)\n");
|
195 humberto 1.1.2.11 _CQLObjectPtr._ptr = new CQLExpression(*obj);
196 _makeObjectExpressions.append(_CQLObjectPtr);
|
197 humberto 1.1 switch(target){
198 case Expression:
|
199 humberto 1.1.2.11 return _makeObjectExpressions[_makeObjectExpressions.size()-1]._ptr;
|
200 humberto 1.1 break;
201 case Term:
202 return NULL;
203 break;
204 default:
|
205 humberto 1.1.2.11 return makeObject((CQLExpression*)(_CQLObjectPtr._ptr), target);
|
206 humberto 1.1 break;
207 }
208
209 }
210 void* CQLFactory::makeObject(CQLExpression* obj, FactoryType target){
|
211 humberto 1.1.2.15 //printf("CQLFactory::makeObject(expression)\n");
|
212 humberto 1.1.2.11 _CQLObjectPtr._ptr = new CQLSimplePredicate(*obj);
213 _makeObjectSimplePredicates.append(_CQLObjectPtr);
|
214 humberto 1.1 switch(target){
215 case SimplePredicate:
|
216 humberto 1.1.2.11 return _makeObjectSimplePredicates[_makeObjectSimplePredicates.size()-1]._ptr;
|
217 humberto 1.1 break;
218 case Expression:
219 return NULL;
220 break;
221 default:
|
222 humberto 1.1.2.11 return makeObject((CQLSimplePredicate*)(_CQLObjectPtr._ptr), target);
|
223 humberto 1.1 break;
224 }
225
226 }
227 void* CQLFactory::makeObject(CQLSimplePredicate* obj, FactoryType target){
|
228 humberto 1.1.2.15 //printf("CQLFactory::makeObject(simplepredicate)\n");
|
229 humberto 1.1.2.11 _CQLObjectPtr._ptr = new CQLPredicate(*obj);
230 _makeObjectPredicates.append(_CQLObjectPtr);
|
231 humberto 1.1 switch(target){
232 case Predicate:
|
233 humberto 1.1.2.11 return _makeObjectPredicates[_makeObjectPredicates.size()-1]._ptr;
|
234 humberto 1.1 break;
235 default:
236 return NULL;
237 break;
238 }
|
239 humberto 1.1.2.2 }
|
240 humberto 1.1
|
241 humberto 1.1.2.3 void* CQLFactory::getObject(void* inObject, FactoryType inObjectType, FactoryType targetType){
242 switch(inObjectType){
243 case Predicate:
244 return getObject(((CQLPredicate*)inObject),targetType);
245 case SimplePredicate:
246 return getObject(((CQLSimplePredicate*)inObject),targetType);
247 case Expression:
248 return getObject(((CQLExpression*)inObject),targetType);
249 case Term:
250 return getObject(((CQLTerm*)inObject),targetType);
251 case Factor:
252 return getObject(((CQLFactor*)inObject),targetType);
253 case Function:
254 return NULL;
255 case Value:
|
256 humberto 1.1.2.6 return getObject(((CQLValue*)inObject),targetType);
257 case ChainedIdentifier:
258 return getObject(((CQLChainedIdentifier*)inObject),targetType);
|
259 humberto 1.1.2.3 default:
260 return NULL;
261 }
262 }
263
|
264 humberto 1.1.2.6 void* CQLFactory::getObject(CQLChainedIdentifier* obj, FactoryType target){
|
265 humberto 1.1.2.15 // printf("CQLFactory::getObject(CQLChainedIdentifier* obj)\n");
|
266 humberto 1.1.2.6 switch(target){
267 case Identifier:
268 if(obj->_rep->_subIdentifiers.size() > 0){
|
269 humberto 1.1.2.11 _CQLObjectPtr._ptr = new CQLIdentifier(obj->_rep->_subIdentifiers[0]);
270 _getObjectIdentifiers.append(_CQLObjectPtr);
271 return _getObjectIdentifiers[_getObjectIdentifiers.size()-1]._ptr;
|
272 humberto 1.1.2.6 }
273 return NULL;
274 default:
275 return NULL;
276 }
277 }
278
279 void* CQLFactory::getObject(CQLValue* obj, FactoryType target){
|
280 humberto 1.1.2.15 // printf("CQLFactory::getObject(CQLValue* obj)\n");
|
281 humberto 1.1.2.6 switch(target){
282 case ChainedIdentifier:
|
283 humberto 1.1.2.14 _CQLObjectPtr._ptr = new CQLChainedIdentifier(obj->_rep->_CQLChainId);
|
284 humberto 1.1.2.11 _getObjectChainedIdentifiers.append(_CQLObjectPtr);
285 return _getObjectChainedIdentifiers[_getObjectChainedIdentifiers.size()-1]._ptr;
|
286 humberto 1.1.2.10 case Identifier:
|
287 humberto 1.1.2.14 return getObject(&(obj->_rep->_CQLChainId),target);
|
288 humberto 1.1.2.6 default:
289 return NULL;
290 break;
291 }
292 }
293
|
294 humberto 1.1.2.3 void* CQLFactory::getObject(CQLFactor* obj, FactoryType target){
|
295 humberto 1.1.2.15 // printf("CQLFactory::getObject(CQLFactor* obj)\n");
|
296 humberto 1.1.2.3 switch(target){
297 case Function:
|
298 humberto 1.1.2.11 _CQLObjectPtr._ptr = new CQLFunction(obj->_rep->_CQLFunct);
299 _getObjectFunctions.append(_CQLObjectPtr);
300 return _getObjectFunctions[_getObjectFunctions.size()-1]._ptr;
|
301 humberto 1.1.2.10 case Value:
|
302 humberto 1.1.2.11 _CQLObjectPtr._ptr = new CQLValue(obj->_rep->_CQLVal);
303 _getObjectValues.append(_CQLObjectPtr);
304 return _getObjectValues[_getObjectValues.size()-1]._ptr;
|
305 humberto 1.1.2.10 case ChainedIdentifier:
306 case Identifier:
307 return getObject(&(obj->_rep->_CQLVal),target);
|
308 humberto 1.1.2.3 default:
309 return NULL;
310 break;
311 }
312 }
313
314
315 void* CQLFactory::getObject(CQLTerm* obj, FactoryType target){
|
316 humberto 1.1.2.15 // printf("CQLFactory::getObject(CQLTerm* obj)\n");
|
317 humberto 1.1.2.3 switch(target){
318 case Factor:
|
319 humberto 1.1.2.11 _CQLObjectPtr._ptr = new CQLFactor(obj->getFactors()[0]);
320 _getObjectFactors.append(_CQLObjectPtr);
321 return _getObjectFactors[_getObjectFactors.size()-1]._ptr;
|
322 humberto 1.1.2.10 case Function:
323 case Value:
324 case ChainedIdentifier:
325 case Identifier:
|
326 humberto 1.1.2.9 return getObject(&(obj->getFactors()[0]),target);
|
327 humberto 1.1.2.3 default:
328 return NULL;
329 break;
330 }
331 }
332
333 void* CQLFactory::getObject(CQLExpression* obj, FactoryType target){
|
334 humberto 1.1.2.15 // printf("CQLFactory::getObject(CQLExpression* obj)\n");
|
335 humberto 1.1.2.3 switch(target){
336 case Term:
|
337 humberto 1.1.2.11 _CQLObjectPtr._ptr = new CQLTerm(obj->getTerms()[0]);
338 _getObjectTerms.append(_CQLObjectPtr);
339 return _getObjectTerms[_getObjectTerms.size()-1]._ptr;
|
340 humberto 1.1.2.3 case Factor:
341 case Function:
|
342 humberto 1.1.2.10 case Value:
343 case ChainedIdentifier:
344 case Identifier:
|
345 humberto 1.1.2.9 return getObject(&(obj->getTerms()[0]), target);
|
346 humberto 1.1.2.3 default:
347 return NULL;
348 break;
349 }
350 }
351
352 void* CQLFactory::getObject(CQLSimplePredicate* obj, FactoryType target){
|
353 humberto 1.1.2.15 // printf("CQLFactory::getObject(CQLSimplePredicate* obj)\n");
|
354 humberto 1.1.2.3 switch(target){
355 case Expression:
|
356 humberto 1.1.2.11 _CQLObjectPtr._ptr = new CQLExpression(obj->_rep->_leftSide);
357 _getObjectExpressions.append(_CQLObjectPtr);
358 return _getObjectExpressions[_getObjectExpressions.size()-1]._ptr;
|
359 humberto 1.1.2.3 case Term:
360 case Factor:
361 case Function:
|
362 humberto 1.1.2.10 case Value:
363 case ChainedIdentifier:
364 case Identifier:
|
365 humberto 1.1.2.9 return getObject(&(obj->_rep->_leftSide), target);
|
366 humberto 1.1.2.3 default:
367 return NULL;
368 break;
369 }
370 }
371
372 void* CQLFactory::getObject(CQLPredicate* obj, FactoryType target){
|
373 humberto 1.1.2.15 // printf("CQLFactory::getObject(CQLPredicate* obj)\n");
|
374 humberto 1.1.2.3 switch(target){
375 case SimplePredicate:
|
376 humberto 1.1.2.11 _CQLObjectPtr._ptr = new CQLSimplePredicate(obj->_rep->_simplePredicate);
377 _getObjectSimplePredicates.append(_CQLObjectPtr);
378 return _getObjectSimplePredicates[_getObjectSimplePredicates.size()-1]._ptr;
|
379 humberto 1.1.2.3 case Expression:
380 case Term:
381 case Factor:
382 case Function:
|
383 humberto 1.1.2.10 case Value:
384 case ChainedIdentifier:
385 case Identifier:
|
386 humberto 1.1.2.9 return getObject(&(obj->_rep->_simplePredicate), target);
|
387 humberto 1.1.2.3 default:
388 return NULL;
389 break;
390 }
391 }
392
|
393 humberto 1.1.2.5 void CQLFactory::setObject(CQLPredicate* predicate, void* obj, FactoryType objType){
394 switch(objType){
395 case SimplePredicate:
396 predicate->_rep->_simplePredicate = *((CQLSimplePredicate*)obj);
397 break;
398 case Expression:
399 predicate->_rep->_simplePredicate._rep->_leftSide = *((CQLExpression*)obj);
400 break;
401 case Term:
402 predicate->_rep->_simplePredicate._rep->_leftSide._rep->_CQLTerms[0] =
403 *((CQLTerm*)obj);
404 break;
405 case Factor:
406 predicate->_rep->_simplePredicate._rep->_leftSide._rep->_CQLTerms[0]._rep->_Factors[0] =
407 *((CQLFactor*)obj);
408 break;
409 case Function:
410 predicate->_rep->_simplePredicate._rep->_leftSide._rep->_CQLTerms[0]._rep->_Factors[0]._rep->_CQLFunct =
411 *((CQLFunction*)obj);
412 break;
413 case Value:
414 humberto 1.1.2.5 predicate->_rep->_simplePredicate._rep->_leftSide._rep->_CQLTerms[0]._rep->_Factors[0]._rep->_CQLVal =
415 *((CQLValue*)obj);
416 break;
|
417 humberto 1.1.2.10 case ChainedIdentifier:
|
418 humberto 1.1.2.14 predicate->_rep->_simplePredicate._rep->_leftSide._rep->_CQLTerms[0]._rep->_Factors[0]._rep->_CQLVal._rep->_CQLChainId = *((CQLChainedIdentifier*)obj);
|
419 humberto 1.1.2.10 break;
420 case Identifier:
421 break;
|
422 humberto 1.1.2.5 default:
423 break;
424 }
425 }
|
426 humberto 1.1 PEGASUS_NAMESPACE_END
|