cdm/src/main/java/ucar/nc2/ncml/AggregationExisting.java
public void persistWrite() throws IOException {
    if (diskCache2 == null)
      return;

    String cacheName = getCacheName();
    if (cacheName == null) return;
    if (cacheName.startsWith("file:"))      // LOOK
      cacheName = cacheName.substring(5);
    File cacheFile = diskCache2.getCacheFile(cacheName);
    if (cacheFile == null) throw new IllegalStateException();

    // only write out if something changed after the cache file was last written, or if the file has been deleted
    if (!cacheDirty && cacheFile.exists())
      return;

    FileChannel channel = null;
    try {
      File dir = cacheFile.getParentFile();
      if (!dir.exists()) {
        if (!dir.mkdirs())
          logger.error("Cant make cache directory= " + cacheFile);
      }

      // Get a file channel for the file
      FileOutputStream fos = new FileOutputStream(cacheFile);
      channel = fos.getChannel();

      // Try acquiring the lock without blocking. This method returns
      // null or throws an exception if the file is already locked.
      FileLock lock;
      try {
        lock = channel.tryLock();
      } catch (OverlappingFileLockException e) {
        // File is already locked in this thread or virtual machine
        return; // give up
      }
      if (lock == null) return;

      PrintWriter out = new PrintWriter(new OutputStreamWriter(fos, CDM.utf8Charset));
      out.print("<?xml version='1.0' encoding='UTF-8'?>\n");
      out.print("<aggregation xmlns='http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2' version='3' ");
      out.print("type='" + type + "' ");
      if (dimName != null)
        out.print("dimName='" + dimName + "' ");
      if (datasetManager.getRecheck() != null)
        out.print("recheckEvery='" + datasetManager.getRecheck() + "' ");
      out.print(">\n");

      List<Dataset> nestedDatasets = getDatasets();
      for (Dataset dataset : nestedDatasets) {
        DatasetOuterDimension dod = (DatasetOuterDimension) dataset;
        if (dod.getId() == null) logger.warn("id is null");

        out.print("  <netcdf id='" + dod.getId() + "' ");
        out.print("ncoords='" + dod.getNcoords(null) + "' >\n");

        for (CacheVar pv : cacheList) {
          Array data = pv.getData(dod.getId());
          if (data != null) {
            out.print("    <cache varName='" + pv.varName + "' >");
            while (data.hasNext())
              out.printf("%s ", data.next());
            out.print("</cache>\n");
            if (logger.isDebugEnabled())
              logger.debug(" wrote array = " + pv.varName + " nelems= " + data.getSize() + " for " + dataset.getLocation());
          }
        }
        out.print("  </netcdf>\n");
      }

      out.print("</aggregation>\n");
      out.close(); // this also closes the  channel and releases the lock

      long time = datasetManager.getLastScanned();
      if (time == 0) time = System.currentTimeMillis(); // no scans (eg all static) will have a 0

      if (!cacheFile.setLastModified(time))
        logger.warn("FAIL to set lastModified on {}", cacheFile.getPath());
      cacheDirty = false;

      if (logger.isDebugEnabled())
        logger.debug("Aggregation persisted = " + cacheFile.getPath() + " lastModified= " + new Date(datasetManager.getLastScanned()));

    } finally {
      if (channel != null)
        channel.close();
    }
  }
public void persistWrite() throws IOException {
    if (diskCache2 == null)
      return;

    String cacheName = getCacheName();
    if (cacheName == null) return;
    if (cacheName.startsWith("file:"))      // LOOK
      cacheName = cacheName.substring(5);
    File cacheFile = diskCache2.getCacheFile(cacheName);
    if (cacheFile == null) throw new IllegalStateException();

    // only write out if something changed after the cache file was last written, or if the file has been deleted
    if (!cacheDirty && cacheFile.exists())
      return;

    FileChannel channel = null;
    try {
      File dir = cacheFile.getParentFile();
      if (!dir.exists()) {
        if (!dir.mkdirs())
          logger.error("Cant make cache directory= " + cacheFile);
      }

      // Get a file channel for the file
      FileOutputStream fos = new FileOutputStream(cacheFile);
      channel = fos.getChannel();

      // Try acquiring the lock without blocking. This method returns
      // null or throws an exception if the file is already locked.
      FileLock lock;
      try {
        lock = channel.tryLock();
      } catch (OverlappingFileLockException e) {
        // File is already locked in this thread or virtual machine
        return; // give up
      }
      if (lock == null) return;

      PrintWriter out = new PrintWriter(new OutputStreamWriter(fos, CDM.utf8Charset));
      out.print("<?xml version='1.0' encoding='UTF-8'?>\n");
      out.print("<aggregation xmlns='http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2' version='3' ");
      out.print("type='" + type + "' ");
      if (dimName != null)
        out.print("dimName='" + dimName + "' ");
      if (datasetManager.getRecheck() != null)
        out.print("recheckEvery='" + datasetManager.getRecheck() + "' ");
      out.print(">\n");

      List<Dataset> nestedDatasets = getDatasets();
      for (Dataset dataset : nestedDatasets) {
        DatasetOuterDimension dod = (DatasetOuterDimension) dataset;
        if (dod.getId() == null) logger.warn("id is null");

        out.print("  <netcdf id='" + dod.getId() + "' ");
        out.print("ncoords='" + dod.getNcoords(null) + "' >\n");

        for (CacheVar pv : cacheList) {
          Array data = pv.getData(dod.getId());
          if (data != null) {
            out.print("    <cache varName='" + pv.varName + "' >");
            while (data.hasNext())
              out.printf("%s ", data.next());
            out.print("</cache>\n");
            if (logger.isDebugEnabled())
              logger.debug(" wrote array = " + pv.varName + " nelems= " + data.getSize() + " for " + dataset.getLocation());
          }
        }
        out.print("  </netcdf>\n");
      }

      out.print("</aggregation>\n");
      out.close(); // this also closes the  channel and releases the lock

      long time = datasetManager.getLastScanned();
      if (time == 0) time = System.currentTimeMillis(); // no scans (eg all static) will have a 0

      if (!cacheFile.setLastModified(time))
        logger.warn("FAIL to set lastModified on {}", cacheFile.getPath());
      cacheDirty = false;

      if (logger.isDebugEnabled())
        logger.debug("Aggregation persisted = " + cacheFile.getPath() + " lastModified= " + new Date(datasetManager.getLastScanned()));

    } finally {
      if (channel != null)
        channel.close();
    }
  }
public void persistWrite ( ) throws IOException { if ( diskCache2 == null ) return ; String cacheName = getCacheName ( ) ; if ( cacheName == null ) return ; if ( cacheName . startsWith ( "file:" ) ) // LOOK
 cacheName = cacheName . substring ( 5 ) ; File cacheFile = diskCache2 . getCacheFile ( cacheName ) ; if ( cacheFile == null ) throw new IllegalStateException ( ) ; // only write out if something changed after the cache file was last written, or if the file has been deleted
 if ( ! cacheDirty && cacheFile . exists ( ) ) return ; FileChannel channel = null ; try { File dir = cacheFile . getParentFile ( ) ; if ( ! dir . exists ( ) ) { if ( ! dir . mkdirs ( ) ) logger . error ( "Cant make cache directory= " + cacheFile ) ; } // Get a file channel for the file
 FileOutputStream fos = new FileOutputStream ( cacheFile ) ; channel = fos . getChannel ( ) ; // Try acquiring the lock without blocking. This method returns
 // null or throws an exception if the file is already locked.
 FileLock lock ; try { lock = channel . tryLock ( ) ; } catch ( OverlappingFileLockException e ) { // File is already locked in this thread or virtual machine
 return ; // give up
 } if ( lock == null ) return ; PrintWriter out = new PrintWriter ( new OutputStreamWriter ( fos , CDM . utf8Charset ) ) ; out . print ( "<?xml version='1.0' encoding='UTF-8'?>\n" ) ; out . print ( "<aggregation xmlns='http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2' version='3' " ) ; out . print ( "type='" + type + "' " ) ; if ( dimName != null ) out . print ( "dimName='" + dimName + "' " ) ; if ( datasetManager . getRecheck ( ) != null ) out . print ( "recheckEvery='" + datasetManager . getRecheck ( ) + "' " ) ; out . print ( ">\n" ) ; List < Dataset > nestedDatasets = getDatasets ( ) ; for ( Dataset dataset : nestedDatasets ) { DatasetOuterDimension dod = ( DatasetOuterDimension ) dataset ; if ( dod . getId ( ) == null ) logger . warn ( "id is null" ) ; out . print ( "  <netcdf id='" + dod . getId ( ) + "' " ) ; out . print ( "ncoords='" + dod . getNcoords ( null ) + "' >\n" ) ; for ( CacheVar pv : cacheList ) { Array data = pv . getData ( dod . getId ( ) ) ; if ( data != null ) { out . print ( "    <cache varName='" + pv . varName + "' >" ) ; while ( data . hasNext ( ) ) out . printf ( "%s " , data . next ( ) ) ; out . print ( "</cache>\n" ) ; if ( logger . isDebugEnabled ( ) ) logger . debug ( " wrote array = " + pv . varName + " nelems= " + data . getSize ( ) + " for " + dataset . getLocation ( ) ) ; } } out . print ( "  </netcdf>\n" ) ; } out . print ( "</aggregation>\n" ) ; out . close ( ) ; // this also closes the  channel and releases the lock
 long time = datasetManager . getLastScanned ( ) ; if ( time == 0 ) time = System . currentTimeMillis ( ) ; // no scans (eg all static) will have a 0
 if ( ! cacheFile . setLastModified ( time ) ) logger . warn ( "FAIL to set lastModified on {}" , cacheFile . getPath ( ) ) ; cacheDirty = false ; if ( logger . isDebugEnabled ( ) ) logger . debug ( "Aggregation persisted = " + cacheFile . getPath ( ) + " lastModified= " + new Date ( datasetManager . getLastScanned ( ) ) ) ; } finally { if ( channel != null ) channel . close ( ) ; } }
Persist info (ncoords, coordValues) from joinExisting, since that can be expensive to recreate.

@throws IOException
Persist info ( ncoords coordValues ) from joinExisting since that can be expensive to recreate .