blob: a36c4ab752b8a2c2abad4d2b4496fb79ebb2e73b [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.apache.stanbol.enhancer.servicesapi.impl;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.apache.stanbol.enhancer.servicesapi.Blob;
import org.apache.stanbol.enhancer.servicesapi.ContentSource;
/**
* Allows to use a byte array as {@link ContentSource}. If the content is
* already stored in an byte array this implementation is preferable over the
* {@link StreamSource} as it does not require to copy the content to yet an
* other byte array when creating an in-memory content item when using the
* {@link #getData()} method.
*
* @author Rupert Westenthaler
*
*/
public class ByteArraySource implements ContentSource {
private static final Map<String,List<String>> NO_HEADERS = Collections.emptyMap();
private byte[] content;
private String mt;
private String name;
private Map<String,List<String>> headers;
/**
* Constructs a {@link ContentSource} for the passed byte array. The mime type will
* be set to "<code>application/octet-stream</code>"
* @param content the array containing the content
*/
public ByteArraySource(byte[] content) {
this(content,null,null,null);
}
/**
* Constructs a {@link ContentSource} for the passed byte array and mime type.
* When parsing text the charset should be set as mime type parameter (e.g.
* "<code>text/plain; charset=UTF-8</code>". UTF-8 is assumed as default if
* missing.
* @param content the array containing the content
* @param mt the media type or <code>null</code> if unknown
*/
public ByteArraySource(byte[] content,String mt) {
this(content,mt,null,null);
}
/**
* Constructs a {@link ContentSource} for the passed byte array and mime type.
* When parsing text the charset should be set as mime type parameter (e.g.
* "<code>text/plain; charset=UTF-8</code>". UTF-8 is assumed as default if
* missing. <p>
* This allows in addition to pass the file name or the original file.<br>
* NOTE however this information is currently not used
* as the {@link Blob} interface does not support those information
* @param content the array containing the content
* @param mt the media type or <code>null</code> if unknown
* @param fileName the file name or <code>null</code> if unknown
*/
public ByteArraySource(byte[] content,String mt, String fileName) {
this(content,mt,fileName,null);
}
/**
* Constructs a {@link ContentSource} for the passed byte array and mime type.
* When parsing text the charset should be set as mime type parameter (e.g.
* "<code>text/plain; charset=UTF-8</code>". UTF-8 is assumed as default if
* missing. <p>
* This allows in addition to pass the file name and a map with
* additional header fields (e.g. HTTP headers). <br>
* NOTE however this information is currently not used
* as the {@link Blob} interface does not support those information
* @param content the array containing the content
* @param mt the media type or <code>null</code> if unknown
* @param fileName the file name or <code>null</code> if unknown
* @param headers additional headers or <code>null</code>/empty map if none.
*/
public ByteArraySource(byte[] content,String mt, String fileName,Map<String,List<String>> headers) {
if(content == null){
throw new IllegalArgumentException("The parsed byte array MUST NOT be NULL!");
}
this.content = content;
this.mt = mt == null ? "application/octet-stream" : mt;
this.name = fileName;
this.headers = headers == null ? NO_HEADERS : headers;
}
@Override
public InputStream getStream() {
return new ByteArrayInputStream(content);
}
@Override
public byte[] getData() throws IOException {
return content;
}
@Override
public String getMediaType() {
return mt;
}
@Override
public String getFileName() {
return name;
}
@Override
public Map<String,List<String>> getHeaders() {
return headers;
}
}