package de.visualdependencies.plugin.mysql.impl; import java.sql.Connection; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import de.visualdependencies.data.entity.SchemaConnection; import de.visualdependencies.plugin.ConnectionProvider; import de.visualdependencies.plugin.MetadataWorker; import de.visualdependencies.plugin.Plugin; import de.visualdependencies.plugin.helper.MetadataWorkerParameters; import de.visualdependencies.plugin.helper.MetadataWorkerResult; import de.visualdependencies.plugin.mysql.util.MySqlJdbcMetadataUtil; import de.visualdependencies.util.jdbc.JdbcMetadataUtil; @Component("MySQL Metadata Worker") @Transactional public class MysqlMetadataWorkerImpl extends AbstractMysqlPluginImpl implements MetadataWorker { @Override public boolean isCompatible(Plugin otherPlugin) { // Accept the common connection provider plugin. if (otherPlugin instanceof de.visualdependencies.plugin.common.impl.CommonConnectionProviderImpl) { return true; } return super.isCompatible(otherPlugin); } @Override @Transactional(rollbackFor = Exception.class) public MetadataWorkerResult loadModel(MetadataWorkerParameters parameters) { // Create the result object. Both parameters and result live in this call. MetadataWorkerResult result = MetadataWorkerResult.create(); result.markStart(); ConnectionProvider connectionProvider = parameters.getConnectionProvider(); SchemaConnection schemaConnection = parameters.getSchemaConnection(); // Create a real JDBC connection. connectionProvider.initializeDriver(); Connection connection = connectionProvider.createConnection(schemaConnection); parameters.setConnection(connection); JdbcMetadataUtil jdbcMetadataUtil = JdbcMetadataUtil.createInstance(parameters); MySqlJdbcMetadataUtil mysqlJdbcMetadataUtil = MySqlJdbcMetadataUtil.createInstance(parameters); jdbcMetadataUtil.loadTables(); jdbcMetadataUtil.loadColumns(); mysqlJdbcMetadataUtil.loadTriggers(); mysqlJdbcMetadataUtil.loadTableTriggerDependencies(); result.markEnd(); return result; } }