Skip to content

Commit 0efe4d7

Browse files
committed
Update tests.
1 parent 386406d commit 0efe4d7

1 file changed

Lines changed: 43 additions & 34 deletions

File tree

kilo-test/src/main/java/org/httprpc/kilo/test/PetServlet.java

Lines changed: 43 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@
1919
import jakarta.servlet.http.HttpServletRequest;
2020
import jakarta.servlet.http.HttpServletResponse;
2121
import org.httprpc.kilo.PageServlet;
22+
import org.httprpc.kilo.Required;
2223
import org.httprpc.kilo.WebService;
24+
import org.httprpc.kilo.beans.BeanAdapter;
2325
import org.httprpc.kilo.io.CSVEncoder;
24-
import org.httprpc.kilo.io.TemplateEncoder;
2526
import org.httprpc.kilo.sql.QueryBuilder;
27+
import org.httprpc.kilo.util.concurrent.Pipe;
2628

2729
import javax.naming.Context;
2830
import javax.naming.InitialContext;
@@ -32,14 +34,24 @@
3234
import java.sql.Connection;
3335
import java.sql.SQLException;
3436
import java.util.ResourceBundle;
37+
import java.util.concurrent.ExecutorService;
38+
import java.util.concurrent.Executors;
3539

3640
import static org.httprpc.kilo.util.Collections.*;
41+
import static org.httprpc.kilo.util.Iterables.*;
3742
import static org.httprpc.kilo.util.Optionals.*;
3843

3944
@WebServlet("/pets/stream")
4045
public class PetServlet extends PageServlet {
46+
private interface Parameters {
47+
@Required
48+
String getOwner();
49+
}
50+
4151
private DataSource dataSource = null;
4252

53+
private static ExecutorService executorService = Executors.newCachedThreadPool();
54+
4355
@Override
4456
public void init() throws ServletException {
4557
super.init();
@@ -60,50 +72,47 @@ protected Connection openConnection() throws SQLException {
6072
}
6173

6274
@Override
63-
protected void process(HttpServletRequest request, HttpServletResponse response) throws IOException {
64-
var accept = map(request.getHeader("Accept"), String::toLowerCase);
65-
66-
if (accept == null) {
67-
return;
68-
}
75+
protected Object execute() {
76+
var parameters = getParameters(Parameters.class);
6977

70-
var owner = request.getParameter("owner");
78+
var owner = parameters.getOwner();
7179

72-
if (owner == null) {
73-
return;
74-
}
80+
var pipe = new Pipe<Pet>();
7581

76-
var queryBuilder = QueryBuilder.select(Pet.class)
77-
.filterByForeignKey(Owner.class, "owner")
78-
.ordered(true);
82+
var connection = getConnection();
7983

80-
try (var statement = queryBuilder.prepare(getConnection());
81-
var results = queryBuilder.executeQuery(statement, mapOf(
82-
entry("owner", owner)
83-
))) {
84-
if (accept.startsWith(WebService.TEXT_HTML)) {
85-
response.setContentType(WebService.TEXT_HTML);
84+
executorService.submit(() -> {
85+
var queryBuilder = QueryBuilder.select(Pet.class)
86+
.filterByForeignKey(Owner.class, "owner")
87+
.ordered(true);
8688

87-
var type = getClass();
89+
try (var statement = queryBuilder.prepare(connection);
90+
var results = queryBuilder.executeQuery(statement, mapOf(
91+
entry("owner", owner)
92+
))) {
93+
pipe.submit(mapAll(results, BeanAdapter.toType(Pet.class)));
94+
} catch (SQLException exception) {
95+
throw new RuntimeException(exception);
96+
}
97+
});
8898

89-
var templateEncoder = new TemplateEncoder(type, String.format("%s.html", type.getSimpleName()));
99+
return pipe;
100+
}
90101

91-
templateEncoder.setResourceBundle(ResourceBundle.getBundle(type.getName(), request.getLocale()));
102+
@Override
103+
protected void encodeResult(HttpServletRequest request, HttpServletResponse response, Object result) throws IOException {
104+
var accept = map(request.getHeader("Accept"), String::toLowerCase);
92105

93-
templateEncoder.write(results, response.getWriter());
94-
} else if (accept.startsWith(WebService.TEXT_CSV)) {
95-
response.setContentType(WebService.TEXT_CSV);
106+
if (accept != null && accept.equals(WebService.TEXT_CSV)) {
107+
response.setContentType(WebService.TEXT_CSV);
96108

97-
var csvEncoder = new CSVEncoder(listOf("name", "species", "sex", "birth", "death"));
109+
var csvEncoder = new CSVEncoder(listOf("name", "species", "sex", "birth", "death"));
98110

99-
csvEncoder.setResourceBundle(ResourceBundle.getBundle(getClass().getName(), request.getLocale()));
111+
csvEncoder.setResourceBundle(ResourceBundle.getBundle(getClass().getName(), request.getLocale()));
100112

101-
csvEncoder.write(results, response.getWriter());
102-
} else {
103-
response.setStatus(HttpServletResponse.SC_NOT_ACCEPTABLE);
104-
}
105-
} catch (SQLException exception) {
106-
throw new RuntimeException(exception);
113+
csvEncoder.write((Iterable<?>)result, response.getWriter());
114+
} else {
115+
super.encodeResult(request, response, result);
107116
}
108117
}
109118
}

0 commit comments

Comments
 (0)