<?xml version="1.0"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one   
  or more contributor license agreements.  See the NOTICE file 
  distributed with this work for additional information        
  regarding copyright ownership.  The ASF licenses this file   
  to you under the Apache License, Version 2.0 (the            
  "License"); you may not use this file except in compliance   
  with the License.  You may obtain a copy of the License at   
                                                               
    http://www.apache.org/licenses/LICENSE-2.0                 
                                                               
  Unless required by applicable law or agreed to in writing,   
  software distributed under the License is distributed on an  
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       
  KIND, either express or implied.  See the License for the    
  specific language governing permissions and limitations      
  under the License.  
-->
<document>

    <properties>
        <title>Overview</title>
        <author email="jsieve-dev@jakarta.apache.org">jSieve Project</author>
    </properties>

    <body>
        <section name="Getting Started">
            <p>Until these pages are fleshed out, the best way to understand jSieve is read the
                <a href='apidocs/index.html'>Javadocs</a>
                and look at the <a href='xref/index.html'>source code</a>.
                The jUnit tests illustrate many aspects
                of the implementation.
            </p>
            <subsection name='Using jSieve'>

                <subsection name='Standalone'>
                    <p>
                        <a href='xref/org/apache/jsieve/SieveFactory.html'>
                            <code>org.apache.jsieve.SieveFactory</code></a> is the primary invocation
                        point for all Sieve operations. The API is clean and simple.
                        See the
                        <a href='apidocs/index.html'>javadocs</a> for more details.
                    </p>
                </subsection>
                <subsection name='In JAMES'>
                    <p>
                        The <code>SieveMailboxMailet</code> mailet is part of the jsieve/mailet project. It provides
                        mailet that applies SIEVE actions defined by a user SIEVE script to incoming e-mails. Integration
                        is done in the JAMES code base using a SieveMailet in project server/mailet/mailets. This project :
                        <ul>
                            <li>Propose a SieveLocator based on your SieveRepository for locating your user Sieve script</li>
                            <li>Communicate via URLs with the classes introduced in server/mailet/mailets, allowing to
                                use it independantly from the API defined in James Mailbox. All you need to use
                                SieveMailboxMailet is a mailet environment</li>
                        </ul>
                    </p>
                    <p>
                        Note that some integration tests in James server on Mail delivery behaves as integration tests for
                        JSIEVE in JAMES. Have a look to <code>org.apache.james.transport.mailets.delivery.SieveMailetTest</code>.
                    </p>
                    <p>
                        In James server, Sieve scripts are stored by <code>SieveRepository</code>(ies).
                        Note that you can manage your SIEVE scripts as a user on James using 3 mechanisms, depending of
                        your installation :
                        <ul>
                            <li>With SieveDefaultRepository one need to interact with the file system to custmize her
                                scripts (legacy reasons)</li>
                            <li>If enabled by the administrator, you can use a ManageSieve server, as specified in RFC-5804</li>
                            <li>Or you can rely on the <code>ManageSieveMailet</code> to handle ManageSieve over SMTP</li>
                        </ul>
                    </p>
                </subsection>
            </subsection>
            <subsection name='Implementing A Mail Adapter'>
                <p>
                    <a href='xref/org/apache/jsieve/mail/MailAdapter.html'>
                        <code>org.apache.jsieve.mail.MailAdapter</code></a> is the interface API used
                    by jSieve to interact with a mail server.
                </p><p>
                The mail adapter wraps an email
                and supplies information (required by the script) about the email. It is
                responsible for accumulating <code>Action</code>s during the parsing of a
                script and for executing them once the parsing is complete.
            </p><p>
                See the
                <a href='apidocs/index.html'>javadocs</a> for more details and the
                <a href='xref/org/apache/jsieve/samples/james/SieveMailAdapter.html'>SieveMailAdapter implementation</a>
                for the mailets environment.
            </p>
            </subsection>
            <subsection name='Implementing Extension Command'>
                <p>
                    A parser is already implemented using jjTree. So the Sieve entities you will implement will already be
                    called with parsed arguments. You will have to validate such arguments (SIEVE Syntax check), handle
                    parsing state modification (such as saying an action was taken, see SieveContext.getCommandStateManager()
                    for a deeper insight), and implement the behavior you want regarding these arguments.
                </p>
                <p>
                    You can implement additional extension commands.
                    <a href='xref/org/apache/jsieve/commands/extensions/Log.html'>
                        <code>org.apache.jsieve.commands.extensions.Log</code></a> is an example
                    of an extension command. It is recommended that extension commands
                    extend <a href='xref/org/apache/jsieve/commands/AbstractCommand.html'>
                    <code>AbstractCommand</code></a>. See the
                    <a href='apidocs/index.html'>javadocs</a> for more details.
                </p>
                <p>
                    Commands need to be registered with
                    <a href='xref/org/apache/jsieve/ConfigurationManager.html'>
                        <code>ConfigurationManager</code></a> before they can be used. This
                    may be done programmatically but the recommended method is by altering
                    the <code>org/apache/jsieve/commandsmap.properties</code>, <code>org/apache/jsieve/testsmap.properties</code>
                    and <code>org/apache/jsieve/comparatorsmap.properties</code> resource files.
                </p>
                <p>
                    Commands generates actions that get transferred by commands to the MailAdapter. If you introduce new actions,
                    you will have to extend the MailAdapter API if you need more information or actions from the mail server.
                </p>
                <p>
                    Writing new tests can be done in a similar way : extends <code>AbstractTest</code> to implement your test.
                    Adding capabilities to the MailAdapter might be required. You also need to register it to
                    <code>org/apache/jsieve/testsmap.properties</code>.
                </p>
            </subsection>
            <subsection name='Building jSieve'>
                <p>
                    jSieve uses <a href='http://maven.apache.org'>maven</a>. <code>mvn clean install</code>
                    compiles the jSieve project and install it.
                </p>
            </subsection>
        </section>

        <section name="Comments, Questions and Issues">
            <p>jSieve is a sub-project of Apache James. Please direct your comments and questions
                to the relevant James list.
            </p>
            <p>To report issues, such as bugs, go to the
                <a href="https://issues.apache.org/jira/browse/JSIEVE">jSieve Issue Tracker</a>.
                As jSieve comes with a fairly extensive suite of jUnit Tests, it would be most
                helpful for bug reports to be accompanied by an illustrative jUnit test case.
            </p>
            <section name='Frequently Asked Question'>
                <section name='Why Do Tests Using Non-ASCII Characters Fail?'>
                    <p>
                        <code>SIEVE</code> specifies that <a href='http://ietf.org/rfc/rfc2278.txt'>UTF-8</a>
                        encoding is used for scripts. This format is an international standard and has wide
                        support but not all platforms use this encoding by default.
                    </p>
                    <p>
                        By default, JSieve expects that scripts are encoding using <code>UTF-8</code>.
                        Either set the encoding programmatically or ensure that the script is encoded using
                        <code>UTF-8</code>.
                    </p>
                </section>
            </section>
        </section>
    </body>
</document>
