blob: 2064c83a99de9f869103d6365c64972add0377eb [file] [log] [blame]
/*=========================================================================
* Copyright (c) 2002-2014 Pivotal Software, Inc. All Rights Reserved.
* This product is protected by U.S. and international copyright
* and intellectual property laws. Pivotal products are covered by
* more patents listed at http://www.pivotal.io/patents.
* All Rights Reserved.
*=========================================================================
*/
#include "fwklib/FwkObjects.hpp"
#include "fwklib/FwkLog.hpp"
#include "fwklib/FwkException.hpp"
#include "fwklib/FwkObjects.hpp"
#include "fwklib/GsRandom.hpp"
#include <xercesc/dom/DOMErrorHandler.hpp>
#include <xercesc/util/XMLString.hpp>
#include <xercesc/util/PlatformUtils.hpp>
#include <xercesc/parsers/AbstractDOMParser.hpp>
#include <xercesc/dom/DOMImplementation.hpp>
#include <xercesc/dom/DOMImplementationLS.hpp>
#include <xercesc/dom/DOMImplementationRegistry.hpp>
#include <xercesc/dom/DOMLSParser.hpp>
#include <xercesc/dom/DOMException.hpp>
#include <xercesc/dom/DOMDocument.hpp>
#include <xercesc/dom/DOMNodeList.hpp>
#include <xercesc/dom/DOMError.hpp>
#include <xercesc/dom/DOMLocator.hpp>
#include <xercesc/dom/DOMNamedNodeMap.hpp>
#include <xercesc/dom/DOMAttr.hpp>
#include <ctype.h>
using namespace gemfire;
using namespace gemfire::testframework;
const std::string FwkClientSet::m_defaultGroup = "DEFAULT";
XERCES_CPP_NAMESPACE_USE
bool allSpace( std::string& str ) {
bool space = true;
if ( str.empty() ) return space;
const char * chk = str.c_str();
while ( space && ( *chk != '\0' ) ) {
if ( !isspace( *chk ) ) space = false;
chk++;
}
return space;
}
int32_t traverseChildElements( const DOMNode * node )
{
if ( node == NULL ) return 0;
const DOMNode * child;
int32_t count = 0;
switch ( node->getNodeType() ) {
case DOMNode::ELEMENT_NODE: {
count++;
std::string name = XMLChToStr( node->getNodeName() );
FWKINFO( "--- Element: " << name );
if ( node->hasAttributes() ) {
DOMNamedNodeMap * attributes = node->getAttributes();
int32_t size = (int32_t)attributes->getLength();
for ( int32_t i = 0; i < size; ++i ) {
DOMAttr * attributeNode = ( DOMAttr * )attributes->item( i );
std::string attName = XMLChToStr( attributeNode->getName() );
std::string attValue = XMLChToStr( attributeNode->getValue() );
FWKINFO( "------ " << name << " Attribute: " << attName << " has value: " << attValue );
}
}
FWKINFO( "------ Children of " << name );
for ( child = node->getFirstChild(); child != NULL; child = child->getNextSibling() ) {
count += traverseChildElements( child );
}
FWKINFO( "------ End of " << name );
}
break;
case DOMNode::TEXT_NODE: {
// DOMText * tnode = dynamic_cast< DOMText * > ( ( DOMNode * )node );
DOMText * tnode = ( DOMText * )node;
std::string tname = XMLChToStr( tnode->getNodeName() );
std::string text = XMLChToStr( tnode->getNodeValue() );
std::string ftext = XMLChToStr( tnode->getNodeValue() );
if ( !tnode->isIgnorableWhitespace() && !allSpace( text ) )
FWKINFO( "--- " << tname << " Has text content ::>" << text << "<:: " << text.length() );
}
break;
case DOMNode::ATTRIBUTE_NODE:
FWKINFO( "Node type: ATTRIBUTE_NODE" );
break;
case DOMNode::CDATA_SECTION_NODE:
FWKINFO( "Node type: CDATA_SECTION_NODE" );
break;
case DOMNode::ENTITY_REFERENCE_NODE:
FWKINFO( "Node type: ENTITY_REFERENCE_NODE" );
break;
case DOMNode::ENTITY_NODE:
FWKINFO( "Node type: ENTITY_NODE" );
break;
case DOMNode::PROCESSING_INSTRUCTION_NODE:
FWKINFO( "Node type: PROCESSING_INSTRUCTION_NODE" );
break;
case DOMNode::COMMENT_NODE:
FWKINFO( "Node type: COMMENT_NODE" );
break;
case DOMNode::DOCUMENT_NODE:
FWKINFO( "Node type: DOCUMENT_NODE" );
break;
case DOMNode::DOCUMENT_TYPE_NODE:
FWKINFO( "Node type: DOCUMENT_TYPE_NODE" );
break;
case DOMNode::DOCUMENT_FRAGMENT_NODE:
FWKINFO( "Node type: DOCUMENT_FRAGMENT_NODE" );
break;
case DOMNode::NOTATION_NODE:
FWKINFO( "Node type: NOTATION_NODE" );
break;
default:
FWKINFO( "Node type: " << node->getNodeType() );
break;
}
return count;
}
void TestDriver::fromXmlNode( const DOMNode * node ) {
// FWKINFO( "Instantiate TestDriver" );
// int32_t count = traverseChildElements( node );
// FWKINFO( "Total of " << count << " elements." );
DOMNode * child = node->getFirstChild();
while ( child != NULL ) {
if ( child->getNodeType() == DOMNode::ELEMENT_NODE ) {
std::string name = XMLChToStr( child->getNodeName() );
if ( name == LOCALFILE_TAG ) {
addLocalFile( new LocalFile( child ) );
}
else if ( name == DATA_TAG ) {
addData( new FwkData( child ) );
}
else if ( name == DATASET_TAG ) {
addDataSet( new FwkDataSet( child ) );
}
else if ( name == CLIENTSET_TAG ) {
addClientSet( new FwkClientSet( child ) );
}
else if ( name == TEST_TAG ) {
addTest( new FwkTest( child ) );
}
else if ( name == HOSTGROUP_TAG ) {
DOMNamedNodeMap * map = child->getAttributes();
if ( map != NULL ) {
DOMNode * tag = map->getNamedItem( StrToXMLCh( "tag" ) );
if ( tag != NULL ) {
addHostGroup( XMLChToStr( tag->getNodeValue() ) );
}
}
}
}
child = child->getNextSibling();
}
}
FwkTest::FwkTest( const DOMNode * node ) :
m_waitTime( 0 ),
m_timesToRun( 1 ) {
// FWKINFO( "Instantiate FwkTest" );
// traverseChildElements( node );
DOMNamedNodeMap * map = node->getAttributes();
if ( map != NULL ) {
DOMNode * nameNode = map->getNamedItem( StrToXMLCh( "name" ) );
if ( nameNode != NULL ) {
setName( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "waitTime" ) );
if ( nameNode != NULL ) {
setWaitTime( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "description" ) );
if ( nameNode != NULL ) {
setDescription( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "timesToRun" ) );
if ( nameNode != NULL ) {
setTimesToRun( XMLChToStr( nameNode->getNodeValue() ) );
}
}
DOMNode * child = node->getFirstChild();
while ( child != NULL ) {
if ( child->getNodeType() == DOMNode::ELEMENT_NODE ) {
addTask( new FwkTask( child ) );
}
child = child->getNextSibling();
}
}
void PersistManager::addProperty( const DOMNode * node ) {
// FWKINFO( "Instantiate addProperty" );
// traverseChildElements( node );
DOMNamedNodeMap * map = node->getAttributes();
std::string name;
std::string value;
if ( map != NULL ) {
DOMNode * nameNode = map->getNamedItem( StrToXMLCh( "name" ) );
if ( nameNode != NULL ) {
name = XMLChToStr( nameNode->getNodeValue() );
}
nameNode = map->getNamedItem( StrToXMLCh( "value" ) );
if ( nameNode != NULL ) {
value = XMLChToStr( nameNode->getNodeValue() );
}
m_properties->insert( name.c_str(), value.c_str() );
}
}
void PersistManager::addProperties( const DOMNode * node ) {
// FWKINFO( "Instantiate addProperties" );
// traverseChildElements( node );
m_properties = Properties::create();
DOMNode * child = node->getFirstChild();
while ( child != NULL ) {
if ( child->getNodeType() == DOMNode::ELEMENT_NODE ) {
std::string name = XMLChToStr( child->getNodeName() );
if ( name == PROPERTY_TAG ) {
addProperty( child );
}
}
child = child->getNextSibling();
}
}
PersistManager::PersistManager( const DOMNode * node ) {
// FWKINFO( "Instantiate PersistManager" );
// traverseChildElements( node );
DOMNamedNodeMap * map = node->getAttributes();
if ( map != NULL ) {
DOMNode * nameNode = map->getNamedItem( StrToXMLCh( "library" ) );
if ( nameNode != NULL ) {
setLibraryName( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "function" ) );
if ( nameNode != NULL ) {
setLibraryFunctionName( XMLChToStr( nameNode->getNodeValue() ) );
}
}
DOMNode * child = node->getFirstChild();
while ( child != NULL ) {
if ( child->getNodeType() == DOMNode::ELEMENT_NODE ) {
std::string name = XMLChToStr( child->getNodeName() );
if ( name == PROPERTIES_TAG ) {
addProperties( child );
}
}
child = child->getNextSibling();
}
}
FwkTask::FwkTask( const DOMNode * node ) :
m_waitTime( 0 ),
m_timesToRun( 0 ),
m_threadCount( 1 ),
m_parallel( false ),
m_timesRan( 0 ),
m_continue( false ),
m_clientSet( NULL ),
m_dataSet( NULL ),
m_parent( NULL ) {
// FWKINFO( "Instantiate FwkTask" );
// traverseChildElements( node );
DOMNamedNodeMap * map = node->getAttributes();
if ( map != NULL ) {
DOMNode * nameNode = map->getNamedItem( StrToXMLCh( "name" ) );
if ( nameNode != NULL ) {
setName( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "action" ) );
if ( nameNode != NULL ) {
setAction( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "class" ) );
if ( nameNode != NULL ) {
setClass( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "container" ) );
if ( nameNode != NULL ) {
setContainer( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "waitTime" ) );
if ( nameNode != NULL ) {
setWaitTime( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "timesToRun" ) );
if ( nameNode != NULL ) {
setTimesToRun( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "threadCount" ) );
if ( nameNode != NULL ) {
setThreadCount( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "parallel" ) );
if ( nameNode != NULL ) {
setParallel( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "continueOnError" ) );
if ( nameNode != NULL ) {
setContinueOnError( XMLChToStr( nameNode->getNodeValue() ) );
}
}
DOMNode * child = node->getFirstChild();
while ( child != NULL ) {
if ( child->getNodeType() == DOMNode::ELEMENT_NODE ) {
std::string name = XMLChToStr( child->getNodeName() );
if ( name == CLIENTSET_TAG ) {
addClientSet( new FwkClientSet( child ) );
}
else if ( name == DATA_TAG ) {
addData( new FwkData( child ) );
}
}
child = child->getNextSibling();
}
}
LocalFile::LocalFile( const DOMNode * node ) : m_append( false ) {
// FWKINFO( "Instantiate LocalFile" );
// traverseChildElements( node );
DOMNamedNodeMap * map = node->getAttributes();
if ( map != NULL ) {
DOMNode * nameNode = map->getNamedItem( StrToXMLCh( "name" ) );
if ( nameNode != NULL ) {
setName( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "append" ) );
if ( nameNode != NULL ) {
setAppend( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "description" ) );
if ( nameNode != NULL ) {
setDescription( XMLChToStr( nameNode->getNodeValue() ) );
}
}
bool done = false;
DOMNode * child = node->getFirstChild();
while ( ( child != NULL ) && !done ) {
if ( child->getNodeType() == DOMNode::TEXT_NODE ) {
// DOMText * tnode = dynamic_cast< DOMText * >( child );
DOMText * tnode = ( DOMText * )child;
std::string text = XMLChToStr( tnode->getNodeValue() );
if ( !tnode->isIgnorableWhitespace() && !allSpace( text ) ) {
setContent( text );
done = true;
}
}
child = child->getNextSibling();
}
}
FwkClientSet::FwkClientSet( const DOMNode * node )
: m_exclude( false ), m_count( 1 ), m_begin( 1 ), m_hostGroup( m_defaultGroup ), m_remaining( false ) {
// FWKINFO( "Instantiate FwkClientSet" );
// traverseChildElements( node );
std::string value;
DOMNode * attNode;
std::string name;
DOMNamedNodeMap * map = node->getAttributes();
if ( map != NULL ) {
attNode = map->getNamedItem( StrToXMLCh( "name" ) );
if ( attNode != NULL ) {
value = XMLChToStr( attNode->getNodeValue() );
}
}
if ( value.empty() ) {
name = GsRandom::getAlphanumericString( 20 );
}
else {
name = value;
}
setName( name );
if ( map != NULL ) {
attNode = map->getNamedItem( StrToXMLCh( "exclude" ) );
if ( attNode != NULL ) {
setExclude( XMLChToStr( attNode->getNodeValue() ) );
}
attNode = map->getNamedItem( StrToXMLCh( "count" ) );
if ( attNode != NULL ) {
setCount( XMLChToStr( attNode->getNodeValue() ) );
}
attNode = map->getNamedItem( StrToXMLCh( "begin" ) );
if ( attNode != NULL ) {
setBegin( XMLChToStr( attNode->getNodeValue() ) );
}
attNode = map->getNamedItem( StrToXMLCh( "hostGroup" ) );
if ( attNode != NULL ) {
setHostGroup( XMLChToStr( attNode->getNodeValue() ) );
}
attNode = map->getNamedItem( StrToXMLCh( "remaining" ) );
if ( attNode != NULL ) {
setRemaining( XMLChToStr( attNode->getNodeValue() ) );
}
}
int32_t childCnt = 0;
DOMNode * child = node->getFirstChild();
while ( child != NULL ) {
if ( child->getNodeType() == DOMNode::ELEMENT_NODE ) {
addClient( new FwkClient( child ) );
childCnt++;
}
child = child->getNextSibling();
}
if ( childCnt == 0 ) {
int32_t count = getCount(); // defaults to one
int32_t begin = getBegin(); // defaults to one
for ( int32_t i = begin; i < count + begin; i++ ) {
std::ostringstream cnam;
cnam << name << "_" << i;
addClient( new FwkClient( cnam.str() ) );
}
}
}
FwkClient::FwkClient( const DOMNode * node )
: m_program( NULL ), m_arguments( NULL ), m_remaining( false ) {
// FWKINFO( "Instantiate FwkClient" );
// traverseChildElements( node );
std::string value;
DOMNode * attNode;
DOMNamedNodeMap * map = node->getAttributes();
if ( map != NULL ) {
attNode = map->getNamedItem( StrToXMLCh( "name" ) );
if ( attNode != NULL ) {
value = XMLChToStr( attNode->getNodeValue() );
}
}
if ( value.empty() ) {
setName( GsRandom::getAlphanumericString( 20 ) );
}
else {
setName( value );
}
if ( map != NULL ) {
attNode = map->getNamedItem( StrToXMLCh( "program" ) );
if ( attNode != NULL ) {
setProgram( XMLChToStr( attNode->getNodeValue() ) );
}
attNode = map->getNamedItem( StrToXMLCh( "arguments" ) );
if ( attNode != NULL ) {
setArguments( XMLChToStr( attNode->getNodeValue() ) );
}
}
}
FwkRegion::FwkRegion( const DOMNode * node ) : m_attributes( NULL ) {
// FWKINFO( "Instantiate FwkRegion" );
// traverseChildElements( node );
std::string name;
DOMNamedNodeMap * map = node->getAttributes();
if ( map != NULL ) {
DOMNode * nameNode = map->getNamedItem( StrToXMLCh( "name" ) );
if ( nameNode != NULL ) {
setName( XMLChToStr( nameNode->getNodeValue() ) );
}
}
DOMNode * child = node->getFirstChild();
while ( child != NULL ) {
if ( child->getNodeType() == DOMNode::ELEMENT_NODE ) {
setAttributes( new Attributes( child ) );
}
child = child->getNextSibling();
}
}
Attributes::Attributes( const DOMNode * node ) : m_isLocal( false ),m_withPool( false ) {
// FWKINFO( "Instantiate Attributes" );
// traverseChildElements( node );
DOMNamedNodeMap * map = node->getAttributes();
if ( map != NULL ) {
DOMNode * nameNode = map->getNamedItem( StrToXMLCh( "caching-enabled" ) );
if ( nameNode != NULL ) {
setCachingEnabled( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "scope" ) );
if ( nameNode != NULL ) {
setScope( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "load-factor" ) );
if ( nameNode != NULL ) {
setLoadFactor( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "concurrency-level" ) );
if ( nameNode != NULL ) {
setConcurrencyLevel( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "lru-entries-limit" ) );
if ( nameNode != NULL ) {
setLruEntriesLimit( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "initial-capacity" ) );
if ( nameNode != NULL ) {
setInitialCapacity( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "disk-policy" ) );
if ( nameNode != NULL ) {
setDiskPolicy( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "endpoints" ) );
if ( nameNode != NULL ) {
setEndpoints( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "client-notification" ) );
if ( nameNode != NULL ) {
setClientNotificationEnabled( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "pool-name" ) );
if( nameNode != NULL ) {
setPoolName( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "cloning-enabled" ) );
if( nameNode != NULL ) {
setCloningEnabled( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "concurrency-checks-enabled" ) );
if( nameNode != NULL ) {
setConcurrencyCheckEnabled( XMLChToStr( nameNode->getNodeValue() ) );
}
}
DOMNode * child = node->getFirstChild();
while ( child != NULL ) {
if ( child->getNodeType() == DOMNode::ELEMENT_NODE ) {
std::string name = XMLChToStr( child->getNodeName() );
if ( name == REGIONTIMETOLIVE_TAG ) {
setRegionTimeToLive( getExpiryAttributes( child ) );
}
else if ( name == REGIONIDLETIME_TAG ) {
setRegionIdleTime( getExpiryAttributes( child ) );
}
else if ( name == ENTRYTIMETOLIVE_TAG ) {
setEntryTimeToLive( getExpiryAttributes( child ) );
}
else if ( name == ENTRYIDLETIME_TAG ) {
setEntryIdleTime( getExpiryAttributes( child ) );
}
else if ( name == CACHELOADER_TAG ) {
setCacheLoader( new ActionPair( child ) );
}
else if ( name == CACHELISTENER_TAG ) {
setCacheListener( new ActionPair( child ) );
}
else if ( name == CACHEWRITER_TAG ) {
setCacheWriter( new ActionPair( child ) );
}
else if ( name == PERSISTENCEMANAGER_TAG ) {
setPersistenceManager( new PersistManager( child ) );
}
}
child = child->getNextSibling();
}
}
FwkPool::FwkPool( const DOMNode * node ):m_locators(false),m_servers(false) {
//Init Factory
m_poolFactory = PoolManager::createFactory();
// Set Attrs to Pool
setAttributesToFactory( node );
/*DOMNode * child = node->getFirstChild();
while ( child != NULL ) {
if ( child->getNodeType() == DOMNode::ELEMENT_NODE ) {
}
child = child->getNextSibling();
}*/
}
void FwkPool::setAttributesToFactory( const DOMNode * node) {
DOMNamedNodeMap * map = node->getAttributes();
if ( map != NULL ) {
DOMNode * nameNode = map->getNamedItem( StrToXMLCh( "name" ) );
if ( nameNode != NULL ) {
setName( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "free-connection-timeout" ) );
if ( nameNode != NULL ) {
setFreeConnectionTimeout( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "idle-timeout" ) );
if ( nameNode != NULL ) {
setIdleTimeout( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "load-conditioning-interval" ) );
if ( nameNode != NULL ) {
setLoadConditioningInterval( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "max-connections" ) );
if ( nameNode != NULL ) {
setMaxConnections( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "min-connections" ) );
if ( nameNode != NULL ) {
setMinConnections( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "ping-interval" ) );
if ( nameNode != NULL ) {
setPingInterval( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "read-timeout" ) );
if ( nameNode != NULL ) {
setReadTimeout( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "retry-attempts" ) );
if ( nameNode != NULL ) {
setRetryAttempts( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "server-group" ) );
if ( nameNode != NULL ) {
setServerGroup( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "socket-buffer-size" ) );
if( nameNode != NULL ) {
setSocketBufferSize( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "subscription-ack-interval" ) );
if( nameNode != NULL ) {
setSubscriptionAckInterval( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "subscription-enabled" ) );
if( nameNode != NULL ) {
setSubscriptionEnabled( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "subscription-message-tracking-timeout" ) );
if( nameNode != NULL ) {
setSubscriptionMessageTrackingTimeout( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "subscription-redundancy" ) );
if( nameNode != NULL ) {
setSubscriptionRedundancy( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "thread-local-connections" ) );
if( nameNode != NULL ) {
setThreadLocalConnections( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "pr-single-hop-enabled" ) );
if( nameNode != NULL ) {
setPRSingleHopEnabled( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "locators" ) );
if( nameNode != NULL ) {
setLocatorsFlag( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "servers" ) );
if( nameNode != NULL ) {
setServersFlag( XMLChToStr( nameNode->getNodeValue() ) );
}
}
}
ActionPair::ActionPair( const DOMNode * node ) {
// FWKINFO( "Instantiate ActionPair" );
// traverseChildElements( node );
DOMNamedNodeMap * map = node->getAttributes();
if ( map != NULL ) {
DOMNode * nameNode = map->getNamedItem( StrToXMLCh( "library" ) );
if ( nameNode != NULL ) {
setLibraryName( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "function" ) );
if ( nameNode != NULL ) {
setLibraryFunctionName( XMLChToStr( nameNode->getNodeValue() ) );
}
}
}
ExpiryAttributes * Attributes::getExpiryAttributes( const DOMNode * node ) {
// FWKINFO( "Instantiate getExpiryAttributes" );
// traverseChildElements( node );
DOMNode * child = node->getFirstChild();
while ( child != NULL ) {
if ( child->getNodeType() == DOMNode::ELEMENT_NODE ) {
return new ExpiryAttributes( child );
}
child = child->getNextSibling();
}
return NULL;
}
ExpiryAttributes::ExpiryAttributes( const DOMNode * node ) : m_timeout( 0 ) {
// FWKINFO( "Instantiate ExpiryAttributes" );
// traverseChildElements( node );
DOMNamedNodeMap * map = node->getAttributes();
if ( map != NULL ) {
DOMNode * nameNode = map->getNamedItem( StrToXMLCh( "timeout" ) );
if ( nameNode != NULL ) {
setTimeout( XMLChToStr( nameNode->getNodeValue() ) );
}
nameNode = map->getNamedItem( StrToXMLCh( "action" ) );
if ( nameNode != NULL ) {
setAction( XMLChToStr( nameNode->getNodeValue() ) );
}
}
}
FwkDataSet::FwkDataSet( const DOMNode * node ) {
// FWKINFO( "Instantiate FwkDataSet" );
// traverseChildElements( node );
std::string name;
DOMNamedNodeMap * map = node->getAttributes();
if ( map != NULL ) {
DOMNode * nameNode = map->getNamedItem( StrToXMLCh( "name" ) );
if ( nameNode != NULL ) {
name = XMLChToStr( nameNode->getNodeValue() );
}
}
if ( name.empty() ) {
setName( GsRandom::getAlphanumericString( 20 ) );
}
else {
setName( name );
}
DOMNode * child = node->getFirstChild();
while ( child != NULL ) {
if ( child->getNodeType() == DOMNode::ELEMENT_NODE ) {
add( new FwkData( child ) );
}
child = child->getNextSibling();
}
}
FwkData::FwkData( const DOMNode * node ) :
m_dataList( NULL ),
m_dataOneof( NULL ),
m_dataRange( NULL ),
m_snippet( NULL ),
m_dataType( DATA_TYPE_NULL ) {
// FWKINFO( "Instantiate FwkData" );
// traverseChildElements( node );
std::string name;
DOMNamedNodeMap * map = node->getAttributes();
if ( map != NULL ) {
DOMNode * nameNode = map->getNamedItem( StrToXMLCh( "name" ) );
if ( nameNode != NULL ) {
name = XMLChToStr( nameNode->getNodeValue() );
}
}
if ( name.empty() ) {
setName( GsRandom::getAlphanumericString( 20 ) );
}
else {
setName( name );
}
DOMNode * child = node->getFirstChild();
while ( ( child != NULL ) && ( m_dataType == DATA_TYPE_NULL ) ) {
if ( child->getNodeType() == DOMNode::ELEMENT_NODE ) {
name = XMLChToStr( child->getNodeName() );
if ( name == LIST_TAG ) {
setList( new DataList( child ) );
}
else if ( name == ONEOF_TAG ) {
setOneof( new DataOneof( child ) );
}
else if ( name == RANGE_TAG ) {
setRange( new DataRange( child ) );
}
else if ( name == SNIPPET_TAG ) {
setSnippet( new DataSnippet( child ) );
}
}
else if ( child->getNodeType() == DOMNode::TEXT_NODE ) {
// DOMText * tnode = dynamic_cast< DOMText * >( child );
DOMText * tnode = ( DOMText * )child;
std::string text = XMLChToStr( tnode->getNodeValue() );
if ( !tnode->isIgnorableWhitespace() && !allSpace( text ) ) {
setContent( text );
}
}
child = child->getNextSibling();
}
}
DataRange::DataRange( const DOMNode * node ) {
// FWKINFO( "Instantiate DataRange" );
// traverseChildElements( node );
DOMNamedNodeMap * map = node->getAttributes();
if ( map != NULL ) {
DOMNode * attNode = map->getNamedItem( StrToXMLCh( "low" ) );
if ( attNode != NULL ) {
setLow( XMLChToStr( attNode->getNodeValue() ) );
}
attNode = map->getNamedItem( StrToXMLCh( "high" ) );
if ( attNode != NULL ) {
setHigh( XMLChToStr( attNode->getNodeValue() ) );
}
}
}
DataSnippet::DataSnippet( const DOMNode * node ) : m_region( NULL ) , m_pool( NULL ){
DOMNode * child = node->getFirstChild();
while ( child != NULL ) {
if ( child->getNodeType() == DOMNode::ELEMENT_NODE ) {
std::string name = XMLChToStr(child->getNodeName());
if(name==REGION_TAG) {
setRegion( new FwkRegion( child ) );
}
else {
setPool(new FwkPool(child));
}
}
child = child->getNextSibling();
}
}
DataList::DataList( const DOMNode * node ) {
// FWKINFO( "Instantiate DataList" );
// traverseChildElements( node );
// for all children, process ITEM_TAG elements
DOMNode * child = node->getFirstChild();
while ( child != NULL ) {
if ( child->getNodeType() == DOMNode::ELEMENT_NODE ) {
std::string tag = XMLChToStr( child->getNodeName() );
if ( tag == ITEM_TAG ) { // now find all TEXT_NODE children of item
DOMNode * tchild = child->getFirstChild();
while ( tchild != NULL ) {
if ( tchild->getNodeType() == DOMNode::TEXT_NODE ) {
// DOMText * tnode = dynamic_cast< DOMText * >( tchild );
DOMText * tnode = ( DOMText * )tchild;
std::string text = XMLChToStr( tnode->getNodeValue() );
if ( !tnode->isIgnorableWhitespace() && !allSpace( text ) ) {
addValue( text );
}
}
tchild = tchild->getNextSibling();
}
}
}
child = child->getNextSibling();
}
}
DataOneof::DataOneof( const DOMNode * node ) {
// FWKINFO( "Instantiate DataOneof" );
// traverseChildElements( node );
// for all children, process ITEM_TAG elements
DOMNode * child = node->getFirstChild();
while ( child != NULL ) {
if ( child->getNodeType() == DOMNode::ELEMENT_NODE ) {
std::string tag = XMLChToStr( child->getNodeName() );
if ( tag == ITEM_TAG ) { // now find all TEXT_NODE children of item
DOMNode * tchild = child->getFirstChild();
while ( tchild != NULL ) {
if ( tchild->getNodeType() == DOMNode::TEXT_NODE ) {
// DOMText * tnode = dynamic_cast< DOMText * >( tchild );
DOMText * tnode = ( DOMText * )tchild;
std::string text = XMLChToStr( tnode->getNodeValue() );
if ( !tnode->isIgnorableWhitespace() && !allSpace( text ) ) {
addValue( text );
}
}
tchild = tchild->getNextSibling();
}
}
}
child = child->getNextSibling();
}
}
bool FwkDomErrorHandler::handleError( const DOMError& domError ) {
m_hadErrors = true;
std::string sev = "Fatal Error";
if ( domError.getSeverity() == DOMError::DOM_SEVERITY_WARNING ) {
sev = "Warning";
}
else {
if ( domError.getSeverity() == DOMError::DOM_SEVERITY_ERROR ) {
sev = "Error";
}
}
FWKSEVERE( sev << " in file " << XMLChToStr( domError.getLocation()->getURI() )
<< ", line: " << domError.getLocation()->getLineNumber()
<< ", col: " << domError.getLocation()->getColumnNumber()
<< " " << XMLChToStr( domError.getMessage() ) );
return true;
}
TestDriver::TestDriver( const char * xmlfile ) {
// Initialize the XML4C system
try {
XMLPlatformUtils::Initialize();
} catch( const XMLException& ex ) {
FWKEXCEPTION( "TestDriver::fromXmlFile: During init: caught XML exception: " << ex.getMessage() );
}
// Instantiate the DOM pDomBuilder.
static const XMLCh ls[] = { chLatin_L, chLatin_S, chNull };
DOMImplementation * domImpl =
DOMImplementationRegistry::getDOMImplementation( ls );
if ( domImpl == NULL ) {
FWKEXCEPTION( "TestDriver::fromXmlFile() Failed to instantiate domImpl." );
}
DOMLSParser * builder = ( ( DOMImplementationLS * )domImpl )->createLSParser(
DOMImplementationLS::MODE_SYNCHRONOUS, 0 );
if ( builder == NULL ) {
FWKEXCEPTION( "TestDriver::fromXmlFile() Failed to instantiate dom builder." );
}
builder->getDomConfig()->setParameter( XMLUni::fgDOMNamespaces, true );
builder->getDomConfig()->setParameter( XMLUni::fgDOMDatatypeNormalization, true );
builder->getDomConfig()->setParameter( XMLUni::fgXercesSchema, true );
builder->getDomConfig()->setParameter( XMLUni::fgXercesSchemaFullChecking, true );
// builder->getDomConfig()->setParameter( XMLUni::fgDOMValidateIfSchema, true );
builder->getDomConfig()->setParameter( XMLUni::fgDOMValidate, true );
builder->getDomConfig()->setParameter( XMLUni::fgDOMElementContentWhitespace, false );
// And create our error handler and install it
FwkDomErrorHandler errorHandler;
builder->getDomConfig()->setParameter(XMLUni::fgDOMErrorHandler, &errorHandler);
XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument * doc = 0;
// Does the cache file exist?
if ( ACE_OS::access( xmlfile, F_OK ) == -1 ) {
FWKEXCEPTION( "TestDriver::fromXmlFile() Failed to find file: " << xmlfile );
}
try {
builder->resetDocumentPool();
doc = builder->parseURI( xmlfile );
} catch( const XMLException& ex ) {
FWKEXCEPTION( "TestDriver::fromXmlFile() Failed to parse file: " << xmlfile <<
" Caught XML exception: " << ex.getMessage() );
} catch( const DOMException& ex ) {
XMLCh errText[2048];
if ( DOMImplementation::loadDOMExceptionMsg( ex.code, errText, 2047 ) ) {
FWKSEVERE( "TestDriver::fromXmlFile() DOM exception during parse: " <<
XMLChToStr( errText ) );
}
FWKEXCEPTION( "TestDriver::fromXmlFile() Failed to parse file: " <<
xmlfile );
} catch( ... ) {
FWKEXCEPTION( "TestDriver::fromXmlFile() Failed to parse file: " << xmlfile
<< " Caught unknown exception." );
}
DOMNode * node = ( DOMNode * )doc->getDocumentElement();
if ( node != NULL ) {
fromXmlNode( node );
}
builder->release();
XMLPlatformUtils::Terminate();
}
void FwkTask::setKey( int32_t cnt ) {
if ( !m_id.empty() ) return;
std::ostringstream ostr;
ostr << m_parent->getKey() << "::" << getName() << "::" << cnt;
m_id = ostr.str();
}
/** brief Get FwkDataSet pointer */
const FwkDataSet * FwkTest::getDataSet( const char * name ) const
{
return m_parent->getDataSet( name );
}
/** brief Get FwkData pointer */
const FwkData * FwkTest::getData( const char * name ) const
{
return m_parent->getData( name );
}
/** brief Get FwkDataSet pointer */
const FwkDataSet * FwkTask::getDataSet( const char * name ) const
{
return m_parent->getDataSet( name );
}
/** brief Get FwkData pointer */
const FwkData * FwkTask::getData( const char * name ) const
{
const FwkData * data = NULL;
if ( m_dataSet ) {
data = m_dataSet->find( name );
}
if ( ( data == NULL ) && m_parent ) { // ask our parent
data = m_parent->getData( name );
}
return data;
}