tds/src/main/java/thredds/util/filesource/ChainedFileSource.java
public File getFile(String path) {
    File file;
    for (DescendantFileSource curLocator : chain) {
      file = curLocator.getFile(path);
      if (file != null)
        return file;
    }
    return null;
  }
public File getFile(String path) {
    File file;
    for (DescendantFileSource curLocator : chain) {
      file = curLocator.getFile(path);
      if (file != null)
        return file;
    }
    return null;
  }
public File getFile ( String path ) { File file ; for ( DescendantFileSource curLocator : chain ) { file = curLocator . getFile ( path ) ; if ( file != null ) return file ; } return null ; }
This implementation requires a relative path. The relative path may
not start with "../" or once "normalized" start with "../". Here
"normalized" means that "./" and "path/.." segments are removed,
e.g., "dir1/../../dir2" once normalized would be "../dir2".

@param path the relative path to the desired File.
@return the File represented by the given relative path or null if the path is null or the File it represents does not exist.
This implementation requires a relative path . The relative path may not start with .. / or once normalized start with .. / . Here normalized means that . / and path / .. segments are removed e . g . dir1 / .. / .. / dir2 once normalized would be .. / dir2 .