package osm.jp.coverage.fuel;
import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import jp.co.areaweb.tools.database.DatabaseTool;
import static org.hamcrest.CoreMatchers.is;
import org.junit.*;
import static org.junit.Assert.*;
import org.junit.runners.MethodSorters;
import static osm.jp.api.Osmdb.create;
@FixMethodOrder (MethodSorters.NAME_ASCENDING)
public class DbExistTest {
public void init() throws Exception {
}
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
public void test01_hsqldbの生成確認() {
Connection con = null;
try {
// DB.tableを作成
init();
con = DatabaseTool.openDb("database");
create(con);
} catch (Exception ex) {
fail();
} finally {
if (con != null) {
DatabaseTool.closeDb(con);
}
}
File dir = new File("database");
assertTrue(dir.exists());
assertTrue(dir.isDirectory());
Connection hsqldb = null;
try {
hsqldb = DatabaseTool.openDb("database");
PreparedStatement ps8 = hsqldb.prepareStatement("SELECT count(*) FROM AREA_NODE");
try (ResultSet rset8 = ps8.executeQuery()) {
if (rset8.next()) {
long cnt = rset8.getLong(1);
assertThat(Long.toString(cnt), is("0"));
}
else {
fail();
}
}
PreparedStatement ps1 = hsqldb.prepareStatement("SELECT count(*) FROM OSM_EXIST");
try (ResultSet rset1 = ps1.executeQuery()) {
if (rset1.next()) {
long cnt = rset1.getLong(1);
assertThat(Long.toString(cnt), is("0"));
}
else {
fail();
}
}
} catch (ClassNotFoundException ex) {
Logger.getLogger(DbExistTest.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(DbExistTest.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(DbExistTest.class.getName()).log(Level.SEVERE, null, ex);
} finally {
DatabaseTool.closeDb(hsqldb);
}
}
@Test
public void test020_fuel() {
try {
init();
String[] args = new String[0];
DbExist.main(args);
}
catch (Exception ex) {
fail(ex.toString());
}
}
@Test
public void test021_fuel() {
File dir = new File("database");
assertTrue(dir.exists());
assertTrue(dir.isDirectory());
Connection hsqldb = null;
try {
hsqldb = DatabaseTool.openDb("database");
PreparedStatement ps8 = hsqldb.prepareStatement("SELECT count(*) FROM AREA_NODE");
try (ResultSet rset8 = ps8.executeQuery()) {
if (rset8.next()) {
long cnt = rset8.getLong(1);
assertThat(Long.toString(cnt), is("0"));
}
else {
fail();
}
}
PreparedStatement ps1 = hsqldb.prepareStatement("SELECT count(*) FROM OSM_EXIST");
try (ResultSet rset1 = ps1.executeQuery()) {
if (rset1.next()) {
long cnt = rset1.getLong(1);
assertThat((cnt > 0), is(true));
}
else {
fail();
}
}
// ノード: エネオス (2015835273) 場所: 35.4367770, 139.4035710 brand=yes,name=yes
ps1 = hsqldb.prepareStatement("SELECT score,name,lat,lon FROM OSM_EXIST where idref='2015835273'");
try (ResultSet rset1 = ps1.executeQuery()) {
if (rset1.next()) {
assertThat(rset1.getInt("score"), is(50));
assertThat(checkRenge(rset1, "35.4367770", "139.4035710"), is(true));
}
else {
fail();
}
}
// ノード: ENEOS (1769261234) 場所: 35.4330583, 139.4006876 brand=no,name=yes
ps1 = hsqldb.prepareStatement("SELECT score,name,lat,lon FROM OSM_EXIST where idref='1769261234'");
try (ResultSet rset1 = ps1.executeQuery()) {
if (rset1.next()) {
assertThat(rset1.getInt("score"), is(1));
assertThat(checkRenge(rset1, "35.4330583", "139.4006876"), is(true));
}
else {
fail();
}
}
// ノード: 出光 (3877535257) 場所: 45.3985390, 141.6882450 (稚内) brand=no
ps1 = hsqldb.prepareStatement("SELECT score,name,lat,lon FROM OSM_EXIST where idref='3877535257'");
try (ResultSet rset1 = ps1.executeQuery()) {
if (rset1.next()) {
assertThat(rset1.getInt("score"), is(1));
assertThat(checkRenge(rset1, "45.3985390", "141.6882450"), is(true));
}
else {
fail();
}
}
// ノード: 605462353 場所: 24.3465566, 124.1519297 (石垣島) name=no, brand=no
ps1 = hsqldb.prepareStatement("SELECT score,name,lat,lon FROM OSM_EXIST where idref='605462353'");
try (ResultSet rset1 = ps1.executeQuery()) {
if (rset1.next()) {
assertThat(rset1.getInt("score"), is(1));
assertThat(checkRenge(rset1, "24.3465566", "124.1519297"), is(true));
}
else {
fail();
}
}
// ウェイ: 出光 (161877397) 139.402982078119 35.4372453832977
ps1 = hsqldb.prepareStatement("SELECT score,name,lat,lon FROM OSM_EXIST where idref='161877397'");
try (ResultSet rset1 = ps1.executeQuery()) {
if (rset1.next()) {
assertThat(rset1.getInt("score"), is(50));
assertThat(checkRenge(rset1, "35.4371428029181", "139.403185626731"), is(true));
}
else {
fail();
}
}
// node: "DISUSED:amenity=fuel" (302164578) https://www.openstreetmap.org/node/302164578
// ノード: エネオス (302164578) 場所: 35.5688084, 139.7300300
ps1 = hsqldb.prepareStatement("SELECT score,name,lat,lon FROM OSM_EXIST where idref='302164578'");
try (ResultSet rset1 = ps1.executeQuery()) {
if (rset1.next()) {
assertThat(rset1.getInt("score"), is(50));
assertThat(checkRenge(rset1, "35.5688084", "139.7300300"), is(true));
}
else {
fail();
}
}
// node: "removed:amenity=fuel" (5338111023) https://www.openstreetmap.org/node/5338111023
// ノード: removed (5338111023) 場所: 35.4305614, 139.3662339
ps1 = hsqldb.prepareStatement("SELECT score,name,lat,lon FROM OSM_EXIST where idref='5338111023'");
try (ResultSet rset1 = ps1.executeQuery()) {
if (rset1.next()) {
assertThat(rset1.getInt("score"), is(50));
assertThat(checkRenge(rset1, "35.4305614", "139.3662339"), is(true));
}
else {
fail();
}
}
} catch (ClassNotFoundException ex) {
Logger.getLogger(DbExistTest.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(DbExistTest.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(DbExistTest.class.getName()).log(Level.SEVERE, null, ex);
} finally {
DatabaseTool.closeDb(hsqldb);
}
}
boolean checkRenge(ResultSet rset, String latStr, String lonStr) throws SQLException {
if (checkRenge(rset.getDouble("lat"), latStr)) {
if (checkRenge(rset.getDouble("lon"), lonStr)) {
return true;
}
}
return false;
}
boolean checkRenge(double d1, String str) throws SQLException {
double base = Double.parseDouble(str);
double up = d1 + 0.0001D;
double down = d1 - 0.0001D;
boolean ret = true;
if (Double.compare(base, up) > 0) {
ret = false;
}
if (Double.compare(base, down) < 0) {
ret = false;
}
System.out.println("d1: "+ d1 +" : "+ str +" --> "+ (ret ? "IN" : "out"));
return ret;
}
}