/
UnmodifiableExternalMessageBuilder.java
138 lines (119 loc) · 4.62 KB
/
UnmodifiableExternalMessageBuilder.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*
* Copyright (c) 2017-2018 Bosch Software Innovations GmbH.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/org/documents/epl-2.0/index.php
*
* SPDX-License-Identifier: EPL-2.0
*/
package org.eclipse.ditto.services.models.connectivity;
import java.nio.ByteBuffer;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import javax.annotation.Nullable;
import org.eclipse.ditto.model.base.auth.AuthorizationContext;
import org.eclipse.ditto.model.base.common.ConditionChecker;
import org.eclipse.ditto.services.models.connectivity.placeholder.EnforcementFilter;
/**
* Mutable builder for building new instances of ExternalMessage.
*/
final class UnmodifiableExternalMessageBuilder implements ExternalMessageBuilder {
private Map<String, String> headers;
private boolean response = false;
private boolean error = false;
private ExternalMessage.PayloadType payloadType = ExternalMessage.PayloadType.UNKNOWN;
@Nullable private String textPayload;
@Nullable private ByteBuffer bytePayload;
@Nullable private AuthorizationContext authorizationContext;
@Nullable private EnforcementFilter<String> enforcementFilter;
/**
* Constructs a new MutableExternalMessageBuilder initialized with the passed {@code message}.
*
* @param message the ExternalMessage to use for initialization.
*/
UnmodifiableExternalMessageBuilder(final ExternalMessage message) {
this.headers = new HashMap<>(message.getHeaders());
this.bytePayload = message.getBytePayload().orElse(null);
this.textPayload = message.getTextPayload().orElse(null);
this.payloadType = message.getPayloadType();
this.response = message.isResponse();
this.error = message.isError();
this.authorizationContext = message.getAuthorizationContext().orElse(null);
this.enforcementFilter = message.getEnforcementFilter().orElse(null);
}
/**
* Constructs a new MutableExternalMessageBuilder initialized with the passed {@code headers}.
*
* @param headers the headers to use for initialization.
*/
UnmodifiableExternalMessageBuilder(final Map<String, String> headers) {
this.headers = new HashMap<>(headers);
}
@Override
public ExternalMessageBuilder withAdditionalHeaders(final String key, final String value) {
headers.put(key, value);
return this;
}
@Override
public ExternalMessageBuilder withAdditionalHeaders(final Map<String, String> additionalHeaders) {
headers.putAll(additionalHeaders);
return this;
}
@Override
public ExternalMessageBuilder withHeaders(final Map<String, String> headers) {
ConditionChecker.checkNotNull(headers);
this.headers = new HashMap<>(headers);
return this;
}
@Override
public ExternalMessageBuilder withText(@Nullable final String text) {
this.payloadType = ExternalMessage.PayloadType.TEXT;
this.textPayload = text;
this.bytePayload = null;
return this;
}
@Override
public ExternalMessageBuilder withBytes(@Nullable final byte[] bytes) {
if (Objects.isNull(bytes)) {
return withBytes((ByteBuffer) null);
} else {
return withBytes(ByteBuffer.wrap(bytes));
}
}
@Override
public ExternalMessageBuilder withBytes(@Nullable final ByteBuffer bytes) {
this.payloadType = ExternalMessage.PayloadType.BYTES;
this.bytePayload = bytes;
this.textPayload = null;
return this;
}
@Override
public ExternalMessageBuilder withAuthorizationContext(final AuthorizationContext authorizationContext) {
this.authorizationContext = authorizationContext;
return this;
}
@Override
public <F extends EnforcementFilter<String>> ExternalMessageBuilder withEnforcement(
@Nullable final F enforcementFilter) {
this.enforcementFilter = enforcementFilter;
return this;
}
@Override
public ExternalMessageBuilder asResponse(final boolean response) {
this.response = response;
return this;
}
@Override
public ExternalMessageBuilder asError(final boolean error) {
this.error = error;
return this;
}
@Override
public ExternalMessage build() {
return new UnmodifiableExternalMessage(headers, response, error, payloadType, textPayload, bytePayload,
authorizationContext, enforcementFilter);
}
}