package org.rr.commons.mufs;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Date;
/**
* This is an {@link IResourceHandler} implementation which just provide some
* childs, specified with the constructor. The {@link VirtualStaticResourceHandler}
* is always a directory, which did not exists, only providing some childs.
*
*/
public class VirtualStaticResourceHandler extends AResourceHandler{
private String name;
private IResourceHandler[] children;
private VirtualStaticResourceDataLoader data;
VirtualStaticResourceHandler(String name, IResourceHandler[] children) {
this.name = name;
this.children = children;
}
VirtualStaticResourceHandler(String name, VirtualStaticResourceDataLoader data) {
this.name = name;
this.data = data;
}
@Override
public IResourceHandler addPathStatement(String statement)
throws ResourceHandlerException {
throw new UnsupportedOperationException("Not Supported");
}
@Override
public IResourceHandler createInstance(String resource) throws IOException {
throw new UnsupportedOperationException("Not Supported");
}
@Override
public void delete() throws IOException {
}
@Override
public boolean moveToTrash() throws IOException {
return ResourceHandlerUtils.moveToTrash(this);
}
@Override
public void dispose() {
}
@Override
public boolean exists() {
return true;
}
@Override
public ResourceHandlerInputStream getContentInputStream() throws IOException {
this.cleanHeapIfNeeded(this.data.length());
ResourceHandlerInputStream in;
if(this.data != null) {
in = new ResourceHandlerInputStream(this, this.data.getContentInputStream(), (int) this.data.length());
} else {
in = new ResourceHandlerInputStream(this, new ByteArrayInputStream(new byte[0]), 0);
}
return in;
}
@Override
public OutputStream getContentOutputStream(boolean append)
throws IOException {
throw new UnsupportedOperationException("Not Supported");
}
@Override
public Date getModifiedAt() {
throw new UnsupportedOperationException("Not Supported");
}
@Override
public String getName() {
return this.name;
}
@Override
public IResourceHandler getParentResource() {
return null;
}
@Override
public String getResourceString() {
return this.name;
}
@Override
public RESOURCE_HANDLER_USER_TYPES getType() {
return RESOURCE_HANDLER_USER_TYPES.STATIC;
}
@Override
public boolean isDirectoryResource() {
return data==null;
}
@Override
public boolean isRemoteResource() {
return false;
}
@Override
public boolean isValidResource(String resource) {
return false;
}
@Override
public IResourceHandler[] listDirectoryResources(ResourceNameFilter filter) throws IOException {
if(this.children==null) {
return new IResourceHandler[0];
}
ArrayList<IResourceHandler> directoryChilds = new ArrayList<>();
for (int i = 0; i < children.length; i++) {
if(children[i].isDirectoryResource()) {
if(filter != null && filter.accept(children[i])) {
directoryChilds.add(children[i]);
} else if(filter == null) {
directoryChilds.add(children[i]);
}
}
}
return directoryChilds.toArray(new IResourceHandler[directoryChilds.size()]);
}
@Override
public IResourceHandler[] listFileResources() throws IOException {
if(this.children==null) {
return new IResourceHandler[0];
}
ArrayList<IResourceHandler> directoryChilds = new ArrayList<>();
for (int i = 0; i < children.length; i++) {
if(children[i].isFileResource()) {
directoryChilds.add(children[i]);
}
}
return directoryChilds.toArray(new IResourceHandler[directoryChilds.size()]);
}
@Override
public boolean mkdirs() throws IOException {
return false;
}
@Override
public long size() {
return 0;
}
@Override
public void writeStringContent(String content, String codepage)
throws IOException {
}
}