Skip to content

Commit 7391f34

Browse files
committed
8_4_HW7_webapp
1 parent b86fb86 commit 7391f34

File tree

4 files changed

+117
-22
lines changed

4 files changed

+117
-22
lines changed

services/mail-api/src/main/java/ru/javaops/masterjava/service/mail/MailWSClient.java

+20-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package ru.javaops.masterjava.service.mail;
22

3+
import com.google.common.base.Splitter;
4+
import com.google.common.collect.ImmutableSet;
5+
import com.google.common.collect.Iterables;
36
import com.google.common.io.Resources;
47
import lombok.extern.slf4j.Slf4j;
58
import ru.javaops.masterjava.web.WsClient;
@@ -20,8 +23,22 @@ public class MailWSClient {
2023
}
2124

2225

23-
public static void sendToGroup(final Set<Addressee> to, final Set<Addressee> cc, final String subject, final String body) {
24-
log.info("Send mail to '" + to + "' cc '" + cc + "' subject '" + subject + (log.isDebugEnabled() ? "\nbody=" + body : ""));
25-
WS_CLIENT.getPort().sendToGroup(to, cc, subject, body);
26+
public static String sendToGroup(final Set<Addressee> to, final Set<Addressee> cc, final String subject, final String body) {
27+
log.info("Send to group to '" + to + "' cc '" + cc + "' subject '" + subject + (log.isDebugEnabled() ? "\nbody=" + body : ""));
28+
String status = WS_CLIENT.getPort().sendToGroup(to, cc, subject, body);
29+
log.info("Send to group with status: " + status);
30+
return status;
31+
}
32+
33+
public static GroupResult sendBulk(final Set<Addressee> to, final String subject, final String body) {
34+
log.info("Send bulk to '" + to + "' subject '" + subject + (log.isDebugEnabled() ? "\nbody=" + body : ""));
35+
GroupResult result = WS_CLIENT.getPort().sendBulk(to, subject, body);
36+
log.info("Sent bulk with result: " + result);
37+
return result;
38+
}
39+
40+
public static Set<Addressee> split(String addressees) {
41+
Iterable<String> split = Splitter.on(',').trimResults().omitEmptyStrings().split(addressees);
42+
return ImmutableSet.copyOf(Iterables.transform(split, Addressee::new));
2643
}
2744
}

web/webapp/pom.xml

+5
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,10 @@
2626
<artifactId>persist</artifactId>
2727
<version>${project.version}</version>
2828
</dependency>
29+
<dependency>
30+
<groupId>${project.groupId}</groupId>
31+
<artifactId>mail-api</artifactId>
32+
<version>${project.version}</version>
33+
</dependency>
2934
</dependencies>
3035
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package ru.javaops.masterjava.webapp;
2+
3+
import lombok.extern.slf4j.Slf4j;
4+
import ru.javaops.masterjava.service.mail.GroupResult;
5+
import ru.javaops.masterjava.service.mail.MailWSClient;
6+
7+
import javax.servlet.ServletException;
8+
import javax.servlet.annotation.WebServlet;
9+
import javax.servlet.http.HttpServlet;
10+
import javax.servlet.http.HttpServletRequest;
11+
import javax.servlet.http.HttpServletResponse;
12+
import java.io.IOException;
13+
14+
@WebServlet("/send")
15+
@Slf4j
16+
public class SendServlet extends HttpServlet {
17+
@Override
18+
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
19+
String result;
20+
try {
21+
log.info("Start sending");
22+
req.setCharacterEncoding("UTF-8");
23+
resp.setCharacterEncoding("UTF-8");
24+
String users = req.getParameter("users");
25+
String subject = req.getParameter("subject");
26+
String body = req.getParameter("body");
27+
GroupResult groupResult = MailWSClient.sendBulk(MailWSClient.split(users), subject, body);
28+
result = groupResult.toString();
29+
log.info("Processing finished with result: {}", result);
30+
} catch (Exception e) {
31+
log.error("Processing failed", e);
32+
result = e.toString();
33+
}
34+
resp.getWriter().write(result);
35+
}
36+
}

web/webapp/src/main/webapp/WEB-INF/templates/users.html

+56-19
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,62 @@
33
<meta charset="UTF-8">
44
<title>Users</title>
55
</head>
6+
<!--https://code.jquery.com/-->
7+
<!--http://stackoverflow.com/a/24070373/548473-->
8+
<script src="https://code.jquery.com/jquery-3.2.1.min.js"
9+
integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
10+
crossorigin="anonymous" async>
11+
</script>
612
<body>
7-
<table border="1" cellpadding="8" cellspacing="0">
8-
<thead>
9-
<tr>
10-
<th>#</th>
11-
<th>Full Name</th>
12-
<th>Email</th>
13-
<th>Flag</th>
14-
</tr>
15-
</thead>
16-
<tbody>
17-
<!--/*@thymesVar id="users" type="java.util.List<ru.javaops.masterjava.persist.model.User>"*/-->
18-
<tr th:each="user,iter: ${users}">
19-
<td th:text="${iter.count}"></td>
20-
<td th:text="${user.fullName}"></td>
21-
<td th:utext="${user.email}"></td>
22-
<td th:text="${user.flag}"></td>
23-
</tr>
24-
</tbody>
25-
</table>
13+
<section>
14+
<table border="1" cellpadding="8" cellspacing="0">
15+
<thead>
16+
<tr>
17+
<th>#</th>
18+
<th>Full Name</th>
19+
<th>Email</th>
20+
<th>Flag</th>
21+
<th/>
22+
</tr>
23+
</thead>
24+
<tbody>
25+
<!--/*@thymesVar id="users" type="java.util.List<ru.javaops.masterjava.persist.model.User>"*/-->
26+
<tr th:each="user,iter: ${users}">
27+
<td th:text="${iter.count}"></td>
28+
<td th:text="${user.fullName}"></td>
29+
<td th:utext="${user.email}"></td>
30+
<td th:text="${user.flag}"></td>
31+
<td><input type="checkbox" th:value="|${user.fullName} <${user.email}>|"/></td>
32+
</tr>
33+
</tbody>
34+
</table>
35+
<hr/>
36+
<p>
37+
<input id="subject" placeholder="subject" size="30">
38+
</p>
39+
<p>
40+
<textarea id="body" placeholder="mail body" cols=75 rows=5></textarea><br/>
41+
</p>
42+
<p>
43+
<button type="button" onclick="send()">Send</button>
44+
</p>
45+
<pre id="result"></pre>
46+
</section>
47+
<script type="text/javascript">
48+
function send() {
49+
$('#result').html("Sending ...");
50+
var users = $("input:checkbox:checked").map(function () {
51+
return this.value;
52+
}).get();
53+
// https://stackoverflow.com/a/22213543/548473
54+
$.post("send", "users=" + users + "&subject=" + $("#subject").val() + "&body=" + $("#body").val())
55+
.done(function (result) {
56+
$('#result').html(result);
57+
})
58+
.fail(function (result) {
59+
$('#result').html(result);
60+
});
61+
}
62+
</script>
2663
</body>
2764
</html>

0 commit comments

Comments
 (0)