package net.sourceforge.javautil.common.io.impl;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import net.sourceforge.javautil.common.io.IVirtualArtifact;
import net.sourceforge.javautil.common.io.VirtualArtifactAbstract;
import net.sourceforge.javautil.common.io.VirtualArtifactNotFoundException;
import net.sourceforge.javautil.common.io.VirtualArtifactWrapped;
import net.sourceforge.javautil.common.io.IVirtualDirectory;
import net.sourceforge.javautil.common.io.IVirtualFile;
import net.sourceforge.javautil.common.io.VirtualFileAbstract;
import net.sourceforge.javautil.common.io.IVirtualPath;
/**
* A file that is linked into a {@link DirectoryRoot}.
*
* @author elponderador
* @author $Author: ponderator $
* @version $Id: DirectoryFileLinked.java 2297 2010-06-16 00:13:14Z ponderator $
*/
public class DirectoryFileLinked extends VirtualFileAbstract implements IVirtualFile, VirtualArtifactWrapped {
protected final IVirtualFile delegate;
public DirectoryFileLinked(Directory owner, IVirtualFile delegate) { this(owner, delegate, delegate.getName()); }
public DirectoryFileLinked(Directory owner, IVirtualFile delegate, String name) {
super(name, owner);
this.delegate = delegate;
}
/**
* @return The file this is linking
*/
public IVirtualFile getDelegate() { return delegate; }
public <T> IVirtualFile unwrap(Class<T> type) {
IVirtualFile artifact = this;
while (artifact instanceof VirtualArtifactWrapped && !(type.isAssignableFrom(artifact.getClass()))) {
artifact = (IVirtualFile) ((VirtualArtifactWrapped)artifact).getDelegate();
}
return artifact;
}
public boolean remove() { ((Directory)owner).artifacts.remove(name); return true; }
public void rename(String newName) {
((Directory)owner).artifacts.remove(name);
((Directory)owner).artifacts.put(newName, this);
this.name = newName;
}
public long getSize() { return delegate.getSize(); }
public long getLastModified() { return delegate.getLastModified(); }
public boolean isExists() { return delegate.isExists(); }
public boolean isReadOnly() { return delegate.isReadOnly(); }
protected InputStream getRawInputStream() throws IOException { return delegate.getInputStream(); }
protected OutputStream getRawOutputStream() throws IOException { return delegate.getOutputStream(); }
public URL getURL() { return this.delegate.getURL(); }
}