Exemplo n.º 1
0
  /**
   * Step 3 of the bootstrapping process.
   *
   * <p>Calculating the the resolution for each image level (original + pyramids). This calculation
   * is only done if the resultion 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 calculateResolutionsFromDB(String coverageName, Connection con)
      throws SQLException, IOException {
    PreparedStatement stmt = null;

    stmt = con.prepareStatement(config.getSqlUpdateResStatement());

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

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

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

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

      double[] resolutions = getPixelResolution(li, con);

      if (resolutions == null) {
        if (LOGGER.isLoggable(Level.WARNING))
          LOGGER.log(Level.WARNING, "No image found, removing " + li.toString());
        toBeRemoved.add(li);

        continue;
      }

      li.setResX(resolutions[0]);
      li.setResY(resolutions[1]);
      if (LOGGER.isLoggable(Level.INFO))
        LOGGER.info("ResX: " + li.getResX() + " ResY: " + li.getResY());

      // li.setColorModel(loadedImage.getColorModel());
      stmt.setDouble(1, li.getResX().doubleValue());
      stmt.setDouble(2, li.getResY().doubleValue());
      stmt.setString(3, li.getCoverageName());
      stmt.setString(4, li.getTileTableName());
      stmt.setString(5, li.getSpatialTableName());
      stmt.execute();

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

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

    levelInfos.removeAll(toBeRemoved);

    if (stmt != null) {
      stmt.close();
    }
  }
Exemplo 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();
      }
    }
  }