Benoit Tellier created JAMES-3910:
-------------------------------------

             Summary: More expressive mailetcontainer with include directive?
                 Key: JAMES-3910
                 URL: https://issues.apache.org/jira/browse/JAMES-3910
             Project: James Server
          Issue Type: Improvement
          Components: Mailet Contributions
            Reporter: Benoit Tellier


h3. Why?

It is common to group mailets related to a "feature" into a portion of a 
"processor".

For instance the notorious ICAL pipeline:

{code:xml}
        <processor state="local-recipient" enableJmx="true">
            <!-- ICAL pipeline -->
            <mailet match="All" class="RemoveMimeHeader">
                
<name>X-MEETING-UID,X-MEETING-METHOD,X-MEETING-RECURRENCE-ID,X-MEETING-SEQUENCE,X-MEETING-DTSTAMP</name>
                <onMailetException>ignore</onMailetException>
            </mailet>
            <mailet match="All" class="StripAttachment">
                <mimeType>text/calendar</mimeType>
                <attribute>rawIcalendar</attribute>
            </mailet>
            <mailet match="All" class="MimeDecodingMailet">
                <attribute>rawIcalendar</attribute>
            </mailet>
            <mailet match="All" class="ICalendarParser">
                <sourceAttribute>rawIcalendar</sourceAttribute>
                <destinationAttribute>icalendar</destinationAttribute>
            </mailet>
            <mailet match="All" class="ICALToHeader">
                <attribute>icalendar</attribute>
            </mailet>
            <mailet match="All" class="ICALToJsonAttribute">
                <source>icalendar</source>
                <destination>icalendarAsJson</destination>
                <rawSource>rawIcalendar</rawSource>
            </mailet>
            <mailet match="All" class="AmqpForwardAttribute">
                
<uri>amqp://${env:OP_JAMES_AMQP_USERNAME}:${env:OP_JAMES_AMQP_PASSWORD}@${env:OP_JAMES_AMQP_HOST}:${env:OP_JAMES_AMQP_PORT}</uri>
                <exchange>james:events</exchange>
                <attribute>icalendarAsJson</attribute>
            </mailet>
            <!-- End of ICAL pipeline -->
            <mailet match="All" class="AddDeliveredToHeader"/>
            <mailet match="All" class="LocalDelivery"/>
        </processor>
{code}

In more complex example this can become complex to read.

It would be easier to have the ICAL pipeline in a dedicated processor, but this 
is not doable as ToProcessor acts as a "goto".

h3. Proposal

Add an **include** tag, that puts in place all mailets from the mentionned 
processor.

It then become possible to extract the ICAL pipeline to a dedicated processor, 
get rid of extra comments, reuse it in various portion of the mailet 
container...

Eg

{code:java}
        <processor state="local-recipient" enableJmx="true">
            <include processor="ical"/>
            
            <mailet match="All" class="AddDeliveredToHeader"/>
            <mailet match="All" class="LocalDelivery"/>
        </processor>

        <processor state="ical" enableJmx="true">
            <mailet match="All" class="RemoveMimeHeader">
                
<name>X-MEETING-UID,X-MEETING-METHOD,X-MEETING-RECURRENCE-ID,X-MEETING-SEQUENCE,X-MEETING-DTSTAMP</name>
                <onMailetException>ignore</onMailetException>
            </mailet>
            <mailet match="All" class="StripAttachment">
                <mimeType>text/calendar</mimeType>
                <attribute>rawIcalendar</attribute>
            </mailet>
            <mailet match="All" class="MimeDecodingMailet">
                <attribute>rawIcalendar</attribute>
            </mailet>
            <mailet match="All" class="ICalendarParser">
                <sourceAttribute>rawIcalendar</sourceAttribute>
                <destinationAttribute>icalendar</destinationAttribute>
            </mailet>
            <mailet match="All" class="ICALToHeader">
                <attribute>icalendar</attribute>
            </mailet>
            <mailet match="All" class="ICALToJsonAttribute">
                <source>icalendar</source>
                <destination>icalendarAsJson</destination>
                <rawSource>rawIcalendar</rawSource>
            </mailet>
            <mailet match="All" class="AmqpForwardAttribute">
                
<uri>amqp://${env:OP_JAMES_AMQP_USERNAME}:${env:OP_JAMES_AMQP_PASSWORD}@${env:OP_JAMES_AMQP_HOST}:${env:OP_JAMES_AMQP_PORT}</uri>
                <exchange>james:events</exchange>
                <attribute>icalendarAsJson</attribute>
            </mailet>
        </processor>
{code}

Standards too will offer better folding, better indent, etc... Reuse becomes 
possible.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to