All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.saly.elasticsearch.support.IMAPUtils Maven / Gradle / Ivy

/***********************************************************************************************************************
 *
 * Elasticsearch IMAP River - open source IMAP river for Elasticsearch
 * ==========================================
 *
 * Copyright (C) 2014 by Hendrik Saly (http://saly.de) and others.
 * 
 * Contains (partially) copied code from Jörg Prante's Elasticsearch JDBC river (https://github.com/jprante/elasticsearch-river-jdbc)
 *
 ***********************************************************************************************************************
 *
 * Licensed 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.
 *
 ***********************************************************************************************************************
 *
 * $Id:$
 *
 **********************************************************************************************************************/
package de.saly.elasticsearch.support;

import java.util.ArrayList;
import java.util.List;

import javax.mail.FetchProfile;
import javax.mail.FetchProfile.Item;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.MessagingException;
import javax.mail.Store;
import javax.mail.UIDFolder;

import com.sun.mail.imap.IMAPFolder.FetchProfileItem;

public class IMAPUtils {

    public static final FetchProfile FETCH_PROFILE_FLAGS_UID = new FetchProfile();
    public static final FetchProfile FETCH_PROFILE_HEAD = new FetchProfile();
    public static final FetchProfile FETCH_PROFILE_UID = new FetchProfile();

    static {

        FETCH_PROFILE_HEAD.add(Item.ENVELOPE);
        FETCH_PROFILE_HEAD.add(Item.CONTENT_INFO);
        FETCH_PROFILE_HEAD.add(FetchProfileItem.HEADERS);
        FETCH_PROFILE_FLAGS_UID.add(Item.FLAGS);
        FETCH_PROFILE_FLAGS_UID.add(UIDFolder.FetchProfileItem.UID);

        FETCH_PROFILE_UID.add(UIDFolder.FetchProfileItem.UID);

    }

    public static void close(final Folder folder) {
        try {
            if (folder != null && folder.isOpen()) {
                folder.close(false);
            }
        } catch (final Exception e) {
            // ignore
        }

    }

    public static void close(final Store store) {
        try {
            if (store != null && store.isConnected()) {
                store.close();
            }
        } catch (final Exception e) {
            // ignore
        }

    }

    public static void open(final Folder folder) throws MessagingException {

        if (folder != null && folder.exists() && !folder.isOpen() && (folder.getType() & Folder.HOLDS_MESSAGES) != 0) {
            folder.open(Folder.READ_ONLY);
        }

    }

    public static String[] toStringArray(final Flags flags) {
        final List flagsL = new ArrayList(10);

        if (flags.contains(Flags.Flag.DELETED)) {
            flagsL.add("Deleted");
        }
        if (flags.contains(Flags.Flag.ANSWERED)) {
            flagsL.add("Answered");
        }
        if (flags.contains(Flags.Flag.DRAFT)) {
            flagsL.add("Draft");
        }
        if (flags.contains(Flags.Flag.FLAGGED)) {
            flagsL.add("Flagged");
        }
        if (flags.contains(Flags.Flag.RECENT)) {
            flagsL.add("Recent");
        }
        if (flags.contains(Flags.Flag.SEEN)) {
            flagsL.add("Seen");
        }

        if (flags.contains(Flags.Flag.USER)) {
            final String[] userFlags = flags.getUserFlags();
            for (int j = 0; j < userFlags.length; j++) {
                flagsL.add(userFlags[j]);
            }
        }

        return flagsL.toArray(new String[flagsL.size()]);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy