1 | package de.aikiit.mailversendala; | |
2 | ||
3 | import de.aikiit.mailversendala.csv.CsvParser; | |
4 | import de.aikiit.mailversendala.csv.Mailing; | |
5 | import org.apache.commons.mail.EmailException; | |
6 | import org.apache.logging.log4j.LogManager; | |
7 | import org.apache.logging.log4j.Logger; | |
8 | import org.assertj.core.util.Strings; | |
9 | ||
10 | import java.io.File; | |
11 | import java.io.FileReader; | |
12 | import java.io.IOException; | |
13 | import java.nio.charset.StandardCharsets; | |
14 | import java.util.List; | |
15 | import java.util.concurrent.atomic.AtomicInteger; | |
16 | ||
17 | /** | |
18 | * Encapsulates the actual CSV parsing and mailing generation. | |
19 | */ | |
20 | public class Mailversendala { | |
21 | private static final Logger LOG = | |
22 | LogManager.getLogger(Mailversendala.class); | |
23 | ||
24 | /** | |
25 | * Send out mails with the given configuration and return result object afterwards. | |
26 | * @param configuration application configuration. | |
27 | * @return result object of the current application run. | |
28 | * @throws IOException in case of errors. | |
29 | */ | |
30 | public static MailingResult sendOut(MailConfig configuration) throws IOException { | |
31 | LOG.info("**** MAILVERSENDALA: Starting .... ****"); | |
32 | ||
33 | String csvPath = configuration.getCsvPath(); | |
34 | MailingResult result = new MailingResult(); | |
35 | ||
36 | LOG.info("Consuming CSV: {}", csvPath); | |
37 | ||
38 |
1
1. sendOut : negated conditional → KILLED |
if (!Strings.isNullOrEmpty(csvPath)) { |
39 | LOG.info(configuration.getCsvPath()); | |
40 | ||
41 | File asFile = new File(configuration.getCsvPath()); | |
42 |
1
1. sendOut : negated conditional → KILLED |
if (asFile.exists()) { |
43 | try (FileReader r = new FileReader(asFile, StandardCharsets.UTF_8)) { | |
44 | CsvParser parser = new CsvParser(r); | |
45 | final List<Mailing> mailings = parser.parse(); | |
46 | ||
47 | final int total = mailings.size(); | |
48 | LOG.info("Will send out {} mails ... hold on tight :-)", total); | |
49 | ||
50 |
1
1. sendOut : removed call to java/util/List::forEach → KILLED |
mailings.forEach(mailing -> { |
51 | try { | |
52 |
1
1. lambda$sendOut$0 : removed call to de/aikiit/mailversendala/SendOut::send → SURVIVED |
new SendOut(mailing).send(); |
53 |
1
1. lambda$sendOut$0 : removed call to de/aikiit/mailversendala/MailingResult::addSuccess → KILLED |
result.addSuccess(); |
54 | LOG.info("Successfully send out {}.mail", result.getMailCounter().orElse(new AtomicInteger(0))); | |
55 | } catch (EmailException e) { | |
56 |
1
1. lambda$sendOut$0 : removed call to de/aikiit/mailversendala/MailingResult::addError → NO_COVERAGE |
result.addError(); |
57 | LOG.error("Problem while sending out {}", mailing, e); | |
58 | } | |
59 | }); | |
60 | ||
61 | LOG.info("**** MAILVERSENDALA-report: {} total mails ****", total); | |
62 | LOG.info("**** MAILVERSENDALA-report: {} successfully send out ****", result.getMailCounter().orElse(new AtomicInteger(0))); | |
63 | LOG.info("**** MAILVERSENDALA-report: {} errors ****", result.getErrorCounter().orElse(new AtomicInteger(0))); | |
64 | } | |
65 | ||
66 | } else { | |
67 | LOG.warn("Nothing to do - please configure your CSV path properly, either as environment variable or as a runtime parameter. Example: java -Dcsvpath=foo -jar fatJar.jar"); | |
68 | } | |
69 | } | |
70 | LOG.info("**** MAILVERSENDALA: Application shutdown .... ****"); | |
71 |
1
1. sendOut : replaced return value with null for de/aikiit/mailversendala/Mailversendala::sendOut → KILLED |
return result; |
72 | } | |
73 | } | |
Mutations | ||
38 |
1.1 |
|
42 |
1.1 |
|
50 |
1.1 |
|
52 |
1.1 |
|
53 |
1.1 |
|
56 |
1.1 |
|
71 |
1.1 |