Package net.sourceforge.javautil.web.server.application.impl

Source Code of net.sourceforge.javautil.web.server.application.impl.VirtualDirectoryResolver

package net.sourceforge.javautil.web.server.application.impl;

import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
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.VirtualArtifactNotFoundException;
import net.sourceforge.javautil.common.io.IVirtualDirectory;
import net.sourceforge.javautil.common.io.IVirtualPath;
import net.sourceforge.javautil.common.io.impl.Directory;
import net.sourceforge.javautil.common.io.impl.DirectoryRoot;
import net.sourceforge.javautil.common.io.impl.DirectoryFileLinked;
import net.sourceforge.javautil.common.io.impl.ILinkedArtifact;
import net.sourceforge.javautil.common.io.impl.LinkedDirectory;
import net.sourceforge.javautil.common.io.impl.LinkedFile;
import net.sourceforge.javautil.common.io.impl.SimplePath;
import net.sourceforge.javautil.common.io.impl.ISystemArtifact;
import net.sourceforge.javautil.common.io.impl.SystemFile;
import net.sourceforge.javautil.web.server.application.IWebApplicationResourceResolver;

/**
* A resolver that utilizes a {@link IVirtualDirectory} to locate
* resources.
*
* @author elponderador
* @author $Author: ponderator $
* @version $Id: VirtualDirectoryResolver.java 2298 2010-06-16 00:20:18Z ponderator $
*/
public class VirtualDirectoryResolver implements IWebApplicationResourceResolver {
 
  protected final IVirtualDirectory directory;
  protected IVirtualPath path;

  public VirtualDirectoryResolver(IVirtualDirectory directory) {
    this.directory = directory;
    this.path = directory.getPath();
  }

  public File getFile(String path) {
    ISystemArtifact artifact = directory.getArtifact(ISystemArtifact.class, new SimplePath(path));
     
    if (artifact != null) {
      return artifact.getRealArtifact();
    } else {
      return null;
    }
  }

  public URL getResource(String path) {
    try {
      return directory.getArtifact(new SimplePath(path)).getURL();
    } catch (VirtualArtifactNotFoundException e) {
      return null;
    }
  }

  public List<String> getResourcePaths(String path) {
    Set<String> set = new LinkedHashSet<String>();
    try {
      IVirtualArtifact artifact = directory.getArtifact(new SimplePath(path));
     
      if (artifact instanceof IVirtualDirectory) {
        Iterator<IVirtualArtifact> subs = ((IVirtualDirectory)artifact).getArtifacts();
        while (subs.hasNext()) {
          IVirtualArtifact sub = subs.next();
          String subp = this.path.getRelativePath( sub.getPath() ).toString("/");
          if (sub instanceof IVirtualDirectory) {
            if (!subp.endsWith("/")) subp += "/";
          }
          add(set, subp);
        }
      }
    } catch (VirtualArtifactNotFoundException e) {}
    return new ArrayList<String>(set);
  }
 
  /**
   * This will make sure the path starts with a /
   *
   * @param set the set to add the value to
   * @param value The value to validate before adding
   */
  protected void add (Set set, String value) {
    set.add( (value.startsWith("/") ? value : "/" + value) );
  }
}
TOP

Related Classes of net.sourceforge.javautil.web.server.application.impl.VirtualDirectoryResolver

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.