/** @throws IOException */
  static MathTransform parseWorldFile(Object source) throws IOException {
    MathTransform raster2Model = null;

    // TODO: Add support for FileImageInputStreamExt
    // TODO: Check for WorldFile on URL beside the actual connection.
    if (source instanceof File) {
      final File sourceFile = ((File) source);
      String parentPath = sourceFile.getParent();
      String filename = sourceFile.getName();
      final int i = filename.lastIndexOf('.');
      filename = (i == -1) ? filename : filename.substring(0, i);

      // getting name and extension
      final String base =
          (parentPath != null)
              ? new StringBuilder(parentPath).append(File.separator).append(filename).toString()
              : filename;

      // We can now construct the baseURL from this string.
      File file2Parse = new File(new StringBuilder(base).append(".wld").toString());

      if (file2Parse.exists()) {
        final WorldFileReader reader = new WorldFileReader(file2Parse);
        raster2Model = reader.getTransform();
      } else {
        // looking for another extension
        file2Parse = new File(new StringBuilder(base).append(".tfw").toString());

        if (file2Parse.exists()) {
          // parse world file
          final WorldFileReader reader = new WorldFileReader(file2Parse);
          raster2Model = reader.getTransform();
        }
      }
    }
    return raster2Model;
  }
  /**
   * Checks whether a world file is associated with the data source. If found, set a proper
   * envelope.
   *
   * @throws IllegalStateException
   * @throws IOException
   */
  protected void parseWorldFile() {
    final String worldFilePath =
        new StringBuffer(this.parentPath)
            .append(GridCoverageUtilities.SEPARATOR)
            .append(coverageName)
            .toString();

    File file2Parse = null;
    boolean worldFileExists = false;
    // //
    //
    // Check for a world file with the format specific extension
    //
    // //
    if (worldFileExt != null && worldFileExt.length() > 0) {
      file2Parse = new File(worldFilePath + worldFileExt);
      worldFileExists = file2Parse.exists();
    }

    // //
    //
    // Check for a world file with the default extension
    //
    // //
    if (!worldFileExists) {
      file2Parse = new File(worldFilePath + GridCoverageUtilities.DEFAULT_WORLDFILE_EXT);
      worldFileExists = file2Parse.exists();
    }

    if (worldFileExists) {

      try {
        final WorldFileReader reader = new WorldFileReader(file2Parse);
        raster2Model = reader.getTransform();

        // //
        //
        // In case we read from a real world file we have together the
        // envelope. World file transformation assumes to work in the
        // CELL_CENTER condition
        //
        // //
        MathTransform tempTransform =
            PixelTranslation.translate(
                raster2Model, PixelInCell.CELL_CENTER, PixelInCell.CELL_CORNER);
        final Envelope gridRange = new GeneralEnvelope((GridEnvelope2D) originalGridRange);
        final GeneralEnvelope coverageEnvelope = CRS.transform(tempTransform, gridRange);
        originalEnvelope = coverageEnvelope;
        return;
      } catch (TransformException e) {
        if (LOGGER.isLoggable(Level.WARNING)) {
          LOGGER.log(Level.WARNING, e.getLocalizedMessage(), e);
        }
      } catch (IllegalStateException e) {
        if (LOGGER.isLoggable(Level.WARNING)) {
          LOGGER.log(Level.WARNING, e.getLocalizedMessage(), e);
        }
      } catch (IOException e) {
        if (LOGGER.isLoggable(Level.WARNING)) {
          LOGGER.log(Level.WARNING, e.getLocalizedMessage(), e);
        }
      }
    }
    // if we got here we did not find a suitable transform
    raster2Model = null;
  }