You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by "Benoit Tellier (Jira)" <se...@james.apache.org> on 2020/05/22 10:18:00 UTC

[jira] [Created] (JSIEVE-116) Simplify JSieve API

Benoit Tellier created JSIEVE-116:
-------------------------------------

             Summary: Simplify JSieve API
                 Key: JSIEVE-116
                 URL: https://issues.apache.org/jira/browse/JSIEVE-116
             Project: James jSieve
          Issue Type: Improvement
          Components: JSieve (Main)
    Affects Versions: 0.7
            Reporter: Benoit Tellier
             Fix For: 1.0.0


Currently, JSieve requires a library user to implement a *MailAdapter* in order to interact with the *SieveFactory*. 

The MailAdapter mixes concerns: 
 - It allows access to a mail properties as per RFC-822
 - It allows running actions defined by Sieve RFC-5228, namely fileinto, keep, reject and the like

This makes the API hard to discover and play with, as this mailing list thread proved it: https://www.mail-archive.com/server-dev@james.apache.org/msg65858.html

During this thread, an enhencement proposal emerged:

 - As part of JSieve provide a `MailAdapter` class, that "just
represent" a mail. It would be a Plain Old Java Object (POJO) along with
it's builder. (it adapts a mail within JSieve context)

 - The SieveFactory takes a SieveScript inputstream, and a Mail adapter,
and returns a list of Action that results from the sieve script
execution against the supplied email.

Here is an usage examples:

{code:java}
void runSieveScript(JamesMail jamesMail, InputStream sieveScript) {
    MailAdapter mailAdapter = MailAdapter.builder()
        .subject(jamesMail.getSubject)
        .to(jamesMail.headers().to())
        ...
        .build();
    List<Action> actions = sieveFactory.evaluate(sieveScript, mailAdapter);
    // Do stuff with the actions
}
{code}


That way library users don't need to extend anything, interacts with a
simple POJO they need to populate, and can implement the actions they
want to support. This makes the entire API easier to discover. And it
looks achievable with limited investment.

This would further more ease JSieve documentation effort.

Also, an API improvment is a blocker toward a potential *1.0.0* release.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

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