void ActiveMQMessageTransformation::copyProperties()

in activemq-cpp/src/main/activemq/util/ActiveMQMessageTransformation.cpp [257:331]


void ActiveMQMessageTransformation::copyProperties(const cms::Message* fromMessage, cms::Message* toMessage) {

    if (fromMessage == NULL) {
        throw NullPointerException(__FILE__, __LINE__, "Provided source cms::Message pointer was NULL");
    }

    if (toMessage == NULL) {
        throw NullPointerException(__FILE__, __LINE__, "Provided destination cms::Message pointer was NULL");
    }

    if (fromMessage->getCMSDestination() != NULL) {
        const ActiveMQDestination* transformed = NULL;
        if (transformDestination(fromMessage->getCMSDestination(), &transformed)) {
            toMessage->setCMSDestination(dynamic_cast<const cms::Destination*>(transformed));
            delete transformed;
        } else {
            toMessage->setCMSDestination(fromMessage->getCMSDestination());
        }
    }

    if (fromMessage->getCMSReplyTo() != NULL) {
        const ActiveMQDestination* transformed = NULL;
        if (transformDestination(fromMessage->getCMSReplyTo(), &transformed)) {
            toMessage->setCMSReplyTo(dynamic_cast<const cms::Destination*>(transformed));
            delete transformed;
        } else {
            toMessage->setCMSReplyTo(fromMessage->getCMSReplyTo());
        }
    }

    toMessage->setCMSMessageID(fromMessage->getCMSMessageID());
    toMessage->setCMSCorrelationID(fromMessage->getCMSCorrelationID());
    toMessage->setCMSDeliveryMode(fromMessage->getCMSDeliveryMode());
    toMessage->setCMSRedelivered(fromMessage->getCMSRedelivered());
    toMessage->setCMSType(fromMessage->getCMSType());
    toMessage->setCMSExpiration(fromMessage->getCMSExpiration());
    toMessage->setCMSPriority(fromMessage->getCMSPriority());
    toMessage->setCMSTimestamp(fromMessage->getCMSTimestamp());

    std::vector<std::string> propertyNames = fromMessage->getPropertyNames();
    std::vector<std::string>::iterator iter = propertyNames.begin();
    for(; iter != propertyNames.end() ; ++iter) {
        std::string name = *iter;
        cms::Message::ValueType propertyType = fromMessage->getPropertyValueType(name);

        switch(propertyType) {
            case cms::Message::BOOLEAN_TYPE:
                toMessage->setBooleanProperty(name, fromMessage->getBooleanProperty(name));
                break;
            case cms::Message::BYTE_TYPE:
                toMessage->setByteProperty(name, fromMessage->getByteProperty(name));
                break;
            case cms::Message::SHORT_TYPE:
                toMessage->setShortProperty(name, fromMessage->getShortProperty(name));
                break;
            case cms::Message::INTEGER_TYPE:
                toMessage->setIntProperty(name, fromMessage->getIntProperty(name));
                break;
            case cms::Message::LONG_TYPE:
                toMessage->setLongProperty(name, fromMessage->getLongProperty(name));
                break;
            case cms::Message::FLOAT_TYPE:
                toMessage->setFloatProperty(name, fromMessage->getFloatProperty(name));
                break;
            case cms::Message::DOUBLE_TYPE:
                toMessage->setDoubleProperty(name, fromMessage->getDoubleProperty(name));
                break;
            case cms::Message::STRING_TYPE:
                toMessage->setStringProperty(name, fromMessage->getStringProperty(name));
                break;
            default:
                break;
        }
    }
}