Package org.geotools.gce.imagemosaic.jdbc

Source Code of org.geotools.gce.imagemosaic.jdbc.AbstractTest

/*
*    GeoTools - The Open Source Java GIS Toolkit
*    http://geotools.org
*
*    (C) 2008, Open Source Geospatial Foundation (OSGeo)
*
*    This library is free software; you can redistribute it and/or
*    modify it under the terms of the GNU Lesser General Public
*    License as published by the Free Software Foundation;
*    version 2.1 of the License.
*
*    This library is distributed in the hope that it will be useful,
*    but WITHOUT ANY WARRANTY; without even the implied warranty of
*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*    Lesser General Public License for more details.
*/
package org.geotools.gce.imagemosaic.jdbc;

import java.awt.Color;
import java.awt.Rectangle;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

import javax.imageio.ImageIO;

import junit.framework.Assert;
import junit.framework.TestCase;

import org.geotools.coverage.grid.GridCoverage2D;
import org.geotools.coverage.grid.GridEnvelope2D;
import org.geotools.coverage.grid.GridGeometry2D;
import org.geotools.coverage.grid.io.AbstractGridFormat;
import org.geotools.coverage.grid.io.GridFormatFinder;
import org.geotools.data.DataUtilities;
import org.geotools.factory.Hints;
import org.geotools.gce.imagemosaic.jdbc.Import.ImportTyp;
import org.geotools.geometry.GeneralEnvelope;
import org.geotools.referencing.CRS;
import org.geotools.util.logging.Logging;
import org.opengis.parameter.GeneralParameterValue;
import org.opengis.parameter.ParameterValue;
import org.opengis.referencing.crs.CoordinateReferenceSystem;

/**
*
*
* @source $URL$
*/
public abstract class AbstractTest extends TestCase {

  protected final static Logger LOGGER = Logging.getLogger(AbstractTest.class
      .getPackage().getName());

  protected static String CRSNAME = "EPSG:4326";

  protected static Connection Connection = null;

  protected static double DELTA = 1;

  protected static GeneralEnvelope ENV_1 = new GeneralEnvelope(new double[] {
      14, 47 }, new double[] { 16, 48 });

  protected static GeneralEnvelope ENV_VIENNA = new GeneralEnvelope(
      new double[] { 16.2533, 48.1371 },
      new double[] { 16.4909, 48.2798 });

  protected static GeneralEnvelope ENV_VIENNA2 = new GeneralEnvelope(
      new double[] { 15.7533, 47.6371 },
      new double[] { 15.9909, 47.7298 });

  protected static String OUTPUTDIR_BASE = "target";

  protected static String OUTPUTDIR_RESOURCES = OUTPUTDIR_BASE
      + File.separator + "resources" + File.separator;

  protected static String RESOURCE_ZIP = "src/test/resources/resources.zip";

  protected Properties fixture;

  public AbstractTest(String test) {
    super(test);
  }

  protected boolean checkPreConditions() {
    try {
      initOutputDir();
    } catch (Exception e) {
      e.printStackTrace();

      LOGGER.severe("Cannot init " + OUTPUTDIR_RESOURCES
          + ", skipping test");

      return false;
    }

    String driverClassName = getDriverClassName();

    try {
      Class.forName(driverClassName);
    } catch (ClassNotFoundException ex) {
      if (LOGGER.isLoggable(Level.WARNING))
        LOGGER.log(Level.WARNING, driverClassName
            + " not found, skipping test");

      return false;
    }

    File file = getFixtureFile();

    if ((file != null) && (file.exists() == false)) {
      if (LOGGER.isLoggable(Level.CONFIG))
        LOGGER.log(Level.CONFIG, file.getAbsolutePath()
            + " not found, skipping test");

      return false;
    }

    return true;
  }

  public abstract String getConfigUrl();

  protected String getSrsId() {
    return null;
  }

  protected String getOutPutDir() {
    return OUTPUTDIR_BASE + File.separator + getSubDir();
  }

  protected String[] getTileTableNames() {
    return new String[] { "TILES1", "TILES2", "TILES3" };
  }

  protected String[] getSpatialTableNames() {
    return new String[] { "SPATIAL1", "SPATIAL2", "SPATIAL3" };
  }

  protected void createTargetResourceDir(File targetResourcedir)
      throws Exception {
    targetResourcedir.mkdir();

    ZipFile zipFile = new ZipFile(RESOURCE_ZIP);
    Enumeration<? extends ZipEntry> entries = zipFile.entries();

    while (entries.hasMoreElements()) {
      ZipEntry entry = entries.nextElement();

      if (entry.isDirectory()) {
        File dir = new File(OUTPUTDIR_RESOURCES + entry.getName());
        dir.mkdir();
      } else {
        InputStream in = zipFile.getInputStream(entry);
        FileOutputStream out = new FileOutputStream(OUTPUTDIR_RESOURCES
            + entry.getName());
        byte[] buff = new byte[4096];
        int count;

        while ((count = in.read(buff)) > 0)
          out.write(buff, 0, count);

        in.close();
        out.close();
      }
    }
  }

  protected void initOutputDir() throws Exception {
    File targetResourcedir = new File(OUTPUTDIR_RESOURCES);

    if (targetResourcedir.exists() == false) {
      createTargetResourceDir(targetResourcedir);
    }

    // delete previous results
    File dir = new File(getOutPutDir());

    if (dir.exists()) {
      File[] files = dir.listFiles();

      if (files != null) {
        for (File f : files)
          f.delete();
      }
    } else {
      dir.mkdir();
    }
  }

  public void testDrop() {
    try {
      Connection.commit();
    } catch (SQLException e) {
      e.printStackTrace();
    }

    try {
      Connection.prepareStatement(
          getDBDialect().getDropTableStatement(
              getDBDialect().getConfig().getMasterTable()))
          .execute();
      Connection.commit();
    } catch (SQLException e) {
      try {
        Connection.rollback();
      } catch (SQLException ex) {
      }

      ;
    }

    ;

    for (String tn : getTileTableNames()) {
      try {
        Connection.prepareStatement(
            (getDBDialect().getDropTableStatement(tn))).execute();
        Connection.commit();
      } catch (SQLException e) {
        try {
          Connection.rollback();
        } catch (SQLException ex) {
        }

        ;
      }
    }

    for (String tn : getSpatialTableNames()) {
      try {
        Connection.prepareStatement(
            (getDBDialect().getDropIndexStatment(tn))).execute();

        try {
          Connection.rollback();
        } catch (SQLException ex) {
        }

        ;
      } catch (SQLException e) {
        try {
          Connection.rollback();
        } catch (SQLException ex) {
        }

        ;
      }

      ;
    }

    for (String tn : getSpatialTableNames()) {
      try {

        String stmt = getDBDialect()
            .getUnregisterSpatialStatement((tn));

        if (stmt != null) {
          executeUnRegister(stmt);
        }

        Connection.prepareStatement(
            (getDBDialect().getDropTableStatement(tn))).execute();
        Connection.commit();
      } catch (SQLException e) {
        try {
          Connection.rollback();
        } catch (SQLException ex) {
        }

        ;
      }

      ;
    }

    try {
      Connection.commit();
    } catch (SQLException e) {
      e.printStackTrace();
    }
  }

  public void testScripts() {
    DDLGenerator gen = new DDLGenerator(getDBDialect().getConfig(), "SPAT",
        "TILE", 2, ";", getSrsId(), OUTPUTDIR_BASE + File.separator
            + getSubDir());
    try {
      gen.generate();
    } catch (Exception e) {
      Assert.fail(e.getMessage());
      e.printStackTrace();
    }

  }

  public void testCreate() {
    try {
      //createXMLConnectFragment();

      Connection.prepareStatement(
          getDBDialect().getCreateMasterStatement()).execute();

      for (String tn : getTileTableNames()) {
        Connection.prepareStatement(
            getDBDialect().getCreateTileTableStatement(tn))
            .execute();
      }

      for (String tn : getSpatialTableNames()) {
        Connection.prepareStatement(
            getDBDialect().getCreateSpatialTableStatement(tn))
            .execute();

        String stmt = getDBDialect().getRegisterSpatialStatement(tn,
            getSrsId());

        if (stmt != null) {
          executeRegister(stmt);
        }
      }

      Connection.commit();

      for (int i = 0; i < getTileTableNames().length; i++) {

        Import imp = null;
        if (i == 0) {
          URL dirFileUrl = new URL("file:" + OUTPUTDIR_RESOURCES);
          imp = new Import(getDBDialect().getConfig(),
              new ImportParam(getSpatialTableNames()[i],
                  getTileTableNames()[i], dirFileUrl, "tif",
                  Import.ImportTyp.DIR), 2, Connection);
        }
        if (i == 1) {
          URL shapeFileUrl = new URL("file:" + OUTPUTDIR_RESOURCES
              + i + "/index.shp");
          imp = new Import(getDBDialect().getConfig(),
              new ImportParam(getSpatialTableNames()[i],
                  getTileTableNames()[i], shapeFileUrl,
                  "LOCATION", Import.ImportTyp.SHAPE), 2,
              Connection);
        }
        if (i == 2) {
          URL csvFileUrl = new URL("file:" + OUTPUTDIR_RESOURCES + i
              + "/index.csv");
          imp = new Import(getDBDialect().getConfig(),
              new ImportParam(getSpatialTableNames()[i],
                  getTileTableNames()[i], csvFileUrl, ";",
                  Import.ImportTyp.CSV), 2, Connection);

        }
        imp.fillSpatialTable();
      }

      for (String tn : getSpatialTableNames()) {
        Connection.prepareStatement(
            getDBDialect().getCreateIndexStatement(tn)).execute();
      }

      Connection.commit();
    } catch (Exception e) {
      e.printStackTrace();
      Assert.fail(e.getMessage());
    }
  }

  protected JDBCAccess getJDBCAccess() {
    return JDBCAccessFactory.JDBCAccessMap.get(getConfigUrl().toString());
  }

  public void testImportParamList() throws Exception {

    URL shapeFileUrl = null, csvFileUrl = null, dirFileUrl = null;

    try {
      shapeFileUrl = new URL("file:" + OUTPUTDIR_RESOURCES + "index.shp");

      csvFileUrl = new URL("file:" + OUTPUTDIR_RESOURCES + "index.csv");

      dirFileUrl = new URL("file:" + OUTPUTDIR_RESOURCES);
    } catch (MalformedURLException ex) {
      // should not happen
    }

    List<ImportParam> importParamList = null;

    importParamList = new ArrayList<ImportParam>();
    Import.fillImportParamList("SPAT", "TILE", dirFileUrl, "tif",
        ImportTyp.DIR, importParamList);
    assertTrue(importParamList.size() == 3);

    assertTrue(importParamList.get(0).getTileTableName().equals("TILE_0"));
    assertTrue(importParamList.get(1).getTileTableName().equals("TILE_1"));
    assertTrue(importParamList.get(2).getTileTableName().equals("TILE_2"));
    assertTrue(importParamList.get(0).getSpatialTableName()
        .equals("SPAT_0"));
    assertTrue(importParamList.get(1).getSpatialTableName()
        .equals("SPAT_1"));
    assertTrue(importParamList.get(2).getSpatialTableName()
        .equals("SPAT_2"));

    assertTrue(isSameFile(importParamList.get(0).getSourceURL(),
        OUTPUTDIR_RESOURCES));
    assertTrue(isSameFile(importParamList.get(1).getSourceURL(),
        OUTPUTDIR_RESOURCES + 1));
    assertTrue(isSameFile(importParamList.get(2).getSourceURL(),
        OUTPUTDIR_RESOURCES + 2));

    importParamList = new ArrayList<ImportParam>();
    Import.fillImportParamList("SPAT", "TILE", csvFileUrl, ";",
        ImportTyp.CSV, importParamList);
    assertTrue(importParamList.size() == 3);

    assertTrue(isSameFile(importParamList.get(0).getSourceURL(),
        OUTPUTDIR_RESOURCES + "index.csv"));
    assertTrue(isSameFile(importParamList.get(1).getSourceURL(),
        OUTPUTDIR_RESOURCES + "1/index.csv"));
    assertTrue(isSameFile(importParamList.get(2).getSourceURL(),
        OUTPUTDIR_RESOURCES + "2/index.csv"));

    importParamList = new ArrayList<ImportParam>();
    Import.fillImportParamList("SPAT", "TILE", shapeFileUrl, "LOCATION",
        ImportTyp.SHAPE, importParamList);
    assertTrue(importParamList.size() == 3);

    assertTrue(isSameFile(importParamList.get(0).getSourceURL(),
        OUTPUTDIR_RESOURCES + "index.shp"));
    assertTrue(isSameFile(importParamList.get(1).getSourceURL(),
        OUTPUTDIR_RESOURCES + "1/index.shp"));
    assertTrue(isSameFile(importParamList.get(2).getSourceURL(),
        OUTPUTDIR_RESOURCES + "2/index.shp"));

  }

  /**
   * Test if files are the same by comparing their canonical name.
   *
   * @param file1
   * @param file2
   * @return true if files have the same canonical name
   * @throws Exception
   */
  public static boolean isSameFile(String file1, String file2)
      throws Exception {
    return new File(file1).getCanonicalPath().equals(
        new File(file2).getCanonicalPath());
  }
 
  /**
   * Test if files are the same by comparing their canonical name.
   *
   * @param file1
   * @param file2
   * @return true if files have the same canonical name
   * @throws Exception
   */
  public static boolean isSameFile(URL file1, String file2)
      throws Exception {
    return DataUtilities.urlToFile(file1).getCanonicalPath().equals(
        new File(file2).getCanonicalPath());
  }

  /**
   * Unit test for {{@link #isSameFile(String, String)}.
   *
   * @throws Exception
   */
  public void testIsSameFile() throws Exception {
    assertTrue(isSameFile("foo", "./foo"));
    assertTrue(isSameFile("foo", "bar/../foo"));
    assertFalse(isSameFile("foo", "bar"));
  }

  public void testCreateJoined() {
    JDBCAccess access = getJDBCAccess();

    for (int i = 0; i <= access.getNumOverviews(); i++) {
      ImageLevelInfo li = access.getLevelInfo(i);
      li.setTileTableName(li.getSpatialTableName());
    }

    try {
      Connection.prepareStatement(
          getDBDialect().getCreateMasterStatement()).execute();

      for (String tn : getSpatialTableNames()) {
        Connection
            .prepareStatement(
                getDBDialect()
                    .getCreateSpatialTableStatementJoined(
                        tn)).execute();

        String stmt = getDBDialect().getRegisterSpatialStatement(tn,
            getSrsId());

        if (stmt != null) {
          executeRegister(stmt);
        }
      }

      Connection.commit();

      for (int i = 0; i < getTileTableNames().length; i++) {
        Import imp = null;
        if (i == 0) {
          URL dirFileUrl = new URL("file:" + OUTPUTDIR_RESOURCES);

          imp = new Import(getDBDialect().getConfig(),
              new ImportParam(getSpatialTableNames()[i],
                  getSpatialTableNames()[i], dirFileUrl,
                  "tif", Import.ImportTyp.DIR), 2, Connection);
        }
        if (i == 1) {
          URL shapeFileUrl = new URL("file:" + OUTPUTDIR_RESOURCES
              + i + "/index.shp");
          imp = new Import(getDBDialect().getConfig(),
              new ImportParam(getSpatialTableNames()[i],
                  getSpatialTableNames()[i], shapeFileUrl,
                  "LOCATION", Import.ImportTyp.SHAPE), 2,
              Connection);
        }
        if (i == 2) {
          URL csvFileUrl = new URL("file:" + OUTPUTDIR_RESOURCES + i
              + "/index.csv");
          imp = new Import(getDBDialect().getConfig(),
              new ImportParam(getSpatialTableNames()[i],
                  getSpatialTableNames()[i], csvFileUrl, ";",
                  Import.ImportTyp.CSV), 2, Connection);

        }
        imp.fillSpatialTable();
      }

      for (String tn : getSpatialTableNames()) {
        Connection.prepareStatement(
            getDBDialect().getCreateIndexStatement(tn)).execute();
      }

      Connection.commit();
    } catch (Exception e) {
      e.printStackTrace();
      Assert.fail(e.getMessage());
    }
  }

  protected void imageMosaic(String name, String configUrl,
      GeneralEnvelope envelope, int width, int heigth) throws IOException {
    imageMosaic(name, configUrl, envelope, width, heigth,null, null, null);
  }

  protected void imageMosaic(String name, String configUrl,
      GeneralEnvelope envelope, int width, int heigth, Color bColor,Color transparentColor,
      CoordinateReferenceSystem crs) throws IOException {
    // Hints hints = new
    // Hints(Hints.DEFAULT_COORDINATE_REFERENCE_SYSTEM,CRS.parseWKT(M34_PRJ));
    Hints hints = null;

    if (crs != null) {
      hints = new Hints(Hints.DEFAULT_COORDINATE_REFERENCE_SYSTEM, crs);
    }

    AbstractGridFormat format = (AbstractGridFormat) GridFormatFinder
        .findFormat(configUrl);
    ImageMosaicJDBCReader reader = (ImageMosaicJDBCReader) format
        .getReader(configUrl, hints);

    ParameterValue<GridGeometry2D> gg = AbstractGridFormat.READ_GRIDGEOMETRY2D
        .createValue();

    if (envelope == null) {
      envelope = reader.getOriginalEnvelope();
    } else if (envelope.getCoordinateReferenceSystem() == null) {
      envelope.setCoordinateReferenceSystem(reader.getOriginalEnvelope()
          .getCoordinateReferenceSystem());
    }

    gg.setValue(new GridGeometry2D(new GridEnvelope2D(new Rectangle(0, 0,
        width, heigth)), envelope));

    final ParameterValue<Color> outTransp =
        ImageMosaicJDBCFormat.OUTPUT_TRANSPARENT_COLOR.createValue();
    outTransp.setValue((transparentColor == null) ? ImageMosaicJDBCFormat.OUTPUT_TRANSPARENT_COLOR
            .getDefaultValue()
            : transparentColor);
                final ParameterValue<Color> bgColor =
                    ImageMosaicJDBCFormat.BACKGROUND_COLOR.createValue();
                bgColor.setValue((bColor == null) ? ImageMosaicJDBCFormat.BACKGROUND_COLOR
                        .getDefaultValue()
                        : bColor);


    GridCoverage2D coverage = (GridCoverage2D) reader
        .read(new GeneralParameterValue[] { gg, outTransp,bgColor });

    if (coverage!=null) {
        ImageIO.write(coverage.getRenderedImage(), "tif", new File(
        getOutPutDir() + File.separator + name + ".tif"));
    }
  }

  protected abstract String getSubDir();

  protected abstract DBDialect getDBDialect();

  public void testImage1() {
    doTestImage1("image1");
  }

  public void testImage1Joined() {
    doTestImage1("image1_joined");
  }

  public void testFullExtent() {
    doFullExtent("fullExtent");
  }

  public void testFullExtentJoined() {
    doFullExtent("fullExtentJoined");
  }

  public void testNoData() {
    doNoData("nodData");
  }

  public void testNoDataJoined() {
    doNoData("noDataJoined");
  }

  public void testPartial() {
    doPartial("partial");
  }

  public void testPartialJoined() {
    doPartial("partialJoined");
  }

  public void testVienna() {
    doVienna("vienna");
  }

  public void testViennaJoined() {
    doVienna("viennaJoined");
  }

  public void testViennaEnv() {
    doViennaEnv("viennaEnv");
  }

  public void testViennaEnvJoined() {
    doViennaEnv("viennaEnvJoined");
  }

  private void doVienna(String name) {
    try {
      ENV_VIENNA.setCoordinateReferenceSystem(CRS.decode(CRSNAME));
      imageMosaic(name, getConfigUrl(), ENV_VIENNA, 500, 500);
    } catch (Exception e) {
      Assert.fail(e.getMessage());
    }
  }

  private void doViennaEnv(String name) {
    try {
      ENV_VIENNA2.setCoordinateReferenceSystem(CRS.decode(CRSNAME));
      imageMosaic(name, getConfigUrl(), ENV_VIENNA2, 500, 500);
    } catch (Exception e) {
      Assert.fail(e.getMessage());
    }
  }

  private void doTestImage1(String name) {
    try {
      ENV_1.setCoordinateReferenceSystem(CRS.decode(CRSNAME));
      imageMosaic(name, getConfigUrl(), ENV_1, 500, 250);
    } catch (Exception e) {
      Assert.fail(e.getMessage());
    }
  }

  private void doFullExtent(String name) {
    JDBCAccess access = getJDBCAccess();
    ImageLevelInfo li = access.getLevelInfo(access.getNumOverviews());

    double scale = li.getEnvelope().getWidth() / 400;
    GeneralEnvelope env = new GeneralEnvelope(new double[] {
        li.getExtentMinX(), li.getExtentMinY() }, new double[] {
        li.getExtentMaxX(), li.getExtentMaxY() });

    try {
      env.setCoordinateReferenceSystem(CRS.decode(CRSNAME));
      imageMosaic(name, getConfigUrl(), env, 400, (int) (li.getEnvelope()
          .getHeight() / scale));
    } catch (Exception e) {
      Assert.fail(e.getMessage());
    }
  }

  private void doNoData(String name) {
    JDBCAccess access = getJDBCAccess();
    ImageLevelInfo li = access.getLevelInfo(access.getNumOverviews());

    GeneralEnvelope env = new GeneralEnvelope(new double[] {
        li.getExtentMaxX() + DELTA, li.getExtentMaxY() + DELTA },
        new double[] { li.getExtentMaxX() + (DELTA * 2),
            li.getExtentMaxY() + (DELTA * 2) });

    try {
      env.setCoordinateReferenceSystem(CRS.decode(CRSNAME));
      imageMosaic(name, getConfigUrl(), env, 400, 400);
    } catch (Exception e) {
      Assert.fail(e.getMessage());
    }
  }

  private void doPartial(String name) {
    JDBCAccess access = getJDBCAccess();
    ImageLevelInfo li = access.getLevelInfo(access.getNumOverviews());

    GeneralEnvelope env = new GeneralEnvelope(new double[] {
        li.getExtentMaxX() - DELTA, li.getExtentMaxY() - DELTA },
        new double[] { li.getExtentMaxX() + DELTA,
            li.getExtentMaxY() + DELTA });

    try {
      env.setCoordinateReferenceSystem(CRS.decode(CRSNAME));
      imageMosaic(name, getConfigUrl(), env, 400, 400,Color.green,null,null);
    } catch (Exception e) {
      Assert.fail(e.getMessage());
    }
  }

  public void setUp() throws Exception {
    super.setUp();

    if (fixture == null) {
      initFixture();
      createXMLConnectFragment();
    }

    if (fixture == null) {
      String propertiesName = getSubDir() + ".properties";
      if (LOGGER.isLoggable(Level.CONFIG)) {
        LOGGER.log(Level.CONFIG, "Fixture not found - make sure "
            + propertiesName
            + " copied from build tree resources directory");
        LOGGER
            .log(Level.CONFIG,
                "to Documents and Settings/userid/.geotools/imagemosaic  (Windows) ");
        LOGGER
            .log(Level.CONFIG,
                "or   ~/.geotools/imagemosiac (Unix) ");
      }
      throw new IOException("Fixture not found");
    }
  }

  protected String getFixtureId() {
    return "imagemosaic." + getSubDir();
  }

  protected File getFixtureFile() {
    File base = new File(System.getProperty("user.home") + File.separator
        + ".geotools");
    String fixtureId = getFixtureId();

    if (fixtureId == null) {
      return null;
    }

    File fixtureFile = new File(base, fixtureId.replace('.',
        File.separatorChar).concat(".properties"));

    return fixtureFile;
  }

  protected void initFixture() throws Exception {
    File fixtureFile = getFixtureFile();

    if ((fixtureFile != null) && fixtureFile.exists()) {
      InputStream input = new BufferedInputStream(new FileInputStream(
          fixtureFile));

      try {
        fixture = new Properties();
        fixture.load(input);
      } finally {
        input.close();
      }
    }
  }

  void createXMLConnectFragment() throws Exception {
    if (fixture == null) {
      return;
    }

    String host = fixture.getProperty("host");

    if (host != null) {
      host = host.trim();
    }

    String portString = fixture.getProperty("portnum");
    Integer port = null;

    if (portString != null) {
      port = new Integer(portString);
    }

    String dbName = fixture.getProperty("dbname");

    if (dbName != null) {
      dbName = dbName.trim();
    }

    String user = fixture.getProperty("user");

    if (user != null) {
      user = user.trim();
    }

    String password = fixture.getProperty("password");

    if (password != null) {
      password = password.trim();
    }

    PrintWriter w = new PrintWriter(new FileOutputStream(
        OUTPUTDIR_RESOURCES + getXMLConnectFragmentName()));
    w.println("<connect>");
    w.println("     <dstype value=\"DBCP\"/>");
    w.println("     <username value=\"" + user + "\"/>");
    w.println("     <password value=\"" + password + "\"/>");
    w.println("     <jdbcUrl value=\"" + getJDBCUrl(host, port, dbName)
        + "\"/>");
    w.println("     <driverClassName value=\"" + getDriverClassName()
        + "\"/>");
    w.println("     <maxActive value=\"10\"/>");
    w.println("     <maxIdle value=\"0\"/>");
    w.println("</connect>");
    w.close();
  }

  public void testGetConnection() {
    Connection = null;

    try {
      Connection = getDBDialect().getConnection();
    } catch (Exception e) {
      Assert.fail("Error getting connection");
      e.printStackTrace();
    }
  }

  public void testCloseConnection() {
    if (Connection != null) {
      try {
        Connection.close();
      } catch (SQLException e) {
        Assert.fail("Error closing connection");
        e.printStackTrace();
      } finally {
        Connection = null;
      }
    }
  }

  void executeRegister(String stmt) throws SQLException {
  }

  void executeUnRegister(String stmt) throws SQLException {
  }

  protected abstract String getXMLConnectFragmentName();

  /**
   * @return der full qulified java class name for the jdbc driver
   */
  protected abstract String getDriverClassName();

  /**
   * @param host
   *            the host name/ip address
   * @param port
   *            the tcpip port where the db is listening
   * @param dbName
   *            the name of the database
   * @return the db specific connect url
   */
  protected abstract String getJDBCUrl(String host, Integer port,
      String dbName);

         public void testOutputTransparentColor() {
                  JDBCAccess access = getJDBCAccess();
                  ImageLevelInfo li = access.getLevelInfo(access.getNumOverviews());

                  GeneralEnvelope env = new GeneralEnvelope(new double[] {
                                  li.getExtentMaxX() - DELTA, li.getExtentMaxY() - DELTA },
                                  new double[] { li.getExtentMaxX() + DELTA,
                                                  li.getExtentMaxY() + DELTA });

                  try {
                          env.setCoordinateReferenceSystem(CRS.decode(CRSNAME));
                          imageMosaic("transparent", getConfigUrl(), env, 400, 400,
                                          null,Color.black, null);
                  } catch (Exception e) {
                          Assert.fail(e.getMessage());
                  }
          }

          public void testOutputTransparentColor2() {
                  JDBCAccess access = getJDBCAccess();
                  ImageLevelInfo li = access.getLevelInfo(access.getNumOverviews());

                  GeneralEnvelope env = new GeneralEnvelope(new double[] {
                                  li.getExtentMinX() - DELTA, li.getExtentMinY() - DELTA },
                                  new double[] { li.getExtentMinX() + DELTA,
                                                  li.getExtentMinY() + DELTA });

                  try {
                          env.setCoordinateReferenceSystem(CRS.decode(CRSNAME));
                          imageMosaic("transparent2", getConfigUrl(), env, 400, 400,
                                          Color.GREEN,Color.GREEN, null);
                  } catch (Exception e) {
                          Assert.fail(e.getMessage());
                  }
          }

}
TOP

Related Classes of org.geotools.gce.imagemosaic.jdbc.AbstractTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.