Search in sources :

Example 1 with CustomMapping

use of ch.ehi.ili2db.fromili.CustomMapping in project ili2db by claeis.

the class Ili2db method readSettingsFromDb.

public static void readSettingsFromDb(Config config) throws Ili2dbException {
    boolean connectionFromExtern = config.getJdbcConnection() != null;
    String dburl = config.getDburl();
    String dbusr = config.getDbusr();
    String dbpwd = config.getDbpwd();
    if (!connectionFromExtern && dburl == null) {
        EhiLogger.logError("no dburl given");
        return;
    }
    if (dbusr == null) {
        // EhiLogger.logError("no dbusr given");
        // return;
        dbusr = "";
    }
    if (dbpwd == null) {
        // EhiLogger.logError("no dbpwd given");
        // return;
        dbpwd = "";
    }
    if (!connectionFromExtern) {
        String jdbcDriver = config.getJdbcDriver();
        if (jdbcDriver == null) {
            EhiLogger.logError("no JDBC driver given");
            return;
        }
        if (jdbcDriver.equals("ch.ehi.ili2geodb.jdbc.GeodbDriver")) {
            return;
        }
        try {
            Class.forName(jdbcDriver);
        } catch (Exception ex) {
            EhiLogger.logError("failed to load JDBC driver", ex);
            return;
        }
        Ili2dbLibraryInit ao = null;
        try {
            ao = getInitStrategy(config);
            ao.init();
        } finally {
            if (ao != null) {
                ao.end();
            }
        }
    }
    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);
        TransferFromIli.readSettings(conn, config, config.getDbschema());
    } catch (SQLException e) {
        EhiLogger.logError(e);
    } finally {
        if (!connectionFromExtern && conn != null) {
            try {
                conn.close();
            } catch (java.sql.SQLException ex) {
                EhiLogger.logError(ex);
            } finally {
                config.setJdbcConnection(null);
                conn = null;
            }
        }
    }
}
Also used : CustomMapping(ch.ehi.ili2db.fromili.CustomMapping) SQLException(java.sql.SQLException) SQLException(java.sql.SQLException) Connection(java.sql.Connection) IoxException(ch.interlis.iox.IoxException) FileNotFoundException(java.io.FileNotFoundException) SQLException(java.sql.SQLException) ConverterException(ch.ehi.ili2db.converter.ConverterException) IOException(java.io.IOException)

Example 2 with CustomMapping

use of ch.ehi.ili2db.fromili.CustomMapping in project ili2db by claeis.

the class Ili2db method getCustomMappingStrategy.

private static CustomMapping getCustomMappingStrategy(ch.ehi.ili2db.gui.Config config) throws Ili2dbException {
    String mappingClassName = config.getIli2dbCustomStrategy();
    if (mappingClassName == null) {
        return new CustomMappingNull();
    }
    CustomMapping mapping = null;
    try {
        mapping = (CustomMapping) Class.forName(mappingClassName).newInstance();
    } catch (Exception ex) {
        throw new Ili2dbException("failed to load/create custom mapping strategy", ex);
    }
    return mapping;
}
Also used : CustomMapping(ch.ehi.ili2db.fromili.CustomMapping) CustomMappingNull(ch.ehi.ili2db.fromili.CustomMappingNull) IoxException(ch.interlis.iox.IoxException) FileNotFoundException(java.io.FileNotFoundException) SQLException(java.sql.SQLException) ConverterException(ch.ehi.ili2db.converter.ConverterException) IOException(java.io.IOException)

Example 3 with CustomMapping

use of ch.ehi.ili2db.fromili.CustomMapping 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)

Example 4 with CustomMapping

use of ch.ehi.ili2db.fromili.CustomMapping in project ili2db by claeis.

the class Ili2db method runExport.

public static void runExport(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);
        String xtffile = config.getXtffile();
        if (xtffile == null) {
            throw new Ili2dbException("no xtf-file given");
        }
        String modeldir = config.getModeldir();
        if (modeldir == null) {
            throw new Ili2dbException("no modeldir 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");
        }
        if (!connectionFromExtern) {
            String jdbcDriver = config.getJdbcDriver();
            if (jdbcDriver == null) {
                throw new Ili2dbException("no JDBC driver given");
            }
            // open db connection
            try {
                Class.forName(jdbcDriver);
            } catch (Exception ex) {
                throw new Ili2dbException("failed to load JDBC driver", ex);
            }
        }
        String baskets = config.getBaskets();
        String topics = config.getTopics();
        String models = config.getModels();
        String datasetName = config.getDatasetName();
        if (models == null && baskets == null && topics == null && datasetName == null) {
            throw new Ili2dbException("no dataset, baskets, models or topics given");
        }
        CustomMapping customMapping = getCustomMappingStrategy(config);
        Connection conn = null;
        String url = dburl;
        try {
            // DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
            try {
                if (connectionFromExtern) {
                    conn = config.getJdbcConnection();
                } else {
                    conn = connect(url, dbusr, dbpwd, config, customMapping);
                }
                customMapping.postConnect(conn, config);
            } catch (SQLException e) {
                throw new Ili2dbException("failed to get db connection", e);
            }
            logDBVersion(conn);
            // run pre-script
            if (config.getPreScript() != null) {
                try {
                    EhiLogger.logState("run export pre-script...");
                    DbUtility.executeSqlScript(conn, new java.io.FileReader(config.getPreScript()));
                } catch (FileNotFoundException e) {
                    throw new Ili2dbException("export pre-script statements failed", e);
                }
            }
            ch.interlis.ili2c.config.Configuration modelv = new ch.interlis.ili2c.config.Configuration();
            boolean createBasketCol = config.BASKET_HANDLING_READWRITE.equals(config.getBasketHandling());
            String[] exportModelnames = null;
            long[] basketSqlIds = null;
            if (datasetName != null) {
                if (!createBasketCol) {
                    throw new Ili2dbException("dataset wise export requires column " + DbNames.T_BASKET_COL);
                }
                // map datasetName to sqlBasketId and modelnames
                Long datasetId = getDatasetId(datasetName, conn, config);
                if (datasetId == null) {
                    throw new Ili2dbException("dataset <" + datasetName + "> doesn't exist");
                }
                basketSqlIds = getBasketSqlIdsFromDatasetId(datasetId, modelv, conn, config);
            } else if (baskets != null) {
                if (!createBasketCol) {
                    throw new Ili2dbException("basket wise export requires column " + DbNames.T_BASKET_COL);
                }
                // BIDs
                String[] basketids = baskets.split(ch.interlis.ili2c.Main.MODELS_SEPARATOR);
                // map BID to sqlBasketId and modelnames
                basketSqlIds = getBasketSqlIdsFromBID(basketids, modelv, conn, config);
            } else if (topics != null) {
                if (!createBasketCol) {
                    throw new Ili2dbException("topic wise export requires column " + DbNames.T_BASKET_COL);
                }
                // TOPICs
                String[] topicv = topics.split(ch.interlis.ili2c.Main.MODELS_SEPARATOR);
                // map BID to sqlBasketId and modelnames
                basketSqlIds = getBasketSqlIdsFromTopic(topicv, modelv, conn, config);
            } else {
                if (createBasketCol) {
                    String[] modelnames = getModelNames(models);
                    basketSqlIds = getBasketSqlIdsFromModel(modelnames, modelv, conn, config);
                } else {
                    exportModelnames = getModelNames(models);
                    for (int modeli = 0; modeli < exportModelnames.length; modeli++) {
                        String m = exportModelnames[modeli];
                        if (m.equals(XTF)) {
                        // TODO read modelname from db
                        }
                        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 adapterClassName = config.getGeometryConverter();
            if (adapterClassName == null) {
                throw new Ili2dbException("no adapter given");
            }
            SqlColumnConverter geomConverter = null;
            try {
                geomConverter = (SqlColumnConverter) Class.forName(geometryConverter).newInstance();
            } catch (Exception ex) {
                throw new Ili2dbException("failed to load/create geometry converter", ex);
            }
            // compile required ili files
            setupIli2cPathmap(config, appHome, xtffile, conn);
            Ili2cMetaAttrs ili2cMetaAttrs = new Ili2cMetaAttrs();
            // don't add ili1 model translations to model list (should already be in list because of topicname in t_baskets table)
            setupIli2cMetaAttrs(ili2cMetaAttrs, config, null);
            EhiLogger.logState("compile models...");
            modelv.setAutoCompleteModelList(true);
            modelv.setGenerateWarnings(false);
            TransferDescription td = ch.interlis.ili2c.Main.runCompiler(modelv, config, ili2cMetaAttrs);
            if (td == null) {
                throw new Ili2dbException("compiler failed");
            }
            if (config.getCreateMetaInfo()) {
                // set elements' meta-attributes
                if (DbUtility.tableExists(conn, new DbTableName(config.getDbschema(), DbNames.META_ATTRIBUTES_TAB))) {
                    MetaAttrUtility.addMetaAttrsFromDb(td, conn, config.getDbschema());
                }
            }
            geomConverter.setup(conn, config);
            // get mapping definition
            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>();
            {
                Iterator<ch.interlis.ili2c.config.FileEntry> modi = modelv.iteratorFileEntry();
                while (modi.hasNext()) {
                    ch.interlis.ili2c.config.FileEntry mod = modi.next();
                    if (mod.getKind() == ch.interlis.ili2c.config.FileEntryKind.ILIMODELFILE) {
                        modelNames.add(mod.getFilename());
                        EhiLogger.traceState("modelname <" + mod.getFilename() + ">");
                    }
                }
            }
            // use models explicitly given by user (--models, --baskets, --dataset, --topics)
            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);
            // process xtf files
            EhiLogger.logState("process data...");
            EhiLogger.logState("data <" + xtffile + ">");
            Map<Long, BasketStat> stat = new HashMap<Long, BasketStat>();
            ch.ehi.basics.logging.ErrorTracker errs = new ch.ehi.basics.logging.ErrorTracker();
            EhiLogger.getInstance().addListener(errs);
            transferToXtf(conn, xtffile, mapping, td, geomConverter, config.getSender(), config, exportModelnames, basketSqlIds, stat, trafoConfig, class2wrapper);
            if (errs.hasSeenErrors()) {
                throw new Ili2dbException("...export failed");
            } else {
                logStatistics(td.getIli1Format() != null, stat);
                EhiLogger.logState("...export done");
            }
            EhiLogger.getInstance().removeListener(errs);
            // run post-script
            if (config.getPostScript() != null) {
                try {
                    DbUtility.executeSqlScript(conn, new java.io.FileReader(config.getPostScript()));
                    EhiLogger.logState("run export post-script...");
                } catch (FileNotFoundException e) {
                    throw new Ili2dbException("export post-script statements failed", e);
                }
            }
        // }catch(Exception ex){
        // EhiLogger.logError(ex);
        } finally {
            if (!connectionFromExtern) {
                try {
                    conn.close();
                } catch (java.sql.SQLException ex) {
                    EhiLogger.logError(ex);
                } finally {
                    conn = null;
                    config.setJdbcConnection(null);
                }
            }
        }
    } 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 : NameMapping(ch.ehi.ili2db.mapping.NameMapping) Configuration(ch.interlis.ili2c.config.Configuration) HashMap(java.util.HashMap) FileNotFoundException(java.io.FileNotFoundException) ArrayList(java.util.ArrayList) Viewable2TableMapping(ch.ehi.ili2db.mapping.Viewable2TableMapping) 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) 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) StdLogger(ch.interlis.iox_j.logging.StdLogger) Iterator(java.util.Iterator) Ili2cMetaAttrs(ch.interlis.ili2c.metamodel.Ili2cMetaAttrs) Connection(java.sql.Connection) 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) BasketStat(ch.ehi.ili2db.fromxtf.BasketStat) ModelElementSelector(ch.ehi.ili2db.fromili.ModelElementSelector)

Example 5 with CustomMapping

use of ch.ehi.ili2db.fromili.CustomMapping in project ili2db by claeis.

the class Ili2db method runUpdate.

public static void runUpdate(Config config, String appHome, int function) 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);
        // String zipfilename=null;
        java.util.zip.ZipEntry zipXtfEntry = null;
        java.util.zip.ZipFile zipFile = null;
        String inputFilename = config.getXtffile();
        if (function == Config.FC_DELETE) {
            if (config.getDatasetName() == null) {
                throw new Ili2dbException("no datasetName given");
            }
        } else {
            if (inputFilename == null) {
                throw new Ili2dbException("no xtf-file given");
            }
            if (ch.ehi.basics.view.GenericFileFilter.getFileExtension(inputFilename).toLowerCase().equals("zip")) {
                try {
                    zipFile = new java.util.zip.ZipFile(inputFilename);
                } catch (IOException ex) {
                    throw new Ili2dbException(ex);
                }
                java.util.Enumeration filei = zipFile.entries();
                while (filei.hasMoreElements()) {
                    java.util.zip.ZipEntry zipEntry = (java.util.zip.ZipEntry) filei.nextElement();
                    String ext = ch.ehi.basics.view.GenericFileFilter.getFileExtension(zipEntry.getName()).toLowerCase();
                    if (ext != null && (ext.equals("xml") || ext.equals("xtf") || ext.equals("itf"))) {
                        zipXtfEntry = zipEntry;
                        break;
                    }
                }
                if (zipXtfEntry == null) {
                    throw new Ili2dbException("no xtf/itf-file in zip-archive " + zipFile.getName());
                }
            }
        }
        String modeldir = config.getModeldir();
        if (modeldir == null) {
            throw new Ili2dbException("no modeldir given");
        }
        EhiLogger.traceState("modeldir <" + modeldir + ">");
        ch.interlis.ili2c.config.Configuration modelv = new ch.interlis.ili2c.config.Configuration();
        if (function != Config.FC_DELETE) {
            String models = config.getModels();
            if (models == null) {
                throw new Ili2dbException("no models given");
            }
            EhiLogger.traceState("models <" + models + ">");
            String[] modelnames = getModelNames(models);
            for (int modeli = 0; modeli < modelnames.length; modeli++) {
                String m = modelnames[modeli];
                if (m.equals(XTF)) {
                    // read modelname from xtf-file
                    if (zipXtfEntry != null) {
                        try {
                            java.io.InputStream in = zipFile.getInputStream(zipXtfEntry);
                            m = getModelFromXtf(in, zipXtfEntry.getName());
                        } catch (java.io.IOException ex) {
                            throw new Ili2dbException(ex);
                        }
                    } else {
                        m = getModelFromXtf(inputFilename);
                    }
                }
                if (m != null) {
                    modelv.addFileEntry(new ch.interlis.ili2c.config.FileEntry(m, ch.interlis.ili2c.config.FileEntryKind.ILIMODELFILE));
                }
            }
        }
        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;
        ch.ehi.basics.logging.ErrorTracker errs = null;
        try {
            try {
                if (connectionFromExtern) {
                    conn = config.getJdbcConnection();
                } else {
                    conn = connect(url, dbusr, dbpwd, config, customMapping);
                }
                customMapping.postConnect(conn, config);
            } catch (SQLException ex) {
                throw new Ili2dbException("failed to get db connection", ex);
            }
            logDBVersion(conn);
            if (!connectionFromExtern) {
                // switch off auto-commit
                try {
                    conn.setAutoCommit(false);
                } catch (SQLException ex) {
                    throw new Ili2dbException("failed to switch off auto-commit", ex);
                }
            }
            // run pre-script
            if (config.getPreScript() != null) {
                try {
                    DbUtility.executeSqlScript(conn, new java.io.FileReader(config.getPreScript()));
                    EhiLogger.logState("run update pre-script...");
                } catch (FileNotFoundException e) {
                    throw new Ili2dbException("update pre-script statements failed", e);
                }
            }
            // create db schema
            if (function == Config.FC_IMPORT) {
                if (config.getDbschema() != null) {
                    if (!DbUtility.schemaExists(conn, config.getDbschema())) {
                        DbUtility.createSchema(conn, config.getDbschema());
                    }
                }
            }
            if (function == Config.FC_DELETE) {
                boolean createBasketCol = config.BASKET_HANDLING_READWRITE.equals(config.getBasketHandling());
                if (!createBasketCol) {
                    throw new Ili2dbException("delete requires column " + DbNames.T_BASKET_COL);
                }
                String datasetName = config.getDatasetName();
                // map datasetName to modelnames
                Long datasetId = getDatasetId(datasetName, conn, config);
                if (datasetId == null) {
                    throw new Ili2dbException("dataset <" + datasetName + "> doesn't exist");
                }
                getBasketSqlIdsFromDatasetId(datasetId, modelv, conn, config);
            }
            if (function == Config.FC_IMPORT) {
                String datasetName = config.getDatasetName();
                if (datasetName != null) {
                    if (DbUtility.tableExists(conn, new DbTableName(config.getDbschema(), DbNames.DATASETS_TAB))) {
                        Long datasetId = getDatasetId(datasetName, conn, config);
                        if (datasetId != null) {
                            throw new Ili2dbException("dataset <" + datasetName + "> already exists");
                        }
                    }
                    boolean createBasketCol = config.BASKET_HANDLING_READWRITE.equals(config.getBasketHandling());
                    if (!createBasketCol) {
                        throw new Ili2dbException("import with dataset name requires column " + DbNames.T_BASKET_COL);
                    }
                }
            }
            if (modelv.getSizeFileEntry() == 0) {
                throw new Ili2dbException("no models given");
            }
            // compile required ili files
            setupIli2cPathmap(config, appHome, inputFilename, conn);
            Ili2cMetaAttrs ili2cMetaAttrs = new Ili2cMetaAttrs();
            ch.interlis.ili2c.config.Configuration ili2cConfig = null;
            try {
                ili2cConfig = (ch.interlis.ili2c.config.Configuration) modelv.clone();
            } catch (CloneNotSupportedException e1) {
                throw new Ili2dbException(e1);
            }
            setupIli2cMetaAttrs(ili2cMetaAttrs, config, ili2cConfig);
            EhiLogger.logState("compile models...");
            ili2cConfig.setAutoCompleteModelList(true);
            ili2cConfig.setGenerateWarnings(false);
            TransferDescription td = ch.interlis.ili2c.Main.runCompiler(ili2cConfig, config, ili2cMetaAttrs);
            if (td == null) {
                throw new Ili2dbException("compiler failed");
            }
            // 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>();
            for (int modeli = 0; modeli < modelv.getSizeFileEntry(); modeli++) {
                if (modelv.getFileEntry(modeli).getKind() == ch.interlis.ili2c.config.FileEntryKind.ILIMODELFILE) {
                    String m = modelv.getFileEntry(modeli).getFilename();
                    modelNames.add(m);
                }
            }
            // use models explicitly given by user --models, --topics and/or as read from transferfile
            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);
            Generator gen = null;
            try {
                gen = (Generator) Class.forName(ddlGenerator).newInstance();
            } catch (Exception ex) {
                throw new Ili2dbException("failed to load/create DDL generator", ex);
            }
            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);
            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);
            idGen.initDb(conn, dbusr);
            idGen.initDbDefs(gen);
            // create table structure
            if (function == Config.FC_IMPORT) {
                EhiLogger.logState("create table structure...");
                try {
                    TransferFromIli trsfFromIli = new TransferFromIli();
                    // map ili-classes to sql-tables
                    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;
                    }
                    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);
                    }
                    GeneratorDriver drv = new GeneratorDriver(gen);
                    drv.visitSchema(config, schema);
                    // create script requested by user?
                    String createscript = config.getCreatescript();
                    if (createscript != null && (gen instanceof GeneratorJdbc)) {
                        writeScript(createscript, ((GeneratorJdbc) gen).iteratorCreateLines());
                    }
                    // drop script requested by user?
                    String dropscript = config.getDropscript();
                    if (dropscript != null && (gen instanceof GeneratorJdbc)) {
                        writeScript(dropscript, ((GeneratorJdbc) gen).iteratorDropLines());
                    }
                    // 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 enumerations table
                    trsfFromIli.updateEnumTable(conn);
                    trsfFromIli.updateMetaInfoTables(conn);
                    TransferFromIli.addModels(conn, td, config.getDbschema());
                    if (!config.isConfigReadFromDb()) {
                        TransferFromIli.updateSettings(conn, config, config.getDbschema());
                    }
                } catch (java.io.IOException ex) {
                    throw new Ili2dbException(ex);
                }
            }
            // process xtf files
            EhiLogger.logState("process data file...");
            Map<Long, BasketStat> stat = new HashMap<Long, BasketStat>();
            errs = new ch.ehi.basics.logging.ErrorTracker();
            EhiLogger.getInstance().addListener(errs);
            if (zipXtfEntry != null) {
                IoxReader ioxReader = null;
                java.io.InputStream in = null;
                try {
                    EhiLogger.logState("data <" + inputFilename + ":" + zipXtfEntry.getName() + ">");
                    in = zipFile.getInputStream(zipXtfEntry);
                    if (isItfFilename(zipXtfEntry.getName())) {
                        if (config.getDoItfLineTables()) {
                            ioxReader = new ItfReader(in);
                            ((ItfReader) ioxReader).setModel(td);
                        } else {
                            ioxReader = new ItfReader2(in, config.isSkipGeometryErrors());
                            ((ItfReader2) ioxReader).setModel(td);
                        }
                    } else {
                        ioxReader = new XtfReader(in);
                    }
                    transferFromXtf(conn, ioxReader, function, mapping, td, dbusr, geomConverter, idGen, config, stat, trafoConfig, class2wrapper);
                } catch (IOException ex) {
                    throw new Ili2dbException(ex);
                } catch (IoxException ex) {
                    throw new Ili2dbException(ex);
                } finally {
                    if (ioxReader != null) {
                        try {
                            ioxReader.close();
                        } catch (IoxException e) {
                            throw new Ili2dbException(e);
                        }
                        ioxReader = null;
                    }
                    if (in != null) {
                        try {
                            in.close();
                        } catch (IOException e) {
                            throw new Ili2dbException(e);
                        }
                        in = null;
                    }
                }
                // save attachments
                String attachmentKey = config.getAttachmentKey();
                String attachmentsBase = config.getAttachmentsPath();
                if (attachmentsBase != null) {
                    java.io.File basePath = new java.io.File(attachmentsBase, attachmentKey);
                    java.util.Enumeration filei = zipFile.entries();
                    while (filei.hasMoreElements()) {
                        java.util.zip.ZipEntry zipEntry = (java.util.zip.ZipEntry) filei.nextElement();
                        if (!zipXtfEntry.getName().equals(zipEntry.getName())) {
                            // save file
                            java.io.File destFile = new java.io.File(basePath, zipEntry.getName());
                            java.io.File parent = destFile.getAbsoluteFile().getParentFile();
                            if (!parent.exists()) {
                                if (!parent.mkdirs()) {
                                    throw new Ili2dbException("failed to create " + parent.getAbsolutePath());
                                }
                            }
                            try {
                                copyStream(destFile, zipFile.getInputStream(zipEntry));
                            } catch (IOException ex) {
                                throw new Ili2dbException("failed to save attachment " + zipEntry.getName(), ex);
                            }
                        }
                    }
                }
            } else {
                IoxReader ioxReader = null;
                try {
                    if (function != config.FC_DELETE) {
                        EhiLogger.logState("data <" + inputFilename + ">");
                        if (isItfFilename(inputFilename)) {
                            config.setValue(ch.interlis.iox_j.validator.Validator.CONFIG_DO_ITF_OIDPERTABLE, ch.interlis.iox_j.validator.Validator.CONFIG_DO_ITF_OIDPERTABLE_DO);
                            if (config.getDoItfLineTables()) {
                                ioxReader = new ItfReader(new java.io.File(inputFilename));
                                ((ItfReader) ioxReader).setModel(td);
                                ((ItfReader) ioxReader).setBidPrefix(config.getDatasetName());
                            } else {
                                ioxReader = new ItfReader2(new java.io.File(inputFilename), config.isSkipGeometryErrors());
                                ((ItfReader2) ioxReader).setModel(td);
                                ((ItfReader2) ioxReader).setBidPrefix(config.getDatasetName());
                            }
                        } else {
                            ioxReader = new XtfReader(new java.io.File(inputFilename));
                        }
                    }
                    transferFromXtf(conn, ioxReader, function, mapping, td, dbusr, geomConverter, idGen, config, stat, trafoConfig, class2wrapper);
                } catch (IoxException e) {
                    throw new Ili2dbException(e);
                } finally {
                    if (ioxReader != null) {
                        try {
                            ioxReader.close();
                        } catch (IoxException e) {
                            throw new Ili2dbException(e);
                        }
                        ioxReader = null;
                    }
                }
            }
            // 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 {
                    DbUtility.executeSqlScript(conn, new java.io.FileReader(config.getPostScript()));
                    EhiLogger.logState("run update post-script...");
                } catch (FileNotFoundException e) {
                    throw new Ili2dbException("update post-script statements failed", e);
                }
            }
            if (errs.hasSeenErrors()) {
                if (!connectionFromExtern) {
                    try {
                        conn.rollback();
                    } catch (SQLException e) {
                        EhiLogger.logError("rollback failed", e);
                    }
                }
                throw new Ili2dbException("...import failed");
            } else {
                if (!connectionFromExtern) {
                    try {
                        conn.commit();
                    } catch (SQLException e) {
                        EhiLogger.logError("commit failed", e);
                        throw new Ili2dbException("...import failed");
                    }
                }
                logStatistics(td.getIli1Format() != null, stat);
                EhiLogger.logState("...import done");
            }
        } finally {
            if (!connectionFromExtern) {
                if (conn != null) {
                    try {
                        conn.close();
                    } catch (java.sql.SQLException ex) {
                        EhiLogger.logError(ex);
                    } finally {
                        config.setJdbcConnection(null);
                        conn = null;
                    }
                }
            }
            if (errs != null) {
                EhiLogger.getInstance().removeListener(errs);
                errs = null;
            }
        }
    } 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 : NameMapping(ch.ehi.ili2db.mapping.NameMapping) Configuration(ch.interlis.ili2c.config.Configuration) HashMap(java.util.HashMap) FileNotFoundException(java.io.FileNotFoundException) ArrayList(java.util.ArrayList) ItfReader2(ch.interlis.iom_j.itf.ItfReader2) 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) XtfReader(ch.interlis.iom_j.xtf.XtfReader) TransferFromIli(ch.ehi.ili2db.fromili.TransferFromIli) Ili2cMetaAttrs(ch.interlis.ili2c.metamodel.Ili2cMetaAttrs) DbSchema(ch.ehi.sqlgen.repository.DbSchema) Connection(java.sql.Connection) IoxReader(ch.interlis.iox.IoxReader) IOException(java.io.IOException) 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) ItfReader(ch.interlis.iom_j.itf.ItfReader) Configuration(ch.interlis.ili2c.config.Configuration) BasketStat(ch.ehi.ili2db.fromxtf.BasketStat) IoxException(ch.interlis.iox.IoxException) ModelElementSelector(ch.ehi.ili2db.fromili.ModelElementSelector)

Aggregations

ConverterException (ch.ehi.ili2db.converter.ConverterException)5 CustomMapping (ch.ehi.ili2db.fromili.CustomMapping)5 IoxException (ch.interlis.iox.IoxException)5 FileNotFoundException (java.io.FileNotFoundException)5 IOException (java.io.IOException)5 SQLException (java.sql.SQLException)5 Connection (java.sql.Connection)4 StdLogEvent (ch.ehi.basics.logging.StdLogEvent)3 SqlColumnConverter (ch.ehi.ili2db.converter.SqlColumnConverter)3 ModelElementSelector (ch.ehi.ili2db.fromili.ModelElementSelector)3 NameMapping (ch.ehi.ili2db.mapping.NameMapping)3 TrafoConfig (ch.ehi.ili2db.mapping.TrafoConfig)3 Viewable2TableMapping (ch.ehi.ili2db.mapping.Viewable2TableMapping)3 DbTableName (ch.ehi.sqlgen.repository.DbTableName)3 Configuration (ch.interlis.ili2c.config.Configuration)3 Element (ch.interlis.ili2c.metamodel.Element)3 Ili2cMetaAttrs (ch.interlis.ili2c.metamodel.Ili2cMetaAttrs)3 TransferDescription (ch.interlis.ili2c.metamodel.TransferDescription)3 FileLogger (ch.interlis.iox_j.logging.FileLogger)3 StdLogger (ch.interlis.iox_j.logging.StdLogger)3