tds/src/main/java/thredds/core/DatasetManager.java
public NetcdfFile openNetcdfFile(HttpServletRequest req, HttpServletResponse res, String reqPath) throws IOException {
    if (log.isDebugEnabled()) log.debug("DatasetHandler wants " + reqPath);

    if (reqPath == null)
      return null;

    if (reqPath.startsWith("/"))
      reqPath = reqPath.substring(1);

    // see if its under resource control
    if (!resourceControlOk(req, res, reqPath))
      return null;

    // HEY LOOK datascan below has its own Ncml
    // look for a dataset (non scan, non fmrc) that has an ncml element
    String ncml = datasetTracker.findNcml(reqPath);
    if (ncml != null) {
      NetcdfFile ncfile = NetcdfDataset.acquireFile(new NcmlFileFactory(ncml), null, DatasetUrl.findDatasetUrl(reqPath), -1, null, null);
      if (ncfile == null) throw new FileNotFoundException(reqPath);
      return ncfile;
    }

    // look for a match
    DataRootManager.DataRootMatch match = dataRootManager.findDataRootMatch(reqPath);

    // look for an feature collection dataset
    if ((match != null) && (match.dataRoot.getFeatureCollection() != null)) {
      FeatureCollectionRef featCollection = match.dataRoot.getFeatureCollection();
      if (log.isDebugEnabled()) log.debug("  -- DatasetHandler found FeatureCollection= " + featCollection);
      InvDatasetFeatureCollection fc = featureCollectionCache.get(featCollection);
      NetcdfFile ncfile = fc.getNetcdfDataset(match.remaining);
      if (ncfile == null) throw new FileNotFoundException(reqPath);
      return ncfile;
    }

    // might be a pluggable DatasetSource:
    NetcdfFile ncfile = null;
    for (DatasetSource datasetSource : datasetSources) {   // LOOK linear
      if (datasetSource.isMine(req)) {
        ncfile = datasetSource.getNetcdfFile(req, res);
        if (ncfile != null) return ncfile;
      }
    }

    // common case - its a file
    if (match != null) {
      org.jdom2.Element netcdfElem = null; // find ncml if it exists
      if (match.dataRoot != null) {
        DatasetScan dscan = match.dataRoot.getDatasetScan();
        // if (dscan == null) dscan = match.dataRoot.getDatasetRootProxy();  // no ncml possible in getDatasetRootProxy
        if (dscan != null)
          netcdfElem = dscan.getNcmlElement();
      }

      String location = dataRootManager.getLocationFromRequestPath(reqPath);
      if (location == null)
        throw new FileNotFoundException(reqPath);

      // if theres an ncml element, open it directly through NcMLReader, therefore not being cached.
      // this is safer given all the trouble we have with ncml and caching.
      if (netcdfElem != null) {
        String ncmlLocation = "DatasetScan#" + location; // LOOK some descriptive name
        NetcdfDataset ncd = NcMLReader.readNcML(ncmlLocation, netcdfElem, "file:" + location, null);
        //new NcMLReader().readNetcdf(reqPath, ncd, ncd, netcdfElem, null);
        //if (log.isDebugEnabled()) log.debug("  -- DatasetHandler found DataRoot NcML = " + ds);
        return ncd;
      }

      DatasetUrl durl = DatasetUrl.findDatasetUrl(location);
      ncfile = NetcdfDataset.acquireFile(durl, null);
    }

    if (ncfile == null) throw new FileNotFoundException(reqPath);
    return ncfile;
  }
public NetcdfFile openNetcdfFile(HttpServletRequest req, HttpServletResponse res, String reqPath) throws IOException {
    if (log.isDebugEnabled()) log.debug("DatasetHandler wants " + reqPath);

    if (reqPath == null)
      return null;

    if (reqPath.startsWith("/"))
      reqPath = reqPath.substring(1);

    // see if its under resource control
    if (!resourceControlOk(req, res, reqPath))
      return null;

    // HEY LOOK datascan below has its own Ncml
    // look for a dataset (non scan, non fmrc) that has an ncml element
    String ncml = datasetTracker.findNcml(reqPath);
    if (ncml != null) {
      NetcdfFile ncfile = NetcdfDataset.acquireFile(new NcmlFileFactory(ncml), null, DatasetUrl.findDatasetUrl(reqPath), -1, null, null);
      if (ncfile == null) throw new FileNotFoundException(reqPath);
      return ncfile;
    }

    // look for a match
    DataRootManager.DataRootMatch match = dataRootManager.findDataRootMatch(reqPath);

    // look for an feature collection dataset
    if ((match != null) && (match.dataRoot.getFeatureCollection() != null)) {
      FeatureCollectionRef featCollection = match.dataRoot.getFeatureCollection();
      if (log.isDebugEnabled()) log.debug("  -- DatasetHandler found FeatureCollection= " + featCollection);
      InvDatasetFeatureCollection fc = featureCollectionCache.get(featCollection);
      NetcdfFile ncfile = fc.getNetcdfDataset(match.remaining);
      if (ncfile == null) throw new FileNotFoundException(reqPath);
      return ncfile;
    }

    // might be a pluggable DatasetSource:
    NetcdfFile ncfile = null;
    for (DatasetSource datasetSource : datasetSources) {   // LOOK linear
      if (datasetSource.isMine(req)) {
        ncfile = datasetSource.getNetcdfFile(req, res);
        if (ncfile != null) return ncfile;
      }
    }

    // common case - its a file
    if (match != null) {
      org.jdom2.Element netcdfElem = null; // find ncml if it exists
      if (match.dataRoot != null) {
        DatasetScan dscan = match.dataRoot.getDatasetScan();
        // if (dscan == null) dscan = match.dataRoot.getDatasetRootProxy();  // no ncml possible in getDatasetRootProxy
        if (dscan != null)
          netcdfElem = dscan.getNcmlElement();
      }

      String location = dataRootManager.getLocationFromRequestPath(reqPath);
      if (location == null)
        throw new FileNotFoundException(reqPath);

      // if theres an ncml element, open it directly through NcMLReader, therefore not being cached.
      // this is safer given all the trouble we have with ncml and caching.
      if (netcdfElem != null) {
        String ncmlLocation = "DatasetScan#" + location; // LOOK some descriptive name
        NetcdfDataset ncd = NcMLReader.readNcML(ncmlLocation, netcdfElem, "file:" + location, null);
        //new NcMLReader().readNetcdf(reqPath, ncd, ncd, netcdfElem, null);
        //if (log.isDebugEnabled()) log.debug("  -- DatasetHandler found DataRoot NcML = " + ds);
        return ncd;
      }

      DatasetUrl durl = DatasetUrl.findDatasetUrl(location);
      ncfile = NetcdfDataset.acquireFile(durl, null);
    }

    if (ncfile == null) throw new FileNotFoundException(reqPath);
    return ncfile;
  }
public NetcdfFile openNetcdfFile ( HttpServletRequest req , HttpServletResponse res , String reqPath ) throws IOException { if ( log . isDebugEnabled ( ) ) log . debug ( "DatasetHandler wants " + reqPath ) ; if ( reqPath == null ) return null ; if ( reqPath . startsWith ( "/" ) ) reqPath = reqPath . substring ( 1 ) ; // see if its under resource control if ( ! resourceControlOk ( req , res , reqPath ) ) return null ; // HEY LOOK datascan below has its own Ncml // look for a dataset (non scan, non fmrc) that has an ncml element String ncml = datasetTracker . findNcml ( reqPath ) ; if ( ncml != null ) { NetcdfFile ncfile = NetcdfDataset . acquireFile ( new NcmlFileFactory ( ncml ) , null , DatasetUrl . findDatasetUrl ( reqPath ) , - 1 , null , null ) ; if ( ncfile == null ) throw new FileNotFoundException ( reqPath ) ; return ncfile ; } // look for a match DataRootManager . DataRootMatch match = dataRootManager . findDataRootMatch ( reqPath ) ; // look for an feature collection dataset if ( ( match != null ) && ( match . dataRoot . getFeatureCollection ( ) != null ) ) { FeatureCollectionRef featCollection = match . dataRoot . getFeatureCollection ( ) ; if ( log . isDebugEnabled ( ) ) log . debug ( "  -- DatasetHandler found FeatureCollection= " + featCollection ) ; InvDatasetFeatureCollection fc = featureCollectionCache . get ( featCollection ) ; NetcdfFile ncfile = fc . getNetcdfDataset ( match . remaining ) ; if ( ncfile == null ) throw new FileNotFoundException ( reqPath ) ; return ncfile ; } // might be a pluggable DatasetSource: NetcdfFile ncfile = null ; for ( DatasetSource datasetSource : datasetSources ) { // LOOK linear if ( datasetSource . isMine ( req ) ) { ncfile = datasetSource . getNetcdfFile ( req , res ) ; if ( ncfile != null ) return ncfile ; } } // common case - its a file if ( match != null ) { org . jdom2 . Element netcdfElem = null ; // find ncml if it exists if ( match . dataRoot != null ) { DatasetScan dscan = match . dataRoot . getDatasetScan ( ) ; // if (dscan == null) dscan = match.dataRoot.getDatasetRootProxy();  // no ncml possible in getDatasetRootProxy if ( dscan != null ) netcdfElem = dscan . getNcmlElement ( ) ; } String location = dataRootManager . getLocationFromRequestPath ( reqPath ) ; if ( location == null ) throw new FileNotFoundException ( reqPath ) ; // if theres an ncml element, open it directly through NcMLReader, therefore not being cached. // this is safer given all the trouble we have with ncml and caching. if ( netcdfElem != null ) { String ncmlLocation = "DatasetScan#" + location ; // LOOK some descriptive name NetcdfDataset ncd = NcMLReader . readNcML ( ncmlLocation , netcdfElem , "file:" + location , null ) ; //new NcMLReader().readNetcdf(reqPath, ncd, ncd, netcdfElem, null); //if (log.isDebugEnabled()) log.debug("  -- DatasetHandler found DataRoot NcML = " + ds); return ncd ; } DatasetUrl durl = DatasetUrl . findDatasetUrl ( location ) ; ncfile = NetcdfDataset . acquireFile ( durl , null ) ; } if ( ncfile == null ) throw new FileNotFoundException ( reqPath ) ; return ncfile ; }
return null means request has been handled, and calling routine should exit without further processing
return null means request has been handled and calling routine should exit without further processing