/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package jhydra.core.scripting.scriptinfo; import jhydra.core.config.IRuntimeConfig; import jhydra.core.scripting.ScriptType; import jhydra.core.scripting.scriptinfo.exceptions.ScriptInfoLoadException; import org.apache.commons.io.FileUtils; import java.io.File; import java.net.URI; import java.util.*; /** * * @author jantic */ public class ScriptInfoFactory implements IScriptInfoFactory { private static final Map<String, List<IScriptInfo>> projectPathToScriptInfos = new HashMap<>(); @Override public List<IScriptInfo> getAllScriptInfosOfType(IRuntimeConfig config, ScriptType scriptType) throws ScriptInfoLoadException{ final String key = generateKey(config.getProjectDirectory(), scriptType); if(projectPathToScriptInfos.containsKey(key)){ return projectPathToScriptInfos.get(key); } final List<IScriptInfo> scriptInfos = new ArrayList<>(); final List<URI> scriptDirectories = config.getScriptDirectories(); for(URI scriptDirectory : scriptDirectories){ scriptInfos.addAll(getAllScriptInfosOfType(scriptDirectory, scriptType)); } projectPathToScriptInfos.put(key, scriptInfos); return scriptInfos; } private List<IScriptInfo> getAllScriptInfosOfType(URI scriptsDirectory, ScriptType scriptType) throws ScriptInfoLoadException{ final File folder = new File(scriptsDirectory); if(!folder.isDirectory()){ final String message = "Could not find script directory of path: " + scriptsDirectory; throw new ScriptInfoLoadException(message); } final String[] extensions = {scriptType.getExtension()}; final Iterator iter = FileUtils.iterateFiles(folder, extensions, true); final List<IScriptInfo> scriptInfos = new ArrayList<>(); while(iter.hasNext()){ final File file = (File) iter.next(); final String name = parseName(file.getName(), scriptType); final String path = file.getAbsolutePath(); final IScriptInfo scriptInfo = new ScriptInfo(name, scriptType, path); scriptInfos.add(scriptInfo); } return scriptInfos; } private String parseName(String fileName, ScriptType scriptType){ return fileName.replaceAll("\\." + scriptType.getExtension(), ""); } private String generateKey(URI projectPath, ScriptType scriptType){ if(projectPath == null){ return ""; } return projectPath.toString().trim().toLowerCase() + "." + scriptType.getExtension(); } }