Package org.gudy.azureus2.pluginsimpl.local.config

Source Code of org.gudy.azureus2.pluginsimpl.local.config.PluginConfigSourceImpl

/*
* Created on 8 May 2008
* Created by Allan Crooks
* Copyright (C) 2007 Aelitis, All Rights Reserved.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*
* AELITIS, SAS au capital de 46,603.30 euros
* 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France.
*/
package org.gudy.azureus2.pluginsimpl.local.config;

import java.io.File;
import java.util.Iterator;
import java.util.Map;
import org.gudy.azureus2.core3.config.COConfigurationListener;
import org.gudy.azureus2.core3.config.COConfigurationManager;
import org.gudy.azureus2.core3.config.ParameterListener;
import org.gudy.azureus2.core3.config.impl.ConfigurationManager;
import org.gudy.azureus2.core3.util.FileUtil;
import org.gudy.azureus2.core3.util.LightHashSet;
import org.gudy.azureus2.plugins.config.PluginConfigSource;
import org.gudy.azureus2.plugins.PluginConfig;

/**
* @author Allan Crooks
*
*/
public class PluginConfigSourceImpl implements COConfigurationListener, ParameterListener, PluginConfigSource {
 
  private PluginConfig plugin_config;
  private File source_file;
  private boolean initialised;
  private Map data_map;
  private String key_prefix = null;
  private boolean dirty = false;
  private boolean migrate_settings = false;
  private LightHashSet params_monitored;
 
  public PluginConfigSourceImpl(PluginConfig plugin_config, String plugin_id) {
    this.plugin_config = plugin_config;
    this.key_prefix = null; // Grab the value at initialising.
    this.initialised = false;
    this.params_monitored = new LightHashSet();
    setConfigFilename(plugin_id + ".config");
  }
   
  public void initialize() {
    shouldBeInitialised(false);
    this.initialised = true;
    this.data_map = FileUtil.readResilientFile(this.source_file.getParentFile(), this.source_file.getName(), true);
    this.key_prefix = plugin_config.getPluginConfigKeyPrefix();
   
    Map.Entry entry;
    String key;
    Iterator itr = this.data_map.entrySet().iterator();
   
    ConfigurationManager config = ConfigurationManager.getInstance();
    while (itr.hasNext()) {
      entry = (Map.Entry)itr.next();
      key = this.key_prefix + (String)entry.getKey();
      this.params_monitored.add(key);
      config.registerTransientParameter(key);
      config.setParameterRawNoNotify(key, entry.getValue());
      config.addParameterListener(key, this);
    }
   
    config.addListener(this);
  }
 
  public File getConfigFile() {
    return this.source_file;
  }
 
  public void setConfigFilename(String filename) {
    shouldBeInitialised(false);
    this.source_file = plugin_config.getPluginUserFile(FileUtil.convertOSSpecificChars(filename, false));
  }

  public void save(boolean force) {
    shouldBeInitialised(true);
    if (!force && !this.dirty) {return;}
    FileUtil.writeResilientFile(this.source_file.getParentFile(), this.source_file.getName(), this.data_map, true);
    this.dirty = false;
  }
 
  public void configurationSaved() {
    save(false);
  }
 
  public void parameterChanged(String full_param) {
    shouldBeInitialised(true);
    String plugin_param = toPluginName(full_param);
    if (COConfigurationManager.hasParameter(full_param, true)) {
      Object val = ConfigurationManager.getInstance().getParameter(full_param);
      this.data_map.put(plugin_param, val);
    }
    else {
      this.data_map.remove(plugin_param);
    }
    this.dirty = true;
  }
 
  // Not exposed in the plugin API...
  public void registerParameter(String full_param) {
    shouldBeInitialised(true);
    if (!this.params_monitored.add(full_param)) {return;}
    ConfigurationManager config = ConfigurationManager.getInstance();
    config.registerTransientParameter(full_param);
    config.addParameterListener(full_param, this);
    if (this.migrate_settings && COConfigurationManager.hasParameter(full_param, true)) {
      this.parameterChanged(full_param);
    }
  }
 
  // Not exposed in the public API.
  public String getUsedKeyPrefix() {
    return this.key_prefix;
  }
 
  private String toPluginName(String name) {
   
    // We won't expect this.
    if (!name.startsWith(this.key_prefix)) {
      throw new RuntimeException("mismatch key prefix: " + name + ", " + this.key_prefix);
    }
   
    return name.substring(this.key_prefix.length());
  }
 
  private void shouldBeInitialised(boolean yes) {
    if (yes && !this.initialised) {
      throw new RuntimeException("source not yet initialised");
    }
    else if (!yes && this.initialised) {
      throw new RuntimeException("source already initialised");
    }
  }
 
  public void forceSettingsMigration() {
    shouldBeInitialised(false);
    this.migrate_settings = true;
  }
 
}
TOP

Related Classes of org.gudy.azureus2.pluginsimpl.local.config.PluginConfigSourceImpl

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.