mirror of
https://github.com/vanitasvitae/Smack.git
synced 2024-09-27 18:19:33 +02:00
14c351397d
Fixes SMACK-852.
166 lines
4.9 KiB
Java
166 lines
4.9 KiB
Java
/**
|
|
*
|
|
* Copyright 2019-2020 Florian Schmaus
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
package org.jivesoftware.smack.packet;
|
|
|
|
import org.jivesoftware.smack.packet.Message.Body;
|
|
import org.jivesoftware.smack.packet.Message.Subject;
|
|
import org.jivesoftware.smack.packet.id.StanzaIdSource;
|
|
import org.jivesoftware.smack.util.StringUtils;
|
|
import org.jivesoftware.smack.util.ToStringUtil;
|
|
|
|
public final class MessageBuilder extends MessageOrPresenceBuilder<Message, MessageBuilder> implements MessageView {
|
|
static final MessageBuilder EMPTY = new MessageBuilder(() -> {
|
|
return null;
|
|
});
|
|
|
|
Message.Type type;
|
|
|
|
MessageBuilder(Message message, String stanzaId) {
|
|
super(message, stanzaId);
|
|
copyFromMessage(message);
|
|
}
|
|
|
|
MessageBuilder(Message message, StanzaIdSource stanzaIdSource) {
|
|
super(message, stanzaIdSource);
|
|
copyFromMessage(message);
|
|
}
|
|
|
|
MessageBuilder(StanzaIdSource stanzaIdSource) {
|
|
super(stanzaIdSource);
|
|
}
|
|
|
|
MessageBuilder(String stanzaId) {
|
|
super(stanzaId);
|
|
}
|
|
|
|
private void copyFromMessage(Message message) {
|
|
type = message.getType();
|
|
}
|
|
|
|
@Override
|
|
protected void addStanzaSpecificAttributes(ToStringUtil.Builder builder) {
|
|
builder.addValue("type", type)
|
|
;
|
|
}
|
|
|
|
public MessageBuilder ofType(Message.Type type) {
|
|
this.type = type;
|
|
return getThis();
|
|
}
|
|
|
|
public MessageBuilder setThread(String thread) {
|
|
return setThread(thread, null);
|
|
}
|
|
|
|
public MessageBuilder setThread(String thread, String parent) {
|
|
addExtension(new Message.Thread(thread, parent));
|
|
return getThis();
|
|
}
|
|
|
|
/**
|
|
* Sets the subject of the message. The subject is a short description of
|
|
* message contents.
|
|
*
|
|
* @param subject the subject of the message.
|
|
* @return a reference to this builder.
|
|
*/
|
|
public MessageBuilder setSubject(String subject) {
|
|
return addSubject(null, subject);
|
|
}
|
|
|
|
/**
|
|
* Adds a subject with a corresponding language.
|
|
*
|
|
* @param language the language of the subject being added.
|
|
* @param subject the subject being added to the message.
|
|
* @return a reference to this builder.
|
|
* @throws NullPointerException if the subject is null.
|
|
*/
|
|
public MessageBuilder addSubject(String language, String subject) {
|
|
language = StringUtils.requireNullOrNotEmpty(language, "language must be null or not empty");
|
|
|
|
for (Subject currentSubject : getExtensions(Subject.class)) {
|
|
if (StringUtils.nullSafeCharSequenceEquals(language, currentSubject.getLanguage())) {
|
|
throw new IllegalArgumentException("Subject with the language " + language + " already exists");
|
|
}
|
|
}
|
|
|
|
Subject messageSubject = new Subject(language, subject);
|
|
addExtension(messageSubject);
|
|
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Sets the body of the message.
|
|
*
|
|
* @param body the body of the message.
|
|
* @return a reference to this builder.
|
|
* @see #setBody(String)
|
|
*/
|
|
public MessageBuilder setBody(CharSequence body) {
|
|
return setBody(body.toString());
|
|
}
|
|
|
|
/**
|
|
* Sets the body of the message. The body is the main message contents.
|
|
*
|
|
* @param body the body of the message.
|
|
* @return a reference to this builder.
|
|
*/
|
|
public MessageBuilder setBody(String body) {
|
|
return addBody(null, body);
|
|
}
|
|
|
|
/**
|
|
* Adds a body with a corresponding language.
|
|
*
|
|
* @param language the language of the body being added.
|
|
* @param body the body being added to the message.
|
|
* @return a reference to this builder.
|
|
*/
|
|
public MessageBuilder addBody(String language, String body) {
|
|
language = StringUtils.requireNullOrNotEmpty(language, "language must be null or not empty");
|
|
|
|
for (Body currentBody : getExtensions(Body.class)) {
|
|
if (StringUtils.nullSafeCharSequenceEquals(language, currentBody.getLanguage())) {
|
|
throw new IllegalArgumentException("Bodyt with the language " + language + " already exists");
|
|
}
|
|
}
|
|
|
|
Body messageBody = new Body(language, body);
|
|
addExtension(messageBody);
|
|
|
|
return this;
|
|
}
|
|
|
|
@Override
|
|
public MessageBuilder getThis() {
|
|
return this;
|
|
}
|
|
|
|
@Override
|
|
public Message build() {
|
|
return new Message(this);
|
|
}
|
|
|
|
@Override
|
|
public Message.Type getType() {
|
|
return type;
|
|
}
|
|
}
|