Search in sources :

Example 31 with ConverterException

use of ch.ehi.ili2db.converter.ConverterException in project ili2db by claeis.

the class TransferFromXtf method readObjectSqlid.

private Long readObjectSqlid(Viewable xclass, String xtfid) {
    String stmt = createQueryStmt4sqlid(xclass);
    EhiLogger.traceBackendCmd(stmt);
    java.sql.PreparedStatement dbstmt = null;
    long sqlid = 0;
    String sqlType = null;
    try {
        dbstmt = conn.prepareStatement(stmt);
        dbstmt.clearParameters();
        if ((xclass instanceof AbstractClassDef) && ((AbstractClassDef) xclass).getOid() != null && AbstractRecordConverter.isUuidOid(td, ((AbstractClassDef) xclass).getOid())) {
            dbstmt.setObject(1, geomConv.fromIomUuid(xtfid));
        } else {
            dbstmt.setString(1, xtfid);
        }
        java.sql.ResultSet rs = dbstmt.executeQuery();
        if (rs.next()) {
            sqlid = rs.getLong(1);
            sqlType = rs.getString(3);
        } else {
            // unknown object
            return null;
        }
    } catch (java.sql.SQLException ex) {
        EhiLogger.logError("failed to query " + xclass.getScopedName(null), ex);
    } catch (ConverterException ex) {
        EhiLogger.logError("failed to query " + xclass.getScopedName(null), ex);
    } finally {
        if (dbstmt != null) {
            try {
                dbstmt.close();
            } catch (java.sql.SQLException ex) {
                EhiLogger.logError("failed to close query of " + xclass.getScopedName(null), ex);
            }
        }
    }
    // remember found sqlid
    Viewable aclass = (Viewable) tag2class.get(ili2sqlName.mapSqlTableName(sqlType));
    oidPool.putXtfid2sqlid(Ili2cUtility.getRootViewable(aclass).getScopedName(null), aclass.getScopedName(null), xtfid, sqlid);
    return sqlid;
}
Also used : ConverterException(ch.ehi.ili2db.converter.ConverterException) SQLException(java.sql.SQLException) Viewable(ch.interlis.ili2c.metamodel.Viewable) AbstractClassDef(ch.interlis.ili2c.metamodel.AbstractClassDef) PreparedStatement(java.sql.PreparedStatement)

Example 32 with ConverterException

use of ch.ehi.ili2db.converter.ConverterException in project ili2db by claeis.

the class Ili2db method runSchemaImport.

public static void runSchemaImport(Config config, String appHome) throws Ili2dbException {
    ch.ehi.basics.logging.FileListener logfile = null;
    if (config.getLogfile() != null) {
        logfile = new FileLogger(new java.io.File(config.getLogfile()));
        EhiLogger.getInstance().addListener(logfile);
    }
    StdLogger logStderr = new StdLogger(config.getLogfile());
    EhiLogger.getInstance().addListener(logStderr);
    EhiLogger.getInstance().removeListener(StdListener.getInstance());
    try {
        boolean connectionFromExtern = config.getJdbcConnection() != null;
        logGeneralInfo(config);
        Ili2dbLibraryInit ao = null;
        try {
            ao = getInitStrategy(config);
            ao.init();
            ch.interlis.ili2c.config.Configuration modelv = new ch.interlis.ili2c.config.Configuration();
            String xtffile = config.getXtffile();
            String ilifile = null;
            if (xtffile != null && xtffile.endsWith(".ili")) {
                ilifile = xtffile;
                modelv.addFileEntry(new ch.interlis.ili2c.config.FileEntry(ilifile, ch.interlis.ili2c.config.FileEntryKind.ILIMODELFILE));
            }
            String models = config.getModels();
            if (models != null) {
                String[] modelnames = models.split(";");
                for (int modeli = 0; modeli < modelnames.length; modeli++) {
                    String m = modelnames[modeli];
                    if (m != null) {
                        if (m.equals(XTF)) {
                        // ignore it
                        } else {
                            modelv.addFileEntry(new ch.interlis.ili2c.config.FileEntry(m, ch.interlis.ili2c.config.FileEntryKind.ILIMODELFILE));
                        }
                    }
                }
            }
            if (modelv.getSizeFileEntry() == 0) {
                throw new Ili2dbException("no models given");
            }
            String dburl = config.getDburl();
            String dbusr = config.getDbusr();
            String dbpwd = config.getDbpwd();
            if (!connectionFromExtern && dburl == null) {
                throw new Ili2dbException("no dburl given");
            }
            if (dbusr == null) {
                // EhiLogger.logError("no dbusr given");
                // return;
                dbusr = "";
            }
            if (dbpwd == null) {
                // EhiLogger.logError("no dbpwd given");
                // return;
                dbpwd = "";
            }
            String dbschema = config.getDbschema();
            if (dbschema != null) {
                EhiLogger.logState("dbschema <" + dbschema + ">");
            }
            String geometryConverter = config.getGeometryConverter();
            if (geometryConverter == null) {
                throw new Ili2dbException("no geoemtry converter given");
            }
            String ddlGenerator = config.getDdlGenerator();
            if (ddlGenerator == null) {
                throw new Ili2dbException("no DDL generator given");
            }
            String idGenerator = config.getIdGenerator();
            if (idGenerator == null) {
                throw new Ili2dbException("no ID generator given");
            }
            if (!connectionFromExtern) {
                String jdbcDriver = config.getJdbcDriver();
                if (jdbcDriver == null) {
                    throw new Ili2dbException("no JDBC driver given");
                }
                try {
                    Class.forName(jdbcDriver);
                } catch (Exception ex) {
                    throw new Ili2dbException("failed to load JDBC driver", ex);
                }
            }
            CustomMapping customMapping = getCustomMappingStrategy(config);
            // open db connection
            Connection conn = null;
            String url = dburl;
            try {
                if (connectionFromExtern) {
                    conn = config.getJdbcConnection();
                } else {
                    conn = connect(url, dbusr, dbpwd, config, customMapping);
                }
                customMapping.postConnect(conn, config);
                logDBVersion(conn);
                if (!connectionFromExtern) {
                    // switch off auto-commit
                    conn.setAutoCommit(false);
                }
            } catch (SQLException ex) {
                throw new Ili2dbException(ex);
            }
            // run pre-script
            if (config.getPreScript() != null) {
                try {
                    EhiLogger.logState("run schemaImport pre-script...");
                    DbUtility.executeSqlScript(conn, new java.io.FileReader(config.getPreScript()));
                } catch (FileNotFoundException e) {
                    throw new Ili2dbException("schemaImport pre-script statements failed", e);
                }
            }
            // setup ilidirs+pathmap for ili2c
            setupIli2cPathmap(config, appHome, ilifile, conn);
            Ili2cMetaAttrs ili2cMetaAttrs = new Ili2cMetaAttrs();
            setupIli2cMetaAttrs(ili2cMetaAttrs, config, modelv);
            // compile required ili files
            EhiLogger.logState("compile models...");
            TransferDescription td;
            modelv.setAutoCompleteModelList(true);
            modelv.setGenerateWarnings(false);
            td = ch.interlis.ili2c.Main.runCompiler(modelv, config, ili2cMetaAttrs);
            if (td == null) {
                throw new Ili2dbException("compiler failed");
            }
            // an INTERLIS 1 model?
            if (td.getIli1Format() != null) {
                config.setItfTransferfile(true);
            }
            Generator gen = null;
            try {
                gen = (Generator) Class.forName(ddlGenerator).newInstance();
            } catch (Exception ex) {
                throw new Ili2dbException("failed to load/create DDL generator", ex);
            }
            // create db schema
            if (config.getDbschema() != null) {
                if (!DbUtility.schemaExists(conn, config.getDbschema())) {
                    DbUtility.createSchema(conn, config.getDbschema());
                }
            }
            DbIdGen idGen = null;
            try {
                idGen = (DbIdGen) Class.forName(idGenerator).newInstance();
            } catch (Exception ex) {
                throw new Ili2dbException("failed to load/create ID generator", ex);
            }
            idGen.init(config.getDbschema(), config);
            // read mapping file
            NameMapping mapping = new NameMapping(config);
            if (DbUtility.tableExists(conn, new DbTableName(config.getDbschema(), DbNames.CLASSNAME_TAB))) {
                // read mapping from db
                mapping.readTableMappingTable(conn, config.getDbschema());
            }
            if (DbUtility.tableExists(conn, new DbTableName(config.getDbschema(), DbNames.ATTRNAME_TAB))) {
                // read mapping from db
                mapping.readAttrMappingTable(conn, config.getDbschema());
            }
            TrafoConfig trafoConfig = new TrafoConfig();
            trafoConfig.readTrafoConfig(conn, config.getDbschema());
            ModelElementSelector ms = new ModelElementSelector();
            ArrayList<String> modelNames = new ArrayList<String>();
            if (models != null) {
                String[] modelnames = models.split(";");
                for (int modeli = 0; modeli < modelnames.length; modeli++) {
                    String m = modelnames[modeli];
                    if (m != null) {
                        if (m.equals(XTF)) {
                        // ignore it
                        } else {
                            modelNames.add(m);
                        }
                    }
                }
            }
            // use models explicitly given by user (or last model of given ili-file)
            java.util.List<Element> eles = ms.getModelElements(modelNames, td, td.getIli1Format() != null && config.getDoItfLineTables(), Config.CREATE_ENUM_DEFS_MULTI.equals(config.getCreateEnumDefs()), config);
            Viewable2TableMapping class2wrapper = Viewable2TableMapper.getClass2TableMapping(config, trafoConfig, eles, mapping);
            SqlColumnConverter geomConverter = null;
            try {
                geomConverter = (SqlColumnConverter) Class.forName(geometryConverter).newInstance();
            } catch (Exception ex) {
                throw new Ili2dbException("failed to load/create geometry converter", ex);
            }
            geomConverter.setup(conn, config);
            if (config.getDefaultSrsCode() != null && config.getDefaultSrsAuthority() != null) {
                try {
                    if (geomConverter.getSrsid(config.getDefaultSrsAuthority(), config.getDefaultSrsCode(), conn) == null) {
                        throw new Ili2dbException(config.getDefaultSrsAuthority() + "/" + config.getDefaultSrsCode() + " does not exist");
                    }
                } catch (ConverterException ex) {
                    throw new Ili2dbException("failed to query existence of SRS", ex);
                }
            }
            // create table structure
            EhiLogger.logState("create table structure...");
            try {
                TransferFromIli trsfFromIli = new TransferFromIli();
                // map ili-classes to sql-tables
                // TODO move default SRS to config
                DbSchema schema;
                try {
                    schema = trsfFromIli.doit(td, eles, mapping, config, idGen, trafoConfig, class2wrapper, customMapping);
                } catch (Ili2dbException e) {
                    throw new Ili2dbException("mapping of ili-classes to sql-tables failed", e);
                }
                if (schema == null) {
                    return;
                }
                if (!(conn instanceof GeodbConnection)) {
                    trsfFromIli.addBasketsTable(schema);
                    trsfFromIli.addImportsTable(schema);
                    TransferFromIli.addInheritanceTable(schema, Integer.parseInt(config.getMaxSqlNameLength()));
                    TransferFromIli.addSettingsTable(schema);
                    TransferFromIli.addTrafoConfigTable(schema);
                    TransferFromIli.addModelsTable(schema, config);
                    trsfFromIli.addEnumTable(schema);
                    TransferFromIli.addTableMappingTable(schema);
                    TransferFromIli.addAttrMappingTable(schema);
                    DbExtMetaInfo.addMetaInfoTables(schema);
                    idGen.addMappingTable(schema);
                    if (config.getCreateMetaInfo()) {
                        MetaAttrUtility.addMetaAttributesTable(schema);
                    }
                }
                // TODO create geodb domains
                if (conn instanceof GeodbConnection) {
                }
                GeneratorDriver drv = new GeneratorDriver(gen);
                idGen.initDb(conn, dbusr);
                idGen.initDbDefs(gen);
                drv.visitSchema(config, schema);
                // is a create script requested by user?
                String createscript = config.getCreatescript();
                if (createscript != null && (gen instanceof GeneratorJdbc)) {
                    writeScript(createscript, ((GeneratorJdbc) gen).iteratorCreateLines());
                }
                // is a drop script requested by user?
                String dropscript = config.getDropscript();
                if (dropscript != null && (gen instanceof GeneratorJdbc)) {
                    writeScript(dropscript, ((GeneratorJdbc) gen).iteratorDropLines());
                }
                if (!(conn instanceof GeodbConnection)) {
                    // update mapping table
                    mapping.updateTableMappingTable(conn, config.getDbschema());
                    mapping.updateAttrMappingTable(conn, config.getDbschema());
                    trafoConfig.updateTrafoConfig(conn, config.getDbschema());
                    // update inheritance table
                    trsfFromIli.updateInheritanceTable(conn, config.getDbschema());
                    // update enum table
                    trsfFromIli.updateEnumTable(conn);
                    trsfFromIli.updateMetaInfoTables(conn);
                    TransferFromIli.addModels(conn, td, config.getDbschema());
                    if (!config.isConfigReadFromDb()) {
                        TransferFromIli.updateSettings(conn, config, config.getDbschema());
                    }
                    // import meta-attributes from .toml file
                    if (config.getIliMetaAttrsFile() != null) {
                        if (config.getCreateMetaInfo()) {
                            try {
                                EhiLogger.logState("run import meta-attributes from toml file");
                                MetaAttrUtility.addMetaAttrsFromToml(td, new java.io.FileReader(config.getIliMetaAttrsFile()));
                            } catch (FileNotFoundException e) {
                                throw new Ili2dbException("import meta-attributes failed", e);
                            }
                        } else {
                            throw new Ili2dbException("import meta-attributes requires --createMetaInfo option");
                        }
                    }
                    if (config.getCreateMetaInfo()) {
                        // update meta-attributes table
                        MetaAttrUtility.updateMetaAttributesTable(conn, config.getDbschema(), td);
                        // set elements' meta-attributes
                        MetaAttrUtility.addMetaAttrsFromDb(td, conn, config.getDbschema());
                    }
                }
                // run post-script
                if (config.getPostScript() != null) {
                    try {
                        EhiLogger.logState("run schemaImport post-script...");
                        DbUtility.executeSqlScript(conn, new java.io.FileReader(config.getPostScript()));
                    } catch (FileNotFoundException e) {
                        throw new Ili2dbException("schemaImport post-script statements failed", e);
                    }
                }
                // }
                if (!connectionFromExtern) {
                    try {
                        conn.commit();
                    } catch (SQLException e) {
                        throw new Ili2dbException("failed to commit", e);
                    }
                }
            } catch (java.io.IOException ex) {
                throw new Ili2dbException(ex);
            }
            try {
                if (!connectionFromExtern) {
                    if (conn != null) {
                        try {
                            conn.close();
                        } finally {
                            conn = null;
                            config.setJdbcConnection(null);
                        }
                    }
                }
                EhiLogger.logState("...done");
            } catch (java.sql.SQLException ex) {
                EhiLogger.logError(ex);
            }
        } finally {
            ao.end();
        }
    } catch (Ili2dbException ex) {
        if (logfile != null) {
            logfile.logEvent(new StdLogEvent(LogEvent.ERROR, null, ex, null));
        }
        throw ex;
    } catch (java.lang.RuntimeException ex) {
        if (logfile != null) {
            logfile.logEvent(new StdLogEvent(LogEvent.ERROR, null, ex, null));
        }
        throw ex;
    } finally {
        if (logfile != null) {
            EhiLogger.getInstance().removeListener(logfile);
            logfile.close();
            logfile = null;
        }
        if (logStderr != null) {
            EhiLogger.getInstance().addListener(StdListener.getInstance());
            EhiLogger.getInstance().removeListener(logStderr);
        }
    }
}
Also used : ConverterException(ch.ehi.ili2db.converter.ConverterException) NameMapping(ch.ehi.ili2db.mapping.NameMapping) Configuration(ch.interlis.ili2c.config.Configuration) FileNotFoundException(java.io.FileNotFoundException) ArrayList(java.util.ArrayList) Viewable2TableMapping(ch.ehi.ili2db.mapping.Viewable2TableMapping) GeneratorDriver(ch.ehi.sqlgen.generator.GeneratorDriver) TrafoConfig(ch.ehi.ili2db.mapping.TrafoConfig) TransferDescription(ch.interlis.ili2c.metamodel.TransferDescription) FileLogger(ch.interlis.iox_j.logging.FileLogger) SqlColumnConverter(ch.ehi.ili2db.converter.SqlColumnConverter) DbTableName(ch.ehi.sqlgen.repository.DbTableName) Generator(ch.ehi.sqlgen.generator.Generator) SQLException(java.sql.SQLException) StdLogEvent(ch.ehi.basics.logging.StdLogEvent) Element(ch.interlis.ili2c.metamodel.Element) CustomMapping(ch.ehi.ili2db.fromili.CustomMapping) SQLException(java.sql.SQLException) GeneratorJdbc(ch.ehi.sqlgen.generator_impl.jdbc.GeneratorJdbc) StdLogger(ch.interlis.iox_j.logging.StdLogger) TransferFromIli(ch.ehi.ili2db.fromili.TransferFromIli) Ili2cMetaAttrs(ch.interlis.ili2c.metamodel.Ili2cMetaAttrs) DbSchema(ch.ehi.sqlgen.repository.DbSchema) Connection(java.sql.Connection) IOException(java.io.IOException) IoxException(ch.interlis.iox.IoxException) FileNotFoundException(java.io.FileNotFoundException) SQLException(java.sql.SQLException) ConverterException(ch.ehi.ili2db.converter.ConverterException) IOException(java.io.IOException) Configuration(ch.interlis.ili2c.config.Configuration) ModelElementSelector(ch.ehi.ili2db.fromili.ModelElementSelector)

Aggregations

ConverterException (ch.ehi.ili2db.converter.ConverterException)32 ParseException (com.vividsolutions.jts.io.ParseException)17 IomObject (ch.interlis.iom.IomObject)8 IoxException (ch.interlis.iox.IoxException)8 Wkb2iox (ch.interlis.iox_j.wkb.Wkb2iox)6 SQLException (java.sql.SQLException)6 Iom_jObject (ch.interlis.iom_j.Iom_jObject)5 AttributeDef (ch.interlis.ili2c.metamodel.AttributeDef)3 BlackboxType (ch.interlis.ili2c.metamodel.BlackboxType)3 CoordType (ch.interlis.ili2c.metamodel.CoordType)3 EnumerationType (ch.interlis.ili2c.metamodel.EnumerationType)3 SurfaceOrAreaType (ch.interlis.ili2c.metamodel.SurfaceOrAreaType)3 SurfaceType (ch.interlis.ili2c.metamodel.SurfaceType)3 Viewable (ch.interlis.ili2c.metamodel.Viewable)3 JGeometry (oracle.spatial.geometry.JGeometry)3 ArrayMapping (ch.ehi.ili2db.mapping.ArrayMapping)2 MultiLineMapping (ch.ehi.ili2db.mapping.MultiLineMapping)2 MultiPointMapping (ch.ehi.ili2db.mapping.MultiPointMapping)2 MultiSurfaceMapping (ch.ehi.ili2db.mapping.MultiSurfaceMapping)2 AbstractClassDef (ch.interlis.ili2c.metamodel.AbstractClassDef)2