Package org.gudy.azureus2.core3.config.impl

Source Code of org.gudy.azureus2.core3.config.impl.TransferSpeedValidator

package org.gudy.azureus2.core3.config.impl;

/*
* Created on 13-Feb-2005
* Created by James Yeh
* Copyright (C) 2004, 2005, 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.
*
*/

import org.gudy.azureus2.core3.config.*;
import org.gudy.azureus2.core3.global.GlobalManager;

import com.aelitis.azureus.core.AzureusCore;
import com.aelitis.azureus.core.speedmanager.SpeedManager;

/**
* Provides validation for transfer speed settings
* @version 1.0
* @since 1.4
* @author James Yeh
*/
public final class TransferSpeedValidator
{
  public static final String AUTO_UPLOAD_ENABLED_CONFIGKEY       =  "Auto Upload Speed Enabled";
  public static final String AUTO_UPLOAD_SEEDING_ENABLED_CONFIGKEY   =  "Auto Upload Speed Seeding Enabled";
   
    public static final String UPLOAD_CONFIGKEY     =  "Max Upload Speed KBs";
    public static final String UPLOAD_SEEDING_CONFIGKEY =  "Max Upload Speed Seeding KBs";
    public static final String DOWNLOAD_CONFIGKEY     =  "Max Download Speed KBs";

    public static final String UPLOAD_SEEDING_ENABLED_CONFIGKEY =  "enable.seedingonly.upload.rate";
   
    public static final String[] CONFIG_PARAMS =
      AUTO_UPLOAD_ENABLED_CONFIGKEY,
      AUTO_UPLOAD_SEEDING_ENABLED_CONFIGKEY,
      UPLOAD_CONFIGKEY,
      UPLOAD_SEEDING_CONFIGKEY,
      DOWNLOAD_CONFIGKEY,
      UPLOAD_SEEDING_ENABLED_CONFIGKEY,
    };
   
    private final String configKey;
    private final Number configValue;

    private static boolean auto_upload_enabled;
    private static boolean auto_upload_seeding_enabled;

    private static boolean seeding_upload_enabled;
   
    static{
             
      COConfigurationManager.addAndFireParameterListeners(
          new String[] {
            UPLOAD_SEEDING_ENABLED_CONFIGKEY,
            AUTO_UPLOAD_ENABLED_CONFIGKEY,
            AUTO_UPLOAD_SEEDING_ENABLED_CONFIGKEY
          },
          new PriorityParameterListener()
            {
              public void
              parameterChanged(
                String parameterName)
              {
                if (parameterName == null || parameterName.equals(UPLOAD_SEEDING_ENABLED_CONFIGKEY)) {
                  seeding_upload_enabled = COConfigurationManager.getBooleanParameter( UPLOAD_SEEDING_ENABLED_CONFIGKEY );
                }
                if (parameterName == null || parameterName.equals(AUTO_UPLOAD_ENABLED_CONFIGKEY)) {
                  auto_upload_enabled = COConfigurationManager.getBooleanParameter(AUTO_UPLOAD_ENABLED_CONFIGKEY);
                }
                if (parameterName == null || parameterName.equals(AUTO_UPLOAD_SEEDING_ENABLED_CONFIGKEY)) {
                  auto_upload_seeding_enabled = COConfigurationManager.getBooleanParameter(AUTO_UPLOAD_SEEDING_ENABLED_CONFIGKEY);
                }
              }
            })
    }
   
    /**
     * Creates a TransferSpeedValidator with the given configuration key and value
     * @param configKey Configuration key; must be "Max Upload Speed KBs" or "Max Download Speed KBs"
     * @param value Configuration value to be validated
     */
    public TransferSpeedValidator(final String configKey, final Number value)
    {
        this.configKey = configKey;
        configValue = value;
    }

    /**
     * Gets the transformed value as an Integer
     */
    private static Object validate(final String configKey, final Number value)
    {
        //assert value instanceof Number;

        int newValue = value.intValue();

        if(newValue < 0)
        {
            newValue = 0;
        }

        if(configKey == UPLOAD_CONFIGKEY)
        {
            final int downValue = COConfigurationManager.getIntParameter(DOWNLOAD_CONFIGKEY);

            if(
                    newValue != 0 &&
                    newValue < COConfigurationManager.CONFIG_DEFAULT_MIN_MAX_UPLOAD_SPEED &&
                    (downValue == 0 || downValue > newValue*2)
            )
            {
                newValue = (downValue + 1)/2;
                //COConfigurationManager.setParameter(DOWNLOAD_CONFIGKEY, newValue * 2);
            }
        }
        else if(configKey == DOWNLOAD_CONFIGKEY)
        {
            final int upValue = COConfigurationManager.getIntParameter(UPLOAD_CONFIGKEY);

            if(
                    upValue != 0 &&
                    upValue < COConfigurationManager.CONFIG_DEFAULT_MIN_MAX_UPLOAD_SPEED
            )
            {
                if(newValue > upValue*2)
                {
                    newValue = upValue*2;
                    //COConfigurationManager.setParameter(UPLOAD_CONFIGKEY, (newValue+1)/2);
                }
                else if(newValue == 0)
                {
                    newValue = upValue*2;
                    //COConfigurationManager.setParameter(UPLOAD_CONFIGKEY, 0);
                }
            }
        }else if ( configKey == UPLOAD_SEEDING_CONFIGKEY ){

            // nothing to do as this is active only when were not downloading
            // so we don't really care
        }else
        {
            throw new IllegalArgumentException("Invalid Configuation Key; use key for max upload and max download");
        }

        return new Integer(newValue);
        //return value;
    }

    /**
     * Validates the given configuration key/value pair and returns the validated value
     * @return Modified configuration value that conforms to validation as an Integer
     */
    public Object getValue()
    {
        return validate(configKey, configValue);
    }
   
    public static String
    getActiveUploadParameter(
      GlobalManager  gm )
    {
       if ( seeding_upload_enabled && gm.isSeedingOnly()){
         
          return( TransferSpeedValidator.UPLOAD_SEEDING_CONFIGKEY );
         
        }else{
         
          return( TransferSpeedValidator.UPLOAD_CONFIGKEY );
        }
    }
   
    public static String
    getDownloadParameter()
    {
      return( DOWNLOAD_CONFIGKEY );
    }
   
  public static int
  getGlobalDownloadRateLimitBytesPerSecond()
  {
    return( COConfigurationManager.getIntParameter( getDownloadParameter()) * 1024 );
  }
 
  public static void
  setGlobalDownloadRateLimitBytesPerSecond(
    int    bytes_per_second )
  {
    COConfigurationManager.setParameter( getDownloadParameter(), (bytes_per_second+1023)/1024 );
  }
 
    public static boolean
    isAutoUploadAvailable(
      AzureusCore  core )
    {
      SpeedManager speedManager = core.getSpeedManager();
      return speedManager == null ? false : speedManager.isAvailable();
    }
   
    public static boolean
    isAutoSpeedActive(
        GlobalManager gm )
    {     
      // if downloading+seeding is set then we always use this regardless of
      // only seeding status

      if (auto_upload_enabled) {
        return auto_upload_enabled;
      }

      if ( gm.isSeedingOnly()){
       
        return auto_upload_seeding_enabled;
       
      }else{
       
        return auto_upload_enabled;
      }
    }

    public static String
    getActiveAutoUploadParameter(
        GlobalManager gm)
    {
      if (!auto_upload_enabled && gm.isSeedingOnly()) {
        return AUTO_UPLOAD_SEEDING_ENABLED_CONFIGKEY;
      }
      return AUTO_UPLOAD_ENABLED_CONFIGKEY;
    }
   
}
TOP

Related Classes of org.gudy.azureus2.core3.config.impl.TransferSpeedValidator

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.