Package net.sourceforge.javautil.common.io.impl

Source Code of net.sourceforge.javautil.common.io.impl.LinkedDirectory

package net.sourceforge.javautil.common.io.impl;

import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

import net.sourceforge.javautil.common.io.IVirtualArtifact;
import net.sourceforge.javautil.common.io.IVirtualDirectory;
import net.sourceforge.javautil.common.io.VirtualDirectoryAbstract;
import net.sourceforge.javautil.common.io.VirtualDirectoryWrapped;
import net.sourceforge.javautil.common.io.IVirtualFile;
import net.sourceforge.javautil.common.io.IVirtualPath;

/**
* A linked directory allows any {@link IVirtualDirectory} to act as a sub directory
* of another {@link IVirtualDirectory}.
*
* @author elponderador
* @author $Author: ponderator $
* @version $Id: LinkedDirectory.java 2297 2010-06-16 00:13:14Z ponderator $
*/
public class LinkedDirectory
    extends
      VirtualDirectoryWrapped
    implements
      IVirtualDirectory, ILinkedArtifact<IVirtualDirectory> {

  protected final IVirtualDirectory owner;
  protected final String name;
 
  public LinkedDirectory(IVirtualDirectory owner, IVirtualDirectory delegate) { this(owner, delegate, delegate.getName()); }
  public LinkedDirectory(IVirtualDirectory owner, IVirtualDirectory delegate, String name) {
    super(delegate);
    this.owner = owner;
    this.name = name;
  }
 
  public IVirtualDirectory getDelegate() { return delegate; }
 
  public IVirtualArtifact getRealOwner () { return owner instanceof LinkedDirectory ? ((LinkedDirectory)owner).getRealOwner() : owner; }

  public LinkedDirectory getLinkedRoot () { return owner instanceof LinkedDirectory ? ((LinkedDirectory)owner).getLinkedRoot() : this; }
 
  public IVirtualPath getPath() {
    return "".equals(getName()) ? owner.getPath() : owner.getPath().append(getName());
  }

  public IVirtualArtifact getArtifact(IVirtualPath path) { return wrap( delegate.getArtifact(path) ); }

  public IVirtualDirectory createDirectory(String name) { return (IVirtualDirectory) wrap( delegate.createDirectory(name) ); }

  public IVirtualFile createFile(String name) { return (IVirtualFile) wrap( delegate.createFile(name) ); }

  public IVirtualArtifact getArtifact(String name) { return wrap( delegate.getArtifact(name) ); }

  public Iterator<IVirtualArtifact> getArtifacts() {
    Set<IVirtualArtifact> artifacts = new LinkedHashSet<IVirtualArtifact>();
   
    Iterator<IVirtualArtifact> das = delegate.getArtifacts();
    while (das.hasNext()) {
      IVirtualArtifact artifact = das.next();
      artifacts.add( wrap( artifact ) );
    }
   
    return artifacts.iterator();
  }

  public String getName() { return name; }

  public IVirtualDirectory getOwner() { return owner; }

  public String toString () { return super.toString() + " -> " + delegate.toString(); }
 
  /**
   * @param artifact The artifact to wrap
   * @return The artifact if it is already an instance of {@link ILinkedArtifact}, otherwise it will wrap {@link IVirtualDirectory}'s
   *   with {@link LinkedDirectory} and {@link IVirtualFile}'s with {@link LinkedFile}.
   */
  protected IVirtualArtifact wrap (IVirtualArtifact artifact) {
    if (artifact == null) return null;
    if (artifact instanceof ILinkedArtifact && ((ILinkedArtifact)artifact).getOwner() == this) return (IVirtualArtifact) artifact;
   
    return (IVirtualArtifact) ( artifact instanceof IVirtualDirectory ? new LinkedDirectory(this, (IVirtualDirectory) artifact) :
      new LinkedFile(this, (IVirtualFile) artifact) );   
  }

}
TOP

Related Classes of net.sourceforge.javautil.common.io.impl.LinkedDirectory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.