com.evolveum.midpoint.tools.ninja.ImportDDL.java Source code

Java tutorial

Introduction

Here is the source code for com.evolveum.midpoint.tools.ninja.ImportDDL.java

Source

/*
 * Copyright (c) 2010-2013 Evolveum
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.evolveum.midpoint.tools.ninja;

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;

import java.io.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * @author lazyman
 */
public class ImportDDL {

    private ImportDDLConfig config;

    public ImportDDL(ImportDDLConfig config) {
        this.config = config;
    }

    public boolean execute() {
        System.out.println("Starting DDL import.");

        File script = new File(config.getFilePath());
        if (!script.exists() || !script.canRead()) {
            System.out
                    .println("DDL script file '" + script.getAbsolutePath() + "' doesn't exist or can't be read.");
            return false;
        }

        Connection connection = null;
        BufferedReader reader = null;
        try {
            connection = createConnection();
            if (connection == null) {
                return false;
            }

            readScript(script, reader, connection);
        } catch (Exception ex) {
            System.out.println("Exception occurred, reason: " + ex.getMessage());
            ex.printStackTrace();
        } finally {
            IOUtils.closeQuietly(reader);
            try {
                if (connection != null && !connection.isClosed()) {
                    connection.close();
                }
            } catch (Exception ex) {
                System.out.println("Couldn't close JDBC connection, reason: " + ex.getMessage());
            }
        }

        System.out.println("DDL import finished.");
        return true;
    }

    private void readScript(File script, BufferedReader reader, Connection connection) throws IOException {
        System.out.println("Reading DDL script file '" + script.getAbsolutePath() + "'.");
        reader = new BufferedReader(new InputStreamReader(new FileInputStream(script), "utf-8"));
        StringBuilder query = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
            //skip comments
            if (line.length() == 0 || line.length() > 0 && line.charAt(0) == '-') {
                continue;
            }

            if (query.length() != 0) {
                query.append(' ');
            }
            query.append(line.trim());

            //If one command complete
            if (query.charAt(query.length() - 1) == ';') {
                query.deleteCharAt(query.length() - 1);
                try {
                    String queryStr = query.toString();
                    System.out.println("Executing query: " + queryStr);

                    Statement stmt = connection.createStatement();
                    stmt.execute(queryStr);
                    stmt.close();
                } catch (SQLException ex) {
                    System.out.println("Exception occurred during SQL statement '" + query.toString()
                            + "' execute, reason: " + ex.getMessage());
                }
                query = new StringBuilder();
            }
        }
    }

    private Connection createConnection() {
        System.out.println("Creating JDBC connection.");

        String password = !config.isPromptForPassword() ? config.getPassword() : promptForPassword();
        try {
            Class.forName(config.getDriver());
            return DriverManager.getConnection(config.getUrl(), config.getUsername(), password);
        } catch (Exception ex) {
            String pwd = password == null ? "<null>" : StringUtils.repeat("*", password.length());
            System.out.println("Couldn't create JDBC connection to '" + config.getUrl() + "' with username '"
                    + config.getUsername() + "' and password '" + pwd + "', reason: " + ex.getMessage());
            ex.printStackTrace();
        }

        return null;
    }

    private String promptForPassword() {
        String password = null;
        BufferedReader reader = null;
        try {
            System.out.print("Password: ");
            reader = new BufferedReader(new InputStreamReader(System.in, "utf-8"));
            password = reader.readLine();
        } catch (Exception ex) {
            System.out.println("Exception occurred during password prompt, reason: " + ex.getMessage());
            ex.printStackTrace();
        } finally {
            IOUtils.closeQuietly(reader);
        }

        return password;
    }
}