Package org.bladerunnerjs.model.engine

Source Code of org.bladerunnerjs.model.engine.DirectoryContentsNamedNodeLocator

package org.bladerunnerjs.model.engine;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.bladerunnerjs.model.FileInfo;

public class DirectoryContentsNamedNodeLocator implements NamedNodeLocator
{
  private String subDirPath;
  private String dirNameFilter;
  private RootNode rootNode;
  private String dirNameExcludeFilter;
 
  public DirectoryContentsNamedNodeLocator(RootNode rootNode, String subDirPath, String dirNameFilter, String dirNameExcludeFilter)
  {
    this.rootNode = rootNode;
    this.subDirPath = subDirPath;
    this.dirNameFilter = dirNameFilter;
    this.dirNameExcludeFilter = dirNameExcludeFilter;
  }
 
  @Override
  public List<String> getLogicalNodeNames(File sourceDir)
  {
    List<String> dirSet = new ArrayList<>();
    File childDir = (subDirPath == null) ? sourceDir : new File(sourceDir, subDirPath);
   
    if(childDir.exists())
    {
      String dirNameMatcher = getDirNameMatcher(dirNameFilter);
      String dirNameExcludeMatcher = getDirNameMatcher(dirNameExcludeFilter);
     
      List<File> childDirs = rootNode.getFileInfo(childDir).dirs();
      for(File file : childDirs)
      {
        FileInfo fileInfo = rootNode.getFileInfo(file);
       
        if ( fileInfo.isDirectory() && (dirNameMatcher == null || file.getName().matches(dirNameMatcher) ) )
        {
          String childName = file.getName();
         
          if ( !(dirNameExcludeMatcher != null && childName.matches(dirNameExcludeMatcher)) ) {
            if(dirNameFilter != null)
            {
              childName = childName.replaceAll(dirNameFilter, "");
            }
           
            dirSet.add(childName);
          }
        }
      }
    }
   
    return dirSet;
  }
 
  @Override
  public boolean couldSupportLogicalNodeName(String logicalNodeName)
  {
    return true;
  }
 
  @Override
  public String getDirName(String logicalNodeName)
  {
    String dirName = logicalNodeName;
   
    if(dirNameFilter != null)
    {
      if(dirNameFilter.startsWith("^"))
      {
        dirName = dirNameFilter.substring(1) + dirName;
      }
      else if(dirNameFilter.endsWith("$"))
      {
        dirName = dirName + dirNameFilter.substring(0, dirNameFilter.length() - 1);
      }
    }
   
    return (subDirPath == null) ? dirName : subDirPath + "/" + dirName;
  }
 
  private String getDirNameMatcher(String dirNameFilter)
  {
    String dirNameMatcher = null;
   
    if(dirNameFilter != null)
    {
      dirNameMatcher = (dirNameFilter.startsWith("^")) ? dirNameFilter + ".*" : ".*" + dirNameFilter;
    }
   
    return dirNameMatcher;
  }
}
TOP

Related Classes of org.bladerunnerjs.model.engine.DirectoryContentsNamedNodeLocator

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.