/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.resource;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.springframework.util.FileCopyUtils;
import com.enonic.cms.framework.io.UnicodeInputStream;
import com.enonic.cms.framework.xml.XMLDocument;
import com.enonic.cms.framework.xml.XMLDocumentFactory;
final class ResourceFileImpl
extends ResourceBaseImpl
implements ResourceFile
{
public ResourceFileImpl( FileResourceService service, FileResourceName name )
{
super( service, name );
}
public String getMimeType()
{
return ensureResource().getMimeType();
}
public long getSize()
{
return ensureResource().getSize();
}
public XMLDocument getDataAsXml()
{
return doGetDataAsXml( true );
}
public String getDataAsString()
{
FileResourceData data = this.service.getResourceData( this.name );
return data != null ? data.getAsString() : null;
}
public byte[] getDataAsByteArray()
{
FileResourceData data = this.service.getResourceData( this.name );
return data != null ? data.getAsBytes() : null;
}
public InputStream getDataAsInputStream()
{
byte[] data = getDataAsByteArray();
return data != null ? new ByteArrayInputStream( data ) : null;
}
private ByteArrayOutputStream getAsByteArrayOutputStream( boolean skipBOM )
{
try
{
InputStream in = doGetDataAsInputStream( skipBOM );
if ( in == null )
{
return null;
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
FileCopyUtils.copy( in, out );
return out;
}
catch ( IOException e )
{
return null;
}
}
private XMLDocument doGetDataAsXml( boolean skipBOM )
{
byte[] data = doGetDataAsByteArray( skipBOM );
if ( data == null )
{
return null;
}
return XMLDocumentFactory.create( data, "UTF-8" );
}
private byte[] doGetDataAsByteArray( boolean skipBOM )
{
ByteArrayOutputStream out = getAsByteArrayOutputStream( skipBOM );
if ( out == null )
{
return null;
}
return out.toByteArray();
}
private InputStream doGetDataAsInputStream( boolean skipBOM )
{
try
{
return new UnicodeInputStream( new ByteArrayInputStream( getDataAsByteArray() ), skipBOM );
}
catch ( Exception e )
{
throw new IllegalArgumentException( e );
}
}
}