private Builder setAddressList(String fieldName, Collection<? extends Address> addresses) { if (addresses == null || addresses.isEmpty()) { removeFields(fieldName); } else { setField(Fields.addressList(fieldName, addresses)); } return this; } }
private Builder setMailboxList(String fieldName, Collection<Mailbox> mailboxes) { if (mailboxes == null || mailboxes.isEmpty()) { removeFields(fieldName); } else { setField(Fields.mailboxList(fieldName, mailboxes)); } return this; }
@Test public void processShouldReturnHeadersFieldWhenSpecificHeadersRequestedInPropertyList() throws Exception { MessageManager inbox = mailboxManager.getMailbox(inboxPath, session); ComposedMessageId message1 = inbox.appendMessage( AppendCommand.from( org.apache.james.mime4j.dom.Message.Builder.of() .setFrom("user@domain.tld") .setField(new RawField("header1", "Header1Content")) .setField(new RawField("HEADer2", "Header2Content")) .setSubject("message 1 subject") .setBody("my message", StandardCharsets.UTF_8)), session); GetMessagesRequest request = GetMessagesRequest.builder() .ids(ImmutableList.of(message1.getMessageId())) .properties(ImmutableList.of("headers.from", "headers.heADER2")) .build(); Set<MessageProperty> expected = Sets.newHashSet(MessageProperty.id, MessageProperty.headers); List<JmapResponse> result = testee.process(request, clientId, session).collect(Collectors.toList()); assertThat(result).hasSize(1); assertThat(result.get(0).getProperties()) .isEqualTo(Optional.of(expected)); }
@Test public void processShouldNotFailOnSingleMessageFailure() throws Exception { MessageFactory messageFactory = mock(MessageFactory.class); testee = new GetMessagesMethod(messageFactory, messageIdManager, new DefaultMetricFactory()); MessageManager inbox = mailboxManager.getMailbox(inboxPath, session); org.apache.james.mime4j.dom.Message messageContent = org.apache.james.mime4j.dom.Message.Builder.of() .setFrom("user@domain.tld") .setField(new RawField("header1", "Header1Content")) .setField(new RawField("HEADer2", "Header2Content")) .setSubject("message 1 subject") .setBody("my message", StandardCharsets.UTF_8) .build(); ComposedMessageId message1 = inbox.appendMessage(AppendCommand.from(messageContent), session); ComposedMessageId message2 = inbox.appendMessage(AppendCommand.from(messageContent), session); when(messageFactory.fromMetaDataWithContent(any())) .thenReturn(mock(Message.class)) .thenThrow(new RuntimeException()); GetMessagesRequest request = GetMessagesRequest.builder() .ids(ImmutableList.of(message1.getMessageId(), message2.getMessageId())) .properties(ImmutableList.of("mailboxIds")) .build(); List<JmapResponse> responses = testee.process(request, clientId, session).collect(Guavate.toImmutableList()); assertThat(responses).hasSize(1); Method.Response response = responses.get(0).getResponse(); assertThat(response).isInstanceOf(GetMessagesResponse.class); GetMessagesResponse getMessagesResponse = (GetMessagesResponse) response; assertThat(getMessagesResponse.list()).hasSize(1); }
@Test public void processShouldReturnPropertyFilterWhenFilteringHeadersRequested() throws Exception { MessageManager inbox = mailboxManager.getMailbox(inboxPath, session); ComposedMessageId message1 = inbox.appendMessage( AppendCommand.from( org.apache.james.mime4j.dom.Message.Builder.of() .setFrom("user@domain.tld") .setField(new RawField("header1", "Header1Content")) .setField(new RawField("HEADer2", "Header2Content")) .setSubject("message 1 subject") .setBody("my message", StandardCharsets.UTF_8)), session); GetMessagesRequest request = GetMessagesRequest.builder() .ids(ImmutableList.of(message1.getMessageId())) .properties(ImmutableList.of("headers.from", "headers.heADER2")) .build(); List<JmapResponse> result = testee.process(request, clientId, session).collect(Collectors.toList()); assertThat(result) .hasSize(1) .extracting(JmapResponse::getFilterProvider) .are(new Condition<>(Optional::isPresent, "present")); SimpleFilterProvider actualFilterProvider = result.get(0).getFilterProvider().get(); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setFilterProvider(actualFilterProvider.setDefaultFilter(SimpleBeanPropertyFilter.serializeAll())); String response = objectMapper.writer().writeValueAsString(result.get(0)); assertThat(JsonPath.parse(response).<Map<String, String>>read("$.response.list[0].headers")).containsOnly(MapEntry.entry("From", "user@domain.tld"), MapEntry.entry("HEADer2", "Header2Content")); }
@Test public void processShouldReturnOneMessageWhenMessageInSeveralMailboxes() throws Exception { MessageManager inbox = mailboxManager.getMailbox(inboxPath, session); ComposedMessageId message1 = inbox.appendMessage( AppendCommand.from( org.apache.james.mime4j.dom.Message.Builder.of() .setFrom("user@domain.tld") .setField(new RawField("header1", "Header1Content")) .setField(new RawField("HEADer2", "Header2Content")) .setSubject("message 1 subject") .setBody("my message", StandardCharsets.UTF_8)), session); MailboxId customMailboxId = mailboxManager.getMailbox(customMailboxPath, session).getId(); messageIdManager.setInMailboxes(message1.getMessageId(), ImmutableList.of(message1.getMailboxId(), customMailboxId), session); GetMessagesRequest request = GetMessagesRequest.builder() .ids(ImmutableList.of(message1.getMessageId())) .properties(ImmutableList.of("mailboxIds")) .build(); List<JmapResponse> result = testee.process(request, clientId, session).collect(Collectors.toList()); assertThat(result).hasSize(1); Method.Response response = result.get(0).getResponse(); assertThat(response).isInstanceOf(GetMessagesResponse.class); GetMessagesResponse getMessagesResponse = (GetMessagesResponse) response; assertThat(getMessagesResponse.list()).hasSize(1); assertThat(getMessagesResponse.list().get(0).getMailboxIds()).containsOnly(customMailboxId, message1.getMailboxId()); }
/** * Sets text of this message with the given MIME subtype and charset. * * @param text * the text. * @param charset * the charset of the text. * @param subtype * the text subtype (e.g. "plain", "html" or * "xml"). */ public Builder setBody(String text, String subtype, Charset charset) throws IOException { String mimeType = "text/" + (subtype != null ? subtype : "plain"); if (charset != null) { setField(Fields.contentType(mimeType, new NameValuePair("charset", charset.name()))); } else { setField(Fields.contentType(mimeType)); } Body textBody; if (bodyFactory != null) { textBody = bodyFactory.textBody( InputStreams.create(text, charset), charset != null ? charset.name() : null); } else { textBody = BasicBodyFactory.INSTANCE.textBody(text, charset); } return setBody(textBody); }
/** * Sets <i>Date</i> header field for this message. The specified * <code>TimeZone</code> is used to encode the specified <code>Date</code> * object into a string. * * @param date * date to set or <code>null</code> to remove the date header * field. * @param zone * a time zone. */ public Builder setDate(Date date, TimeZone zone) { if (date == null) { removeFields(FieldName.DATE); } else { setField(Fields.date(FieldName.DATE, date, zone)); } return this; }
/** * Sets binary content of this message with the given MIME type. * * @param bin * the body. * @param mimeType * the MIME media type of the specified body * ("type/subtype"). */ public Builder setBody(byte[] bin, String mimeType) throws IOException { setField(Fields.contentType(mimeType != null ? mimeType : "application/octet-stream")); Body binBody; if (bodyFactory != null) { binBody = bodyFactory.binaryBody(InputStreams.create(bin)); } else { binBody = BasicBodyFactory.INSTANCE.binaryBody(bin); } return setBody(binBody); }
/** * Sets <i>Subject</i> header field for this message. The specified * string may contain non-ASCII characters, in which case it gets encoded as * an 'encoded-word' automatically. * * @param subject * subject to set or <code>null</code> to remove the subject * header field. */ public Builder setSubject(String subject) { if (subject == null) { removeFields(FieldName.SUBJECT); } else { setField(Fields.subject(subject)); } return this; }
/** * Generates and sets message ID for this message. * * @param hostname * host name to be included in the identifier or * <code>null</code> if no host name should be included. */ public Builder generateMessageId(String hostname) { if (hostname == null) { removeFields(FieldName.MESSAGE_ID); } else { setField(Fields.generateMessageId(hostname)); } return this; }
/** * Sets message ID for this message. * * @param messageId * the message ID. */ public Builder setMessageId(String messageId) { if (messageId == null) { removeFields(FieldName.MESSAGE_ID); } else { setField(Fields.messageId(messageId)); } return this; }
public MessageBuilder setField(Field field) { builder.setField(field); return this; }
private Builder setMailbox(String fieldName, String mailbox) throws ParseException { if (mailbox == null) { removeFields(fieldName); } else { setField(Fields.mailbox(fieldName, DefaultAddressParser.DEFAULT.parseMailbox(mailbox))); } return this; }
private Builder setMailbox(String fieldName, Mailbox mailbox) { if (mailbox == null) { removeFields(fieldName); } else { setField(Fields.mailbox(fieldName, mailbox)); } return this; }