version 1.1, 2004/01/27 13:48:11
|
version 1.2, 2004/06/02 09:01:58
|
|
|
// Author: Adrain Schuur (schuur@de.ibm.com) | // Author: Adrain Schuur (schuur@de.ibm.com) |
// | // |
// Modified By: | // Modified By: |
|
// Amit K Arora, IBM (amita@in.ibm.com) for PEP#101 |
// | // |
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
#include "WQLOperationRequestDispatcher.h" | #include "WQLOperationRequestDispatcher.h" |
|
#include <Pegasus/Common/AutoPtr.h> |
| |
PEGASUS_NAMESPACE_BEGIN | PEGASUS_NAMESPACE_BEGIN |
| |
|
|
CIMExecQueryRequestMessage* request) | CIMExecQueryRequestMessage* request) |
{ | { |
Boolean exception=false; | Boolean exception=false; |
WQLSelectStatement *selectStatement=new WQLSelectStatement(); |
AutoPtr<WQLSelectStatement> selectStatement(new WQLSelectStatement()); |
WQLQueryExpressionRep *qx; |
AutoPtr<WQLQueryExpressionRep> qx; |
CIMException cimException; | CIMException cimException; |
CIMName className; | CIMName className; |
| |
|
|
} | } |
else { | else { |
try { | try { |
WQLParser::parse(request->query, *selectStatement); |
WQLParser::parse(request->query, *selectStatement.get()); |
className=selectStatement->getClassName(); | className=selectStatement->getClassName(); |
qx=new WQLQueryExpressionRep("WQL",selectStatement); |
qx.reset(new WQLQueryExpressionRep("WQL",selectStatement.get())); |
} | } |
catch (ParseError& e) { | catch (ParseError& e) { |
cimException = | cimException = |
|
|
if (exception) { | if (exception) { |
Array<CIMObject> cimObjects; | Array<CIMObject> cimObjects; |
| |
CIMExecQueryResponseMessage* response = |
AutoPtr<CIMExecQueryResponseMessage> response( |
new CIMExecQueryResponseMessage( | new CIMExecQueryResponseMessage( |
request->messageId, | request->messageId, |
cimException, | cimException, |
request->queueIds.copyAndPop(), | request->queueIds.copyAndPop(), |
cimObjects); |
cimObjects)); |
| |
STAT_COPYDISPATCHER_REP | STAT_COPYDISPATCHER_REP |
_enqueueResponse(request, response); |
_enqueueResponse(request, response.release()); |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
return; | return; |
} | } |
|
|
catch(CIMException& exception) { | catch(CIMException& exception) { |
// Return exception response if exception from getSubClasses | // Return exception response if exception from getSubClasses |
cimException = exception; | cimException = exception; |
CIMExecQueryResponseMessage* response = |
AutoPtr<CIMExecQueryResponseMessage> response( |
new CIMExecQueryResponseMessage(request->messageId, | new CIMExecQueryResponseMessage(request->messageId, |
cimException, | cimException, |
request->queueIds.copyAndPop(), | request->queueIds.copyAndPop(), |
Array<CIMObject>()); |
Array<CIMObject>())); |
| |
_enqueueResponse(request, response); |
_enqueueResponse(request, response.release()); |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
return; | return; |
} | } |
|
|
| |
// l10n | // l10n |
| |
CIMExecQueryResponseMessage* response = |
AutoPtr<CIMExecQueryResponseMessage> response( |
new CIMExecQueryResponseMessage(request->messageId, | new CIMExecQueryResponseMessage(request->messageId, |
PEGASUS_CIM_EXCEPTION_L(CIM_ERR_NOT_SUPPORTED, | PEGASUS_CIM_EXCEPTION_L(CIM_ERR_NOT_SUPPORTED, |
MessageLoaderParms("Server.CIMOperationRequestDispatcher." | MessageLoaderParms("Server.CIMOperationRequestDispatcher." |
"QUERY_REQ_TOO_BROAD", "Query request too Broad")), | "QUERY_REQ_TOO_BROAD", "Query request too Broad")), |
request->queueIds.copyAndPop(), | request->queueIds.copyAndPop(), |
Array<CIMObject>()); |
Array<CIMObject>())); |
| |
STAT_COPYDISPATCHER | STAT_COPYDISPATCHER |
| |
_enqueueResponse(request, response); |
_enqueueResponse(request, response.release()); |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
return; | return; |
} | } |
|
|
PEG_TRACE_STRING(TRC_DISPATCHER, Tracer::LEVEL4, | PEG_TRACE_STRING(TRC_DISPATCHER, Tracer::LEVEL4, |
"CIM_ERROR_NOT_SUPPORTED for " + request->className.getString()); | "CIM_ERROR_NOT_SUPPORTED for " + request->className.getString()); |
| |
CIMExecQueryResponseMessage* response = |
AutoPtr<CIMExecQueryResponseMessage> response( |
new CIMExecQueryResponseMessage(request->messageId, | new CIMExecQueryResponseMessage(request->messageId, |
PEGASUS_CIM_EXCEPTION(CIM_ERR_NOT_SUPPORTED, String::EMPTY), | PEGASUS_CIM_EXCEPTION(CIM_ERR_NOT_SUPPORTED, String::EMPTY), |
request->queueIds.copyAndPop(), | request->queueIds.copyAndPop(), |
Array<CIMObject>()); |
Array<CIMObject>())); |
| |
STAT_COPYDISPATCHER | STAT_COPYDISPATCHER |
| |
_enqueueResponse(request, response); |
_enqueueResponse(request, response.release()); |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
return; | return; |
} | } |
|
|
request->messageId, | request->messageId, |
request->queueIds.top(), | request->queueIds.top(), |
className, | className, |
qx, |
qx.release(), |
"WQL"); | "WQL"); |
| |
// Set the number of expected responses in the OperationAggregate | // Set the number of expected responses in the OperationAggregate |
|
|
| |
else { | else { |
// if (getenv("CMPI_DEBUG")) asm("int $3"); | // if (getenv("CMPI_DEBUG")) asm("int $3"); |
CIMExecQueryRequestMessage* requestCopy = |
AutoPtr<CIMExecQueryRequestMessage> requestCopy( |
new CIMExecQueryRequestMessage(*request); |
new CIMExecQueryRequestMessage(*request)); |
| |
requestCopy->className = providerInfos[i]._className; | requestCopy->className = providerInfos[i]._className; |
| |
_forwardRequestForAggregation(providerInfos[i]._serviceName, | _forwardRequestForAggregation(providerInfos[i]._serviceName, |
providerInfos[i]._controlProviderName, requestCopy, poA); |
providerInfos[i]._controlProviderName, requestCopy.release(), poA); |
} | } |
| |
STAT_PROVIDEREND | STAT_PROVIDEREND |
|
|
| |
STAT_PROVIDEREND | STAT_PROVIDEREND |
| |
CIMEnumerateInstancesResponseMessage* response = |
AutoPtr<CIMEnumerateInstancesResponseMessage> response( |
new CIMEnumerateInstancesResponseMessage( | new CIMEnumerateInstancesResponseMessage( |
request->messageId, | request->messageId, |
cimException, | cimException, |
request->queueIds.copyAndPop(), | request->queueIds.copyAndPop(), |
cimInstances); |
cimInstances)); |
| |
STAT_COPYDISPATCHER_REP | STAT_COPYDISPATCHER_REP |
Boolean isDoneAggregation = poA->appendResponse(response); |
Boolean isDoneAggregation = poA->appendResponse(response.release()); |
if (isDoneAggregation) | if (isDoneAggregation) |
{ | { |
handleOperationResponseAggregation(poA); | handleOperationResponseAggregation(poA); |