Package org.bladerunnerjs.plugin.plugins.brjsconformant

Source Code of org.bladerunnerjs.plugin.plugins.brjsconformant.BRJSConformantAssetLocationPlugin

package org.bladerunnerjs.plugin.plugins.brjsconformant;

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

import org.bladerunnerjs.model.AssetContainer;
import org.bladerunnerjs.model.AssetLocation;
import org.bladerunnerjs.model.BRJS;
import org.bladerunnerjs.model.Blade;
import org.bladerunnerjs.model.BladeResourcesAssetLocation;
import org.bladerunnerjs.model.ChildSourceAssetLocation;
import org.bladerunnerjs.model.ChildTestSourceAssetLocation;
import org.bladerunnerjs.model.DefaultBladeset;
import org.bladerunnerjs.model.FileInfo;
import org.bladerunnerjs.model.JsLib;
import org.bladerunnerjs.model.ResourcesAssetLocation;
import org.bladerunnerjs.model.SourceAssetLocation;
import org.bladerunnerjs.plugin.base.AbstractAssetLocationPlugin;
import org.bladerunnerjs.utility.RelativePathUtility;

public class BRJSConformantAssetLocationPlugin extends AbstractAssetLocationPlugin {
  private final List<String> seedAssetLocationDirectories = new ArrayList<>();
  private BRJS brjs;
 
  {
    seedAssetLocationDirectories.add("resources");
  }
 
  @Override
  public void setBRJS(BRJS brjs) {
    this.brjs = brjs;
  }
 
  @Override
  public List<String> getAssetLocationDirectories(AssetContainer assetContainer) {
    List<String> assetLocationDirectories = new ArrayList<>();
   
    if (assetContainer instanceof DefaultBladeset) {
      return assetLocationDirectories;
    }
   
    assetLocationDirectories.add(".");
    assetLocationDirectories.add("resources");
    assetLocationDirectories.add("src");
    assetLocationDirectories.add("src-test");
    addThemeDirectories(assetLocationDirectories, assetContainer);
   
    File sourceDir = assetContainer.file("src");
    if(sourceDir.exists()) {
      for(File dir : brjs.getFileInfo(sourceDir).nestedDirs()) {
        assetLocationDirectories.add(RelativePathUtility.get(brjs.getFileInfoAccessor(), assetContainer.dir(), dir));
      }
    }
   
    File sourceTestDir = assetContainer.file("src-test");
    if(sourceTestDir.exists()) {
      for(File dir : brjs.getFileInfo(sourceTestDir).nestedDirs()) {
        assetLocationDirectories.add(RelativePathUtility.get(brjs.getFileInfoAccessor(), assetContainer.dir(), dir));
      }
    }
    return assetLocationDirectories;
  }
 
  private void addThemeDirectories(List<String> assetLocationDirectories, AssetContainer assetContainer) {
    File themesDir = assetContainer.file("themes");
    if(!themesDir.exists()){
      return;
    }
   
    FileInfo themesDirInfo = brjs.getFileInfo(themesDir);
    for(File themeDir : themesDirInfo.dirs()) {
      String relativePath = RelativePathUtility.get(brjs.getFileInfoAccessor(), assetContainer.dir(), themeDir);
      assetLocationDirectories.add(relativePath);
    }
  }

  @Override
  public List<String> getSeedAssetLocationDirectories(AssetContainer assetContainer) {
    return seedAssetLocationDirectories;
  }
 
  @Override
  public AssetLocation createAssetLocation(AssetContainer assetContainer, String dirPath, Map<String, AssetLocation> assetLocationsMap) {
    AssetLocation assetLocation;
    File dir = assetContainer.file(dirPath);
   
   
    switch(dirPath) {
      case ".":
        assetLocation = (assetContainer instanceof JsLib) ? new BRJSConformantJsLibRootAssetLocation(assetContainer.root(), assetContainer, dir, null) :
          new BRJSConformantRootAssetLocation(assetContainer.root(), assetContainer, dir, null);
        break;
     
      case "resources":
        if (assetContainer instanceof Blade) {
          assetLocation = new BladeResourcesAssetLocation(assetContainer.root(), assetContainer, dir, assetLocationsMap.get("."));
        } else {
          assetLocation = new ResourcesAssetLocation(assetContainer.root(), assetContainer, dir, assetLocationsMap.get("."));
        }
        break;
     
      case "src":
        assetLocation = new SourceAssetLocation(assetContainer.root(), assetContainer, dir, assetLocationsMap.get("."), assetLocationsMap.get("resources"));
        break;
     
      case "src-test":
        assetLocation = new SourceAssetLocation(assetContainer.root(), assetContainer, dir, assetLocationsMap.get("."));
        break;
     
      default:
        if(dirPath.startsWith("themes")){
         
          String themeName = dirPath.substring(7);
          assetLocation = new ResourcesAssetLocation(assetContainer.root(), assetContainer, dir, assetLocationsMap.get("."), themeName);
          break;
        }
       
        String parentLocationPath = RelativePathUtility.get(brjs.getFileInfoAccessor(), assetContainer.dir(), dir.getParentFile());
        AssetLocation parentAssetLocation = assetLocationsMap.get(parentLocationPath);
       
        if((parentAssetLocation instanceof ChildSourceAssetLocation) || (parentAssetLocation instanceof SourceAssetLocation)) {
          assetLocation = new ChildSourceAssetLocation(assetContainer.root(), assetContainer, dir, parentAssetLocation, parentAssetLocation);
        }
        else {
          assetLocation = new ChildTestSourceAssetLocation(assetContainer.root(), assetContainer, dir, parentAssetLocation);
        }
        break;
    }
   
    return assetLocation;
  }
 
  @Override
  public boolean allowFurtherProcessing() {
    return false;
  }
}
TOP

Related Classes of org.bladerunnerjs.plugin.plugins.brjsconformant.BRJSConformantAssetLocationPlugin

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.