Search in sources :

Example 1 with ZFileIntoAction

use of com.zimbra.client.ZFilterAction.ZFileIntoAction in project zm-mailbox by Zimbra.

the class ZFilterRule method parseFilterRule.

public static ZFilterRule parseFilterRule(String[] args) throws ServiceException {
    String name = args[0];
    boolean all = true;
    boolean active = true;
    List<ZFilterCondition> conditions = new ArrayList<ZFilterCondition>();
    List<ZFilterAction> actions = new ArrayList<ZFilterAction>();
    int i = 1;
    while (i < args.length) {
        String a = args[i++];
        if (a.equals("active")) {
            active = true;
        } else if (a.equals("inactive")) {
            active = false;
        } else if (a.equals("any")) {
            all = false;
        } else if (a.equals("all")) {
            all = true;
        } else if (a.equals("addressbook")) {
            if (i + 2 > args.length) {
                throw ZClientException.CLIENT_ERROR("missing args", null);
            }
            String op = args[i++];
            String header = args[i++];
            conditions.add(new ZAddressBookCondition(AddressBookOp.fromString(op), header));
        } else if (a.equals("contact_ranking")) {
            if (i + 2 > args.length) {
                throw ZClientException.CLIENT_ERROR("missing args", null);
            }
            String op = args[i++];
            String header = args[i++];
            conditions.add(new ZContactRankingCondition(ContactRankingOp.fromString(op), header));
        } else if (a.equals("me")) {
            if (i + 2 > args.length) {
                throw ZClientException.CLIENT_ERROR("missing args", null);
            }
            String op = args[i++];
            String header = args[i++];
            conditions.add(new ZMeCondition(MeOp.fromString(op), header));
        } else if (a.equals("attachment")) {
            if (i + 1 > args.length) {
                throw ZClientException.CLIENT_ERROR("missing exists arg", null);
            }
            conditions.add(new ZAttachmentExistsCondition(args[i++].equals("exists")));
        } else if (a.equals("body")) {
            if (i + 2 > args.length) {
                throw ZClientException.CLIENT_ERROR("missing args", null);
            }
            String op = args[i++];
            String nextArg = args[i++];
            boolean caseSensitive = false;
            if (ZFilterCondition.C_CASE_SENSITIVE.equals(nextArg)) {
                caseSensitive = true;
                if (i + 1 > args.length) {
                    throw ZClientException.CLIENT_ERROR("missing args", null);
                }
                nextArg = args[i++];
            }
            conditions.add(new ZBodyCondition(BodyOp.fromString(op), caseSensitive, nextArg));
        } else if (a.equals("size")) {
            if (i + 2 > args.length) {
                throw ZClientException.CLIENT_ERROR("missing args", null);
            }
            conditions.add(new ZSizeCondition(SizeOp.fromString(args[i++]), args[i++]));
        } else if (a.equals("date")) {
            if (i + 2 > args.length) {
                throw ZClientException.CLIENT_ERROR("missing args", null);
            }
            conditions.add(new ZDateCondition(DateOp.fromString(args[i++]), args[i++]));
        } else if (a.equals("current_time")) {
            if (i + 2 > args.length) {
                throw ZClientException.CLIENT_ERROR("missing args", null);
            }
            conditions.add(new ZCurrentTimeCondition(DateOp.fromString(args[i++]), args[i++]));
        } else if (a.equals("current_day_of_week")) {
            if (i + 2 > args.length) {
                throw ZClientException.CLIENT_ERROR("missing args", null);
            }
            conditions.add(new ZCurrentDayOfWeekCondition(SimpleOp.fromString(args[i++]), args[i++]));
        } else if (a.equals("header")) {
            if (i + 2 > args.length) {
                throw ZClientException.CLIENT_ERROR("missing args", null);
            }
            String headerName = args[i++];
            String op = args[i++];
            if (op.equals("exists")) {
                conditions.add(new ZHeaderExistsCondition(headerName, true));
            } else if (op.equals("not_exists")) {
                conditions.add(new ZHeaderExistsCondition(headerName, false));
            } else {
                if (i + 1 > args.length) {
                    throw ZClientException.CLIENT_ERROR("missing args", null);
                }
                String nextArg = args[i++];
                boolean caseSensitive = false;
                if (ZFilterCondition.C_CASE_SENSITIVE.equals(nextArg)) {
                    caseSensitive = true;
                    if (i + 1 > args.length) {
                        throw ZClientException.CLIENT_ERROR("missing args", null);
                    }
                    nextArg = args[i++];
                }
                conditions.add(new ZHeaderCondition(headerName, HeaderOp.fromString(op), caseSensitive, nextArg));
            }
        } else if (a.equals("mime_header")) {
            if (i + 3 > args.length) {
                throw ZClientException.CLIENT_ERROR("missing args", null);
            }
            String headerName = args[i++];
            String op = args[i++];
            String nextArg = args[i++];
            boolean caseSensitive = false;
            if (ZFilterCondition.C_CASE_SENSITIVE.equals(nextArg)) {
                caseSensitive = true;
                if (i + 1 > args.length) {
                    throw ZClientException.CLIENT_ERROR("missing args", null);
                }
                nextArg = args[i++];
            }
            conditions.add(new ZMimeHeaderCondition(headerName, HeaderOp.fromString(op), caseSensitive, nextArg));
        } else if (a.equals("address")) {
            if (i + 4 > args.length) {
                throw ZClientException.CLIENT_ERROR("missing args", null);
            }
            String headerName = args[i++];
            String part = args[i++];
            String op = args[i++];
            String nextArg = args[i++];
            boolean caseSensitive = false;
            if (ZFilterCondition.C_CASE_SENSITIVE.equals(nextArg)) {
                caseSensitive = true;
                if (i + 1 > args.length) {
                    throw ZClientException.CLIENT_ERROR("missing args", null);
                }
                nextArg = args[i++];
            }
            conditions.add(new ZAddressCondition(headerName, Sieve.AddressPart.fromString(part), HeaderOp.fromString(op), caseSensitive, nextArg));
        } else if (a.equals("invite")) {
            if (i + 1 > args.length) {
                throw ZClientException.CLIENT_ERROR("missing exists arg", null);
            }
            ZInviteCondition cond = new ZInviteCondition(args[i++].equals("exists"));
            if (i + 1 < args.length && args[i].equalsIgnoreCase("method")) {
                // method
                i++;
                cond.setMethods(args[i++].split(","));
            }
            conditions.add(cond);
        } else if (a.equals("conversation")) {
            if (i + 2 > args.length) {
                throw ZClientException.CLIENT_ERROR("missing where arg", null);
            }
            conditions.add(new ZFilterCondition.ZConversationCondition(ZFilterCondition.ConversationOp.fromString(args[i++]), args[i++]));
        } else if (a.equals("facebook")) {
            ZFilterCondition.SimpleOp op;
            if (i + 1 < args.length && args[i].equalsIgnoreCase("not")) {
                // not
                i++;
                op = ZFilterCondition.SimpleOp.NOT_IS;
            } else {
                op = ZFilterCondition.SimpleOp.IS;
            }
            conditions.add(new ZFilterCondition.ZFacebookCondition(op));
        } else if (a.equals("linkedin")) {
            ZFilterCondition.SimpleOp op;
            if (i + 1 < args.length && args[i].equalsIgnoreCase("not")) {
                // not
                i++;
                op = ZFilterCondition.SimpleOp.NOT_IS;
            } else {
                op = ZFilterCondition.SimpleOp.IS;
            }
            conditions.add(new ZFilterCondition.ZLinkedInCondition(op));
        } else if (a.equals("socialcast")) {
            ZFilterCondition.SimpleOp op;
            if (i + 1 < args.length && args[i].equalsIgnoreCase("not")) {
                // not
                i++;
                op = ZFilterCondition.SimpleOp.NOT_IS;
            } else {
                op = ZFilterCondition.SimpleOp.IS;
            }
            conditions.add(new ZFilterCondition.ZSocialcastCondition(op));
        } else if (a.equals("twitter")) {
            ZFilterCondition.SimpleOp op;
            if (i + 1 < args.length && args[i].equalsIgnoreCase("not")) {
                // not
                i++;
                op = ZFilterCondition.SimpleOp.NOT_IS;
            } else {
                op = ZFilterCondition.SimpleOp.IS;
            }
            conditions.add(new ZFilterCondition.ZTwitterCondition(op));
        } else if (a.equals("list")) {
            ZFilterCondition.SimpleOp op;
            if (i + 1 < args.length && args[i].equalsIgnoreCase("not")) {
                // not
                i++;
                op = ZFilterCondition.SimpleOp.NOT_IS;
            } else {
                op = ZFilterCondition.SimpleOp.IS;
            }
            conditions.add(new ZFilterCondition.ZListCondition(op));
        } else if (a.equals("bulk")) {
            ZFilterCondition.SimpleOp op;
            if (i + 1 < args.length && args[i].equalsIgnoreCase("not")) {
                // not
                i++;
                op = ZFilterCondition.SimpleOp.NOT_IS;
            } else {
                op = ZFilterCondition.SimpleOp.IS;
            }
            conditions.add(new ZFilterCondition.ZBulkCondition(op));
        } else if (a.equals("importance")) {
            if (i + 2 > args.length) {
                throw ZClientException.CLIENT_ERROR("missing args", null);
            }
            String op = args[i++];
            String importance = args[i++];
            conditions.add(new ZFilterCondition.ZImportanceCondition(SimpleOp.fromString(op), FilterTest.Importance.fromString(importance)));
        } else if (a.equals("flagged")) {
            ZFilterCondition.SimpleOp op;
            if (i < args.length && args[i].equalsIgnoreCase("not")) {
                // not
                i++;
                op = ZFilterCondition.SimpleOp.NOT_IS;
            } else {
                op = ZFilterCondition.SimpleOp.IS;
            }
            if (i >= args.length) {
                throw ZClientException.CLIENT_ERROR("missing a flag name after 'flagged'", null);
            }
            conditions.add(new ZFilterCondition.ZFlaggedCondition(op, Sieve.Flag.fromString(args[i++])));
        } else if (a.equals("keep")) {
            actions.add(new ZKeepAction());
        } else if (a.equals("discard")) {
            actions.add(new ZDiscardAction());
        } else if (a.equals("fileinto")) {
            if (i + 1 > args.length) {
                throw ZClientException.CLIENT_ERROR("missing args", null);
            }
            actions.add(new ZFileIntoAction(args[i++]));
        } else if (a.equals("tag")) {
            if (i + 1 > args.length) {
                throw ZClientException.CLIENT_ERROR("missing args", null);
            }
            actions.add(new ZTagAction(args[i++]));
        } else if (a.equals("mark")) {
            if (i + 1 > args.length) {
                throw ZClientException.CLIENT_ERROR("missing args", null);
            }
            actions.add(new ZMarkAction(MarkOp.fromString(args[i++])));
        } else if (a.equals("redirect")) {
            if (i + 1 > args.length) {
                throw ZClientException.CLIENT_ERROR("missing args", null);
            }
            actions.add(new ZRedirectAction(args[i++]));
        } else if (a.equals("reply")) {
            if (i + 1 > args.length) {
                throw ZClientException.CLIENT_ERROR("missing args", null);
            }
            actions.add(new ZReplyAction(args[i++]));
        } else if (a.equals("notify")) {
            if (i + 3 > args.length) {
                throw ZClientException.CLIENT_ERROR("missing args", null);
            }
            if (!"RFC".equalsIgnoreCase(args[i])) {
                String emailAddr = args[i++];
                String subjectTemplate = args[i++];
                String bodyTemplate = args[i++];
                int maxBodyBytes = -1;
                if (i + 1 <= args.length) {
                    try {
                        maxBodyBytes = Integer.valueOf(args[i]);
                        i++;
                    } catch (NumberFormatException ignored) {
                    }
                }
                actions.add(new ZNotifyAction(emailAddr, subjectTemplate, bodyTemplate, maxBodyBytes));
            } else {
                // "options".
                if (i + 4 > args.length) {
                    throw ZClientException.CLIENT_ERROR("missing args", null);
                }
                // skip string "RFC"
                i++;
                String from = args[i++];
                String importance = null;
                String options = null;
                if (i + 4 == args.length) {
                    // Now we check whether the notify string contains "importance" and "options" tokens
                    // If these two tokens are included, the remaining number of tokens at this point is 4,
                    // otherwise 2.
                    importance = args[i++];
                    options = args[i++];
                }
                String message = args[i++];
                String method = args[i++];
                if (importance != null && options != null) {
                    actions.add(new ZRFCCompliantNotifyAction(from, importance, options, message, method));
                } else {
                    actions.add(new ZRFCCompliantNotifyAction(from, message, method));
                }
            }
        } else if (a.equals("stop")) {
            actions.add(new ZStopAction());
        } else {
            throw ZClientException.CLIENT_ERROR("unknown keyword: " + a, null);
        }
    }
    if (name == null || name.length() == 0) {
        throw ZClientException.CLIENT_ERROR("missing filter name", null);
    }
    if (actions.isEmpty()) {
        throw ZClientException.CLIENT_ERROR("must have at least one action", null);
    }
    if (conditions.isEmpty()) {
        throw ZClientException.CLIENT_ERROR("must have at least one condition", null);
    }
    return new ZFilterRule(name, active, all, conditions, actions);
}
Also used : ZReplyAction(com.zimbra.client.ZFilterAction.ZReplyAction) ZSizeCondition(com.zimbra.client.ZFilterCondition.ZSizeCondition) ZDiscardAction(com.zimbra.client.ZFilterAction.ZDiscardAction) ZInviteCondition(com.zimbra.client.ZFilterCondition.ZInviteCondition) ZHeaderCondition(com.zimbra.client.ZFilterCondition.ZHeaderCondition) ArrayList(java.util.ArrayList) ZNotifyAction(com.zimbra.client.ZFilterAction.ZNotifyAction) ZAddressBookCondition(com.zimbra.client.ZFilterCondition.ZAddressBookCondition) ZRFCCompliantNotifyAction(com.zimbra.client.ZFilterAction.ZRFCCompliantNotifyAction) ZCurrentDayOfWeekCondition(com.zimbra.client.ZFilterCondition.ZCurrentDayOfWeekCondition) ZKeepAction(com.zimbra.client.ZFilterAction.ZKeepAction) ZMarkAction(com.zimbra.client.ZFilterAction.ZMarkAction) ZHeaderExistsCondition(com.zimbra.client.ZFilterCondition.ZHeaderExistsCondition) ZDateCondition(com.zimbra.client.ZFilterCondition.ZDateCondition) ZAddressCondition(com.zimbra.client.ZFilterCondition.ZAddressCondition) SimpleOp(com.zimbra.client.ZFilterCondition.SimpleOp) ZMimeHeaderCondition(com.zimbra.client.ZFilterCondition.ZMimeHeaderCondition) ZRedirectAction(com.zimbra.client.ZFilterAction.ZRedirectAction) ZBodyCondition(com.zimbra.client.ZFilterCondition.ZBodyCondition) ZCurrentTimeCondition(com.zimbra.client.ZFilterCondition.ZCurrentTimeCondition) ZContactRankingCondition(com.zimbra.client.ZFilterCondition.ZContactRankingCondition) SimpleOp(com.zimbra.client.ZFilterCondition.SimpleOp) ZFileIntoAction(com.zimbra.client.ZFilterAction.ZFileIntoAction) ZTagAction(com.zimbra.client.ZFilterAction.ZTagAction) ZMeCondition(com.zimbra.client.ZFilterCondition.ZMeCondition) ZAttachmentExistsCondition(com.zimbra.client.ZFilterCondition.ZAttachmentExistsCondition) ZStopAction(com.zimbra.client.ZFilterAction.ZStopAction)

Example 2 with ZFileIntoAction

use of com.zimbra.client.ZFilterAction.ZFileIntoAction in project zm-mailbox by Zimbra.

the class TestFilter method testMarkRead.

@Test
public void testMarkRead() throws Exception {
    String folderName = NAME_PREFIX + " testMarkRead";
    // if the subject contains "testMarkRead", file into a folder and mark read
    List<ZFilterRule> rules = new ArrayList<ZFilterRule>();
    List<ZFilterCondition> conditions = new ArrayList<ZFilterCondition>();
    List<ZFilterAction> actions = new ArrayList<ZFilterAction>();
    conditions.add(new ZHeaderCondition("subject", HeaderOp.CONTAINS, "testMarkRead"));
    actions.add(new ZFileIntoAction(folderName));
    actions.add(new ZMarkAction(MarkOp.READ));
    rules.add(new ZFilterRule("testMarkRead", true, false, conditions, actions));
    saveIncomingRules(mMbox, new ZFilterRules(rules));
    // Deliver message.
    String address = TestUtil.getAddress(USER_NAME);
    String subject = NAME_PREFIX + " testMarkRead";
    TestUtil.addMessageLmtp(subject, address, address);
    // Check folder and unread state.
    ZMessage msg = TestUtil.getMessage(mMbox, "in:\"" + folderName + "\" subject:\"" + subject + "\"");
    String flags = msg.getFlags();
    assertTrue("Unexpected flags: " + flags, flags == null || flags.indexOf(ZMessage.Flag.UNREAD.getFlagChar()) < 0);
}
Also used : ZMessage(com.zimbra.client.ZMessage) ZHeaderCondition(com.zimbra.client.ZFilterCondition.ZHeaderCondition) ZFilterCondition(com.zimbra.client.ZFilterCondition) ZFilterRule(com.zimbra.client.ZFilterRule) ArrayList(java.util.ArrayList) ZFilterAction(com.zimbra.client.ZFilterAction) ZFileIntoAction(com.zimbra.client.ZFilterAction.ZFileIntoAction) ZMarkAction(com.zimbra.client.ZFilterAction.ZMarkAction) ZFilterRules(com.zimbra.client.ZFilterRules) Test(org.junit.Test)

Example 3 with ZFileIntoAction

use of com.zimbra.client.ZFilterAction.ZFileIntoAction in project zm-mailbox by Zimbra.

the class TestFilter method testSpam.

/**
 * Confirms that spam filtering takes a higher precedence than
 * custom user filtering (bug 23886).
 */
public void testSpam() throws Exception {
    ZMailbox mbox = TestUtil.getZMailbox(USER_NAME);
    String sender = TestUtil.getAddress(USER_NAME);
    String[] recipients = new String[] { sender };
    String message = TestUtil.getTestMessage(NAME_PREFIX + " testSpam", USER_NAME, USER_NAME, null);
    Config config = Provisioning.getInstance().getConfig();
    message = config.getAttr(Provisioning.A_zimbraSpamHeader) + ": " + config.getAttr(Provisioning.A_zimbraSpamHeaderValue) + "\r\n" + message;
    // Make sure spam message doesn't already exist
    assertEquals(0, TestUtil.search(mbox, "in:junk subject:testSpam").size());
    // Deliver spam message without matching rule, make sure it gets delivered
    // to the junk folder, and delete.
    TestUtil.addMessageLmtp(recipients, sender, message);
    ZMessage msg = TestUtil.getMessage(mbox, "in:junk subject:testSpam");
    mbox.deleteMessage(msg.getId());
    // Add matching filter rule: if subject contains "testSpam", file into folder1
    ZFilterRules rules = getTestIncomingRules();
    List<ZFilterCondition> conditions = new ArrayList<ZFilterCondition>();
    List<ZFilterAction> actions = new ArrayList<ZFilterAction>();
    conditions.add(new ZHeaderCondition("subject", HeaderOp.CONTAINS, "testSpam"));
    actions.add(new ZFileIntoAction(FOLDER1_PATH));
    rules.getRules().add(new ZFilterRule("testBug5455", true, false, conditions, actions));
    saveIncomingRules(mMbox, rules);
    // Set "apply user rules" attribute to TRUE and make sure the message gets filed into folder1
    TestUtil.setAccountAttr(USER_NAME, Provisioning.A_zimbraSpamApplyUserFilters, LdapConstants.LDAP_TRUE);
    TestUtil.addMessageLmtp(recipients, sender, message);
    msg = TestUtil.waitForMessage(mbox, "in:" + FOLDER1_PATH + " subject:testSpam");
    mbox.deleteMessage(msg.getId());
    // Set "apply user rules" attribute to FALSE and make sure the message gets filed into junk
    TestUtil.setAccountAttr(USER_NAME, Provisioning.A_zimbraSpamApplyUserFilters, LdapConstants.LDAP_FALSE);
    TestUtil.addMessageLmtp(recipients, sender, message);
    TestUtil.waitForMessage(mbox, "in:junk subject:testSpam");
}
Also used : ZMessage(com.zimbra.client.ZMessage) Config(com.zimbra.cs.account.Config) ZHeaderCondition(com.zimbra.client.ZFilterCondition.ZHeaderCondition) ZFilterCondition(com.zimbra.client.ZFilterCondition) ArrayList(java.util.ArrayList) ZFilterAction(com.zimbra.client.ZFilterAction) ZFilterRule(com.zimbra.client.ZFilterRule) ZMailbox(com.zimbra.client.ZMailbox) ZFileIntoAction(com.zimbra.client.ZFilterAction.ZFileIntoAction) ZFilterRules(com.zimbra.client.ZFilterRules)

Example 4 with ZFileIntoAction

use of com.zimbra.client.ZFilterAction.ZFileIntoAction in project zm-mailbox by Zimbra.

the class TestFilter method testBackslashEscape.

public void testBackslashEscape() throws Exception {
    List<ZFilterCondition> conditions = new ArrayList<ZFilterCondition>();
    List<ZFilterAction> actions = new ArrayList<ZFilterAction>();
    List<ZFilterRule> rules = new ArrayList<ZFilterRule>();
    String folderName = NAME_PREFIX + " testBackslashEscape";
    TestUtil.createFolder(mMbox, folderName);
    // if subject contains "a \ b", file into folder
    ZFilterCondition condition = new ZHeaderCondition("subject", HeaderOp.CONTAINS, "a \\ b");
    ZFilterAction action = new ZFileIntoAction(folderName);
    conditions.add(condition);
    actions.add(action);
    rules.add(new ZFilterRule(folderName, true, false, conditions, actions));
    ZFilterRules zRules = new ZFilterRules(rules);
    saveIncomingRules(mMbox, zRules);
    // Add a message and confirm it gets filed into the correct folder
    String address = TestUtil.getAddress(USER_NAME);
    String subject = NAME_PREFIX + " a \\ b y z";
    TestUtil.addMessageLmtp(subject, address, address);
    TestUtil.getMessage(mMbox, "in:\"" + folderName + "\" subject:\"" + subject + "\"");
}
Also used : ZHeaderCondition(com.zimbra.client.ZFilterCondition.ZHeaderCondition) ZFilterCondition(com.zimbra.client.ZFilterCondition) ZFileIntoAction(com.zimbra.client.ZFilterAction.ZFileIntoAction) ArrayList(java.util.ArrayList) ZFilterAction(com.zimbra.client.ZFilterAction) ZFilterRule(com.zimbra.client.ZFilterRule) ZFilterRules(com.zimbra.client.ZFilterRules)

Example 5 with ZFileIntoAction

use of com.zimbra.client.ZFilterAction.ZFileIntoAction in project zm-mailbox by Zimbra.

the class TestFilter method getTestIncomingRules.

private ZFilterRules getTestIncomingRules() throws Exception {
    List<ZFilterRule> rules = new ArrayList<ZFilterRule>();
    List<ZFilterCondition> conditions = new ArrayList<ZFilterCondition>();
    List<ZFilterAction> actions = new ArrayList<ZFilterAction>();
    // if subject contains "folder1", file into folder1 and tag with tag1
    conditions = new ArrayList<ZFilterCondition>();
    actions = new ArrayList<ZFilterAction>();
    conditions.add(new ZHeaderCondition("subject", HeaderOp.CONTAINS, "folder1"));
    actions.add(new ZFileIntoAction(FOLDER1_PATH));
    actions.add(new ZTagAction(TAG1_NAME));
    rules.add(new ZFilterRule("testMatchMultipleFilters1", true, false, conditions, actions));
    // if from contains "multiplefilters", file into folder 2, tag with tag2 and flag
    conditions = new ArrayList<ZFilterCondition>();
    actions = new ArrayList<ZFilterAction>();
    conditions.add(new ZHeaderCondition("from", HeaderOp.CONTAINS, "multiplefilters"));
    actions.add(new ZFileIntoAction(FOLDER2_PATH));
    actions.add(new ZTagAction(TAG2_NAME));
    actions.add(new ZMarkAction(MarkOp.FLAGGED));
    rules.add(new ZFilterRule("testMatchMultipleFilters2", true, false, conditions, actions));
    // if subject contains bug5455, flag, file into folder1, tag with tag1, file into folder2
    conditions = new ArrayList<ZFilterCondition>();
    actions = new ArrayList<ZFilterAction>();
    conditions.add(new ZHeaderCondition("subject", HeaderOp.CONTAINS, "bug5455"));
    actions.add(new ZMarkAction(MarkOp.FLAGGED));
    actions.add(new ZFileIntoAction(FOLDER1_PATH));
    actions.add(new ZTagAction(TAG1_NAME));
    actions.add(new ZFileIntoAction(FOLDER2_PATH));
    rules.add(new ZFilterRule("testBug5455", true, false, conditions, actions));
    // if subject contains "discard", discard the message
    conditions = new ArrayList<ZFilterCondition>();
    actions = new ArrayList<ZFilterAction>();
    conditions.add(new ZHeaderCondition("subject", HeaderOp.CONTAINS, "doDiscard"));
    actions.add(new ZDiscardAction());
    rules.add(new ZFilterRule("testDiscard", true, false, conditions, actions));
    // if subject contains "mountpointRoot", file into the mountpoint root folder
    conditions = new ArrayList<ZFilterCondition>();
    actions = new ArrayList<ZFilterAction>();
    conditions.add(new ZHeaderCondition("subject", HeaderOp.CONTAINS, "mountpointRoot"));
    actions.add(new ZFileIntoAction("/" + MOUNTPOINT_FOLDER_NAME));
    rules.add(new ZFilterRule("testMountpoint", true, false, conditions, actions));
    // if subject contains "mountpointSub", file into the mountpoint subfolder
    conditions = new ArrayList<ZFilterCondition>();
    actions = new ArrayList<ZFilterAction>();
    conditions.add(new ZHeaderCondition("subject", HeaderOp.CONTAINS, "mountpointSub"));
    actions.add(new ZFileIntoAction(MOUNTPOINT_SUBFOLDER_PATH));
    rules.add(new ZFilterRule("testMountpointSubfolder", true, false, conditions, actions));
    return new ZFilterRules(rules);
}
Also used : ZDiscardAction(com.zimbra.client.ZFilterAction.ZDiscardAction) ZHeaderCondition(com.zimbra.client.ZFilterCondition.ZHeaderCondition) ZFilterCondition(com.zimbra.client.ZFilterCondition) ZFilterRule(com.zimbra.client.ZFilterRule) ArrayList(java.util.ArrayList) ZFilterAction(com.zimbra.client.ZFilterAction) ZFileIntoAction(com.zimbra.client.ZFilterAction.ZFileIntoAction) ZTagAction(com.zimbra.client.ZFilterAction.ZTagAction) ZMarkAction(com.zimbra.client.ZFilterAction.ZMarkAction) ZFilterRules(com.zimbra.client.ZFilterRules)

Aggregations

ZFileIntoAction (com.zimbra.client.ZFilterAction.ZFileIntoAction)10 ZHeaderCondition (com.zimbra.client.ZFilterCondition.ZHeaderCondition)10 ZFilterAction (com.zimbra.client.ZFilterAction)9 ZFilterCondition (com.zimbra.client.ZFilterCondition)9 ZFilterRule (com.zimbra.client.ZFilterRule)9 ZFilterRules (com.zimbra.client.ZFilterRules)9 ArrayList (java.util.ArrayList)9 ZMarkAction (com.zimbra.client.ZFilterAction.ZMarkAction)4 ZTagAction (com.zimbra.client.ZFilterAction.ZTagAction)4 ZMailbox (com.zimbra.client.ZMailbox)4 ZMessage (com.zimbra.client.ZMessage)4 ZDiscardAction (com.zimbra.client.ZFilterAction.ZDiscardAction)3 Test (org.junit.Test)3 ZKeepAction (com.zimbra.client.ZFilterAction.ZKeepAction)2 ZRedirectAction (com.zimbra.client.ZFilterAction.ZRedirectAction)2 ZFolder (com.zimbra.client.ZFolder)2 Config (com.zimbra.cs.account.Config)2 ZNotifyAction (com.zimbra.client.ZFilterAction.ZNotifyAction)1 ZRFCCompliantNotifyAction (com.zimbra.client.ZFilterAction.ZRFCCompliantNotifyAction)1 ZReplyAction (com.zimbra.client.ZFilterAction.ZReplyAction)1