Package freenet.client

Source Code of freenet.client.RealArchiveStoreItem

/* This code is part of Freenet. It is distributed under the GNU General
* Public License, version 2 (or at your option any later version). See
* http://www.gnu.org/ for further details of the GPL. */
package freenet.client;

import freenet.keys.FreenetURI;
import freenet.support.LogThresholdCallback;
import freenet.support.Logger;
import freenet.support.Logger.LogLevel;
import freenet.support.api.Bucket;
import freenet.support.io.MultiReaderBucket;

class RealArchiveStoreItem extends ArchiveStoreItem {

  private final MultiReaderBucket mb;
  private final Bucket bucket;
  private final long spaceUsed;

        private static volatile boolean logMINOR;
  static {
    Logger.registerLogThresholdCallback(new LogThresholdCallback(){
      @Override
      public void shouldUpdate(){
        logMINOR = Logger.shouldLog(LogLevel.MINOR, this);
      }
    });
  }
 
  /**
   * Create an ArchiveStoreElement from a TempStoreElement.
   * @param key2 The key of the archive the file came from.
   * @param realName The name of the file in that archive.
   * @param temp The TempStoreElement currently storing the data.
   * @param manager The parent ArchiveManager within which this item is stored.
   */
  RealArchiveStoreItem(ArchiveStoreContext ctx, FreenetURI key2, String realName, Bucket bucket) {
    super(new ArchiveKey(key2, realName), ctx);
    if(bucket == null) throw new NullPointerException();
    mb = new MultiReaderBucket(bucket);
    this.bucket = mb.getReaderBucket();
    if(this.bucket == null) throw new NullPointerException();
    this.bucket.setReadOnly();
    spaceUsed = this.bucket.size();
  }

  /**
   * Return the data, as a Bucket, in plaintext.
   */
  Bucket dataAsBucket() {
    return bucket;
  }

  /**
   * Return the length of the data.
   */
  long dataSize() {
    return bucket.size();
  }

  /**
   * Return the estimated space used by the data.
   */
  @Override
  long spaceUsed() {
    return spaceUsed;
  }
 
  @Override
  void innerClose() {
    if(logMINOR)
      Logger.minor(this, "innerClose(): "+this+" : "+bucket);
    if(bucket == null) {
      // This still happens. It is clearly impossible as we check in the constructor and throw if it is null.
      // Nonetheless there is little we can do here ...
      Logger.error(this, "IMPOSSIBLE: BUCKET IS NULL!", new Exception("error"));
      return;
    }
    bucket.free();
  }

  @Override
  Bucket getDataOrThrow() throws ArchiveFailureException {
    return dataAsBucket();
  }

  @Override
  Bucket getReaderBucket() throws ArchiveFailureException {
    return mb.getReaderBucket();
  }
 
}
TOP

Related Classes of freenet.client.RealArchiveStoreItem

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.