package org.rr.commons.mufs; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Date; import org.apache.commons.io.IOUtils; import org.rr.commons.utils.ReflectionUtils; class InputStreamResourceHandler extends AResourceHandler { private ResourceHandlerInputStream inputStream; InputStreamResourceHandler(InputStream inputStream) { if(inputStream instanceof BufferedInputStream) { try { InputStream in = (InputStream) ReflectionUtils.getFieldValue(inputStream, "in", false); this.inputStream = new ResourceHandlerInputStream(this, in); } catch (Exception e) { this.inputStream = new ResourceHandlerInputStream(this, inputStream); } } else { this.inputStream = new ResourceHandlerInputStream(this, inputStream); } } @Override public IResourceHandler createInstance(String resource) { throw new UnsupportedOperationException(); } /** * Delete is not supported at {@link InputStream}. * @return <code>false</code> in any case. */ @Override public void delete() { } @Override public boolean moveToTrash() throws IOException { return ResourceHandlerUtils.moveToTrash(this); } @Override public void dispose() { IOUtils.closeQuietly(this.inputStream); this.inputStream = null; } @Override public boolean exists() { return this.inputStream != null; } @Override public synchronized byte[] getContent() throws IOException { byte[] byteArray = IOUtils.toByteArray(this.inputStream); this.inputStream.reset(); return byteArray; } @Override public ResourceHandlerInputStream getContentInputStream() throws IOException { return this.inputStream; } @Override public OutputStream getContentOutputStream(boolean append) throws IOException { return null; } @Override public String getName() { return "InputStreamResource"; } @Override public IResourceHandler getParentResource() { return null; } @Override public String getResourceString() { return "InputStreamResource://"; } @Override public boolean isDirectoryResource() { return false; } @Override public boolean isValidResource(String resource) { return false; } @Override public IResourceHandler[] listDirectoryResources(ResourceNameFilter filter) { return new IResourceHandler[0]; } @Override public IResourceHandler[] listFileResources() { return new IResourceHandler[0]; } @Override public IResourceHandler[] listResources(ResourceNameFilter filter) { return new IResourceHandler[0]; } @Override public boolean mkdirs() { return false; } @Override public void writeStringContent(String content, String codepage) throws IOException { } /** * Size could not be determined on {@link InputStream}s */ @Override public long size() { return -1; } /** * There is no modification date available at the {@link InputStreamResourceHandler}. * @return always <code>null</code>. */ @Override public Date getModifiedAt() { return null; } @Override public IResourceHandler addPathStatement(String statement) throws ResourceHandlerException { return this; } /** * @return <code>false</code> in any case because it could not be surly determined if the * {@link InputStream} handled by this {@link InputStreamResourceHandler} instance * is a local one or not. */ public boolean isRemoteResource() { return false; } /** * The {@link InputStreamResourceHandler} could not created by the user. * The {@link InputStreamResourceHandler} is only be used internally to provide * some data which are for example be fetched from the database. */ @Override public RESOURCE_HANDLER_USER_TYPES getType() { return null; } }