/**
* Copyright (c) Codice Foundation
* <p/>
* This is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser
* General Public License as published by the Free Software Foundation, either version 3 of the
* License, or any later version.
* <p/>
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
* even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details. A copy of the GNU Lesser General Public License
* is distributed along with this program and can be found at
* <http://www.gnu.org/licenses/lgpl.html>.
*/
package ddf.content.provider.filesystem;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import javax.activation.MimeType;
import javax.activation.MimeTypeParseException;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.slf4j.LoggerFactory;
import org.slf4j.ext.XLogger;
import ddf.content.data.ContentItem;
public class ContentFile implements ContentItem {
private static final XLogger LOGGER = new XLogger(LoggerFactory.getLogger(ContentFile.class));
private File file;
private String mimeTypeRawData;
private MimeType mimeType;
private String id;
private String uri;
private String filename;
protected ContentFile(File file, String id, String mimeTypeRawData) {
this(file, id, mimeTypeRawData, null);
}
protected ContentFile(File file, String id, String mimeTypeRawData, String filename) {
this.file = file;
this.mimeTypeRawData = mimeTypeRawData;
this.id = id;
this.mimeType = null;
this.filename = filename; // DDF-1856
if (filename == null && file != null) {
LOGGER.debug("Input filename is NULL, setting to file.getName()");
this.filename = file.getName();
}
// Determine mime type only if incoming raw data is non-null.
// The mime type raw data is null for content items to be deleted since
// deletion operation only needs the id.
if (mimeTypeRawData != null) {
try {
this.mimeType = new MimeType(mimeTypeRawData);
} catch (MimeTypeParseException e) {
LOGGER.debug("Unable to create MimeType from raw data " + mimeTypeRawData);
this.mimeType = null;
}
}
}
@Override
public File getFile() throws IOException {
return file;
}
@Override
public String getId() {
return id;
}
@Override
public InputStream getInputStream() throws IOException {
try {
return new FileInputStream(file);
} catch (FileNotFoundException e) {
LOGGER.error("Cannot get content as stream: ", e);
throw new IOException(e);
}
}
@Override
public MimeType getMimeType() {
return mimeType;
}
@Override
public long getSize() throws IOException {
if (file != null) {
return file.length();
} else {
throw new IOException("File is null - cannot get size");
}
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
@Override
public String getUri() {
return uri;
}
@Override
public void setUri(String uri) {
this.uri = uri;
}
@Override
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
@Override
public String getMimeTypeRawData() {
return mimeTypeRawData;
}
}