Package org.jboss.jsfunit.analysis.el

Source Code of org.jboss.jsfunit.analysis.el.ELIterFactory

package org.jboss.jsfunit.analysis.el;

import java.io.File;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.regex.Pattern;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.AndFileFilter;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.filefilter.NotFileFilter;
import org.apache.commons.io.filefilter.OrFileFilter;

/**
*
* @author Jason
* @since 1.0
*/
public class ELIterFactory
{
  public static final Iterator<ELBundle> EMPTY_ITER = new Iterator<ELBundle>() {
    public boolean hasNext()
        {
          return false;
        }

    public ELBundle next()
        {
          throw new NoSuchElementException();
        }

    public void remove()
        {
      throw new UnsupportedOperationException();
        }
  };


  /**
   * Uses a default dirFilter which skips hidden and CVS directories.
   */
  public static Iterable<ELBundle> getIterable( final File baseDir,
                          final IOFileFilter fileFilter,
                          final Collection<SkipExpressionSpec> toSkip)
  {
    return new Iterable<ELBundle>() {
      public Iterator<ELBundle> iterator()
            {
        return ELIterFactory.getIterator(baseDir, fileFilter, toSkip);
            }
    };
  }

  public static Iterable<ELBundle> getIterable( final File baseDir,
                          final IOFileFilter fileFilter,
                          final IOFileFilter dirFilter,
                          final Collection<SkipExpressionSpec> toSkip)
  {
    return new Iterable<ELBundle>() {
      public Iterator<ELBundle> iterator()
            {
        return ELIterFactory.getIterator(baseDir, fileFilter, dirFilter, toSkip);
            }
    };
  }

  /**
   * Uses a default dirFilter which skips hidden and CVS directories.
   */
  public static Iterator<ELBundle> getIterator( final File baseDir,
                              final IOFileFilter fileFilter,
                              final Collection<SkipExpressionSpec> toSkip)
  {
    return getIterator(baseDir, fileFilter, Filters.IGNORE_HIDDEN_AND_CVS_FILTER, toSkip);
  }

  public static Iterator<ELBundle> getIteratorfinal File baseDir,
                              final IOFileFilter fileFilter,
                              final IOFileFilter dirFilter,
                              final Collection<SkipExpressionSpec> toSkip)
  {
    final OrFileFilter alwaysSkipFiles = new OrFileFilter();
    final Collection<Pattern> alwaysSkipPatterns = new HashSet<Pattern>();
    final Map<IOFileFilter, Pattern> sometimesSkipPatterns = new HashMap<IOFileFilter, Pattern>();
    for( final SkipExpressionSpec spec: toSkip ) {
      final IOFileFilter ff = spec.getFileFilter();
      final Pattern ef = spec.getExpressionFilter();
      if(ff == null) {
        if(ef == null) {
          return EMPTY_ITER;  //both exprs null == skip everything.
        }
        else {
          alwaysSkipPatterns.add(ef);
        }
      }
      else if(ef == null) {
        alwaysSkipFiles.addFileFilter(ff);
      }
      else {
        sometimesSkipPatterns.put(ff, ef);
      }
    }
    final IOFileFilter compositeFilter
      = new AndFileFilter(fileFilter,
                new NotFileFilter(alwaysSkipFiles));
    final Iterator<?> baseIter
      = FileUtils.iterateFiles(baseDir, compositeFilter, dirFilter);
    return new MultiFileELExpressionIterator(asFileIter(baseIter), alwaysSkipPatterns, sometimesSkipPatterns);
  }

  @SuppressWarnings("unchecked")
    private static Iterator<File> asFileIter(final Iterator<?> baseIter) {
    return (Iterator<File>)baseIter;
  }


}
TOP

Related Classes of org.jboss.jsfunit.analysis.el.ELIterFactory

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.