ErrorRange.java [tools/WepsSoilsIfcCreator/src/usda/weru/soil] Revision: default  Date:
package usda.weru.soil;

//import	java.awt.*;
import	javax.swing.*;

public	class	ErrorRange {
    String	title;
    double	loValue;
    double	hiValue;
    
    /**
     * wjr
     * @param lo
     */
    
    public void setLowValue(double lo) {
        loValue = lo;
    }
    
    /**
     * wjr
     * @param high
     */
    
    public void setHighValue(double high) {
        hiValue = high;
    }
    
    /********************************************************************* wjr */
    /**
     * wjr
     * @param ti
     * @param lo
     * @param hi
     */
    /* entry for integer or double */
    
    public	ErrorRange(String ti, double lo, double hi) {
        title = ti;
        loValue = lo;
        hiValue = hi;
    }
    
    /**
     * wjr
     * @param ti
     */
    /* entry for string */
    
    public	ErrorRange(String ti) {
        title = ti;
        loValue = 0;
        hiValue = -1;
    }
    
    /**
     * wjr
     * @param label
     * @return
     */
    
    public final int errorBox(String label) {        
        int rtnval = checkRange(label);
        return errorBox(rtnval);
    }
    
    public final int errorBox(double value) {
        int rtnval = checkRange(value);
        return errorBox(rtnval);
    }
    
    private final int errorBox(int rtnval) {
        String message = null;
        //System.out.println("ER_eB: " + rtnval);
        switch (rtnval) {
            case -1 :
            case -2 :
            case  1 : message = "\nRange = " + loValue + " to " + hiValue + "."; break;
            case  2 : message = "\nInvalid character for number"; break;
            case  3 : message = "\nBlank entry is not valid"; break;
        }
            
        if (rtnval != 0) JOptionPane.showMessageDialog(new JPanel(), title + message, "Invalid input", JOptionPane.WARNING_MESSAGE);
        return rtnval;
    }
    
        /**
         * wjr *
         * @param label
         * @return
         */
        
        public	int	checkRange(String label) {
            double range = 0.0;
            
            if (loValue == 0 && hiValue == -1) {		// it's a string
                if (label == null) return -3;
                if (label.trim().length() > 0) return 0;
                return -3;
            }
            
////System.out.println("checkRange: " + title + " " + label + " " + loValue + " " + hiValue);
            if (label == null) return -2;
            try{										// it's a number
                range = Double.valueOf(label).doubleValue();
                if ( range < loValue || range > hiValue) return (range < loValue) ? -1 : 1;
            }catch (NumberFormatException e) {
                return -2;
            }
            return 0;
            
        }
        
        public	int	checkRange(double value){
            if (Double.isNaN(value)) return -1;
            if ( value < loValue || value > hiValue) return (value < loValue) ? -1 : 1;
            return 0;
        }
        
        /**
         * wjr *
         * @param idx
         * @return
         */
        
        public	String	adjValue(int idx) {
            if (idx == -3) return "no value given";
            double rtn = 0;
            switch (idx) {
                case -1 : rtn = loValue; break;
                case  1 : rtn = hiValue; break;
                case -2 : rtn = (loValue + hiValue) / 2; break;
            }
            int numdigits = (int) -(Math.log(rtn) / Math.log(10.0)) + 4;
            if (numdigits < 0) numdigits = 0;
            return usda.weru.util.Util.formatDouble(rtn, numdigits);
        }
        
        /**
         * wjr *
         * @param inpval
         * @return
         */
        
        public	double	adjValue(double inpval) {
            if (inpval < loValue) return loValue;
            if (inpval > hiValue) return hiValue;
            return inpval;
        }
        
        /**
         * wjr *
         * @return
         */
        
        public	String	getToolTipText() {
            if (loValue > hiValue) return title;
            else return title + " " + loValue + " - " + hiValue;
        }
        
        /************************************************************************ wjr **/
    }