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