Created
May 3, 2023 20:06
-
-
Save sualeh/e9b83f755732f153da6a4664ce546936 to your computer and use it in GitHub Desktop.
Generate Schema Diagrams with SchemaCrawler
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package de.dpma.azubi.markenschema.schemacrawler; | |
import static us.fatehi.utility.Utility.isBlank; | |
import java.nio.file.Path; | |
import java.nio.file.Paths; | |
import java.util.HashMap; | |
import java.util.Map; | |
import java.util.logging.Level; | |
import schemacrawler.inclusionrule.RegularExpressionInclusionRule; | |
import schemacrawler.schemacrawler.LimitOptionsBuilder; | |
import schemacrawler.schemacrawler.LoadOptionsBuilder; | |
import schemacrawler.schemacrawler.SchemaCrawlerOptions; | |
import schemacrawler.schemacrawler.SchemaCrawlerOptionsBuilder; | |
import schemacrawler.schemacrawler.SchemaInfoLevelBuilder; | |
import schemacrawler.tools.command.text.diagram.options.DiagramOptionsBuilder; | |
import schemacrawler.tools.command.text.diagram.options.DiagramOutputFormat; | |
import schemacrawler.tools.executable.SchemaCrawlerExecutable; | |
import schemacrawler.tools.options.Config; | |
import schemacrawler.tools.options.OutputOptions; | |
import schemacrawler.tools.options.OutputOptionsBuilder; | |
import us.fatehi.utility.LoggingConfig; | |
import us.fatehi.utility.datasource.DatabaseConnectionSource; | |
import us.fatehi.utility.datasource.DatabaseConnectionSources; | |
import us.fatehi.utility.datasource.MultiUseUserCredentials; | |
public class SchemaCrawlerDiagramGenerator { | |
public static void main(final String[] args) throws Exception { | |
// Set log level | |
new LoggingConfig(Level.OFF); | |
// Create the options | |
final Map<String, String> graphvizAttributes = new HashMap<>(); | |
final String GRAPH = "graph."; | |
graphvizAttributes.put(GRAPH + "fontname", "Courier"); | |
final DiagramOptionsBuilder diagramOptionsBuilder = DiagramOptionsBuilder.builder() | |
.withGraphvizAttributes(graphvizAttributes); | |
final Config additionalConfig = new Config(); | |
additionalConfig.put("schemacrawler.format.hide_weakassociation_names", "true"); | |
additionalConfig.merge(diagramOptionsBuilder.toConfig()); | |
final LimitOptionsBuilder limitOptionsBuilder = LimitOptionsBuilder.builder() | |
.includeSchemas(new RegularExpressionInclusionRule("PUBLIC.BOOKS")); | |
final LoadOptionsBuilder loadOptionsBuilder = LoadOptionsBuilder.builder() | |
// Set what details are required in the schema - this affects the | |
// time taken to crawl the schema | |
.withSchemaInfoLevel(SchemaInfoLevelBuilder.standard()); | |
final SchemaCrawlerOptions options = SchemaCrawlerOptionsBuilder.newSchemaCrawlerOptions() | |
.withLimitOptions(limitOptionsBuilder.toOptions()).withLoadOptions(loadOptionsBuilder.toOptions()); | |
final Path outputFile = getOutputFile(args); | |
final OutputOptions outputOptions = OutputOptionsBuilder.newOutputOptions(DiagramOutputFormat.svg, outputFile); | |
final String command = "schema"; | |
try (final DatabaseConnectionSource dataSource = getDatabaseConnectionSource()) { | |
final SchemaCrawlerExecutable executable = new SchemaCrawlerExecutable(command); | |
executable.setSchemaCrawlerOptions(options); | |
executable.setOutputOptions(outputOptions); | |
executable.setDataSource(dataSource); | |
executable.setAdditionalConfiguration(additionalConfig); | |
executable.execute(); | |
} | |
System.out.println("Created output file, " + outputFile); | |
} | |
private static DatabaseConnectionSource getDatabaseConnectionSource() { | |
final String connectionUrl = "jdbc:hsqldb:hsql://localhost:9001/schemacrawler"; | |
final DatabaseConnectionSource dataSource = DatabaseConnectionSources.newDatabaseConnectionSource(connectionUrl, | |
new MultiUseUserCredentials("sa", "")); | |
return dataSource; | |
} | |
private static Path getOutputFile(final String[] args) { | |
final String outputfile; | |
if (args != null && args.length > 0 && !isBlank(args[0])) { | |
outputfile = args[0]; | |
} else { | |
outputfile = "./schemacrawler_output.svg"; | |
} | |
final Path outputFile = Paths.get(outputfile).toAbsolutePath().normalize(); | |
return outputFile; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment