Esempio n. 1
0
  /**
   * Step 2 of the bootstrapping process.
   *
   * <p>Calculating the the extent for each image level (original + pyramids). This calculation is
   * only done if the extent info in the master table is SQL NULL. After calculation the meta table
   * is updated with the result to avoid this operation in the future.
   *
   * @param coverageName The coverage name in the sql meta table
   * @param con JDBC connection
   * @throws SQLException
   * @throws IOException
   */
  void calculateExtentsFromDB(String coverageName, Connection con)
      throws SQLException, IOException {
    PreparedStatement stmt = con.prepareStatement(config.getSqlUpdateMosaicStatement());

    List<ImageLevelInfo> toBeRemoved = new ArrayList<ImageLevelInfo>();

    for (ImageLevelInfo li : levelInfos) {
      if (li.getCoverageName().equals(coverageName) == false) {
        continue;
      }

      if (li.calculateExtentsNeeded() == false) {
        continue;
      }

      Date start = new Date();
      if (LOGGER.isLoggable(Level.INFO)) LOGGER.info("Calculate extent for " + li.toString());

      Envelope env = getExtent(li, con);

      if (env == null) {
        if (LOGGER.isLoggable(Level.WARNING))
          LOGGER.log(Level.WARNING, "No extent, removing this level");
        toBeRemoved.add(li);

        continue;
      }

      li.setExtentMaxX(new Double(env.getMaxX()));
      li.setExtentMaxY(new Double(env.getMaxY()));
      li.setExtentMinX(new Double(env.getMinX()));
      li.setExtentMinY(new Double(env.getMinY()));

      stmt.setDouble(1, li.getExtentMaxX().doubleValue());
      stmt.setDouble(2, li.getExtentMaxY().doubleValue());
      stmt.setDouble(3, li.getExtentMinX().doubleValue());
      stmt.setDouble(4, li.getExtentMinY().doubleValue());
      stmt.setString(5, li.getCoverageName());
      stmt.setString(6, li.getTileTableName());
      stmt.setString(7, li.getSpatialTableName());
      stmt.execute();

      long msecs = (new Date()).getTime() - start.getTime();

      if (LOGGER.isLoggable(Level.INFO))
        LOGGER.info("Calculate extent for " + li.toString() + " finished in " + msecs + " ms ");
    }

    levelInfos.removeAll(toBeRemoved);

    if (stmt != null) {
      stmt.close();
    }
  }
Esempio n. 2
0
  /**
   * Step 1 of the bootstrapping process. Read meta table and build the ImageLevelInfo objects
   *
   * @param coverageName the coverage name stored in the sql meta table
   * @param con jdbc connection
   * @throws SQLException
   * @throws IOException
   */
  protected void initFromDB(String coverageName, Connection con) throws SQLException, IOException {
    PreparedStatement s = null;
    ResultSet res = null;

    try {
      String stmt = config.getSqlSelectCoverageStatement();
      // TODO, investigate, setString for oracle does not work
      stmt = stmt.replace("?", "'" + coverageName + "'");
      s = con.prepareStatement(stmt);
      // s.setString(1,coverageName);
      res = s.executeQuery();

      while (res.next()) {
        ImageLevelInfo imageLevelInfo = new ImageLevelInfo();
        imageLevelInfo.setCoverageName(coverageName);
        imageLevelInfo.setSpatialTableName(res.getString(config.getSpatialTableNameAtribute()));
        imageLevelInfo.setTileTableName((res.getString(config.getTileTableNameAtribute())));

        // check cardinalities
        if (config.getVerifyCardinality().booleanValue()) {
          imageLevelInfo.setCountFeature(
              new Integer(getRowCount(imageLevelInfo.getSpatialTableName(), con)));

          if (imageLevelInfo.getSpatialTableName().equals(imageLevelInfo.getTileTableName())) {
            imageLevelInfo.setCountTiles(imageLevelInfo.getCountFeature());
          } else {
            imageLevelInfo.setCountTiles(
                new Integer(getRowCount(imageLevelInfo.getTileTableName(), con)));
          }

          if (imageLevelInfo.getCountFeature().intValue() == 0) {
            LOGGER.severe("Table " + imageLevelInfo.getSpatialTableName() + " has no entries");
          } else if (imageLevelInfo.getCountTiles().intValue() == 0) {
            LOGGER.severe("Table " + imageLevelInfo.getTileTableName() + " has no entries");
          } else if (imageLevelInfo.getCountFeature().intValue()
              != imageLevelInfo.getCountTiles().intValue()) {
            if (LOGGER.isLoggable(Level.WARNING))
              LOGGER.log(
                  Level.WARNING,
                  "Consistency warning: number of features: "
                      + imageLevelInfo.getCountFeature()
                      + " number tiles: "
                      + imageLevelInfo.getCountTiles());
          } else {
            if (LOGGER.isLoggable(Level.FINE))
              LOGGER.fine(
                  "Number of features: "
                      + imageLevelInfo.getCountFeature()
                      + " number tiles: "
                      + imageLevelInfo.getCountTiles());
          }
        }

        imageLevelInfo.setExtentMaxX(new Double(res.getDouble(config.getMaxXAttribute())));

        if (res.wasNull()) {
          imageLevelInfo.setExtentMaxX(null);
        }

        imageLevelInfo.setExtentMaxY(new Double(res.getDouble(config.getMaxYAttribute())));

        if (res.wasNull()) {
          imageLevelInfo.setExtentMaxY(null);
        }

        imageLevelInfo.setExtentMinX(new Double(res.getDouble(config.getMinXAttribute())));

        if (res.wasNull()) {
          imageLevelInfo.setExtentMinX(null);
        }

        imageLevelInfo.setExtentMinY(new Double(res.getDouble(config.getMinYAttribute())));

        if (res.wasNull()) {
          imageLevelInfo.setExtentMinY(null);
        }

        imageLevelInfo.setResX(new Double(res.getDouble(config.getResXAttribute())));

        if (res.wasNull()) {
          imageLevelInfo.setResX(null);
        }

        imageLevelInfo.setResY(new Double(res.getDouble(config.getResYAttribute())));

        if (res.wasNull()) {
          imageLevelInfo.setResY(null);
        }

        if (config.getVerifyCardinality().booleanValue()) {
          if ((imageLevelInfo.getCountFeature().intValue() > 0)
              && (imageLevelInfo.getCountTiles().intValue() > 0)) {
            levelInfos.add(imageLevelInfo);
          }
        } else {
          levelInfos.add(imageLevelInfo);
        }

        imageLevelInfo.setSrsId(getSRSID(imageLevelInfo, con));
        imageLevelInfo.setCrs(getCRS(imageLevelInfo, con));
      }
    } catch (SQLException e) {
      throw (e);
    } catch (IOException e1) {
      throw (e1);
    } finally {
      if (res != null) {
        res.close();
      }

      if (s != null) {
        s.close();
      }
    }
  }