blob: 7529b692a39a966a25323914ead0e569c4b4df46 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef _CMS_MESSAGETRANSFORMER_H_
#define _CMS_MESSAGETRANSFORMER_H_
#include <cms/Config.h>
namespace cms {
class MessageProducer;
class MessageConsumer;
class Message;
class Session;
/**
* Provides an interface for clients to transform cms::Message objects inside the
* CMS MessageProducer and MessageConsumer objects before the message's are sent or
* received.
*
* @since 3.0
*/
class MessageTransformer {
public:
virtual ~MessageTransformer();
/**
* Transforms the given message inside the producer before it is sent to the CMS bus.
*
* The contract of this method is that the resulting transformed message pointer is set if and
* only if the method actually creates a new cms::Message object, otherwise it must always be
* set to NULL. The return value indicates whether a transformation took place and indicates
* that the resulting transformed cms::Message pointer will need to be deleted once the
* producer has sent the cms::Message on to the CMS bus.
*
* @param session
* The Session used to create the target MessageProducer for this transformation.
* @param producer
* The MessageProducer instance that is going to handle sending the transformed Message.
* @param message
* The CMS Message object that is to be transformed by this method.
* @param transformed
* A pointer to the location in memory where the newly transformed Message has been allocated.
*
* @return true if the MessageProducer should handle deleting the transformed Message once sent.
*
* @throws cms::CMSException if an error occurs during the transform operation.
*/
virtual bool producerTransform(cms::Session* session, cms::MessageProducer* producer, cms::Message* message, cms::Message** transformed) = 0;
/**
* Transforms the given message inside the consumer before it is dispatched to the client code.
*
* The contract of this method is that the resulting transformed message pointer is set if and
* only if the method actually creates a new cms::Message object, otherwise it must always be
* set to NULL. The return value indicates whether a transformation took place and indicates
* that the resulting transformed cms::Message pointer will need to be deleted once the
* consumer completed message dispatch.
*
* @param session
* The Session used to create the target MessageConsumer for this transformation.
* @param consumer
* The MessageConsumer instance that is going to handle dispatching the transformed Message.
* @param message
* The CMS Message object that is to be transformed by this method.
* @param transformed
* A pointer to the location in memory where the newly transformed Message has been allocated.
*
* @return true if the MessageConsumer should handle deleting the transformed Message once sent.
*
* @throws cms::CMSException if an error occurs during the transform operation.
*/
virtual bool consumerTransform(cms::Session* session, cms::MessageConsumer* consumer, cms::Message* message, cms::Message** transformed) = 0;
};
}
#endif /* _CMS_MESSAGETRANSFORMER_H_ */