Units.java [src/java/hydraulics] Revision:   Date:
package hydraulics;

import java.util.ArrayList;

/**
* Last Updated: 29-August-2014
* @author Tyler Wible
* @since 28-July-2014
*/
public class Units{
    /**
     * Determine the unit conversion required to convert "unit_in" into "unit_out" taking into consideration leap years for time-units.
     * @param unit_in
     * @param unit_out
     * @param leapyr  true if it is a leap year, false otherwise
     * @return 
     */
    public double getUnitConversion(String unit_in, String unit_out, boolean leapyr){
        double conversion = -1;
        
        //Determine the time unit conversion
        if (unit_in.equalsIgnoreCase("seconds") && unit_out.equalsIgnoreCase("minutes")) {
            conversion = 1./60.;       //Convert seconds to minutes
        }else if(unit_in.equalsIgnoreCase("seconds") && unit_out.equalsIgnoreCase("hours")) {
            conversion = 1./3600.;     //Convert seconds to hours
        }else if(unit_in.equalsIgnoreCase("seconds") && unit_out.equalsIgnoreCase("days")) {
            conversion = 1./86400.;    //Convert seconds to days
        }else if(unit_in.equalsIgnoreCase("seconds") && unit_out.equalsIgnoreCase("years") && leapyr == false) {
            conversion = 1./31536000.; //Convert seconds to non-leap years
        }else if(unit_in.equalsIgnoreCase("seconds") && unit_out.equalsIgnoreCase("years") && leapyr == true) {
            conversion = 1./31622400.; //Convert seconds to leap years
      
        }else if(unit_in.equalsIgnoreCase("minutes") && unit_out.equalsIgnoreCase("seconds")) {
            conversion = 60.;          //Convert minutes to seconds
        }else if(unit_in.equalsIgnoreCase("minutes") && unit_out.equalsIgnoreCase("hours")) {
            conversion = 1./60.;       //Convert minutes to hours
        }else if(unit_in.equalsIgnoreCase("minutes") && unit_out.equalsIgnoreCase("days")) {
            conversion = 1./1440.;     //Convert minutes to days
        }else if(unit_in.equalsIgnoreCase("minutes") && unit_out.equalsIgnoreCase("years") && leapyr == false) {
            conversion = 1./525600.;   //Convert minutes to non-leap years
        }else if(unit_in.equalsIgnoreCase("minutes") && unit_out.equalsIgnoreCase("years") && leapyr == true) {
            conversion = 1./527040.;   //Convert minutes to leap years
      
        }else if(unit_in.equalsIgnoreCase("hours") && unit_out.equalsIgnoreCase("seconds")) {
            conversion = 3600.;        //Convert hours to seconds
        }else if(unit_in.equalsIgnoreCase("hours") && unit_out.equalsIgnoreCase("minutes")) {
            conversion = 60.;          //Convert hours to minutes
        }else if(unit_in.equalsIgnoreCase("hours") && unit_out.equalsIgnoreCase("days")) {
            conversion = 1./24.;       //Convert hours to days
        }else if(unit_in.equalsIgnoreCase("hours") && unit_out.equalsIgnoreCase("years") && leapyr == false) {
            conversion = 1./8760.;     //Convert hours to non-leap years
        }else if(unit_in.equalsIgnoreCase("hours") && unit_out.equalsIgnoreCase("years") && leapyr == true) {
            conversion = 1./8784.;     //Convert hours to leap years
      
        }else if(unit_in.equalsIgnoreCase("days") && unit_out.equalsIgnoreCase("seconds")) {
            conversion = 86400.;       //Convert days to seconds
        }else if(unit_in.equalsIgnoreCase("days") && unit_out.equalsIgnoreCase("minutes")) {
            conversion = 1440.;        //Convert days to minutes
        }else if(unit_in.equalsIgnoreCase("days") && unit_out.equalsIgnoreCase("hours")) {
            conversion = 24.;          //Convert days to hours
        }else if(unit_in.equalsIgnoreCase("days") && unit_out.equalsIgnoreCase("years") && leapyr == false) {
            conversion = 1./365.;      //Convert days to non-leap years
        }else if(unit_in.equalsIgnoreCase("days") && unit_out.equalsIgnoreCase("years") && leapyr == true) {
            conversion = 1./366.;      //Convert days to leap years
      
        }else if(unit_in.equalsIgnoreCase("years") && unit_out.equalsIgnoreCase("seconds") && leapyr == false) {
            conversion = 31536000.;    //Convert non-leap years to seconds
        }else if(unit_in.equalsIgnoreCase("years") && unit_out.equalsIgnoreCase("minutes") && leapyr == false) {
            conversion = 525600.;      //Convert non-leap years to minutes
        }else if(unit_in.equalsIgnoreCase("years") && unit_out.equalsIgnoreCase("hours") && leapyr == false) {
            conversion = 8760.;        //Convert non-leap years to hours
        }else if(unit_in.equalsIgnoreCase("years") && unit_out.equalsIgnoreCase("days") && leapyr == false) {
            conversion = 365.;         //Convert non-leap years days
      
        }else if(unit_in.equalsIgnoreCase("years") && unit_out.equalsIgnoreCase("seconds") && leapyr == true) {
            conversion = 31622400.;    //Convert leap years to seconds
        }else if(unit_in.equalsIgnoreCase("years") && unit_out.equalsIgnoreCase("minutes") && leapyr == true) {
            conversion = 527040.;      //Convert leap years to minutes
        }else if(unit_in.equalsIgnoreCase("years") && unit_out.equalsIgnoreCase("hours") && leapyr == true) {
            conversion = 8784.;        //Convert leap years to hours
        }else if(unit_in.equalsIgnoreCase("years") && unit_out.equalsIgnoreCase("days") && leapyr == true) {
            conversion = 366.;         //Convert leap years days
        
        
        //Determine the distance unit conversion
        }else if(unit_in.equalsIgnoreCase("feet") && unit_out.equalsIgnoreCase("meters")) {
            conversion = 1./3.28084;    //Convert feet to meters
        }else if(unit_in.equalsIgnoreCase("feet") && unit_out.equalsIgnoreCase("centimeters")) {
            conversion = 1./0.0328084;  //Convert feet to centimeters
        }else if(unit_in.equalsIgnoreCase("feet") && unit_out.equalsIgnoreCase("millimeters")) {
            conversion = 1./0.00328084; //Convert feet to millimeters
        }else if(unit_in.equalsIgnoreCase("feet") && unit_out.equalsIgnoreCase("kilometers")) {
            conversion = 1./3280.84;    //Convert feet to kilometers
      
        }else if(unit_in.equalsIgnoreCase("meters") && unit_out.equalsIgnoreCase("feet")) {
            conversion = 3.28084;       //Convert meters to feet
        }else if(unit_in.equalsIgnoreCase("meters") && unit_out.equalsIgnoreCase("centimeters")) {
            conversion = 100.;         //Convert meters to centimeters
        }else if(unit_in.equalsIgnoreCase("meters") && unit_out.equalsIgnoreCase("millimeters")) {
            conversion = 1000.;        //Convert meters to millimeters
        }else if(unit_in.equalsIgnoreCase("meters") && unit_out.equalsIgnoreCase("kilometers")) {
            conversion = 1./1000.;     //Convert meters to kilometers
      
        }else if(unit_in.equalsIgnoreCase("centimeters") && unit_out.equalsIgnoreCase("feet")) {
            conversion = 0.0328084;     //Convert centimeters to feet
        }else if(unit_in.equalsIgnoreCase("centimeters") && unit_out.equalsIgnoreCase("meters")) {
            conversion = 1./100.;      //Convert centimeters to meters
        }else if(unit_in.equalsIgnoreCase("centimeters") && unit_out.equalsIgnoreCase("millimeters")) {
            conversion = 10.;          //Convert centimeters to millimeters
        }else if(unit_in.equalsIgnoreCase("centimeters") && unit_out.equalsIgnoreCase("kilometers")) {
            conversion = 1./100000.;   //Convert centimeters to kilometers
      
        }else if(unit_in.equalsIgnoreCase("millimeters") && unit_out.equalsIgnoreCase("feet")) {
            conversion = 0.00328084;   //Convert millimeters to feet
        }else if(unit_in.equalsIgnoreCase("millimeters") && unit_out.equalsIgnoreCase("meters")) {
            conversion = 1./1000.;     //Convert millimeters to meters
        }else if(unit_in.equalsIgnoreCase("millimeters") && unit_out.equalsIgnoreCase("centimeters")) {
            conversion = 1./10.;       //Convert millimeters to centimeters
        }else if(unit_in.equalsIgnoreCase("millimeters") && unit_out.equalsIgnoreCase("kilometers")) {
            conversion = 1./1000000.;  //Convert millimeters to kilometers
      
        }else if(unit_in.equalsIgnoreCase("kilometers") && unit_out.equalsIgnoreCase("feet")) {
            conversion = 3280.84;      //Convert kilometers to feet
        }else if(unit_in.equalsIgnoreCase("kilometers") && unit_out.equalsIgnoreCase("meters")) {
            conversion = 1000.;        //Convert kilometers to meters
        }else if(unit_in.equalsIgnoreCase("kilometers") && unit_out.equalsIgnoreCase("centimeters")) {
            conversion = 100000.;      //Convert kilometers to centimeters
        }else if(unit_in.equalsIgnoreCase("kilometers") && unit_out.equalsIgnoreCase("millimeters")) {
            conversion = 1000000.;     //Convert kilometers to milimeters
        
        
        //Determine the mass unit conversion
        }else if(unit_in.equalsIgnoreCase("slugs") && unit_out.equalsIgnoreCase("kilograms")) {
            conversion = 14.5939029;     //Convert slugs to kilograms
        }else if(unit_in.equalsIgnoreCase("slugs") && unit_out.equalsIgnoreCase("grams")) {
            conversion = 14593.9029;     //Convert slugs to grams
        }else if(unit_in.equalsIgnoreCase("slugs") && unit_out.equalsIgnoreCase("milligrams")) {
            conversion = 14593902.9;     //Convert slugs to milligrams
        }else if(unit_in.equalsIgnoreCase("slugs") && unit_out.equalsIgnoreCase("micrograms")) {
            conversion = 14593902900.;   //Convert slugs to micrograms
        
        }else if(unit_in.equalsIgnoreCase("kilograms") && unit_out.equalsIgnoreCase("slugs")) {
            conversion = 0.0685217659;   //Convert kilograms to slugs
        }else if(unit_in.equalsIgnoreCase("kilograms") && unit_out.equalsIgnoreCase("grams")) {
            conversion = 1000.;          //Convert kilograms to grams
        }else if(unit_in.equalsIgnoreCase("kilograms") && unit_out.equalsIgnoreCase("milligrams")) {
            conversion = 1000000.;       //Convert kilograms to milligrams
        }else if(unit_in.equalsIgnoreCase("kilograms") && unit_out.equalsIgnoreCase("micrograms")) {
            conversion = 1000000000.;    //Convert kilograms to micrograms
        
        }else if(unit_in.equalsIgnoreCase("grams") && unit_out.equalsIgnoreCase("slugs")) {
            conversion = 0.0000685217659;  //Convert grams to slugs
        }else if(unit_in.equalsIgnoreCase("grams") && unit_out.equalsIgnoreCase("kilograms")) {
            conversion = 1./1000.;         //Convert grams to kilograms
        }else if(unit_in.equalsIgnoreCase("grams") && unit_out.equalsIgnoreCase("milligrams")) {
            conversion = 1000.;            //Convert grams to milligrams
        }else if(unit_in.equalsIgnoreCase("grams") && unit_out.equalsIgnoreCase("micrograms")) {
            conversion = 1000000.;         //Convert grams to micrograms
        
        }else if(unit_in.equalsIgnoreCase("milligrams") && unit_out.equalsIgnoreCase("slugs")) {
            conversion = 0.0000000685217659;  //Convert milligrams to slugs
        }else if(unit_in.equalsIgnoreCase("milligrams") && unit_out.equalsIgnoreCase("kilograms")) {
            conversion = 1./1000000.;         //Convert milligrams to kilograms
        }else if(unit_in.equalsIgnoreCase("milligrams") && unit_out.equalsIgnoreCase("grams")) {
            conversion = 1./1000.;            //Convert milligrams to grams
        }else if(unit_in.equalsIgnoreCase("milligrams") && unit_out.equalsIgnoreCase("micrograms")) {
            conversion = 1000.;               //Convert milligrams to micrograms
        
        }else if(unit_in.equalsIgnoreCase("micrograms") && unit_out.equalsIgnoreCase("slugs")) {
            conversion = 0.0000000000685217659;  //Convert micrograms to slugs
        }else if(unit_in.equalsIgnoreCase("micrograms") && unit_out.equalsIgnoreCase("kilograms")) {
            conversion = 1./1000000000.;         //Convert micrograms to kilograms
        }else if(unit_in.equalsIgnoreCase("micrograms") && unit_out.equalsIgnoreCase("grams")) {
            conversion = 1./1000000.;            //Convert micrograms to grams
        }else if(unit_in.equalsIgnoreCase("micrograms") && unit_out.equalsIgnoreCase("milligrams")) {
            conversion = 1./1000.;               //Convert micrograms to milligrams
        
        
        //Determine the area unit conversion
        }else if(unit_in.equalsIgnoreCase("square feet") && unit_out.equalsIgnoreCase("square meters")) {
            conversion = 1./10.7639;    //Convert square feet to square meters
        }else if(unit_in.equalsIgnoreCase("square feet") && unit_out.equalsIgnoreCase("hectare")) {
            conversion = 1./107639.;    //Convert square feet to hectacres
        
        }else if(unit_in.equalsIgnoreCase("square meters") && unit_out.equalsIgnoreCase("square feet")) {
            conversion = 10.7639;       //Convert square meters to square feet
        }else if(unit_in.equalsIgnoreCase("square meters") && unit_out.equalsIgnoreCase("hectare")) {
            conversion = 0.0001;        //Convert square meters to hectacres
        
        }else if(unit_in.equalsIgnoreCase("hectare") && unit_out.equalsIgnoreCase("square feet")) {
            conversion = 107639.;       //Convert hectacres to square feet
        }else if(unit_in.equalsIgnoreCase("hectare") && unit_out.equalsIgnoreCase("square meters")) {
            conversion = 10000.;        //Convert hectacres to square meters
        
        
        }else{
            conversion = 1.;           //Conversion Error, conversion not accounted for
        }
        return conversion;
    }
    /**
     * 
     * @param value
     * @param unit_in
     * @param unit_out
     * @param magnitude
     * @param leapyr
     * @return 
     */
    public double convertUnits(double value, String unit_in, String unit_out, int magnitude, boolean leapyr){
        //Get conversion factor
        double conversion = getUnitConversion(unit_in, unit_out, leapyr);
                
        //Convert the value into its new units
        value = value * Math.pow(conversion, magnitude);
        
        return value;
    }
    /**
     * 
     * @param array
     * @param unit_in
     * @param unit_out
     * @param magnitude
     * @param leapyr
     * @return 
     */
    public ArrayList<Double> convertUnits(ArrayList<Double> array, String unit_in, String unit_out, int magnitude, boolean leapyr){
        //Get conversion factor
        double conversion = getUnitConversion(unit_in, unit_out, leapyr);
                
        //Convert line by line the array into its new units
        for(int i=0; i< array.size(); i++){
            array.set(i, array.get(i) * Math.pow(conversion, magnitude));
        }
        
        return array;
    }
}