Subversion Repositories DevTools

Rev

Rev 2222 | Blame | Compare with Previous | Last modification | View Log | RSS feed

//## begin module%1.7%.codegen_version preserve=yes
//   Read the documentation to learn more about C++ code generator
//   versioning.
//## end module%1.7%.codegen_version

//## begin module%42030C2C00B8.cm preserve=no
//## end module%42030C2C00B8.cm

//## begin module%42030C2C00B8.cp preserve=no
//      C O P Y R I G H T   N O T I C E
//      This material is confidential to ERG and may not be disclosed in whole
//      or in part to any third party nor used in any manner whatsoever other
//      than for the purposes expressly consented to by ERG in writing.
//
//      This material is also copyright and may not be reproduced, stored in a
//      retrieval system or transmitted in any form or by any means in whole or
//      in part without the express written consent of ERG.
//## end module%42030C2C00B8.cp

//## Module: TestScenario%42030C2C00B8; Pseudo Package body
//## Subsystem: MASS::Dev::Tools::TxnTestManager::src%41F5A79001E4
//## Source file: Z:\MASS_Dev\Tools\TxnTestManager\src\TestScenario.cpp

//## begin module%42030C2C00B8.additionalIncludes preserve=no
//## end module%42030C2C00B8.additionalIncludes

//## begin module%42030C2C00B8.includes preserve=yes
#pragma warn -com
#include <LoggingMacros.h>
#pragma warn +com
//## end module%42030C2C00B8.includes

// Iteration
#include "Iteration.h"
// TestScenario
#include "TestScenario.h"
// TransactionSpecification
#include "TransactionSpecification.h"
// EvaluationContext
#include "EvaluationContext.h"
// TransactionStream
#include "TransactionStream.h"
// DefinedVariable
#include "DefinedVariable.h"
//## begin module%42030C2C00B8.additionalDeclarations preserve=yes
#include <locale>
//## end module%42030C2C00B8.additionalDeclarations


// Class TestScenario 

//## Operation: TestScenario%4203231D030E
TestScenario::TestScenario (const int &scenario, Iteration& iteration)
  //## begin TestScenario::TestScenario%4203231D030E.hasinit preserve=no
      : m_batchSize(0),
        m_repeatCount(0),
        m_iteration(&iteration)
  //## end TestScenario::TestScenario%4203231D030E.hasinit
  //## begin TestScenario::TestScenario%4203231D030E.initialization preserve=yes

,       m_scenario( scenario )

  //## end TestScenario::TestScenario%4203231D030E.initialization
{
  //## begin TestScenario::TestScenario%4203231D030E.body preserve=yes
  //## end TestScenario::TestScenario%4203231D030E.body
}


TestScenario::~TestScenario()
{
  //## begin TestScenario::~TestScenario%42030C2C00B8_dest.body preserve=yes

        for ( std::map< int, TransactionSpecification * >::iterator
                        where = m_transaction.begin();
                  where != m_transaction.end();
                  ++where )
        {
                delete where->second;
                where->second = 0;
        }
        m_iteration = 0;        // We don't own this object.

  //## end TestScenario::~TestScenario%42030C2C00B8_dest.body
}



//## Other Operations (implementation)
//## Operation: buildBatchName%4208537A00B6
std::string & TestScenario::buildBatchName (std::string &batchName, const std::string &scenarioName)
{
  //## begin TestScenario::buildBatchName%4208537A00B6.body preserve=yes

        batchName.erase();
        batchName.reserve( scenarioName.length() );

        for ( std::string::size_type index = 0; index < scenarioName.length(); ++index )
        {
                if ( std::isalnum( scenarioName[ index ] ) )
                {
                        batchName += scenarioName[ index ];
                }
                else
                {
                        batchName += '_';
                }
        }

        return ( batchName );

  //## end TestScenario::buildBatchName%4208537A00B6.body
}

//## Operation: defineVariable%425B47DD004F
DefinedVariable& TestScenario::defineVariable (const std::string &variableName)
{
  //## begin TestScenario::defineVariable%425B47DD004F.body preserve=yes

        std::map< std::string, DefinedVariable * >::const_iterator
                instance = m_variable.find( variableName );

        if ( instance != m_variable.end() )
        {
                return ( *instance->second );
        }
        else
        {
                DefinedVariable * object = 0;

                try
                {
                        object = new DefinedVariable( variableName );

                        if ( m_variable.insert(
                                        std::map< std::string, DefinedVariable * >::value_type(
                                                variableName,
                                                object ) ).second )
                        {
                                return ( *object );
                        }
                        else
                        {
                                MTHROW( std::runtime_error, \
                                        "Cannot add variable \"" \
                                        << variableName \
                                        << "\" to defined variable table." );
                        }
                }
                catch ( ... )
                {
                        delete object;
                        object = 0;

                        throw;
                }
        }

  //## end TestScenario::defineVariable%425B47DD004F.body
}

//## Operation: generate%420455D80390
const bool TestScenario::generate (TransactionStream& stream, const bool &generateHeaders, EvaluationContext& evaluationContext)
{
  //## begin TestScenario::generate%420455D80390.body preserve=yes

        bool generated = true;
        if ( m_repeatCount )
        {
                std::string batchName;
                stream.newBatch(
                        m_batchSize,
                        buildBatchName( batchName, m_scenarioName ) );
                for ( unsigned repeat = 1; repeat <= m_repeatCount && generated; ++repeat )
                {
                        evaluationContext.setScenarioIndex( repeat );
                        
                        for ( std::vector< TransactionSpecification * >::iterator
                                        where = m_orderedTransactionCollection.begin();
                                  where != m_orderedTransactionCollection.end();
                                  ++where )
                        {
                                if ( !(*where)->generate(
                                                        stream,
                                                        generateHeaders,
                                                        evaluationContext ) )
                                {
                                        generated = false;
                                        break;
                                }
                        }
                }
        }
        return ( generated );

  //## end TestScenario::generate%420455D80390.body
}

//## Operation: getBatchSize%42042C5E0029
const unsigned & TestScenario::getBatchSize () const
{
  //## begin TestScenario::getBatchSize%42042C5E0029.body preserve=yes

        return ( m_batchSize );

  //## end TestScenario::getBatchSize%42042C5E0029.body
}

//## Operation: getIteration%420460EA003C
const Iteration & TestScenario::getIteration () const
{
  //## begin TestScenario::getIteration%420460EA003C.body preserve=yes

        return ( *m_iteration );  

  //## end TestScenario::getIteration%420460EA003C.body
}

//## Operation: getRepeatCount%42042C5D02F8
const unsigned & TestScenario::getRepeatCount () const
{
  //## begin TestScenario::getRepeatCount%42042C5D02F8.body preserve=yes

        return ( m_repeatCount );

  //## end TestScenario::getRepeatCount%42042C5D02F8.body
}

//## Operation: getScenarioName%42084D3A0270
const std::string & TestScenario::getScenarioName () const
{
  //## begin TestScenario::getScenarioName%42084D3A0270.body preserve=yes

        return ( m_scenarioName );

  //## end TestScenario::getScenarioName%42084D3A0270.body
}

//## Operation: getScenarioNumber%4203252300A6
const int & TestScenario::getScenarioNumber () const
{
  //## begin TestScenario::getScenarioNumber%4203252300A6.body preserve=yes

        return ( m_scenario );

  //## end TestScenario::getScenarioNumber%4203252300A6.body
}

//## Operation: getTransactionCount%420890BF03BE
const unsigned TestScenario::getTransactionCount () const
{
  //## begin TestScenario::getTransactionCount%420890BF03BE.body preserve=yes

        return ( m_transaction.size() * m_repeatCount );

  //## end TestScenario::getTransactionCount%420890BF03BE.body
}

//## Operation: getTransactionSpecification%420328E00043
TransactionSpecification& TestScenario::getTransactionSpecification (const int &transaction, const std::string &payloadStructureName)
{
  //## begin TestScenario::getTransactionSpecification%420328E00043.body preserve=yes

        std::map< int, TransactionSpecification * >::const_iterator
                instance = m_transaction.find( transaction );

        if ( instance != m_transaction.end() )
        {
                return ( *instance->second );
        }
        else
        {
                TransactionSpecification * object = 0;

                try
                {
                        object = new TransactionSpecification( transaction, payloadStructureName, *this );

                        m_orderedTransactionCollection.push_back( object );
                        if ( m_transaction.insert(
                                        std::map< int, TransactionSpecification * >::value_type(
                                                transaction,
                                                object ) ).second )
                        {
                                return ( *object );
                        }
                        else
                        {
                                MTHROW( std::runtime_error, \
                                        "Cannot add transaction \"" \
                                        << transaction \
                                        << "\" to scenario " \
                                        << m_scenario \
                                        << '.' );
                        }
                }
                catch ( ... )
                {
                        delete object;
                        object = 0;

                        throw;
                }
        }

  //## end TestScenario::getTransactionSpecification%420328E00043.body
}

//## Operation: getVariable%425B47F50012
DefinedVariable& TestScenario::getVariable (const std::string &variableName)
{
  //## begin TestScenario::getVariable%425B47F50012.body preserve=yes

        std::map< std::string, DefinedVariable * >::const_iterator
                instance = m_variable.find( variableName );

        if ( instance != m_variable.end() )
        {
                return ( *instance->second );
        }
        
        MTHROW( std::runtime_error, \
                "Variable \"" \
                << variableName \
                << "\" is not defined." );

  //## end TestScenario::getVariable%425B47F50012.body
}

//## Operation: isVariable%425B4B6A01C1
const bool TestScenario::isVariable (const std::string &symbol) const
{
  //## begin TestScenario::isVariable%425B4B6A01C1.body preserve=yes

        return ( m_variable.find( symbol ) != m_variable.end() );

  //## end TestScenario::isVariable%425B4B6A01C1.body
}

//## Operation: setBatchSize%42042CF100D5
const unsigned & TestScenario::setBatchSize (const unsigned &value)
{
  //## begin TestScenario::setBatchSize%42042CF100D5.body preserve=yes

        return ( m_batchSize = value );

  //## end TestScenario::setBatchSize%42042CF100D5.body
}

//## Operation: setRepeatCount%42042CF100E5
const unsigned & TestScenario::setRepeatCount (const unsigned &value)
{
  //## begin TestScenario::setRepeatCount%42042CF100E5.body preserve=yes

        return ( m_repeatCount = value );

  //## end TestScenario::setRepeatCount%42042CF100E5.body
}

//## Operation: setScenarioName%42084D300222
std::string & TestScenario::setScenarioName (const std::string &value)
{
  //## begin TestScenario::setScenarioName%42084D300222.body preserve=yes

        return ( m_scenarioName = value );

  //## end TestScenario::setScenarioName%42084D300222.body
}

// Additional Declarations
  //## begin TestScenario%42030C2C00B8.declarations preserve=yes
  //## end TestScenario%42030C2C00B8.declarations

//## begin module%42030C2C00B8.epilog preserve=yes
//## end module%42030C2C00B8.epilog