/*
* Copyright 2010 Outerthought bvba
*
* 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.lilyproject.tools.import_.json;
import java.io.IOException;
import net.iharder.Base64;
import org.codehaus.jackson.node.JsonNodeFactory;
import org.codehaus.jackson.node.ObjectNode;
import org.lilyproject.repository.api.Blob;
import org.lilyproject.util.json.JsonUtil;
public class BlobConverter {
private BlobConverter() {
}
public static ObjectNode toJson(Blob blob) {
ObjectNode jsonBlob = JsonNodeFactory.instance.objectNode();
jsonBlob.put("value", valueToString(blob.getValue()));
jsonBlob.put("mediaType", blob.getMediaType());
if (blob.getName() != null) {
jsonBlob.put("name", blob.getName());
}
jsonBlob.put("size", blob.getSize());
return jsonBlob;
}
public static Blob fromJson(ObjectNode node) {
String mediaType = JsonUtil.getString(node, "mediaType", null);
long size = JsonUtil.getLong(node, "size");
String name = JsonUtil.getString(node, "name", null);
byte[] value = valueFromString(JsonUtil.getString(node, "value"));
Blob blob = new Blob(mediaType, size, name);
blob.setValue(value);
return blob;
}
public static String valueToString(byte[] value) {
// URL safe encoding because the value (= the blob access key) might be embedded in URIs
try {
return Base64.encodeBytes(value, Base64.URL_SAFE);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static byte[] valueFromString(String value) {
try {
return Base64.decode(value, Base64.URL_SAFE);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}