Commit cda67320 authored by Robert Butora's avatar Robert Butora
Browse files

links to vlkb-volib with support for coord-system params (POSSYS BANDSYS...

links to vlkb-volib with support for coord-system params (POSSYS BANDSYS TIMESYS) and their defaults from settings-file
parent 4b0fd09d
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line


import vo.parameter.*;

class Coord
{
+0 −35
Original line number Diff line number Diff line

/* REC-SODA BAND parameter defines the interval(s) to be extracted
from the data using a floating point interval (xtype="interval") as defined
in DALI. */


class Band
{
   public enum System {WAVE_Barycentric, VELO_LSRK, NONE};

   System system;
   double wavelength[];


   public Band(String str)
   {
      this.wavelength = Parser.getDaliIntervalPositiveValues(str, "BAND");
   }

   public Band(double low, double up)
   {
      wavelength = new double[2];
      wavelength[0] = low;
      wavelength[1] = up;
   }

   public void setSystem(Band.System system) { this.system = system; }

   public String toString()
   {
      return "BAND " + wavelength[0] + " " + wavelength[1];
   }

}
+0 −61
Original line number Diff line number Diff line

/* REC-SODA: UCD describing the CIRCLE parameter is pos.outline;obs.*/
/* REC-DALI Sect 3.3.6 Circle: definition */


class Circle
{

   double lon;
   double lat;
   double radius;

   public Circle(String value)
   {
      parseCircle(value);
   }

   private void parseCircle(String str)
   {
      String[] arr = str.strip().split(" +");

      if(arr == null)
         throw new IllegalArgumentException("CIRCLE : no value, or value contains no space");
      else
      {
         final int len = 3;
         if(arr.length != len)
            throw new IllegalArgumentException(
                  "CIRCLE : must have " + len + " elements delimited by space, but found " + arr.length);
         else
         {

            double dbl = Double.parseDouble(arr[0]);
            if ((dbl < 0) || (dbl > 360))
               throw new IllegalArgumentException("CIRCLE : first number must be in range [0,360] but found " + dbl);
            else
               this.lon = dbl;

            dbl = Double.parseDouble(arr[1]);
            if ((dbl < -90) || (dbl > 90))
               throw new IllegalArgumentException("CIRCLE : second number must be in range [-90,90] but found " + dbl);
            else
               this.lat = dbl;

            dbl = Double.parseDouble(arr[2]);
            if ((dbl <= 0) || (dbl > 180))
               throw new IllegalArgumentException("CIRCLE : third number must be in range (0,180] but found " + dbl);
            else
               this.radius = dbl;

         }
      }
   }

   public String toString()
   {
      return "CIRCLE " + Double.valueOf(lon) + " " + Double.valueOf(lat) + " " + Double.valueOf(radius);
   }

}
+0 −8
Original line number Diff line number Diff line



public class MultiValuedParamNotSupported  extends IllegalArgumentException {
    public MultiValuedParamNotSupported(String errorMessage){//, Throwable err) {
        super(errorMessage);//, err);
    }
}
+0 −90
Original line number Diff line number Diff line

import java.util.Map;


class Parser
{

   public static String getFirstString(Map<String, String[]> params, String key)
   {
      String[] values = params.get(key);
      if (values == null) return null;

      if (values.length < 1)
         throw new IllegalArgumentException(key + " has no valid value");
      else
         return values[0];// FIXME if values[0] is null -> canot distinguish from key not found
   }


   public static String[] getFirstStringArray(Map<String, String[]> params, String key, String separator, int arrayLength)
   {
      String array = getFirstString(params, key);
      if (array == null) return null;

      String[] stringArray = array.split(separator);

      if(stringArray.length != arrayLength)
         throw new IllegalArgumentException(
               key + " parameter has incorrect number of elements (" 
               + stringArray.length + " vs " + arrayLength + ") or incorrect separator used");

      return stringArray;
   }


   public static double[] getDaliIntervalPositiveValues(String value, String errorMsgPrefix)
   {
      String[] arr = value.strip().split(" +");

      double[] dblArr = new double[2];

      if(arr == null)
         throw new IllegalArgumentException(errorMsgPrefix + " : no value, or value contains no space");
      else
      {
         final int len = 2;
         if(arr.length != len)
            throw new IllegalArgumentException(
                  errorMsgPrefix + " : must have " + len + " space-delimited elements, but found " + arr.length);
         else
         {


            String val = arr[0];
            if(val.equals("Inf") || val.equals("+Inf"))
            {
               dblArr[0] = Double.POSITIVE_INFINITY;
            }
            else
            {
               double dbl = Double.parseDouble(val);
               if (dbl < 0)
                  throw new IllegalArgumentException(errorMsgPrefix + " : values must be positive, but first value was " + dbl);
               else
                  dblArr[0] = dbl;
            }


            val = arr[1];
            if(val.equals("-Inf"))
            {
               // dblArr[1] = Double.NEGATIVE_INFINITY;
               throw new IllegalArgumentException(errorMsgPrefix + " : values must be positive, but second value was " + val);
            }
            else
            {
               double dbl = Double.parseDouble(val);
               if (dbl < 0)
                  throw new IllegalArgumentException(errorMsgPrefix + " : values must be positive, but second value was " + dbl);
               else
                  dblArr[1] = dbl;
            }
         }
      }

      return dblArr;
   }


}
Loading