(file) Return to CQLFactory.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / CQL

  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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2