private Map createMap()

in commons-vfs2-sandbox/src/main/java/org/apache/commons/vfs2/provider/mime/MimeAttributesMap.java [92:168]


    private Map<String, Object> createMap() {
        // Object is either a String, or a List of Strings
        final Map<String, Object> ret = new TreeMap<>();

        Enumeration<Header> headers;
        try {
            @SuppressWarnings("unchecked") // Javadoc say Part returns Header
            final Enumeration<Header> allHeaders = part.getAllHeaders();
            headers = allHeaders;
        } catch (final MessagingException e) {
            throw new RuntimeException(e);
        }

        // add all headers
        while (headers.hasMoreElements()) {
            final Header header = headers.nextElement();
            final String headerName = header.getName();

            final Object values = ret.get(headerName);

            if (values == null) {
                ret.put(headerName, header.getValue());
            } else if (values instanceof String) {
                final ArrayList<String> newValues = new ArrayList<>();
                newValues.add((String) values);
                newValues.add(header.getValue());
                ret.put(headerName, newValues);
            } else if (values instanceof List) {
                @SuppressWarnings("unchecked") // we only add Strings to the Lists
                final List<String> list = (List<String>) values;
                list.add(header.getValue());
            }
        }

        for (final Entry<String, Method> entry : mimeMessageGetters.entrySet()) {
            final String name = entry.getKey();
            final Method method = entry.getValue();

            try {
                final Object value = method.invoke(part);
                ret.put(OBJECT_PREFIX + name, value);
            } catch (final IllegalAccessException | InvocationTargetException e) {
                log.debug(e.getLocalizedMessage(), e);
            }
        }

        // add extended fields (with obj. prefix too)
        if (part instanceof MimeMessage) {
            final MimeMessage message = (MimeMessage) part;
            try {
                final Address[] address = message.getRecipients(Message.RecipientType.BCC);
                ret.put(OBJECT_PREFIX + "Recipients.BCC", address);
            } catch (final MessagingException e) {
                log.debug(e.getLocalizedMessage(), e);
            }
            try {
                final Address[] address = message.getRecipients(Message.RecipientType.CC);
                ret.put(OBJECT_PREFIX + "Recipients.CC", address);
            } catch (final MessagingException e) {
                log.debug(e.getLocalizedMessage(), e);
            }
            try {
                final Address[] address = message.getRecipients(Message.RecipientType.TO);
                ret.put(OBJECT_PREFIX + "Recipients.TO", address);
            } catch (final MessagingException e) {
                log.debug(e.getLocalizedMessage(), e);
            }
            try {
                final Address[] address = message.getRecipients(MimeMessage.RecipientType.NEWSGROUPS);
                ret.put(OBJECT_PREFIX + "Recipients.NEWSGROUPS", address);
            } catch (final MessagingException e) {
                log.debug(e.getLocalizedMessage(), e);
            }
        }

        return ret;
    }