/** * Created on May 21, 2007 * Created by Alan Snyder * 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 63.529,40 euros * 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France. * */ package com.aelitis.azureus.core.speedmanager.impl.v2; public class SaturatedMode implements Comparable { public static final SaturatedMode AT_LIMIT = new SaturatedMode("AT_LIMIT",0.95f); public static final SaturatedMode HIGH = new SaturatedMode("HIGH",0.75f); public static final SaturatedMode MED = new SaturatedMode("MED",0.25f); public static final SaturatedMode LOW = new SaturatedMode("LOW",0.03f); public static final SaturatedMode NONE = new SaturatedMode("NONE",0.0f); private final String name; private final float percentCapacity; private SaturatedMode(String _name, float _percent) { name = _name; percentCapacity = _percent; } private float getThreshold(){ return percentCapacity; } /** * From the currentRate and limit determine the mode. * @param currentRate - * @param limit - * @return - SaturatedMode */ public static SaturatedMode getSaturatedMode(int currentRate,int limit){ //unlimited mode has this value as zero. if(limit==0){ //put a value in so it will not stay in downloading mode. limit = SMConst.START_DOWNLOAD_RATE_MAX; } float percent = (float)currentRate/(float)limit; if( percent > AT_LIMIT.getThreshold() ){ return AT_LIMIT; } else if( percent > HIGH.getThreshold() ){ return HIGH; } else if( percent > MED.getThreshold() ){ return MED; } else if( percent > LOW.getThreshold() ){ return LOW; } return NONE; } public String toString() { return name; } /** * * @param mode * @return */ public boolean isGreater( SaturatedMode mode ) { if( this.compareTo(mode)>0 ){ return true; } return false; } /** * @param satMode the SaturatedMode to be compared. * @return a negative integer, zero, or a positive integer as this object * is less than, equal to, or greater than the specified object. */ public int compareTo(SaturatedMode satMode) { if( percentCapacity < satMode.getThreshold() ){ return -1; } else if( percentCapacity > satMode.getThreshold() ){ return +1; } return 0; } /** * @param obj the Object to be compared. * @return a negative integer, zero, or a positive integer as this object * is less than, equal to, or greater than the specified object. * @throws ClassCastException if the specified object's type prevents it * from being compared to this Object. */ public int compareTo(Object obj) { if( !(obj instanceof SaturatedMode) ){ throw new ClassCastException("Only comparable to SaturatedMode class."); } SaturatedMode casted = (SaturatedMode) obj; return compareTo(casted); } }