View Javadoc
1   package com.wakaleo.schemaspy;
2   
3   import org.schemaspy.LayoutFolder;
4   import org.schemaspy.SchemaAnalyzer;
5   import org.schemaspy.cli.CommandLineArgumentParser;
6   import org.schemaspy.cli.CommandLineArguments;
7   import org.schemaspy.connection.ScSimple;
8   import org.schemaspy.connection.SqlConnection;
9   import org.schemaspy.input.dbms.ConnectionConfig;
10  import org.schemaspy.input.dbms.ConnectionURLBuilder;
11  import org.schemaspy.input.dbms.DriverFromConfig;
12  import org.schemaspy.input.dbms.service.DatabaseServiceFactory;
13  import org.schemaspy.input.dbms.service.SqlService;
14  import org.schemaspy.output.OutputProducer;
15  import org.schemaspy.output.xml.dom.XmlProducerUsingDOM;
16  
17  import java.io.IOException;
18  import java.sql.SQLException;
19  import java.util.List;
20  import java.util.Objects;
21  
22  /**
23   * Wrapper around the {@link SchemaAnalyzer} to hide the initialization details from the {@link SchemaSpyReport}
24   * maven mojo.
25   */
26  public class MavenSchemaAnalyzer {
27      private SchemaAnalyzer analyzer;
28  
29      private CommandLineArguments cliArgs;
30  
31      /**
32       * Adds the SchemaSpy plugin configuration properties. This is necessary before calling {@link #analyze()}.
33       * @param argList a list of property-value pairs.
34       */
35      public void applyConfiguration(List<String> argList) {
36          CommandLineArgumentParser parser = new CommandLineArgumentParser(argList.toArray(new String[0]));
37          cliArgs = parser.commandLineArguments();
38      }
39  
40      /**
41       * Executes the SchemaSpy analyzer process.
42       */
43      public void analyze() throws SQLException, IOException {
44          cliArgs = Objects.requireNonNull(cliArgs, "cliArgs must be initialized. Call applyConfiguration(...) before analyze().");
45          ConnectionConfig connectionConfig = cliArgs.getConnectionConfig();
46          SqlConnection connection = new ScSimple(connectionConfig, new ConnectionURLBuilder(connectionConfig), new DriverFromConfig(connectionConfig));
47          SqlService sqlService = new SqlService();
48          DatabaseServiceFactory databaseServiceFactory = new DatabaseServiceFactory(sqlService);
49          OutputProducer outputProducer = new XmlProducerUsingDOM();
50          LayoutFolder layoutFolder = new LayoutFolder(SchemaAnalyzer.class.getClassLoader());
51          analyzer = new SchemaAnalyzer(sqlService, databaseServiceFactory, cliArgs, outputProducer, layoutFolder, connection);
52          analyzer.analyze();
53      }
54  }