package com.spun.util.parser; import java.io.File; import java.util.Arrays; import java.util.HashMap; public class FileLocator implements ResourceLocator { private HashMap paths = new HashMap(); private boolean failOnNotFound = true; private String[] basePaths; /***********************************************************************/ public FileLocator(String[] basePaths) { this(basePaths, true); } /***********************************************************************/ public FileLocator(String[] basePaths, boolean failOnNotFound) { this.basePaths = basePaths; this.failOnNotFound = failOnNotFound; } /***********************************************************************/ public String getLocation(String fileName) { String absolutePath = (String) paths.get(fileName); if (absolutePath == null) { for (int i = 0; i < basePaths.length; i++) { File file = new File(basePaths[i] + File.separator + fileName); if (file.exists()) { absolutePath = registerFile(fileName, file); break; } } } if (absolutePath == null) { if (failOnNotFound) { throw new NullPointerException(" The file '" + fileName + "' could not be found in " + Arrays.asList(basePaths).toString() + " with base dir = " + new File(".").getAbsolutePath()); } else { File file = new File(basePaths[0] + File.separator + fileName); absolutePath = registerFile(fileName, file); } } return absolutePath; } /***********************************************************************/ private String registerFile(String fileName, File file) { String absolutePath = file.getAbsolutePath(); paths.put(fileName, absolutePath); return absolutePath; } /***********************************************************************/ /***********************************************************************/ }