1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.juneau.utest.utils;
19
20 import static org.apache.juneau.common.utils.Utils.*;
21 import static org.apache.juneau.internal.ArrayUtils.toList;
22
23 import java.io.*;
24 import java.util.*;
25 import java.util.function.*;
26
27 import org.apache.juneau.common.utils.*;
28 import org.apache.juneau.httppart.*;
29 import org.apache.juneau.internal.*;
30 import org.apache.juneau.serializer.*;
31
32
33
34
35 public class FakeWriterSerializer extends WriterSerializer implements HttpPartSerializer {
36
37
38
39
40
41 public static final X X = new X(create());
42
43 public static class X extends FakeWriterSerializer {
44 public X(Builder builder) {
45 super(builder
46 .function((s,o) -> out(o))
47 .partFunction((s,t,o) -> out(o))
48 );
49 }
50
51 private static String out(Object value) {
52 if (value instanceof List<?> x)
53 value = Utils.join(x, '|');
54 if (value instanceof Collection<?> x)
55 value = Utils.join(x, '|');
56 if (isArray(value))
57 value = Utils.join(toList(value, Object.class), "|");
58 return "x" + value + "x";
59 }
60 }
61
62
63
64
65
66 public static Builder create() {
67 return new Builder();
68 }
69
70
71
72
73
74 public static class Builder extends WriterSerializer.Builder {
75 Function2<WriterSerializerSession,Object,String> function = (s,o) -> s(o);
76 Function3<HttpPartType,HttpPartSchema,Object,String> partFunction = (t,s,o) -> s(o);
77 Function<WriterSerializerSession,Map<String,String>> headers = s -> Collections.emptyMap();
78
79 public Builder function(Function2<WriterSerializerSession,Object,String> value) {
80 function = value;
81 return this;
82 }
83
84 public Builder partFunction(Function3<HttpPartType,HttpPartSchema,Object,String> value) {
85 partFunction = value;
86 return this;
87 }
88
89 public Builder headers(Function<WriterSerializerSession,Map<String,String>> value) {
90 headers = value;
91 return this;
92 }
93
94 @Override
95 public Builder produces(String value) {
96 super.produces(value);
97 return this;
98 }
99
100 @Override
101 public Builder accept(String value) {
102 super.accept(value);
103 return this;
104 }
105
106 @Override
107 public Builder copy() {
108 return this;
109 }
110 }
111
112 private final Function2<WriterSerializerSession,Object,String> function;
113 private final Function3<HttpPartType,HttpPartSchema,Object,String> partFunction;
114 private final Function<WriterSerializerSession,Map<String,String>> headers;
115
116 public FakeWriterSerializer(Builder builder) {
117 super(builder);
118 this.function = builder.function;
119 this.partFunction = builder.partFunction;
120 this.headers = builder.headers;
121 }
122
123 @Override
124 protected void doSerialize(SerializerSession session, SerializerPipe out, Object o) throws IOException, SerializeException {
125 out.getWriter().write(function.apply((WriterSerializerSession)session,o));
126 }
127
128 @Override
129 public Map<String,String> getResponseHeaders(SerializerSession session) {
130 return headers.apply((WriterSerializerSession)session);
131 }
132
133 @Override
134 public HttpPartSerializerSession getPartSession() {
135 return partFunction::apply;
136 }
137 }