[ https://issues.apache.org/jira/browse/JAMES-3910?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Benoit Tellier updated JAMES-3910: ---------------------------------- Description: 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 tools will offer better folding, better indent, etc... Reuse becomes possible. was: 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. > 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 > Priority: Major > Labels: discussion > > 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 tools 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