Package freenet.node

Source Code of freenet.node.ConfigurablePersister

package freenet.node;

import java.io.File;
import java.io.IOException;

import freenet.config.InvalidConfigValueException;
import freenet.config.SubConfig;
import freenet.l10n.NodeL10n;
import freenet.support.Ticker;
import freenet.support.api.StringCallback;

public class ConfigurablePersister extends Persister {

  public ConfigurablePersister(Persistable t, SubConfig nodeConfig, String optionName,
      String defaultFilename, int sortOrder, boolean expert, boolean forceWrite, String shortDesc, String longDesc, Ticker ps, File baseDir) throws NodeInitException {
    super(t, ps);
    nodeConfig.register(optionName, new File(baseDir, defaultFilename).toString(), sortOrder, expert, forceWrite, shortDesc, longDesc, new StringCallback() {

      @Override
      public String get() {
        return persistTarget.toString();
      }

      @Override
      public void set(String val) throws InvalidConfigValueException {
        setThrottles(val);
      }
    });
   
    String throttleFile = nodeConfig.getString(optionName);
    try {
      setThrottles(throttleFile);
    } catch (InvalidConfigValueException e2) {
      throw new NodeInitException(NodeInitException.EXIT_THROTTLE_FILE_ERROR, e2.getMessage());
    }
  }

  private void setThrottles(String val) throws InvalidConfigValueException {
    File f = new File(val);
    File tmp = new File(f.toString()+".tmp");
    while(true) {
      if(f.exists()) {
        if(!(f.canRead() && f.canWrite()))
          throw new InvalidConfigValueException(l10n("existsCannotReadWrite")+" : "+tmp);
        break;
      } else {
        try {
          if(!f.createNewFile()) {
            if(f.exists()) continue;
            throw new InvalidConfigValueException(l10n("doesNotExistCannotCreate")+" : "+tmp);
          }
        } catch (IOException e) {
          throw new InvalidConfigValueException(l10n("doesNotExistCannotCreate")+" : "+tmp);
        }
      }
    }
    while(true) {
      if(tmp.exists()) {
        if(!(tmp.canRead() && tmp.canWrite()))
          throw new InvalidConfigValueException(l10n("existsCannotReadWrite")+" : "+tmp);
        break;
      } else {
        try {
          tmp.createNewFile();
        } catch (IOException e) {
          throw new InvalidConfigValueException(l10n("doesNotExistCannotCreate")+" : "+tmp);
        }
      }
    }
   
    synchronized(this) {
      persistTarget = f;
      persistTemp = tmp;
    }
  }

  private String l10n(String key) {
    return NodeL10n.getBase().getString("ConfigurablePersister."+key);
  }

}
TOP

Related Classes of freenet.node.ConfigurablePersister

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.