From 28943aeb3a9d504aaf94ee71926788e66b682a3e Mon Sep 17 00:00:00 2001 From: johncurrier Date: Tue, 28 Nov 2006 17:39:51 +0000 Subject: [PATCH] redmonkey found a prob w/patterns and JDK 1.4. Also had to do some funky stuff to deal with some OSes (e.g. XP) doing filename expansion with runtime.exec() --- src/net/sourceforge/schemaspy/Config.java | 38 ++++++++++++------- src/net/sourceforge/schemaspy/Main.java | 4 +- .../schemaspy/MultipleSchemaAnalyzer.java | 2 +- 3 files changed, 29 insertions(+), 15 deletions(-) diff --git a/src/net/sourceforge/schemaspy/Config.java b/src/net/sourceforge/schemaspy/Config.java index 35daaf5..faa01af 100644 --- a/src/net/sourceforge/schemaspy/Config.java +++ b/src/net/sourceforge/schemaspy/Config.java @@ -490,6 +490,12 @@ public List getRemainingParameters() return options; } + /** + * Options that are specific to a type of database. E.g. things like host, + * port or db. + * + * @param dbSpecificOptions + */ public void setDbSpecificOptions(Map dbSpecificOptions) { this.dbSpecificOptions = dbSpecificOptions; this.originalDbSpecificOptions = new HashMap(dbSpecificOptions); @@ -572,27 +578,33 @@ public boolean isDbTypeSpecific() { * List * @return List */ - protected List fixupArgs(List args) - { + protected List fixupArgs(List args) { List expandedArgs = new ArrayList(); - Iterator iter = args.iterator(); - while (iter.hasNext()) - { + for (Iterator iter = args.iterator(); iter.hasNext(); ) { String arg = iter.next().toString(); int indexOfEquals = arg.indexOf('='); - if (indexOfEquals != -1) - { + if (indexOfEquals != -1) { expandedArgs.add(arg.substring(0, indexOfEquals)); expandedArgs.add(arg.substring(indexOfEquals + 1)); - } - else - { + } else { expandedArgs.add(arg); } } - return expandedArgs; + // some OSes/JVMs do filename expansion with runtime.exec() and some don't, + // so MultipleSchemaAnalyzer has to surround params with double quotes... + // strip them here for the OSes/JVMs that don't do anything with the params + List unquotedArgs = new ArrayList(); + + for (Iterator iter = expandedArgs.iterator(); iter.hasNext(); ) { + String arg = iter.next().toString(); + if (arg.startsWith("\"") && arg.endsWith("\"")) // ".*" becomes .* + arg = arg.substring(1, arg.length() - 1); + unquotedArgs.add(arg); + } + + return unquotedArgs; } /** @@ -767,9 +779,9 @@ public List asList() throws IOException { list.add(value); } list.add("-i"); - list.add(getInclusions().toString()); + list.add(getInclusions().pattern()); list.add("-x"); - list.add(getExclusions().toString()); + list.add(getExclusions().pattern()); list.add("-dbthreads"); list.add(String.valueOf(getMaxDbThreads())); list.add("-maxdet"); diff --git a/src/net/sourceforge/schemaspy/Main.java b/src/net/sourceforge/schemaspy/Main.java index 30fa73d..325d348 100755 --- a/src/net/sourceforge/schemaspy/Main.java +++ b/src/net/sourceforge/schemaspy/Main.java @@ -1,5 +1,7 @@ package net.sourceforge.schemaspy; +import java.util.*; + /** * @author John Currier @@ -7,7 +9,7 @@ public class Main { public static void main(String[] argv) throws Exception { SchemaAnalyzer analyzer = new SchemaAnalyzer(); - +System.out.println(Arrays.asList(argv)); System.exit(analyzer.analyze(new Config(argv), argv)); } } \ No newline at end of file diff --git a/src/net/sourceforge/schemaspy/MultipleSchemaAnalyzer.java b/src/net/sourceforge/schemaspy/MultipleSchemaAnalyzer.java index e87b923..6e8f6b5 100755 --- a/src/net/sourceforge/schemaspy/MultipleSchemaAnalyzer.java +++ b/src/net/sourceforge/schemaspy/MultipleSchemaAnalyzer.java @@ -59,7 +59,6 @@ public int analyze(String dbName, DatabaseMetaData meta, String schemaSpec, List command.add("-o"); command.add(new File(outputDir, schema).toString()); System.out.println("Analyzing " + schema); - System.out.println(command); System.out.flush(); Process java = Runtime.getRuntime().exec((String[])command.toArray(new String[]{})); new ProcessOutputReader(java.getInputStream(), System.out).start(); @@ -129,6 +128,7 @@ public void run() { int ch; while ((ch = processReader.read()) != -1) { out.print((char)ch); + out.flush(); } } catch (IOException ioException) { ioException.printStackTrace();