/* ############################################################################
* Copyright 2013 Hewlett-Packard Co. All Rights Reserved.
* An unpublished and CONFIDENTIAL work. Reproduction,
* adaptation, or translation without prior written permission
* is prohibited except as allowed under the copyright laws.
*-----------------------------------------------------------------------------
* Project: AL Deal-Maker
* Module: Common
* Source: SqlScriptReader.java
* Author: HP
* Organization: HP BAS India
* Revision: 0.1
* Date: 08-22-2013
* Contents:
*-----------------------------------------------------------------------------
* Revision History:
* who when what
* Roopa Shree 08-22-2013 Initial functionality
* #############################################################################
*/
package com.util;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class SqlScriptReader {
public List<String> readSqlStatment(final String filePath) throws FileNotFoundException {
final File sourceFile = new File(filePath);
final Scanner scanner = new Scanner(sourceFile);
return parseFile(scanner);
}
public List<String> readSqlStatment(final URI uri) throws FileNotFoundException {
final File sourceFile = new File(uri);
final Scanner scanner = new Scanner(sourceFile);
return parseFile(scanner);
}
public List<String> readSqlStatment(final InputStream is) {
final Scanner scanner = new Scanner(is);
return parseFile(scanner);
}
protected List<String> parseFile(final Scanner scanner) {
final List<String> sqlCommands = new ArrayList<String>();
String line;
final String oneLineComment = "--";
final String startMC = "/*";
final String endMC = "*/";
final String sqlSuffix = ";";
boolean searchForEndPrefix = false;
StringBuilder sql = new StringBuilder();
while (scanner.hasNextLine()) {
line = scanner.nextLine();
if (searchForEndPrefix == true) {
if (line.startsWith(endMC)) {
searchForEndPrefix = false;
continue;
}
} else if (line.startsWith(startMC)) {
searchForEndPrefix = true;
continue;
} else if (line.startsWith(oneLineComment)) {
continue;
} else if (line.equals("")) {
continue;
} else {
if (line.endsWith(sqlSuffix)) {
sql.append(line);
sql.deleteCharAt(sql.length()-1);
sqlCommands.add(sql.toString());
sql = new StringBuilder();
} else {
sql.append(line);
}
}
}
return sqlCommands;
}
}