/*
 * $Id: Units.java,v 1.5 2001/02/09 18:42:31 dwd Exp $
 *
 * This software is provided by NOAA for full, free and open release.  It is
 * understood by the recipient/user that NOAA assumes no liability for any
 * errors contained in the code.  Although this software is released without
 * conditions or restrictions in its use, it is expected that appropriate
 * credit be given to its author and to the National Oceanic and Atmospheric
 * Administration should the software be included by the recipient as an
 * element in other product development.
 */

package  sgtplot.util;


import java.lang.reflect.Constructor;

import sgtplot.dm.SGTData;
import sgtplot.dm.SGTGrid;
import sgtplot.dm.SGTLine;
import sgtplot.dm.SGTMetaData;
import sgtplot.dm.SimpleGrid;
import sgtplot.dm.SimpleLine;

/**
 * Units is a static class for converting the units of DependentVariables.
 *
 * @author Donald Denbo
 * @version $Revision: 1.5 $, $Date: 2001/02/09 18:42:31 $
 * @since sgtplot 1.0
**/
public class Units implements java.io.Serializable {
  /** No base units selected  */
  public static final int NONE = 0;
  /** base units are temperature  */
  public static final int TEMPERATURE = 1;
  /** base units are velocity  */
  public static final int VELOCITY = 2;
  /** base units are distance  */
  public static final int DISTANCE = 3;
  /** check X MetaData for units  */
  public static final int X_AXIS = 0;
  /** check Y MetaData for units  */
  public static final int Y_AXIS = 1;
  /** check Z MetaData for units */
  public static final int Z_AXIS = 2;
  /**
   * Return the base unit for the meta data.
   *
   * @return TEMPERATURE, VELOCITY, DISTANCE, or NONE
   */
  public static int getBaseUnit(SGTMetaData meta) {
    if(Temperature.isBaseUnit(meta)) {
      return TEMPERATURE;
    } else if(Velocity.isBaseUnit(meta)) {
      return VELOCITY;
    } else if(Distance.isBaseUnit(meta)) {
      return DISTANCE;
    } else {
      return NONE;
    }
  }
  /**
   * Convert data to common units.
   *
   * @param grid the data
   * @param base the base units, TEMPERATURE, VELOCITY, DISTANCE, or NONE
   * @param comp grid component, X_AXIS, Y_AXIS, or Z_AXIS
   */
  public static SGTData convertToBaseUnit(SGTData grid, int base, int comp) {
    switch(base) {
      case TEMPERATURE: return Temperature.convertToBaseUnit(grid, comp);
      case VELOCITY: return Velocity.convertToBaseUnit(grid, comp);
      case DISTANCE: return Distance.convertToBaseUnit(grid, comp);
      default:
      case NONE: return grid;
    }
  }
}
/**
 * Supports temperature conversions.
 */
class Temperature implements java.io.Serializable {
  //
  // All conversions are to the default units of degC
  //
  // degC = scale*origUnits + offset
  //
  private static final String[] name =
  {"C", "degC", "K", "degK", "F", "degF", "k", "deg_c", "deg_k"};
  private static final double[] scale =
  {1.0, 1.0, 1.0, 1.0, 5.0/9.0, 5.0/9.0, 1.0, 1.0, 1.0};
  private static final double[] offset =
  {0.0, 0.0, -273.15, -273.15, 32.0*5.0/9.0, 32.0*5.0/9.0, -273.15, 0.0, -273.15};
  //
  private static final String timeArrayName = "[Lgov.noaa.pmel.util.GeoDate";
  private static final String doubleArrayName = "[D";
  private static final String stringName = "java.lang.String";
  /**
   *
   */
  static SGTData convertToBaseUnit(SGTData grid, int comp) {
    int unit, count;
    boolean hand;
    //    GeoVariable xDim, yDim, zDim;
    //    TimeVariable tDim;
    //    DependentVariable variable, new_variable;
    //    VarDesc new_vardesc;
    SGTData new_grid = null;
    SGTMetaData meta, newMeta;
    int projection;
    
    String units;
    switch(comp) {
    default:
    case Units.X_AXIS:
      meta = ((SGTLine)grid).getXMetaData();
      break;
    case Units.Y_AXIS:
      meta = ((SGTLine)grid).getYMetaData();
      break;
    case Units.Z_AXIS:
      meta = ((SGTGrid)grid).getZMetaData();
    }
    units = meta.getUnits();
    //
    // is it one of the changeable units?
    //
    for(unit = 0; unit < name.length; unit++) {
      if(units.equals(name[unit])) break;
    }
    
    if(unit >= name.length) return grid;
    //
    // is it already in the base units?
    //
    if(scale[unit] == 1.0 && offset[unit] == 0.0) return grid;
    //
    // convert the units
    //
    double values[], new_values[];
    switch(comp) {
    default:
    case Units.X_AXIS:
      values = ((SGTLine)grid).getXArray();
      break;
    case Units.Y_AXIS:
      values = ((SGTLine)grid).getYArray();
      break;
    case Units.Z_AXIS:
      values = ((SGTGrid)grid).getZArray();
    }
    new_values = new double[values.length];
    
    for(count=0; count < values.length; count++) {
      new_values[count] = scale[unit]*values[count] + offset[unit];
    }
    //
    // build the new dependent variable
    //
    newMeta = new SGTMetaData(meta.getName(), "degC", meta.isReversed(), meta.isModulo());
    newMeta.setModuloValue(meta.getModuloValue());
    newMeta.setModuloTime(meta.getModuloTime());

    if(grid instanceof SGTLine) {
      boolean simpleLine = grid instanceof SimpleLine;
      if(simpleLine) {
	new_grid = (SGTLine)grid.copy();
      }
      Class[] classArgs = new Class[3];
      Object[] constructArgs = new Object[3];
      Class gridClass = grid.getClass();
      Constructor gridConstruct;
      switch(comp) {
      default:
      case Units.X_AXIS:
	if(simpleLine) {
	  ((SimpleLine)new_grid).setXArray(new_values);
	} else {
	  if(((SGTLine)grid).isYTime()) {
	    try {
	      classArgs[0] = Class.forName(doubleArrayName);
	      classArgs[1] = Class.forName(timeArrayName);
	      classArgs[2] = Class.forName(stringName);
	      gridConstruct = gridClass.getConstructor(classArgs);
	      constructArgs[0] = new_values;
	      constructArgs[1] = ((SGTLine)grid).getTimeArray();
	      constructArgs[2] = ((SGTLine)grid).getTitle();
	      new_grid = (SGTData)gridConstruct.newInstance(constructArgs);
	    } catch (java.lang.Exception e) {
	      System.out.println("Temperature conversion: " + e);
	    }
	  } else {
	    try {
	      classArgs[0] = Class.forName(doubleArrayName);
	      classArgs[1] = Class.forName(doubleArrayName);
	      classArgs[2] = Class.forName(stringName);
	      gridConstruct = gridClass.getConstructor(classArgs);
	      constructArgs[0] = new_values;
	      constructArgs[1] = ((SGTLine)grid).getYArray();
	      constructArgs[2] = ((SGTLine)grid).getTitle();
	      new_grid = (SGTData)gridConstruct.newInstance(constructArgs);
	    } catch (java.lang.Exception e) {
	      System.out.println("Temperature conversion: " + e);
	    }
	  }
	  ((SimpleLine)new_grid).setYMetaData(((SGTLine)grid).getYMetaData());
	}
	((SimpleLine)new_grid).setXMetaData(newMeta);
	break;
      case Units.Y_AXIS:
	if(simpleLine) {
	  ((SimpleLine)new_grid).setYArray(new_values);
	} else {
	  if(((SGTLine)grid).isXTime()) {
	    try {
	      classArgs[0] = Class.forName(timeArrayName);
	      classArgs[1] = Class.forName(doubleArrayName);
	      classArgs[2] = Class.forName(stringName);
	      gridConstruct = gridClass.getConstructor(classArgs);
	      constructArgs[0] = ((SGTLine)grid).getTimeArray();
	      constructArgs[1] = new_values;
	      constructArgs[2] = ((SGTLine)grid).getTitle();
	      new_grid = (SGTData)gridConstruct.newInstance(constructArgs);
	    } catch (java.lang.Exception e) {
	      System.out.println("Temperature conversion: " + e);
	    }
	  } else {
	    try {
	      classArgs[0] = Class.forName(doubleArrayName);
	      classArgs[1] = Class.forName(doubleArrayName);
	      classArgs[2] = Class.forName(stringName);
	      gridConstruct = gridClass.getConstructor(classArgs);
	      constructArgs[0] = ((SGTLine)grid).getXArray();
	      constructArgs[1] = new_values;
	      constructArgs[2] = ((SGTLine)grid).getTitle();
	      new_grid = (SGTData)gridConstruct.newInstance(constructArgs);
	    } catch (java.lang.Exception e) {
	      System.out.println("Temperature conversion: " + e);
	    }
	  }
	  ((SimpleLine)new_grid).setXMetaData(((SGTLine)grid).getXMetaData());
	}
	((SimpleLine)new_grid).setYMetaData(newMeta);
      }
    } else if(grid instanceof SGTGrid) {
      boolean simpleGrid = grid instanceof SimpleGrid;
      if(simpleGrid) {
	new_grid = (SGTGrid)grid.copy();
      }
      Class[] classArgs = new Class[4];
      Object[] constructArgs = new Object[4];
      Class gridClass = grid.getClass();
      Constructor gridConstruct;
      switch(comp) {
      default:
      case Units.X_AXIS:
	if(simpleGrid) {
	  ((SimpleGrid)new_grid).setXArray(new_values);
	} else {
	  if(((SGTGrid)grid).isYTime()) {
	    try {
	      classArgs[0] = Class.forName(doubleArrayName);
	      classArgs[1] = Class.forName(doubleArrayName);
	      classArgs[2] = Class.forName(timeArrayName);
	      classArgs[3] = Class.forName(stringName);
	      gridConstruct = gridClass.getConstructor(classArgs);
	      constructArgs[0] = ((SGTGrid)grid).getZArray();
	      constructArgs[1] = new_values;
	      constructArgs[2] = ((SGTGrid)grid).getTimeArray();
	      constructArgs[2] = ((SGTGrid)grid).getTitle();
	      new_grid = (SGTData)gridConstruct.newInstance(constructArgs);
	    } catch (java.lang.Exception e) {
	      System.out.println("Temperature conversion: " + e);
	    }
	  } else {
	    try {
	      classArgs[0] = Class.forName(doubleArrayName);
	      classArgs[1] = Class.forName(doubleArrayName);
	      classArgs[2] = Class.forName(doubleArrayName);
	      classArgs[3] = Class.forName(stringName);
	      gridConstruct = gridClass.getConstructor(classArgs);
	      constructArgs[0] = ((SGTGrid)grid).getZArray();
	      constructArgs[1] = new_values;
	      constructArgs[2] = ((SGTGrid)grid).getYArray();
	      constructArgs[2] = ((SGTGrid)grid).getTitle();
	      new_grid = (SGTData)gridConstruct.newInstance(constructArgs);
	    } catch (java.lang.Exception e) {
	      System.out.println("Temperature conversion: " + e);
	    }
	  }
	  ((SimpleGrid)new_grid).setYMetaData(((SGTGrid)grid).getYMetaData());
	  ((SimpleGrid)new_grid).setZMetaData(((SGTGrid)grid).getZMetaData());
	}
	((SimpleGrid)new_grid).setXMetaData(newMeta);
	break;
      case Units.Y_AXIS:
	if(simpleGrid) {
	  ((SimpleGrid)new_grid).setYArray(new_values);
	} else {
	  if(((SGTGrid)grid).isXTime()) {
	    try {
	      classArgs[0] = Class.forName(doubleArrayName);
	      classArgs[1] = Class.forName(timeArrayName);
	      classArgs[2] = Class.forName(doubleArrayName);
	      classArgs[3] = Class.forName(stringName);
	      gridConstruct = gridClass.getConstructor(classArgs);
	      constructArgs[0] = ((SGTGrid)grid).getZArray();
	      constructArgs[1] = ((SGTGrid)grid).getTimeArray();
	      constructArgs[2] = new_values;
	      constructArgs[2] = ((SGTGrid)grid).getTitle();
	      new_grid = (SGTData)gridConstruct.newInstance(constructArgs);
	    } catch (java.lang.Exception e) {
	      System.out.println("Temperature conversion: " + e);
	    }
	  } else {
	    try {
	      classArgs[0] = Class.forName(doubleArrayName);
	      classArgs[1] = Class.forName(doubleArrayName);
	      classArgs[2] = Class.forName(doubleArrayName);
	      classArgs[3] = Class.forName(stringName);
	      gridConstruct = gridClass.getConstructor(classArgs);
	      constructArgs[0] = ((SGTGrid)grid).getZArray();
	      constructArgs[1] = ((SGTGrid)grid).getXArray();
	      constructArgs[2] = new_values;
	      constructArgs[2] = ((SGTGrid)grid).getTitle();
	      new_grid = (SGTData)gridConstruct.newInstance(constructArgs);
	    } catch (java.lang.Exception e) {
	      System.out.println("Temperature conversion: " + e);
	    }
	  }
	  ((SimpleGrid)new_grid).setXMetaData(((SGTGrid)grid).getXMetaData());
	  ((SimpleGrid)new_grid).setZMetaData(((SGTGrid)grid).getZMetaData());
	}
	((SimpleGrid)new_grid).setYMetaData(newMeta);
	break;
      case Units.Z_AXIS:
	if(simpleGrid) {
	  ((SimpleGrid)new_grid).setZArray(new_values);
	} else {
	  if(((SGTGrid)grid).isXTime()) {
	    try {
	      classArgs[0] = Class.forName(doubleArrayName);
	      classArgs[1] = Class.forName(timeArrayName);
	      classArgs[2] = Class.forName(doubleArrayName);
	      classArgs[3] = Class.forName(stringName);
	      gridConstruct = gridClass.getConstructor(classArgs);
	      constructArgs[0] = new_values;
	      constructArgs[1] = ((SGTGrid)grid).getTimeArray();
	      constructArgs[2] = ((SGTGrid)grid).getYArray();
	      constructArgs[2] = ((SGTGrid)grid).getTitle();
	      new_grid = (SGTData)gridConstruct.newInstance(constructArgs);
	    } catch (java.lang.Exception e) {
	      System.out.println("Temperature conversion: " + e);
	    }
	  } else if(((SGTGrid)grid).isYTime()) {
	    try {
	      classArgs[0] = Class.forName(doubleArrayName);
	      classArgs[1] = Class.forName(doubleArrayName);
	      classArgs[2] = Class.forName(timeArrayName);
	      classArgs[3] = Class.forName(stringName);
	      gridConstruct = gridClass.getConstructor(classArgs);
	      constructArgs[0] = new_values;
	      constructArgs[1] = ((SGTGrid)grid).getXArray();
	      constructArgs[2] = ((SGTGrid)grid).getTimeArray();
	      constructArgs[2] = ((SGTGrid)grid).getTitle();
	      new_grid = (SGTData)gridConstruct.newInstance(constructArgs);
	    } catch (java.lang.Exception e) {
	      System.out.println("Temperature conversion: " + e);
	    }
	  } else {
	    try {
	      classArgs[0] = Class.forName(doubleArrayName);
	      classArgs[1] = Class.forName(doubleArrayName);
	      classArgs[2] = Class.forName(doubleArrayName);
	      classArgs[3] = Class.forName(stringName);
	      gridConstruct = gridClass.getConstructor(classArgs);
	      constructArgs[0] = new_values;
	      constructArgs[1] = ((SGTGrid)grid).getXArray();
	      constructArgs[2] = ((SGTGrid)grid).getYArray();
	      constructArgs[2] = ((SGTGrid)grid).getTitle();
	      new_grid = (SGTData)gridConstruct.newInstance(constructArgs);
	    } catch (java.lang.Exception e) {
	      System.out.println("Temperature conversion: " + e);
	    }
	  }
	  ((SimpleGrid)new_grid).setXMetaData(((SGTGrid)grid).getXMetaData());
	  ((SimpleGrid)new_grid).setYMetaData(((SGTGrid)grid).getYMetaData());
	}
	((SimpleGrid)new_grid).setZMetaData(newMeta);
      }
    }
    return new_grid;
  }
  
  static boolean isBaseUnit(SGTMetaData meta) {
    int count;
    String units = meta.getUnits();
    
    for(count=0; count < name.length; count++) {
      if(units.equals(name[count])) return true;
    }
    return false;
  }
}

/**
 * Supports distance conversions.
 */
class Distance implements java.io.Serializable {
  static SGTData convertToBaseUnit(SGTData grid, int comp) {
    return grid;
  }
  static boolean isBaseUnit(SGTMetaData meta) {
    return false;
  }
}

/**
 * Supports velocity conversions.
 */
class Velocity implements java.io.Serializable {
  //
  // All conversions are to the default units of "m s-1"
  //
  // m s-1 = scale*origUnits + offset
  //
  private static final String[] name =
  {"m s-1", "m/s", "cm s-1", "cm/s"};
  private static final double[] scale =
  {1.0, 1.0, 0.01, 0.01};
  private static final double[] offset =
  {0.0, 0.0, 0.0, 0.0};
  //
  private static final String timeArrayName = "[Lgov.noaa.pmel.util.GeoDate";
  private static final String doubleArrayName = "[D";
  private static final String stringName = "java.lang.String";
  /**
   *
   */
  static SGTData convertToBaseUnit(SGTData grid, int comp) {
    int unit, count;
    boolean hand;
    //    GeoVariable xDim, yDim, zDim;
    //    TimeVariable tDim;
    //    DependentVariable variable, new_variable;
    //    VarDesc new_vardesc;
    SGTData new_grid = null;
    SGTMetaData meta, newMeta;
    int projection;
    
    String units;
    switch(comp) {
    default:
    case Units.X_AXIS:
      meta = ((SGTLine)grid).getXMetaData();
      break;
    case Units.Y_AXIS:
      meta = ((SGTLine)grid).getYMetaData();
      break;
    case Units.Z_AXIS:
      meta = ((SGTGrid)grid).getZMetaData();
    }
    units = meta.getUnits();
    //
    // is it one of the changeable units?
    //
    for(unit = 0; unit < name.length; unit++) {
      if(units.equals(name[unit])) break;
    }
    
    if(unit >= name.length) return grid;
    //
    // is it already in the base units?
    //
    if(scale[unit] == 1.0 && offset[unit] == 0.0) return grid;
    //
    // convert the units
    //
    double values[], new_values[];
    switch(comp) {
    default:
    case Units.X_AXIS:
      values = ((SGTLine)grid).getXArray();
      break;
    case Units.Y_AXIS:
      values = ((SGTLine)grid).getYArray();
      break;
    case Units.Z_AXIS:
      values = ((SGTGrid)grid).getZArray();
    }
    new_values = new double[values.length];
    
    for(count=0; count < values.length; count++) {
      new_values[count] = scale[unit]*values[count] + offset[unit];
    }
    //
    // build the new dependent variable
    //
    newMeta = new SGTMetaData(meta.getName(), 
                              "m s-1", 
                              meta.isReversed(), 
                              meta.isModulo());
    newMeta.setModuloValue(meta.getModuloValue());
    newMeta.setModuloTime(meta.getModuloTime());

    if(grid instanceof SGTLine) {
      boolean simpleLine = grid instanceof SimpleLine;
      if(simpleLine) {
	new_grid = (SGTLine)grid.copy();
      }
      Class[] classArgs = new Class[3];
      Object[] constructArgs = new Object[3];
      Class gridClass = grid.getClass();
      Constructor gridConstruct;
      switch(comp) {
      default:
      case Units.X_AXIS:
	if(simpleLine) {
	  ((SimpleLine)new_grid).setXArray(new_values);
	} else {
	  if(((SGTLine)grid).isYTime()) {
	    try {
	      classArgs[0] = Class.forName(doubleArrayName);
	      classArgs[1] = Class.forName(timeArrayName);
	      classArgs[2] = Class.forName(stringName);
	      gridConstruct = gridClass.getConstructor(classArgs);
	      constructArgs[0] = new_values;
	      constructArgs[1] = ((SGTLine)grid).getTimeArray();
	      constructArgs[2] = ((SGTLine)grid).getTitle();
	      new_grid = (SGTData)gridConstruct.newInstance(constructArgs);
	    } catch (java.lang.Exception e) {
	      System.out.println("Velocity conversion: " + e);
	    }
	    //              new_grid = new SimpleLine(new_values, 
	    //                                      ((SGTLine)grid).getTimeArray(), 
	    //                                      ((SGTLine)grid).getTitle());
	  } else {
	    try {
	      classArgs[0] = Class.forName(doubleArrayName);
	      classArgs[1] = Class.forName(doubleArrayName);
	      classArgs[2] = Class.forName(stringName);
	      gridConstruct = gridClass.getConstructor(classArgs);
	      constructArgs[0] = new_values;
	      constructArgs[1] = ((SGTLine)grid).getYArray();
	      constructArgs[2] = ((SGTLine)grid).getTitle();
	      new_grid = (SGTData)gridConstruct.newInstance(constructArgs);
	    } catch (java.lang.Exception e) {
	      System.out.println("Velocity conversion: " + e);
	    }
	    //              new_grid = new SimpleLine(new_values, 
	    //                                      ((SGTLine)grid).getYArray(), 
	    //                                      ((SGTLine)grid).getTitle());
	  }
	  ((SimpleLine)new_grid).setYMetaData(((SGTLine)grid).getYMetaData());
	}
	((SimpleLine)new_grid).setXMetaData(newMeta);
	break;
      case Units.Y_AXIS:
	if(simpleLine) {
	  ((SimpleLine)new_grid).setYArray(new_values);
	} else {
	  if(((SGTLine)grid).isXTime()) {
	    try {
	      classArgs[0] = Class.forName(timeArrayName);
	      classArgs[1] = Class.forName(doubleArrayName);
	      classArgs[2] = Class.forName(stringName);
	      gridConstruct = gridClass.getConstructor(classArgs);
	      constructArgs[0] = ((SGTLine)grid).getTimeArray();
	      constructArgs[1] = new_values;
	      constructArgs[2] = ((SGTLine)grid).getTitle();
	      new_grid = (SGTData)gridConstruct.newInstance(constructArgs);
	    } catch (java.lang.Exception e) {
	      System.out.println("Velocity conversion: " + e);
	    }
	    //              new_grid = new SimpleLine(((SGTLine)grid).getTimeArray(),
	    //                                        new_values,
	    //                                        ((SGTLine)grid).getTitle());
	  } else {
	    try {
	      classArgs[0] = Class.forName(doubleArrayName);
	      classArgs[1] = Class.forName(doubleArrayName);
	      classArgs[2] = Class.forName(stringName);
	      gridConstruct = gridClass.getConstructor(classArgs);
	      constructArgs[0] = ((SGTLine)grid).getXArray();
	      constructArgs[1] = new_values;
	      constructArgs[2] = ((SGTLine)grid).getTitle();
	      new_grid = (SGTData)gridConstruct.newInstance(constructArgs);
	    } catch (java.lang.Exception e) {
	      System.out.println("Velocity conversion: " + e);
	    }
	    //              new_grid = new SimpleLine(((SGTLine)grid).getXArray(),
	    //                                        new_values,
	    //                                        ((SGTLine)grid).getTitle());
	  }
	  ((SimpleLine)new_grid).setXMetaData(((SGTLine)grid).getXMetaData());
	}
	((SimpleLine)new_grid).setYMetaData(newMeta);
      }
    } else if(grid instanceof SGTGrid) {
      boolean simpleGrid = grid instanceof SimpleGrid;
      if(simpleGrid) {
	new_grid = (SGTGrid)grid.copy();
      }
      Class[] classArgs = new Class[4];
      Object[] constructArgs = new Object[4];
      Class gridClass = grid.getClass();
      Constructor gridConstruct;
      switch(comp) {
      default:
      case Units.X_AXIS:
	if(simpleGrid) {
	  ((SimpleGrid)new_grid).setXArray(new_values);
	} else {
          if(((SGTGrid)grid).isYTime()) {
	    try {
	      classArgs[0] = Class.forName(doubleArrayName);
	      classArgs[1] = Class.forName(doubleArrayName);
	      classArgs[2] = Class.forName(timeArrayName);
	      classArgs[3] = Class.forName(stringName);
	      gridConstruct = gridClass.getConstructor(classArgs);
	      constructArgs[0] = ((SGTGrid)grid).getZArray();
	      constructArgs[1] = new_values;
	      constructArgs[2] = ((SGTGrid)grid).getTimeArray();
	      constructArgs[2] = ((SGTGrid)grid).getTitle();
	      new_grid = (SGTData)gridConstruct.newInstance(constructArgs);
	    } catch (java.lang.Exception e) {
	      System.out.println("Velocity conversion: " + e);
	    }
//              new_grid = new SimpleGrid(((SGTGrid)grid).getZArray(),
//                                      new_values, 
//                                      ((SGTGrid)grid).getTimeArray(), 
//                                      ((SGTGrid)grid).getTitle());
          } else {
	    try {
	      classArgs[0] = Class.forName(doubleArrayName);
	      classArgs[1] = Class.forName(doubleArrayName);
	      classArgs[2] = Class.forName(doubleArrayName);
	      classArgs[3] = Class.forName(stringName);
	      gridConstruct = gridClass.getConstructor(classArgs);
	      constructArgs[0] = ((SGTGrid)grid).getZArray();
	      constructArgs[1] = new_values;
	      constructArgs[2] = ((SGTGrid)grid).getYArray();
	      constructArgs[2] = ((SGTGrid)grid).getTitle();
	      new_grid = (SGTData)gridConstruct.newInstance(constructArgs);
	    } catch (java.lang.Exception e) {
	      System.out.println("Velocity conversion: " + e);
	    }
//              new_grid = new SimpleGrid(((SGTGrid)grid).getZArray(),
//                                      new_values, 
//                                      ((SGTGrid)grid).getYArray(), 
//                                      ((SGTGrid)grid).getTitle());
          }
          ((SimpleGrid)new_grid).setYMetaData(((SGTGrid)grid).getYMetaData());
          ((SimpleGrid)new_grid).setZMetaData(((SGTGrid)grid).getZMetaData());
	}
	((SimpleGrid)new_grid).setXMetaData(newMeta);
	break;
      case Units.Y_AXIS:
	if(simpleGrid) {
	  ((SimpleGrid)new_grid).setYArray(new_values);
	} else {
          if(((SGTGrid)grid).isXTime()) {
	    try {
	      classArgs[0] = Class.forName(doubleArrayName);
	      classArgs[1] = Class.forName(timeArrayName);
	      classArgs[2] = Class.forName(doubleArrayName);
	      classArgs[3] = Class.forName(stringName);
	      gridConstruct = gridClass.getConstructor(classArgs);
	      constructArgs[0] = ((SGTGrid)grid).getZArray();
	      constructArgs[1] = ((SGTGrid)grid).getTimeArray();
	      constructArgs[2] = new_values;
	      constructArgs[2] = ((SGTGrid)grid).getTitle();
	      new_grid = (SGTData)gridConstruct.newInstance(constructArgs);
	    } catch (java.lang.Exception e) {
	      System.out.println("Velocity conversion: " + e);
	    }
//              new_grid = new SimpleGrid(((SGTGrid)grid).getZArray(),
//                                        ((SGTGrid)grid).getTimeArray(),
//                                        new_values,
//                                        ((SGTGrid)grid).getTitle());
          } else {
	    try {
	      classArgs[0] = Class.forName(doubleArrayName);
	      classArgs[1] = Class.forName(doubleArrayName);
	      classArgs[2] = Class.forName(doubleArrayName);
	      classArgs[3] = Class.forName(stringName);
	      gridConstruct = gridClass.getConstructor(classArgs);
	      constructArgs[0] = ((SGTGrid)grid).getZArray();
	      constructArgs[1] = ((SGTGrid)grid).getXArray();
	      constructArgs[2] = new_values;
	      constructArgs[2] = ((SGTGrid)grid).getTitle();
	      new_grid = (SGTData)gridConstruct.newInstance(constructArgs);
	    } catch (java.lang.Exception e) {
	      System.out.println("Velocity conversion: " + e);
	    }
//              new_grid = new SimpleGrid(((SGTGrid)grid).getZArray(),
//                                        ((SGTGrid)grid).getXArray(),
//                                        new_values,
//                                        ((SGTGrid)grid).getTitle());
          }
          ((SimpleGrid)new_grid).setXMetaData(((SGTGrid)grid).getXMetaData());
          ((SimpleGrid)new_grid).setZMetaData(((SGTGrid)grid).getZMetaData());
	}
	((SimpleGrid)new_grid).setYMetaData(newMeta);
	break;
      case Units.Z_AXIS:
	if(simpleGrid) {
	  ((SimpleGrid)new_grid).setZArray(new_values);
	} else {
          if(((SGTGrid)grid).isXTime()) {
	    try {
	      classArgs[0] = Class.forName(doubleArrayName);
	      classArgs[1] = Class.forName(timeArrayName);
	      classArgs[2] = Class.forName(doubleArrayName);
	      classArgs[3] = Class.forName(stringName);
	      gridConstruct = gridClass.getConstructor(classArgs);
	      constructArgs[0] = new_values;
	      constructArgs[1] = ((SGTGrid)grid).getTimeArray();
	      constructArgs[2] = ((SGTGrid)grid).getYArray();
	      constructArgs[2] = ((SGTGrid)grid).getTitle();
	      new_grid = (SGTData)gridConstruct.newInstance(constructArgs);
	    } catch (java.lang.Exception e) {
	      System.out.println("Velocity conversion: " + e);
	    }
//              new_grid = new SimpleGrid(new_values,
//                                        ((SGTGrid)grid).getTimeArray(),
//                                        ((SGTGrid)grid).getYArray(),
//                                        ((SGTGrid)grid).getTitle());
          } else if(((SGTGrid)grid).isYTime()) {
	    try {
	      classArgs[0] = Class.forName(doubleArrayName);
	      classArgs[1] = Class.forName(doubleArrayName);
	      classArgs[2] = Class.forName(timeArrayName);
	      classArgs[3] = Class.forName(stringName);
	      gridConstruct = gridClass.getConstructor(classArgs);
	      constructArgs[0] = new_values;
	      constructArgs[1] = ((SGTGrid)grid).getXArray();
	      constructArgs[2] = ((SGTGrid)grid).getTimeArray();
	      constructArgs[2] = ((SGTGrid)grid).getTitle();
	      new_grid = (SGTData)gridConstruct.newInstance(constructArgs);
	    } catch (java.lang.Exception e) {
	      System.out.println("Velocity conversion: " + e);
	    }
//              new_grid = new SimpleGrid(new_values,
//                                        ((SGTGrid)grid).getXArray(),
//                                        ((SGTGrid)grid).getTimeArray(),
//                                        ((SGTGrid)grid).getTitle());
          } else {
	    try {
	      classArgs[0] = Class.forName(doubleArrayName);
	      classArgs[1] = Class.forName(doubleArrayName);
	      classArgs[2] = Class.forName(doubleArrayName);
	      classArgs[3] = Class.forName(stringName);
	      gridConstruct = gridClass.getConstructor(classArgs);
	      constructArgs[0] = new_values;
	      constructArgs[1] = ((SGTGrid)grid).getXArray();
	      constructArgs[2] = ((SGTGrid)grid).getYArray();
	      constructArgs[2] = ((SGTGrid)grid).getTitle();
	      new_grid = (SGTData)gridConstruct.newInstance(constructArgs);
	    } catch (java.lang.Exception e) {
	      System.out.println("Velocity conversion: " + e);
	    }
//              new_grid = new SimpleGrid(new_values,
//                                        ((SGTGrid)grid).getXArray(),
//                                        ((SGTGrid)grid).getYArray(),
//                                        ((SGTGrid)grid).getTitle());
          }
          ((SimpleGrid)new_grid).setXMetaData(((SGTGrid)grid).getXMetaData());
          ((SimpleGrid)new_grid).setYMetaData(((SGTGrid)grid).getYMetaData());
	}
	((SimpleGrid)new_grid).setZMetaData(newMeta);
      }
      
    }
    return new_grid;
  }
  static boolean isBaseUnit(SGTMetaData meta) {
    int count;
    String units = meta.getUnits();
    
    for(count=0; count < name.length; count++) {
      if(units.equals(name[count])) return true;
    }
    return false;
  }
}

 

Ads help maintain this website.