Package org.gudy.azureus2.ui.swt.config

Source Code of org.gudy.azureus2.ui.swt.config.ConfigParameterAdapter

/*
* Created on 16-Jan-2006
* Created by Paul Gardner
* Copyright (C) 2006 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.ui.swt.config;

import org.gudy.azureus2.core3.config.COConfigurationManager;
import org.gudy.azureus2.core3.config.ParameterListener;
import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.ui.swt.config.generic.GenericParameterAdapter;

public class ConfigParameterAdapter extends GenericParameterAdapter
{
  private static final int CHANGINGCOUNT_BREAKER = 5;

  private Parameter owner;

  private int changingCount = 0;

  private boolean changedExternally = false;

  protected ConfigParameterAdapter(Parameter _owner, final String configID) {
    owner = _owner;

    COConfigurationManager.addParameterListener(configID,
        new ParameterListener() {
          public void parameterChanged(String parameterName) {
            try {
            if (!owner.isInitialised()){
              return;
            }
              if (owner.isDisposed()) {
                COConfigurationManager.removeParameterListener(parameterName, this);
                return;
              }
 
              informChanged(true);
             
              Object valueObject = owner.getValueObject();
 
              if (valueObject instanceof Boolean) {
                boolean b = COConfigurationManager.getBooleanParameter(parameterName);
                owner.setValue(new Boolean(b));
              } else if (valueObject instanceof Integer) {
                int i = COConfigurationManager.getIntParameter(parameterName);
                owner.setValue(new Integer(i));
              } else if (valueObject instanceof String) {
                String s = COConfigurationManager.getStringParameter(parameterName);
                owner.setValue(s);
              }
            } catch (Exception e) {
              Debug.out("parameterChanged trigger from ConfigParamAdapter "
                  + configID, e);
            }
          }
        });
  }

  public int getIntValue(String key) {
    return (COConfigurationManager.getIntParameter(key));
  }

  public int getIntValue(String key, int def) {
    return (COConfigurationManager.getIntParameter(key, def));
  }

  public void setIntValue(String key, int value) {
    if (changingCount == 0) {
      changedExternally = false;
    }
    changingCount++;
    try {
      if (getIntValue(key) == value) {
        changedExternally = true;
        return;
      }

      if (changingCount > CHANGINGCOUNT_BREAKER) {
        Debug.out("Preventing StackOverflow on setting " + key + " to " + value
            + " (was " + getIntValue(key) + ") via "
            + Debug.getCompressedStackTrace());
        changingCount = 1;
      } else {
        informChanging(value);

        if (!changedExternally) {
          COConfigurationManager.setParameter(key, value);
          changedExternally = true;
        }
      }

    } finally {
      changingCount--;
    }
  }

  public boolean resetIntDefault(String key) {
    if (COConfigurationManager.doesParameterDefaultExist(key)) {
      COConfigurationManager.removeParameter(key);
      return (true);
    }

    return (false);
  }

  public boolean getBooleanValue(String key) {
    return (COConfigurationManager.getBooleanParameter(key));
  }

  public boolean getBooleanValue(String key, boolean def) {
    return (COConfigurationManager.getBooleanParameter(key, def));
  }

  public void setBooleanValue(String key, boolean value) {
    if (changingCount == 0) {
      changedExternally = false;
    }

    changingCount++;
    try {
      if (getBooleanValue(key) == value) {
        changedExternally = true;
        return;
      }

      if (changingCount > CHANGINGCOUNT_BREAKER) {
        Debug.out("Preventing StackOverflow on setting " + key + " to " + value
            + " (was " + getBooleanValue(key) + ") via "
            + Debug.getCompressedStackTrace());
        changingCount = 1;
      } else {
        informChanging(value);

        if (!changedExternally) {
          COConfigurationManager.setParameter(key, value);
          changedExternally = true;
        }
      }

    } finally {
      changingCount--;
    }
  }

  public void informChanged(boolean internally) {
    if (owner.change_listeners != null) {
      for (int i = 0; i < owner.change_listeners.size(); i++) {
        try {
          ((ParameterChangeListener) owner.change_listeners.get(i)).parameterChanged(
              owner, internally);
        } catch (Exception e) {
          Debug.out(e);
        }
      }
    }
  }

  public void informChanging(int toValue) {
    if (owner.change_listeners != null) {
      for (int i = 0; i < owner.change_listeners.size(); i++) {
        try {
          ParameterChangeListener l = (ParameterChangeListener) owner.change_listeners.get(i);
          l.intParameterChanging(owner, toValue);
        } catch (Exception e) {
          Debug.out(e);
        }
      }
    }
  }

  public void informChanging(boolean toValue) {
    if (owner.change_listeners != null) {
      for (int i = 0; i < owner.change_listeners.size(); i++) {
        try {
          ParameterChangeListener l = (ParameterChangeListener) owner.change_listeners.get(i);
          l.booleanParameterChanging(owner, toValue);
        } catch (Exception e) {
          Debug.out(e);
        }
      }
    }
  }

  public void informChanging(String toValue) {
    if (owner.change_listeners != null) {
      for (int i = 0; i < owner.change_listeners.size(); i++) {
        try {
          ParameterChangeListener l = (ParameterChangeListener) owner.change_listeners.get(i);
          l.stringParameterChanging(owner, toValue);
        } catch (Exception e) {
          Debug.out(e);
        }
      }
    }
  }

  public void informChanging(double toValue) {
    if (owner.change_listeners != null) {
      for (int i = 0; i < owner.change_listeners.size(); i++) {
        try {
          ParameterChangeListener l = (ParameterChangeListener) owner.change_listeners.get(i);
          l.floatParameterChanging(owner, toValue);
        } catch (Exception e) {
          Debug.out(e);
        }
      }
    }
  }
}
TOP

Related Classes of org.gudy.azureus2.ui.swt.config.ConfigParameterAdapter

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.