def save(message, root, namespace_project, namespace_common):
        """Generate an XML representation of a message"""

        # Create the initial xml tree
        xmlMessage = etree.SubElement(root, "{" + namespace_common + "}message")
        xmlMessage.set("id", str(message.getID()))
        xmlMessage.set("timestamp", str(message.getTimestamp()))

        # Add the data
        subData = etree.SubElement(xmlMessage, "{" + namespace_common + "}data")
        subData.text = str(message.getData())

        # Depending of the type, we add its proper meta-datas
        if message.getType() == "File":
            FileMessageFactory.save(message, xmlMessage, namespace_project, namespace_common)
        elif message.getType() == "L2Network":
            L2NetworkMessageFactory.save(message, xmlMessage, namespace_project, namespace_common)
        elif message.getType() == "L3Network":
            L3NetworkMessageFactory.save(message, xmlMessage, namespace_project, namespace_common)
        elif message.getType() == "L4Network":
            L4NetworkMessageFactory.save(message, xmlMessage, namespace_project, namespace_common)
        elif message.getType() == "IPC":
            IPCMessageFactory.save(message, xmlMessage, namespace_project, namespace_common)
        elif message.getType() == "IRP":
            IRPMessageFactory.save(message, xmlMessage, namespace_project, namespace_common)
        elif message.getType() == "IRPDeviceIoControl":
            IRPDeviceIoControlMessageFactory.save(message, xmlMessage, namespace_project, namespace_common)
        elif message.getType() == "RAW":
            RawMessageFactory.save(message, xmlMessage, namespace_project, namespace_common)
        else:
            raise NameError('''There is no factory which would support
            the generation of an xml representation of the message : ''' + str(message))

        return etree.tostring(xmlMessage)
    def save(message, root, namespace_project, namespace_common):
        """Generate an XML representation of a message"""

        # Create the initial xml tree
        xmlMessage = etree.SubElement(root,
                                      "{" + namespace_common + "}message")
        xmlMessage.set("id", str(message.getID()))
        xmlMessage.set("timestamp", str(message.getTimestamp()))

        # Add the data
        subData = etree.SubElement(xmlMessage,
                                   "{" + namespace_common + "}data")
        subData.text = str(message.getData())

        # Depending of the type, we add its proper meta-datas
        if message.getType() == "File":
            FileMessageFactory.save(message, xmlMessage, namespace_project,
                                    namespace_common)
        elif message.getType() == "L2Network":
            L2NetworkMessageFactory.save(message, xmlMessage,
                                         namespace_project, namespace_common)
        elif message.getType() == "L3Network":
            L3NetworkMessageFactory.save(message, xmlMessage,
                                         namespace_project, namespace_common)
        elif message.getType() == "L4Network":
            L4NetworkMessageFactory.save(message, xmlMessage,
                                         namespace_project, namespace_common)
        elif message.getType() == "IPC":
            IPCMessageFactory.save(message, xmlMessage, namespace_project,
                                   namespace_common)
        elif message.getType() == "IRP":
            IRPMessageFactory.save(message, xmlMessage, namespace_project,
                                   namespace_common)
        elif message.getType() == "IRPDeviceIoControl":
            IRPDeviceIoControlMessageFactory.save(message, xmlMessage,
                                                  namespace_project,
                                                  namespace_common)
        elif message.getType() == "RAW":
            RawMessageFactory.save(message, xmlMessage, namespace_project,
                                   namespace_common)
        else:
            raise NameError('''There is no factory which would support
            the generation of an xml representation of the message : ''' +
                            str(message))

        return etree.tostring(xmlMessage)