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

makes database-access tolerate missing columns (sets VOTable.col NULL rather then stop with error)

parent ca5a9270
Loading
Loading
Loading
Loading
+104 −45
Original line number Diff line number Diff line
@@ -182,55 +182,55 @@ public class DbPSearch
         {
            FormatResponseFilter.ObsCore obsCore = new FormatResponseFilter.ObsCore();

            obsCore.dataproduct_type  = res.getString("dataproduct_type");
            obsCore.calib_level       = res.getInt("calib_level");
            obsCore.obs_collection    = res.getString("obs_collection");
            obsCore.obs_title         = res.getString("obs_title");
            obsCore.obs_id            = res.getString("obs_id");
            obsCore.obs_publisher_did = res.getString("obs_publisher_did");

            obsCore.bib_reference = res.getString("bib_reference");
            obsCore.data_rights   = res.getString("data_rights");

            obsCore.access_url     = res.getString("access_url");
            obsCore.access_format  = res.getString("access_format");
            obsCore.access_estsize = res.getLong("access_estsize");

            obsCore.target_name = res.getString("target_name");

            obsCore.s_ra         = res.getDouble("s_ra");
            obsCore.s_dec        = res.getDouble("s_dec");
            obsCore.s_fov        = res.getDouble("s_fov");
            obsCore.s_region     = res.getString("s_region");
            obsCore.s_region_galactic = res.getString("s_region_galactic");
            obsCore.s_xel1       = res.getLong("s_xel1");
            obsCore.s_xel2       = res.getLong("s_xel2");
            obsCore.s_resolution = res.getDouble("s_resolution");

            obsCore.t_min         = res.getDouble("t_min");
            obsCore.t_max         = res.getDouble("t_max");
            obsCore.t_exptime     = res.getDouble("t_exptime");
            obsCore.t_resolution  = res.getDouble("t_resolution");
            obsCore.t_xel         = res.getLong("t_xel");

            obsCore.vel_min      = res.getDouble("vel_min"); //boolean em_min_valid = !res.wasNull();
            obsCore.vel_max      = res.getDouble("vel_max"); //boolean em_max_valid = !res.wasNull();

            obsCore.em_min       = res.getDouble("em_min"); boolean em_min_valid = !res.wasNull();
            obsCore.em_max       = res.getDouble("em_max"); boolean em_max_valid = !res.wasNull();
            obsCore.dataproduct_type  = this.getString(res,"dataproduct_type");
            obsCore.calib_level       = this.getInt(res,"calib_level");
            obsCore.obs_collection    = this.getString(res,"obs_collection");
            obsCore.obs_title         = this.getString(res,"obs_title");
            obsCore.obs_id            = this.getString(res,"obs_id");
            obsCore.obs_publisher_did = this.getString(res,"obs_publisher_did");

            obsCore.bib_reference = this.getString(res,"bib_reference");
            obsCore.data_rights   = this.getString(res,"data_rights");

            obsCore.access_url     = this.getString(res,"access_url");
            obsCore.access_format  = this.getString(res,"access_format");
            obsCore.access_estsize = this.getLong(res,"access_estsize");

            obsCore.target_name = this.getString(res,"target_name");

            obsCore.s_ra         = this.getDouble(res,"s_ra");
            obsCore.s_dec        = this.getDouble(res,"s_dec");
            obsCore.s_fov        = this.getDouble(res,"s_fov");
            obsCore.s_region     = this.getString(res,"s_region");
            obsCore.s_region_galactic = this.getString(res,"s_region_galactic");
            obsCore.s_xel1       = this.getLong(res,"s_xel1");
            obsCore.s_xel2       = this.getLong(res,"s_xel2");
            obsCore.s_resolution = this.getDouble(res,"s_resolution");

            obsCore.t_min         = this.getDouble(res,"t_min");
            obsCore.t_max         = this.getDouble(res,"t_max");
            obsCore.t_exptime     = this.getDouble(res,"t_exptime");
            obsCore.t_resolution  = this.getDouble(res,"t_resolution");
            obsCore.t_xel         = this.getLong(res,"t_xel");

            obsCore.vel_min      = this.getDouble(res,"vel_min"); //boolean em_min_valid = !res.wasNull();
            obsCore.vel_max      = this.getDouble(res,"vel_max"); //boolean em_max_valid = !res.wasNull();

            obsCore.em_min       = this.getDouble(res,"em_min"); boolean em_min_valid = !res.wasNull();
            obsCore.em_max       = this.getDouble(res,"em_max"); boolean em_max_valid = !res.wasNull();
            obsCore.em_valid     = em_min_valid && em_max_valid;;
            obsCore.em_res_power = res.getDouble("em_res_power");
            obsCore.em_xel       = res.getLong("em_xel");
            obsCore.em_res_power = this.getDouble(res,"em_res_power");
            obsCore.em_xel       = this.getLong(res,"em_xel");

            obsCore.o_ucd = res.getString("o_ucd");
            obsCore.o_ucd = this.getString(res,"o_ucd");

            obsCore.pol_states = res.getString("pol_states");
            obsCore.pol_xel    = res.getLong("pol_xel");
            obsCore.pol_states = this.getString(res,"pol_states");
            obsCore.pol_xel    = this.getLong(res ,"pol_xel");

            obsCore.facility_name = res.getString("facility_name");
            obsCore.instrument_name = res.getString("instrument_name");
            obsCore.facility_name = this.getString(res,"facility_name");
            obsCore.instrument_name = this.getString(res,"instrument_name");

            obsCore.vertices_str  = res.getString("polygon_region_galactic");
            obsCore.vertices_str  = this.getString(res,"polygon_region_galactic");
            obsCore.inputInsideDb = res.getBoolean("inputInsideDb");
            obsCore.dbInsideInput = res.getBoolean("dbInsideInput");

@@ -250,6 +250,65 @@ public class DbPSearch
      return cubes;
   }

   /* conversions tolerate missing columns */

   private Integer getInt(ResultSet res, String colLabel)
   {
      try
      {
         Integer value = res.getInt(colLabel);
         return (res.wasNull() ? null : value);
      }
      catch(SQLException se)
      {
         logSqlExInfo(se);
         return null;
      }
   }

   private Long getLong(ResultSet res, String colLabel)
   {
      try
      {
         Long value = res.getLong(colLabel);
         return (res.wasNull() ? null : value);
      }
      catch(SQLException se)
      {
         logSqlExInfo(se);
         return null;
      }
   }

   private Double getDouble(ResultSet res, String colLabel)
   {
      try
      {
         Double value = res.getDouble(colLabel);
         return (res.wasNull() ? null : value);
      }
      catch(SQLException se)
      {
         logSqlExInfo(se);
         return null;
      }
   }

   private String getString(ResultSet res, String colLabel)
   {
      try
      {
         String value = res.getString(colLabel);
         return (res.wasNull() ? null : value);
      }
      catch(SQLException se)
      {
         logSqlExInfo(se);
         return null;
      }
   }



   private String toPgSphereSqlTypeString(Pos pos)
   {
@@ -338,7 +397,7 @@ public class DbPSearch
   {
      LOGGER.fine("SQLState : " + se.getSQLState());
      LOGGER.fine("ErrorCode: " + se.getErrorCode());
      LOGGER.fine("Message  : " + se.getMessage());
      LOGGER.warning("Message  : " + se.getMessage());
      Throwable t = se.getCause();
      while(t != null) {
         LOGGER.fine("Cause: " + t);
+25 −21
Original line number Diff line number Diff line
@@ -63,8 +63,8 @@ class ObscoreExt
   {
      return new Object[]
      {
         dataset.obsCore.dataproduct_type,//dataset.dataType, 
            Integer.valueOf( dataset.obsCore.calib_level ),
         dataset.obsCore.dataproduct_type,
            dataset.obsCore.calib_level,
            dataset.obsCore.obs_collection,
            dataset.obsCore.obs_title,
            dataset.obsCore.obs_id,
@@ -72,31 +72,36 @@ class ObscoreExt
            dataset.obsCore.bib_reference,
            dataset.obsCore.data_rights,

            dataset.obsCore.access_url,//dataset.access.accessCutoutUrl,
            dataset.obsCore.access_url,
            dataset.obsCore.access_format,
            Long.valueOf( dataset.obsCore.access_estsize ),
            dataset.obsCore.access_estsize,

            dataset.obsCore.target_name,

            Double.valueOf(dataset.obsCore.s_ra),Double.valueOf(dataset.obsCore.s_dec),
            Double.valueOf(dataset.obsCore.s_fov),
            dataset.obsCore.s_ra,
            dataset.obsCore.s_dec,
            dataset.obsCore.s_fov,

            dataset.obsCore.s_region,
            Long.valueOf( dataset.obsCore.s_xel1 ), Long.valueOf( dataset.obsCore.s_xel2 ),
            Double.valueOf(dataset.obsCore.s_resolution),
            dataset.obsCore.s_xel1,
            dataset.obsCore.s_xel2,
            dataset.obsCore.s_resolution,

            Double.valueOf(dataset.obsCore.t_min), Double.valueOf(dataset.obsCore.t_max),
            Double.valueOf(dataset.obsCore.t_exptime), Double.valueOf(dataset.obsCore.t_resolution),
            Long.valueOf( dataset.obsCore.t_xel ),
            dataset.obsCore.t_min,
            dataset.obsCore.t_max,
            dataset.obsCore.t_exptime,
            dataset.obsCore.t_resolution,
            dataset.obsCore.t_xel,

            Double.valueOf(dataset.obsCore.em_min), Double.valueOf(dataset.obsCore.em_max),
            Double.valueOf(dataset.obsCore.em_res_power),
            Long.valueOf( dataset.obsCore.em_xel ),
            dataset.obsCore.em_min,
            dataset.obsCore.em_max,
            dataset.obsCore.em_res_power,
            dataset.obsCore.em_xel,

            dataset.obsCore.o_ucd,

            dataset.obsCore.pol_states,
            Long.valueOf( dataset.obsCore.pol_xel ),
            dataset.obsCore.pol_xel,

            dataset.obsCore.facility_name,
            dataset.obsCore.instrument_name,
@@ -121,15 +126,14 @@ class ObscoreExt
   {
      return new Object[]
      {
         Integer.valueOf( dataset.overlapCode ),
            Integer.valueOf( dataset.overlapCodeSky ),
            Integer.valueOf( dataset.overlapCodeVel ),
         dataset.overlapCode,
            dataset.overlapCodeSky,
            dataset.overlapCodeVel,

            dataset.obsCore.s_region_galactic,

            dataset.obsCore.vel_min == null ? null : Double.valueOf(dataset.obsCore.vel_min),
            dataset.obsCore.vel_min == null ? null : Double.valueOf(dataset.obsCore.vel_max),

            dataset.obsCore.vel_min,
            dataset.obsCore.vel_max,
      };
   }