You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2014/12/25 19:45:24 UTC
[2/2] incubator-ignite git commit: # ignite-32 WIP: First version of
schema load utility.
# ignite-32 WIP: First version of schema load utility.
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/162bed47
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/162bed47
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/162bed47
Branch: refs/heads/ignite-32
Commit: 162bed47de99b92cfd52ddc262af29ebc00cf29a
Parents: 7c6b87b
Author: AKuznetsov <ak...@gridgain.com>
Authored: Fri Dec 26 01:44:41 2014 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Fri Dec 26 01:44:41 2014 +0700
----------------------------------------------------------------------
.../ignite/schema/db/DbMetadataParser.java | 69 +++--
.../ignite/schema/pojo/PojoCodeGenerator.java | 137 ++-------
.../org/apache/ignite/schema/ui/GridPaneEx.java | 66 ++++-
.../apache/ignite/schema/ui/SchemaLoadApp.java | 293 +++++++++----------
4 files changed, 261 insertions(+), 304 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/162bed47/modules/schema-load/src/main/java/org/apache/ignite/schema/db/DbMetadataParser.java
----------------------------------------------------------------------
diff --git a/modules/schema-load/src/main/java/org/apache/ignite/schema/db/DbMetadataParser.java b/modules/schema-load/src/main/java/org/apache/ignite/schema/db/DbMetadataParser.java
index c285238..8d3bb9a 100644
--- a/modules/schema-load/src/main/java/org/apache/ignite/schema/db/DbMetadataParser.java
+++ b/modules/schema-load/src/main/java/org/apache/ignite/schema/db/DbMetadataParser.java
@@ -25,38 +25,11 @@ import static org.apache.ignite.schema.util.SchemaUtils.*;
* Database metadata parser.
*/
public class DbMetadataParser {
- /** */
- private final DatabaseMetaData meta;
-
- /**
- * @param conn Database connection.
- * @throws SQLException If a database access error occurs.
- */
- public DbMetadataParser(Connection conn) throws SQLException {
- meta = conn.getMetaData();
- }
-
- /**
- * @return Schemas description.
- * @throws SQLException If a database access error occurs.
- */
- public ResultSet schemas() throws SQLException {
- return meta.getSchemas();
- }
-
- /**
- * @return Tables description.
- * @throws SQLException If a database access error occurs.
- */
- public ResultSet tables(String catalog, String schema) throws SQLException {
- return meta.getTables(catalog, schema, "%", null);
- }
-
/**
* @param type SQL data type.
* @return Java data type.
*/
- private Class<?> dataType(int type) {
+ private static Class<?> dataType(int type) {
switch (type) {
case BIT:
case BOOLEAN:
@@ -126,13 +99,15 @@ public class DbMetadataParser {
/**
* Parse database metadata.
*
+ * @param meta Database metadata.
* @param catalog Catalog name.
* @param schema Schema name.
* @param tbl Table name.
* @return New initialized instance of {@code GridCacheQueryTypeMetadata}.
* @throws SQLException If parsing failed.
*/
- public GridCacheQueryTypeMetadata parse(String catalog, String schema, String tbl) throws SQLException {
+ private static GridCacheQueryTypeMetadata parse(DatabaseMetaData meta, String catalog, String schema, String tbl)
+ throws SQLException {
GridCacheQueryTypeMetadata res = new GridCacheQueryTypeMetadata();
res.setSchema(schema);
@@ -206,4 +181,40 @@ public class DbMetadataParser {
return res;
}
+
+ /**
+ * Parse database metadata.
+ *
+ * @param conn Connection to database.
+ * @return Map with schemes and tables metadata.
+ * @throws SQLException If parsing failed.
+ */
+ public static LinkedHashMap<String, LinkedHashMap<String, GridCacheQueryTypeMetadata>> parse(Connection conn)
+ throws SQLException {
+ DatabaseMetaData meta = conn.getMetaData();
+
+ LinkedHashMap<String, LinkedHashMap<String, GridCacheQueryTypeMetadata>> res = new LinkedHashMap<>();
+
+ try (ResultSet schemas = meta.getSchemas()) {
+ while (schemas.next()) {
+ String schema = schemas.getString(1);
+ String catalog = schemas.getString(2);
+
+ LinkedHashMap<String, GridCacheQueryTypeMetadata> items = new LinkedHashMap<>();
+
+ try (ResultSet tbls = meta.getTables(catalog, schema, "%", null)) {
+ while (tbls.next()) {
+ String tbl = tbls.getString(3);
+
+ items.put(tbl, parse(meta, catalog, schema, tbl));
+ }
+ }
+
+ if (!items.isEmpty())
+ res.put(schema, items);
+ }
+ }
+
+ return res;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/162bed47/modules/schema-load/src/main/java/org/apache/ignite/schema/pojo/PojoCodeGenerator.java
----------------------------------------------------------------------
diff --git a/modules/schema-load/src/main/java/org/apache/ignite/schema/pojo/PojoCodeGenerator.java b/modules/schema-load/src/main/java/org/apache/ignite/schema/pojo/PojoCodeGenerator.java
index ab52387..164c012 100644
--- a/modules/schema-load/src/main/java/org/apache/ignite/schema/pojo/PojoCodeGenerator.java
+++ b/modules/schema-load/src/main/java/org/apache/ignite/schema/pojo/PojoCodeGenerator.java
@@ -23,19 +23,10 @@ public class PojoCodeGenerator {
/** */
private static final String TAB = " ";
- /** */
- private final Collection<String> srcKey = new ArrayList<>(256);
-
- /** */
- private final Collection<String> srcVal = new ArrayList<>(256);
-
- /** */
- private int indent;
-
/**
* @return Current indent constructed from spaces.
*/
- private String indent() {
+ private static String indent(int indent) {
switch (indent) {
case 0: return "";
case 1: return TAB;
@@ -50,97 +41,50 @@ public class PojoCodeGenerator {
}
/**
- * Add line to source code.
- *
- * @param src Collection with source code lines.
- * @param line Line to add.
- */
- private void line(Collection<String> src, String line) {
- src.add(indent() + line);
- }
-
- /**
- * Add empty line.
- *
- * @param src Collection with source code lines.
- */
- private void empty(Collection<String> src) {
- src.add("");
- }
-
- /**
- * Generate key declarations.
+ * Generate java class code.
*
- * @param src Source code.
* @param pkg Package name.
* @param type Type name.
+ * @param descs Type descriptors.
+ * @throws IOException If failed to write generated code into file.
*/
- private void generateHeader(Collection<String> src, String pkg, String type) {
- line(src, "package " + pkg + ";");
+ private static void generateCode(String pkg, String type, Collection<GridCacheQueryTypeDescriptor> descs,
+ File pkgFolder) throws IOException {
+ Collection<String> src = new ArrayList<>(256);
- empty(src);
+ int indent = 0;
- line(src, "public class " + type + " {");
- }
+ src.add("package " + pkg + ";");
+ src.add("");
+ src.add("public class " + type + " {");
- /**
- * Generate key declarations.
- *
- * @param src Source code.
- * @param descs Type descriptor.
- */
- private void generateFields(Collection<String> src, Collection<GridCacheQueryTypeDescriptor> descs) {
- for (GridCacheQueryTypeDescriptor desc : descs) {
- line(src, "private " + desc.getJavaType().getSimpleName() + " " + desc.getJavaName() + ";");
+ indent++;
- empty(src);
+ for (GridCacheQueryTypeDescriptor desc : descs) {
+ src.add(TAB + "private " + desc.getJavaType().getSimpleName() + " " + desc.getJavaName() + ";");
+ src.add("");
}
- }
- /**
- * Generate key declarations.
- *
- * @param src Source code.
- * @param descs Type descriptor.
- */
- private void generateMethods(Collection<String> src, Collection<GridCacheQueryTypeDescriptor> descs) {
for (GridCacheQueryTypeDescriptor desc : descs) {
String fldName = desc.getJavaName();
String fldType = desc.getJavaType().getSimpleName();
String mtdName = capitalize(fldName);
- empty(src);
-
- line(src, "public " + fldType + " get" + mtdName + "() {");
+ src.add("");
- indent++;
- line(src, "return " + fldName + ";");
- indent--;
+ src.add(TAB + "public " + fldType + " get" + mtdName + "() {");
+ src.add(TAB + TAB + "return " + fldName + ";");
+ src.add(TAB + "}");
- line(src, "}");
+ src.add("");
- empty(src);
-
- line(src, "public void set" + mtdName + "(" + fldType + " " + fldName + ") {");
-
- indent++;
- line(src, "this." + fldName + " = " + fldName + ";");
- indent--;
-
- line(src, "}");
+ src.add(TAB + "public void set" + mtdName + "(" + fldType + " " + fldName + ") {");
+ src.add(TAB + TAB + "this." + fldName + " = " + fldName + ";");
+ src.add(TAB + "}");
}
- }
- /**
- * Write source code to file.
- *
- * @param src Collection with source code lines.
- * @param res Target file.
- * @throws IOException
- */
- private void write(Collection<String> src, File res) throws IOException {
- try (Writer writer = new BufferedWriter(new FileWriter(res))) {
+ try (Writer writer = new BufferedWriter(new FileWriter(new File(pkgFolder, type + ".java")))) {
for (String line : src)
writer.write(line + '\n');
}
@@ -152,41 +96,20 @@ public class PojoCodeGenerator {
* @param meta Type metadata.
* @param outFolder Output folder.
* @param pkg Types package.
- * @throws IOException If generation failed.
+ * @throws IOException If failed to write generated code into file.
*/
- public void generate(GridCacheQueryTypeMetadata meta, String outFolder, String pkg) throws IOException {
- srcKey.clear();
- srcVal.clear();
-
- File res = new File(outFolder, pkg.replace('.', File.separatorChar));
+ public static void generate(GridCacheQueryTypeMetadata meta, String outFolder, String pkg) throws IOException {
+ File pkgFolder = new File(outFolder, pkg.replace('.', File.separatorChar));
- if (!res.exists() && !res.mkdirs())
+ if (!pkgFolder.exists() && !pkgFolder.mkdirs())
throw new IOException("Failed to create folders for package: " + pkg);
String keyType = meta.getKeyType();
String valType = meta.getType();
- generateHeader(srcKey, pkg, keyType);
-
- generateHeader(srcVal, pkg, valType);
-
- indent++;
-
- generateFields(srcKey, meta.getKeyDescriptors());
-
- generateFields(srcVal, meta.getValueDescriptors());
-
- generateMethods(srcKey, meta.getKeyDescriptors());
-
- generateMethods(srcVal, meta.getValueDescriptors());
-
- indent--;
-
- line(srcKey, "}");
- line(srcVal, "}");
+ generateCode(pkg, meta.getKeyType(), meta.getKeyDescriptors(), pkgFolder);
- write(srcKey, new File(res, keyType + ".java"));
- write(srcVal, new File(res, valType + ".java"));
+ generateCode(pkg, meta.getType(), meta.getValueDescriptors(), pkgFolder);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/162bed47/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/GridPaneEx.java
----------------------------------------------------------------------
diff --git a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/GridPaneEx.java b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/GridPaneEx.java
index 4aa8769..eb1a8b7 100644
--- a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/GridPaneEx.java
+++ b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/GridPaneEx.java
@@ -32,7 +32,7 @@ public class GridPaneEx extends GridPane {
/**
* Add percent columns.
*
- * @param cols Array of column percentages.
+ * @param cols Columns percentages.
*/
public void addPercentColumns(double... cols) {
ObservableList<ColumnConstraints> ccs = getColumnConstraints();
@@ -46,15 +46,67 @@ public class GridPaneEx extends GridPane {
}
/**
- * Add percent columns.
+ * Add fixed width column.
*
- * @param cols Array of column percentages.
+ * @param width Column width.
*/
- public void addColumns(double... cols) {
- ObservableList<ColumnConstraints> ccs = getColumnConstraints();
+ public void addColumn(double width) {
+ getColumnConstraints().add(new ColumnConstraints(width));
+ }
+
+ /**
+ * Add default column.
+ */
+ public void addColumn() {
+ getColumnConstraints().add(new ColumnConstraints());
+ }
+
+ /**
+ * Add column with constraints and horizontal grow priority for the column.
+ *
+ * @param min Column minimum size.
+ * @param pref Column preffered size.
+ * @param max Column max size.
+ * @param hgrow Column horizontal grow priority.
+ */
+ public void addColumnn(double min, double pref, double max, Priority hgrow) {
+ ColumnConstraints cc = new ColumnConstraints(min, pref, max);
+
+ cc.setHgrow(hgrow);
+
+ getColumnConstraints().add(cc);
+ }
+
+ /**
+ * Add fixed height row.
+ *
+ * @param height Row height.
+ */
+ public void addRow(double height) {
+ getRowConstraints().add(new RowConstraints(height));
+ }
+
+ /**
+ * Add default row.
+ */
+ public void addRow() {
+ getRowConstraints().add(new RowConstraints());
+ }
+
+ /**
+ * Add row with constraints and verical grow priority for the row.
+ *
+ * @param min Row minimum size.
+ * @param pref Row preffered size.
+ * @param max Row max size.
+ * @param vgrow Row vertical grow priority.
+ */
+ public void addRow(double min, double pref, double max, Priority vgrow) {
+ RowConstraints rc = new RowConstraints(min, pref, max);
+
+ rc.setVgrow(vgrow);
- for (double col : cols)
- ccs.add(new ColumnConstraints(col));
+ getRowConstraints().add(rc);
}
/**
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/162bed47/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/SchemaLoadApp.java
----------------------------------------------------------------------
diff --git a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/SchemaLoadApp.java b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/SchemaLoadApp.java
index 91ae60b..a3279f9 100644
--- a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/SchemaLoadApp.java
+++ b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/SchemaLoadApp.java
@@ -18,7 +18,6 @@ import javafx.scene.control.cell.*;
import javafx.scene.layout.*;
import javafx.scene.text.*;
import javafx.stage.*;
-import org.apache.ignite.lang.*;
import org.apache.ignite.schema.db.*;
import org.apache.ignite.schema.pojo.*;
import org.apache.ignite.schema.xml.*;
@@ -36,15 +35,13 @@ import static org.apache.ignite.schema.util.SchemaUtils.*;
* Schema load application.
*/
public class SchemaLoadApp extends Application {
+ /** TODO: remove later */
private static final String PATH = "C:/Temp/ignite";
/** */
private Stage owner;
/** */
- private int step;
-
- /** */
private BorderPane rootPane;
/** */
@@ -69,116 +66,77 @@ public class SchemaLoadApp extends Application {
private PasswordField pwdTf;
/** */
- private Collection<IgniteBiTuple<String, Collection<String>>> tables = Collections.emptyList();
-
- /** */
private GridPaneEx connPnl;
/** */
- private TreeView<String> tree;
+ private CheckBoxTreeItem<String> rootItem;
/** */
- private CheckBoxTreeItem<String> rootItem;
+ private TextField pkgTf;
/** */
- private TextField packageTf;
+ private TextField outFolderTf;
/** */
private GridPaneEx genPnl;
+ /** */
+ private LinkedHashMap<String, LinkedHashMap<String, GridCacheQueryTypeMetadata>> schemas;
+
/**
* Create pane with controls to configure connection to database.
*/
private Pane connectPane() {
if (connPnl == null) {
-
connPnl = new GridPaneEx(DFLT_PADDING);
- connPnl.addPercentColumns(30, 70);
+ connPnl.addColumn();
+ connPnl.addColumnn(100, 100, Double.MAX_VALUE, Priority.ALWAYS);
- // gp.addLabel("Alias:", 0, 0);
- //
- // ObservableList<String> options = FXCollections.observableArrayList("My Settings");
- // ComboBox<String> aliasCb = new ComboBox<>(options);
- // aliasCb.setPromptText("Schema load settings");
- // aliasCb.setEditable(true);
- // aliasCb.setMaxWidth(Double.MAX_VALUE);
- //
- // gp.add(aliasCb, 1, 0);
-
- jdbcTf = connPnl.addTextField("JDBC Driver:", 0, 2);
+ jdbcTf = connPnl.addTextField("JDBC Driver:", 0, 0);
jdbcTf.setText("org.h2.Driver");
- urlTf = connPnl.addTextField("URL:", 0, 3);
+ urlTf = connPnl.addTextField("URL:", 0, 1);
urlTf.setText("jdbc:h2:mem:test");
- userTf = connPnl.addTextField("User:", 0, 4);
+ userTf = connPnl.addTextField("User:", 0, 2);
userTf.setText("sa");
- pwdTf = connPnl.addLabeled("Password:", new PasswordField(), 0, 5);
+ pwdTf = connPnl.addLabeled("Password:", new PasswordField(), 0, 3);
}
return connPnl;
}
- private Collection<IgniteBiTuple<String, Collection<String>>> tables() {
- try {
- Class.forName(jdbcTf.getText());
-
- Connection conn = DriverManager.getConnection(urlTf.getText(), userTf.getText(), pwdTf.getText());
-
- DatabaseMetaData meta = conn.getMetaData();
-
- try (ResultSet schemas = meta.getSchemas()) {
- tables = new ArrayList<>();
-
- while (schemas.next()) {
- String schema = schemas.getString(1);
-
- String cat = schemas.getString(2);
-
- try (ResultSet tbls = meta.getTables(cat, schema, "%", null)) {
- Collection<String> items = new ArrayList<>();
-
- while (tbls.next()) {
- String tbl = tbls.getString(3);
-
- System.out.println(tbl);
-
- items.add(tbl);
- }
-
- if (!items.isEmpty())
- tables.add(new IgniteBiTuple<>(schema, items));
- }
- }
- }
- }
- catch (Throwable e) {
- MessageBox.showErrorDialog(owner, "Failed to get tables list: " + e.getMessage());
- }
-
- return tables;
- }
-
+ /**
+ * Create pane with controls used to configure XML and code generation.
+ *
+ * @return Pane with controls.
+ */
private Pane generatePane() {
if (genPnl == null) {
genPnl = new GridPaneEx(DFLT_PADDING);
- genPnl.addPercentColumns(30, 60, 10);
+ genPnl.addColumn();
+ genPnl.addColumnn(100, 100, Double.MAX_VALUE, Priority.ALWAYS);
+ genPnl.addColumn(30);
+
+ genPnl.addRow(100, 100, Double.MAX_VALUE, Priority.ALWAYS);
+ genPnl.addRow();
+ genPnl.addRow();
rootItem = new CheckBoxTreeItem<>("Database");
rootItem.setExpanded(true);
- tree = new TreeView<>(rootItem);
+ TreeView<String> tree = new TreeView<>(rootItem);
tree.setCellFactory(CheckBoxTreeCell.<String>forTreeView());
- genPnl.add(tree, 0, 0, 3, 2);
+ genPnl.add(tree, 0, 0, 3, 1);
- packageTf = genPnl.addTextField("Package:", 0, 3);
- packageTf.setText("org.apache.ignite");
+ pkgTf = genPnl.addTextField("Package:", 0, 2);
+ pkgTf.setText("org.apache.ignite");
- final TextField outFolderTf = genPnl.addTextField("Output folder:", 0, 4);
+ outFolderTf = genPnl.addTextField("Output folder:", 0, 3);
outFolderTf.setText(PATH);
Button btnFolder = new Button("...");
@@ -189,99 +147,91 @@ public class SchemaLoadApp extends Application {
File folder = dc.showDialog(owner);
if (folder != null)
- try {
- outFolderTf.setText(folder.getCanonicalPath());
- }
- catch (IOException ignore) {
- // No-op.
- }
-
+ outFolderTf.setText(folder.getAbsolutePath());
}
});
- genPnl.add(btnFolder, 2, 4);
-
- Button btnGenerate = new Button("Generate");
- btnGenerate.setOnAction(new EventHandler<ActionEvent>() {
- @Override public void handle(ActionEvent evt) {
- try {
- try (Connection conn = DriverManager.getConnection("jdbc:h2:mem:test", "sa", "")) {
- DbMetadataParser parser = new DbMetadataParser(conn);
-
- ResultSet schemas = parser.schemas();
-
- Collection<GridCacheQueryTypeMetadata> all = new ArrayList<>(30);
-
- while (schemas.next()) {
- String schema = schemas.getString(1);
-
- if (!"PUBLIC".equalsIgnoreCase(schema))
- continue;
-
- String cat = schemas.getString(2);
+ genPnl.add(btnFolder, 2, 3);
+ }
- System.out.println("Schema:" + schema + " Catalog: " + cat);
+ return genPnl;
+ }
- ResultSet tbls = parser.tables(cat, schema);
+ /**
+ * Fill tree with database metadata.
+ */
+ private void fill() {
+ rootItem.getChildren().clear();
- File destFolder = new File(outFolderTf.getText());
+ try {
+ Class.forName(jdbcTf.getText());
- PojoCodeGenerator codeGen = new PojoCodeGenerator();
+ try (Connection conn = DriverManager.getConnection(urlTf.getText(), userTf.getText(), pwdTf.getText())) {
+ schemas = DbMetadataParser.parse(conn);
- while (tbls.next()) {
- String tbl = tbls.getString(3);
+ for (Map.Entry<String, LinkedHashMap<String, GridCacheQueryTypeMetadata>> schema : schemas.entrySet()) {
+ CheckBoxTreeItem<String> schemaItem = new CheckBoxTreeItem<>(schema.getKey());
- System.out.println(" Table:" + tbl);
+ rootItem.getChildren().add(schemaItem);
- GridCacheQueryTypeMetadata meta = parser.parse(cat, schema, tbl);
+ for (String tbl : schema.getValue().keySet())
+ schemaItem.getChildren().add(new CheckBoxTreeItem<>(tbl));
+ }
+ }
+ }
+ catch (Throwable e) {
+ MessageBox.showErrorDialog(owner, "Failed to get tables list: " + e.getMessage());
+ }
+ }
- all.add(meta);
+ /**
+ * Generate XML and POJOs.
+ */
+ private void generate() {
+ try {
+ String outFolder = outFolderTf.getText();
+ String pkg = pkgTf.getText();
- XmlTransformer transformer = new XmlTransformer(4);
+ File destFolder = new File(outFolder);
- Result res = new StreamResult(new File(destFolder, tbl + ".xml"));
+ List<GridCacheQueryTypeMetadata> all = new ArrayList<>();
- transformer.transform(packageTf.getText(), meta, res);
+ for (TreeItem<String> schemeItem : rootItem.getChildren()) {
+ if (((CheckBoxTreeItem)schemeItem).isSelected()) {
+ for (TreeItem<String> tblItem : schemeItem.getChildren()) {
+ if (((CheckBoxTreeItem)tblItem).isSelected()) {
+ GridCacheQueryTypeMetadata meta = schemas.get(schemeItem.getValue())
+ .get(tblItem.getValue());
- codeGen.generate(meta, outFolderTf.getText(), packageTf.getText());
- }
- }
+ all.add(meta);
XmlTransformer transformer = new XmlTransformer(4);
- Result res = new StreamResult(new File(outFolderTf.getText(), "all.xml"));
+ Result res = new StreamResult(new File(destFolder, meta.getType() + ".xml"));
- transformer.transform(packageTf.getText(), all, res);
+ transformer.transform(pkg, meta, res);
- conn.close();
+ PojoCodeGenerator.generate(meta, outFolder, pkg);
}
}
- catch (Throwable e) {
- MessageBox.showErrorDialog(owner, "Generation failed: " + e.getMessage());
- }
-
- System.exit(0);
}
- });
-
- genPnl.add(btnGenerate, 0, 5);
- }
+ }
- return genPnl;
- }
+ if (all.isEmpty())
+ MessageBox.showInformationDialog(owner, "Warning", "Nothing selected");
+ else {
+ XmlTransformer transformer = new XmlTransformer(4);
- private void fill(Collection<IgniteBiTuple<String, Collection<String>>> tables) {
- rootItem.getChildren().clear();
+ Result res = new StreamResult(new File(outFolder, "all.xml"));
- for (IgniteBiTuple<String, Collection<String>> schema : tables) {
- CheckBoxTreeItem<String> schemaItem = new CheckBoxTreeItem<>(schema.getKey());
- rootItem.getChildren().add(schemaItem);
+ transformer.transform(pkg, all, res);
- for (String table : schema.getValue())
- schemaItem.getChildren().add(new CheckBoxTreeItem<>(table));
+ MessageBox.showInformationDialog(owner, "Information", "Generation complete!");
+ }
+ }
+ catch (Throwable e) {
+ MessageBox.showErrorDialog(owner, "Generation failed: " + e.getMessage());
}
-
- tree.setRoot(rootItem);
}
/**
@@ -305,14 +255,14 @@ public class SchemaLoadApp extends Application {
prevBtn = new Button("Prev");
prevBtn.setOnAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent evt) {
- go(false);
+ prev();
}
});
nextBtn = new Button("Next");
nextBtn.setOnAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent evt) {
- go(true);
+ next();
}
});
@@ -324,19 +274,33 @@ public class SchemaLoadApp extends Application {
}
/**
- * Go to selected page.
- *
- * @param next If {@code true} then go to next page otherwise go to previous page.
+ * Go to "Connect To Database" panel.
*/
- private void go(boolean next) {
- Pane pane = next ? generatePane() : connectPane();
+ private void prev() {
+ titleLb.setText("Connect To Database");
- rootPane.setCenter(pane);
+ rootPane.setCenter(connectPane());
+
+ prevBtn.setDisable(true);
+ nextBtn.setText("Next");
+ }
+
+ /**
+ * Go to "Generate XML And POJOs" panel or generate XML and POJOs.
+ */
+ private void next() {
+ if (rootPane.getCenter() == connPnl) {
+ titleLb.setText("Generate XML And POJOs");
- titleLb.setText(next ? "Generate XML And POJOs" : "Connect To Database");
+ rootPane.setCenter(generatePane());
- prevBtn.setDisable(!next);
- nextBtn.setDisable(next);
+ prevBtn.setDisable(false);
+ nextBtn.setText("Generate");
+
+ fill();
+ }
+ else
+ generate();
}
/** {@inheritDoc} */
@@ -354,16 +318,21 @@ public class SchemaLoadApp extends Application {
rootPane.setCenter(connectPane());
rootPane.setBottom(createButtonsPane());
- primaryStage.setMinWidth(400);
- primaryStage.setMinHeight(500);
+ primaryStage.setScene(new Scene(rootPane));
- primaryStage.setMaxWidth(700);
- primaryStage.setMaxHeight(700);
+ int w = 400;
+ primaryStage.setWidth(w);
+ primaryStage.setMinWidth(w);
+ primaryStage.setMaxWidth(2 * w);
- primaryStage.setScene(new Scene(rootPane, 400, 500));
- primaryStage.show();
+ int h = 350;
+ primaryStage.setHeight(h);
+ primaryStage.setMinHeight(h);
+ primaryStage.setMaxHeight(2 * h);
- go(false);
+ prev();
+
+ primaryStage.show();
}
/**
@@ -375,8 +344,10 @@ public class SchemaLoadApp extends Application {
try (Connection conn = DriverManager.getConnection("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1", "sa", "")) {
try (Statement stmt = conn.createStatement()) {
- stmt.executeUpdate("CREATE TABLE IF NOT EXISTS Organization (id integer primary key, name varchar(50), city varchar(50))");
- stmt.executeUpdate("CREATE TABLE IF NOT EXISTS Person (id integer primary key, org_id integer, name varchar(50))");
+ stmt.executeUpdate("CREATE TABLE IF NOT EXISTS Organization(" +
+ "id integer primary key, name varchar(50), city varchar(50))");
+ stmt.executeUpdate("CREATE TABLE IF NOT EXISTS Person(" +
+ "id integer primary key, org_id integer, name varchar(50))");
stmt.executeUpdate("CREATE INDEX IF NOT EXISTS Org_Name_IDX On Organization (name)");
stmt.executeUpdate("CREATE INDEX IF NOT EXISTS Org_Name_City_IDX On Organization (name, city)");
@@ -386,11 +357,11 @@ public class SchemaLoadApp extends Application {
conn.commit();
try {
- stmt.executeUpdate("INSERT INTO Organization(id, name, city) VALUES (1, 'GridGain', 'Foster')");
- stmt.executeUpdate("INSERT INTO Organization(id, name, city) VALUES (2, 'Apache'), 'New York'");
+ stmt.executeUpdate("INSERT INTO Organization(id, name, city) VALUES (1, 'Test1', 'Test2')");
+ stmt.executeUpdate("INSERT INTO Organization(id, name, city) VALUES (2, 'Test3'), 'Test4'");
- stmt.executeUpdate("INSERT INTO Person(id, org_id, name) VALUES (1, 1, 'Kuznetsov')");
- stmt.executeUpdate("INSERT INTO Person(id, org_id, name) VALUES (2, 2, 'Boudnik')");
+ stmt.executeUpdate("INSERT INTO Person(id, org_id, name) VALUES (1, 1, 'Test5')");
+ stmt.executeUpdate("INSERT INTO Person(id, org_id, name) VALUES (2, 2, 'Test6')");
conn.commit();
}