package oracle.spatial.util;
import java.io.PrintStream;
import java.sql.DriverManager;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Locale;
import java.util.StringTokenizer;
import java.util.Vector;
import oracle.jdbc.OracleConnection;
import oracle.jdbc.OracleDriver;
public class SampleShapefileToJGeomFeature
{
private static String m_host;
private static String m_port;
private static String m_sid;
private static String m_user;
private static String m_password;
private static String m_tableName;
private static String m_shapefileName;
private static String m_idName = null;
private static int m_srid = 0;
private static String m_geom = "geometry";
private static String min_x = "-180";
private static String min_y = "-90";
private static String max_x = "180";
private static String max_y = "90";
private static String m_tolerance = "0.05";
private static String mg_tolerance = "0.000000005";
private static int m_start_id = 1;
private static int m_commit_interval = -1;
private static int m_println_interval = 10;
private static String dimArray = null;
private static String dimArrayMig = null;
private static boolean defaultX = true;
private static boolean defaultY = true;
public static void main(String[] paramArrayOfString)
throws Exception
{
String str1 = "The following key/value is missing: ";
HashMap localHashMap = new HashMap();
Vector localVector = new Vector();
int i = 0;
if (paramArrayOfString.length <= 1) {
System.err.println("USAGE: java -cp [ORACLE_HOME]/jdbc/lib/ojdbc14.jar;./sdoutl.jar;./sdoapi.jar SampleShapefileToJGeomFeature -h db_host -p db_port -s db_sid -u db_username -d db_password -t db_table -f shapefile_name [-i table_id_column_name][-r srid][-g db_geometry_column][-x max_x,min_x][-y max_y,min_y][-o tolerance]");
System.out.println("Usage explanation (parameters used):");
System.out.println("<-h>: Host machine with existing Oracle database");
System.out.println("<-p>: Host machine's port with existing Oracle database (e.g. 1521)");
System.out.println("<-s>: Host machine's SID with existing Oracle database");
System.out.println("<-u>: Database user");
System.out.println("<-d>: Database user's password");
System.out.println("<-t>: Table name for the result");
System.out.println("<-f>: File name of an input Shapefile (without extension)");
System.out.println("[-i]: Column name for unique numeric ID; if required");
System.out.println("[-r]: Valid Oracle SRID for coordinate system; use 0 if unknown");
System.out.println("[-g]: Preferred or valid SDO_GEOMETRY column name");
System.out.println("[-x]: Bounds for the X dimension; use -180,180 if unknown");
System.out.println("[-y]: Bounds for the Y dimension; use -90,90 if unknown");
System.out.println("[-o]: Load tolerance fields (x and y) in metadata, if not specified, tolerance fields are 0.05");
System.out.println("[-a]: Append shapefile data to an existing table");
System.out.println("[-n]: Start ID for column specified in -i parameter");
System.out.println("[-c]: Commit interval. Default, commits every 1000 conversions and at the end of a run");
System.out.println("[-v]: Println interval. Default, displays every 10 conversions.");
System.exit(1);
}
else
{
for (int j = 0; paramArrayOfString.length > j; j++)
{
localVector.add(j, paramArrayOfString[j]);
}
for (localObject = localVector.elements(); ((Enumeration)localObject).hasMoreElements(); ) {
try
{
String str3 = (String)((Enumeration)localObject).nextElement();
if (str3.equals("-a")) {
i = 1;
}
else {
String str2 = (String)((Enumeration)localObject).nextElement();
if ((str3 != null) && (str2 != null))
localHashMap.put(str3, str2);
}
}
catch (Exception localException1)
{
System.out.println("One of your key-value pairs failed. Please try again");
System.exit(1);
}
}
}
if (localHashMap.containsKey("-h")) {
System.out.println("host: " + (String)localHashMap.get("-h"));
m_host = (String)localHashMap.get("-h");
}
else
{
System.out.println(str1 + "-h db_host");
System.exit(1);
}
if (localHashMap.containsKey("-p")) {
System.out.println("port: " + (String)localHashMap.get("-p"));
m_port = (String)localHashMap.get("-p");
}
else
{
System.out.println(str1 + "-p db_port");
System.exit(1);
}
if (localHashMap.containsKey("-s")) {
System.out.println("sid: " + (String)localHashMap.get("-s"));
m_sid = (String)localHashMap.get("-s");
}
else
{
System.out.println(str1 + "-s db_sid");
System.exit(1);
}
if (localHashMap.containsKey("-u")) {
System.out.println("db_username: " + (String)localHashMap.get("-u"));
m_user = (String)localHashMap.get("-u");
}
else
{
System.out.println(str1 + "-u db_username");
System.exit(1);
}
if (localHashMap.containsKey("-d")) {
System.out.println("db_password: " + (String)localHashMap.get("-d"));
m_password = (String)localHashMap.get("-d");
}
else
{
System.out.println(str1 + "-d password");
System.exit(1);
}
if (localHashMap.containsKey("-t")) {
System.out.println("db_tablename: " + (String)localHashMap.get("-t"));
m_tableName = (String)localHashMap.get("-t");
}
else
{
System.out.println(str1 + "-t tablename");
System.exit(1);
}
if (localHashMap.containsKey("-f")) {
System.out.println("shapefile_name: " + (String)localHashMap.get("-f"));
m_shapefileName = (String)localHashMap.get("-f");
}
else
{
System.out.println(str1 + "-f shapefile_name");
System.exit(1);
}
if (localHashMap.containsKey("-i")) {
System.out.println("table_id_column_name: " + (String)localHashMap.get("-i"));
m_idName = (String)localHashMap.get("-i");
}
if (localHashMap.containsKey("-r")) {
System.out.println("SRID: " + (String)localHashMap.get("-r"));
m_srid = Integer.parseInt((String)localHashMap.get("-r"));
}
if (localHashMap.containsKey("-g")) {
System.out.println("db_geometry_column: " + (String)localHashMap.get("-g"));
m_geom = (String)localHashMap.get("-g");
}
if (localHashMap.containsKey("-x")) {
System.out.println("X: " + (String)localHashMap.get("-x"));
localObject = new StringTokenizer((String)localHashMap.get("-x"), ",");
while (((StringTokenizer)localObject).hasMoreTokens())
{
min_x = ((StringTokenizer)localObject).nextToken();
max_x = ((StringTokenizer)localObject).nextToken();
defaultX = false;
}
}
if (localHashMap.containsKey("-y")) {
System.out.println("Y: " + (String)localHashMap.get("-y"));
localObject = new StringTokenizer((String)localHashMap.get("-y"), ",");
while (((StringTokenizer)localObject).hasMoreTokens())
{
min_y = ((StringTokenizer)localObject).nextToken();
max_y = ((StringTokenizer)localObject).nextToken();
defaultY = false;
}
}
if (localHashMap.containsKey("-o")) {
System.out.println("tolerance: " + (String)localHashMap.get("-o"));
m_tolerance = (String)localHashMap.get("-o");
}
if (localHashMap.containsKey("-n")) {
System.out.println("start_id: " + (String)localHashMap.get("-n"));
m_start_id = Integer.parseInt((String)localHashMap.get("-n"));
}
if (localHashMap.containsKey("-c")) {
System.out.println("commit_interval: " + (String)localHashMap.get("-c"));
m_commit_interval = Integer.parseInt((String)localHashMap.get("-c"));
}
if (localHashMap.containsKey("-v")) {
System.out.println("println_interval: " + (String)localHashMap.get("-v"));
m_println_interval = Integer.parseInt((String)localHashMap.get("-v"));
}
System.out.println("Connecting to Oracle10g using...");
System.out.println(m_host + ", " + m_port + ", " + m_sid + ", " + m_user + ", " + m_password + ", " + m_tableName + ", " + m_shapefileName + ", " + m_idName + ", " + m_srid);
Object localObject = "jdbc:oracle:thin:@ " + m_host + ":" + m_port + ":" + m_sid;
OracleConnection localOracleConnection = null;
try
{
Locale.setDefault(Locale.GERMAN);
DriverManager.registerDriver(new OracleDriver());
localOracleConnection = (OracleConnection)DriverManager.getConnection((String)localObject, m_user, m_password);
localOracleConnection.setAutoCommit(false);
} catch (Exception localException2) {
localException2.printStackTrace();
}
DBFReaderJGeom localDBFReaderJGeom = new DBFReaderJGeom(m_shapefileName);
ShapefileReaderJGeom localShapefileReaderJGeom = new ShapefileReaderJGeom(m_shapefileName);
ShapefileFeatureJGeom localShapefileFeatureJGeom = new ShapefileFeatureJGeom();
int k = localShapefileReaderJGeom.getShpFileType();
double d1 = localShapefileReaderJGeom.getMinMeasure();
double d2 = localShapefileReaderJGeom.getMaxMeasure();
if (d2 <= -9.999999999999999E+038D)
d2 = (0.0D / 0.0D);
double d3 = localShapefileReaderJGeom.getMinZ();
double d4 = localShapefileReaderJGeom.getMaxZ();
if (defaultX)
{
if (!ShapefileFeatureJGeom.isGeodetic(localOracleConnection, m_srid))
{
min_x = String.valueOf(localShapefileReaderJGeom.getMinX());
max_x = String.valueOf(localShapefileReaderJGeom.getMaxX());
}
}
if (defaultY)
{
if (!ShapefileFeatureJGeom.isGeodetic(localOracleConnection, m_srid))
{
min_y = String.valueOf(localShapefileReaderJGeom.getMinY());
max_y = String.valueOf(localShapefileReaderJGeom.getMaxY());
}
}
int m = ShapefileReaderJGeom.getShpDims(k, d2);
dimArray = ShapefileFeatureJGeom.getDimArray(m, m_tolerance, min_x, max_x, min_y, max_y, d3, d4, d1, d2);
dimArrayMig = ShapefileFeatureJGeom.getDimArray(m, mg_tolerance, min_x, max_x, min_y, max_y, d3, d4, d1, d2);
if (i == 0)
ShapefileFeatureJGeom.prepareTableForData(localOracleConnection, localDBFReaderJGeom, m_tableName, m_idName, m_geom, m_srid, dimArray);
else {
System.out.println("Appending to existing table\n");
}
ShapefileFeatureJGeom.insertFeatures(localOracleConnection, localDBFReaderJGeom, localShapefileReaderJGeom, m_tableName, m_idName, m_start_id, m_commit_interval, m_println_interval, m_srid, dimArrayMig);
localDBFReaderJGeom.closeDBF();
localShapefileReaderJGeom.closeShapefile();
localOracleConnection.close();
}
}