mirror of
https://github.com/vanitasvitae/Smack.git
synced 2024-09-27 18:19:33 +02:00
6d39a4e3ac
BoBExtension extending XHTMLExtension was poorly designed and only worked for a single paragraphy. Fixes SMACK-770.
125 lines
3.1 KiB
Java
125 lines
3.1 KiB
Java
/**
|
|
*
|
|
* Copyright 2016-2017 Fernando Ramirez, 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.smackx.bob;
|
|
|
|
import org.jivesoftware.smack.util.StringUtils;
|
|
import org.jivesoftware.smack.util.stringencoder.Base64;
|
|
|
|
/**
|
|
* Bits of Binary data class.
|
|
*
|
|
* @author Fernando Ramirez
|
|
* @author Florian Schmaus
|
|
* @see <a href="http://xmpp.org/extensions/xep-0231.html">XEP-0231: Bits of
|
|
* Binary</a>
|
|
*/
|
|
public class BoBData {
|
|
|
|
private final Integer maxAge;
|
|
private final String type;
|
|
|
|
private byte[] contentBinary;
|
|
private String contentString;
|
|
|
|
private BoBData(String type, Integer maxAge) {
|
|
this.type = type;
|
|
this.maxAge = maxAge;
|
|
}
|
|
|
|
public BoBData(String type, byte[] content) {
|
|
this(type, content, null);
|
|
}
|
|
|
|
/**
|
|
* BoB data constructor.
|
|
*
|
|
* @param type TODO javadoc me please
|
|
* @param content TODO javadoc me please
|
|
* @param maxAge TODO javadoc me please
|
|
*/
|
|
public BoBData(String type, byte[] content, Integer maxAge) {
|
|
this(type, maxAge);
|
|
this.contentBinary = content;
|
|
}
|
|
|
|
public BoBData(String type, String content) {
|
|
this(type, content, null);
|
|
}
|
|
|
|
public BoBData(String type, String content, Integer maxAge) {
|
|
this(type, maxAge);
|
|
this.contentString = content;
|
|
}
|
|
|
|
/**
|
|
* Get the max age.
|
|
*
|
|
* @return the max age
|
|
*/
|
|
public Integer getMaxAge() {
|
|
return maxAge;
|
|
}
|
|
|
|
/**
|
|
* Get the type.
|
|
*
|
|
* @return the type
|
|
*/
|
|
public String getType() {
|
|
return type;
|
|
}
|
|
|
|
private void setContentBinaryIfRequired() {
|
|
if (contentBinary == null) {
|
|
assert StringUtils.isNotEmpty(contentString);
|
|
contentBinary = Base64.decode(contentString);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get the content.
|
|
*
|
|
* @return the content
|
|
*/
|
|
public byte[] getContent() {
|
|
setContentBinaryIfRequired();
|
|
return contentBinary.clone();
|
|
}
|
|
|
|
/**
|
|
* Get the content in a Base64 encoded String.
|
|
*
|
|
* @return the content in a Base64 encoded String
|
|
*/
|
|
public String getContentBase64Encoded() {
|
|
if (contentString == null) {
|
|
contentString = Base64.encodeToString(getContent());
|
|
}
|
|
return contentString;
|
|
}
|
|
|
|
/**
|
|
* Check if the data is of reasonable size. XEP-0231 suggest that the size should not be more than 8 KiB.
|
|
*
|
|
* @return true if the data if of reasonable size.
|
|
*/
|
|
public boolean isOfReasonableSize() {
|
|
setContentBinaryIfRequired();
|
|
return contentBinary.length <= 8 * 1024;
|
|
}
|
|
}
|