Repository: incubator-ignite Updated Branches: refs/heads/ignite-45 27c54acbc -> 57db52481
# IGNITE-330 Reworked code generator to generate cache config. Added check for empty tables list. Started to change Demo.java to show read/write through. Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/acf0c6bf Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/acf0c6bf Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/acf0c6bf Branch: refs/heads/ignite-45 Commit: acf0c6bfbd9a7c0534b56d5aea62e8bbf51e947b Parents: 861ce5e Author: AKuznetsov <akuznet...@gridgain.com> Authored: Tue Mar 24 00:56:21 2015 +0700 Committer: AKuznetsov <akuznet...@gridgain.com> Committed: Tue Mar 24 00:56:21 2015 +0700 ---------------------------------------------------------------------- .../org/apache/ignite/schema/CacheConfig.java | 14 ++---- .../java/org/apache/ignite/schema/Demo.java | 50 +++++++++++------- .../ignite/schema/generator/CodeGenerator.java | 53 ++++++++++++++------ .../ignite/schema/ui/SchemaImportApp.java | 42 ++++++++++------ 4 files changed, 99 insertions(+), 60 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/acf0c6bf/examples/schema-import/src/main/java/org/apache/ignite/schema/CacheConfig.java ---------------------------------------------------------------------- diff --git a/examples/schema-import/src/main/java/org/apache/ignite/schema/CacheConfig.java b/examples/schema-import/src/main/java/org/apache/ignite/schema/CacheConfig.java index e5af72a..b57d75e 100644 --- a/examples/schema-import/src/main/java/org/apache/ignite/schema/CacheConfig.java +++ b/examples/schema-import/src/main/java/org/apache/ignite/schema/CacheConfig.java @@ -17,22 +17,16 @@ package org.apache.ignite.schema; -import org.apache.ignite.cache.*; -import org.apache.ignite.cache.store.*; +import org.apache.ignite.configuration.*; -import java.util.*; +import javax.sql.*; /** * CacheConfig stub. Will be generated by Ignite Schema Import Utility. */ public class CacheConfig { - /** Configure cache store. */ - public static CacheStore store() { - throw new IllegalStateException("CacheConfig should be generated by Ignite Schema Import Utility"); - } - - /** Configure cache types metadata. */ - public static Collection<CacheTypeMetadata> typeMetadata() { + /** Configure cache. */ + public static CacheConfiguration cache(String name, final DataSource dataSource) { throw new IllegalStateException("CacheConfig should be generated by Ignite Schema Import Utility"); } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/acf0c6bf/examples/schema-import/src/main/java/org/apache/ignite/schema/Demo.java ---------------------------------------------------------------------- diff --git a/examples/schema-import/src/main/java/org/apache/ignite/schema/Demo.java b/examples/schema-import/src/main/java/org/apache/ignite/schema/Demo.java index a58176d..d5356f1 100644 --- a/examples/schema-import/src/main/java/org/apache/ignite/schema/Demo.java +++ b/examples/schema-import/src/main/java/org/apache/ignite/schema/Demo.java @@ -18,12 +18,10 @@ package org.apache.ignite.schema; import org.apache.ignite.*; -import org.apache.ignite.cache.store.*; import org.apache.ignite.cache.store.jdbc.*; import org.apache.ignite.configuration.*; import javax.cache.*; -import javax.cache.configuration.*; /** * Demo for CacheJdbcPojoStore. @@ -33,6 +31,9 @@ import javax.cache.configuration.*; * Custom SQL will be executed to populate cache with data from database. */ public class Demo { + /** */ + private static final String CACHE_NAME = "Person"; + /** * Executes demo. * @@ -44,29 +45,15 @@ public class Demo { IgniteConfiguration cfg = new IgniteConfiguration(); - CacheConfiguration ccfg = new CacheConfiguration<>(); - // Configure cache store. - ccfg.setCacheStoreFactory(new Factory<CacheStore>() { - @Override public CacheStore create() { - return CacheConfig.store(); - } - }); - - ccfg.setReadThrough(true); - ccfg.setWriteThrough(true); - - // Enable database batching. - ccfg.setWriteBehindEnabled(true); - - // Configure cache types metadata. - ccfg.setTypeMetadata(CacheConfig.typeMetadata()); + CacheConfiguration ccfg = CacheConfig.cache(CACHE_NAME, + org.h2.jdbcx.JdbcConnectionPool.create("jdbc:h2:tcp://localhost/~/schema-import/demo", "sa", "")); cfg.setCacheConfiguration(ccfg); // Start Ignite node. try (Ignite ignite = Ignition.start(cfg)) { - IgniteCache<PersonKey, Person> cache = ignite.jcache(null); + IgniteCache<PersonKey, Person> cache = ignite.jcache(CACHE_NAME); // Demo for load cache with custom SQL. cache.loadCache(null, "org.apache.ignite.schema.PersonKey", @@ -76,4 +63,29 @@ public class Demo { System.out.println(">>> Loaded Person: " + person); } } + + /** Demonstrates cache preload from database. */ + private static void preload() { + // TODO + } + + /** Demonstrates cache wright through to database. */ + private static void writeThrough() { + // TODO + } + + /** Demonstrates cache read through from database. */ + private static void readThrough() { + // TODO + } + + /** Demonstrates cache remove from database. */ + private static void remove() { + // TODO + } + + /** Demonstrates cache transaction from database. */ + private static void transaction() { + // TODO + } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/acf0c6bf/modules/schema-import/src/main/java/org/apache/ignite/schema/generator/CodeGenerator.java ---------------------------------------------------------------------- diff --git a/modules/schema-import/src/main/java/org/apache/ignite/schema/generator/CodeGenerator.java b/modules/schema-import/src/main/java/org/apache/ignite/schema/generator/CodeGenerator.java index a10bea7..6782d38 100644 --- a/modules/schema-import/src/main/java/org/apache/ignite/schema/generator/CodeGenerator.java +++ b/modules/schema-import/src/main/java/org/apache/ignite/schema/generator/CodeGenerator.java @@ -36,6 +36,8 @@ public class CodeGenerator { private static final String TAB2 = TAB + TAB; /** */ private static final String TAB3 = TAB + TAB + TAB; + /** */ + private static final String TAB4 = TAB + TAB + TAB + TAB; /** * Add line to source code without indent. @@ -89,6 +91,16 @@ public class CodeGenerator { } /** + * Add line to source code with four indents. + * + * @param src Source code. + * @param line Code line. + */ + private static void add4(Collection<String> src, String line) { + src.add(TAB4 + line); + } + + /** * @param str Source string. * @return String with first letters in upper case. */ @@ -479,10 +491,10 @@ public class CodeGenerator { String outFolder, ConfirmCallable askOverwrite) throws IOException { File pkgFolder = new File(outFolder, pkg.replace('.', File.separatorChar)); - File cacheConfig = new File(pkgFolder, "CacheConfig.java"); + File cacheCfg = new File(pkgFolder, "CacheConfig.java"); - if (cacheConfig.exists()) { - MessageBox.Result choice = askOverwrite.confirm(cacheConfig.getName()); + if (cacheCfg.exists()) { + MessageBox.Result choice = askOverwrite.confirm(cacheCfg.getName()); if (CANCEL == choice) throw new IllegalStateException("Java snippet generation was canceled!"); @@ -494,22 +506,31 @@ public class CodeGenerator { Collection<String> src = new ArrayList<>(256); header(src, pkg, "org.apache.ignite.cache.*;org.apache.ignite.cache.store.*;" + - "org.apache.ignite.cache.store.jdbc.*;;javax.sql.*;java.sql.Types;java.util.*;", + "org.apache.ignite.cache.store.jdbc.*;org.apache.ignite.configuration.*;;" + + "javax.cache.configuration.*;javax.sql.*;java.sql.*;java.util.*", "CacheConfig", "CacheConfig"); - add1(src, "/** Configure cache store. */"); - add1(src, "public static CacheStore store() {"); - add2(src, "DataSource dataSource = null; // TODO create data source."); + add1(src, "/** Configure cache. */"); + add1(src, "public static CacheConfiguration cache(String name, final DataSource dataSource) {"); + add2(src, "if (dataSource == null)"); + add3(src, "throw new NullPointerException(\"Datasource cannot be null.\");"); add0(src, ""); - add2(src, "CacheJdbcPojoStore store = new CacheJdbcPojoStore();"); - add2(src, "store.setDataSource(dataSource);"); + add2(src, "CacheConfiguration ccfg = new CacheConfiguration(name);"); add0(src, ""); - add2(src, "return store;"); - add1(src, "}"); + add2(src, "ccfg.setCacheStoreFactory(new Factory<CacheStore>() {"); + add3(src, "@Override public CacheStore create () {"); + add4(src, "final CacheJdbcPojoStore store = new CacheJdbcPojoStore();"); + add0(src, ""); + add4(src, "store.setDataSource(dataSource);"); + add0(src, ""); + add4(src, "return store;"); + add3(src, "}"); + add2(src, "});"); add0(src, ""); - add1(src, "/** Configure cache types metadata. */"); - add1(src, "public static Collection<CacheTypeMetadata> typeMetadata() {"); + add2(src, "ccfg.setReadThrough(true);"); + add2(src, "ccfg.setWriteThrough(true);"); + add0(src, ""); add2(src, "// Configure cache types. "); add2(src, "Collection<CacheTypeMetadata> meta = new ArrayList<>();"); @@ -545,12 +566,14 @@ public class CodeGenerator { first = false; } + + add2(src, "ccfg.setTypeMetadata(meta);"); add0(src, ""); - add2(src, "return meta;"); + add2(src, "return ccfg;"); add1(src, "}"); add0(src, "}"); - write(src, cacheConfig); + write(src, cacheCfg); } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/acf0c6bf/modules/schema-import/src/main/java/org/apache/ignite/schema/ui/SchemaImportApp.java ---------------------------------------------------------------------- diff --git a/modules/schema-import/src/main/java/org/apache/ignite/schema/ui/SchemaImportApp.java b/modules/schema-import/src/main/java/org/apache/ignite/schema/ui/SchemaImportApp.java index 1b1ba48..cdd3cec 100644 --- a/modules/schema-import/src/main/java/org/apache/ignite/schema/ui/SchemaImportApp.java +++ b/modules/schema-import/src/main/java/org/apache/ignite/schema/ui/SchemaImportApp.java @@ -359,29 +359,39 @@ public class SchemaImportApp extends Application { /** {@inheritDoc} */ @Override protected void succeeded() { - super.succeeded(); + try { + super.succeeded(); - pojosTbl.setItems(pojos); + pojosTbl.setItems(pojos); - if (!pojos.isEmpty()) - pojosTbl.getSelectionModel().clearAndSelect(0); + if (pojos.isEmpty()) { + MessageBox.warningDialog(owner, "No tables found in database. Recheck JDBC URL.\n" + + "JDBC URL: " + jdbcUrl); - curTbl = pojosTbl; + return; + } + else + pojosTbl.getSelectionModel().clearAndSelect(0); - pojosTbl.requestFocus(); + curTbl = pojosTbl; + + pojosTbl.requestFocus(); - unlockUI(connLayerPnl, connPnl, nextBtn); - hdrPane.setLeft(genIcon); + hdrPane.setLeft(genIcon); - titleLb.setText("Generate XML And POJOs"); - subTitleLb.setText(jdbcUrlTf.getText()); + titleLb.setText("Generate XML And POJOs"); + subTitleLb.setText(jdbcUrlTf.getText()); - rootPane.setCenter(genLayerPnl); + rootPane.setCenter(genLayerPnl); - prevBtn.setDisable(false); - nextBtn.setText("Generate"); - tooltip(nextBtn, "Generate XML and POJO files"); + prevBtn.setDisable(false); + nextBtn.setText("Generate"); + tooltip(nextBtn, "Generate XML and POJO files"); + } + finally { + unlockUI(connLayerPnl, connPnl, nextBtn); + } } /** {@inheritDoc} */ @@ -481,7 +491,7 @@ public class SchemaImportApp extends Application { } if (singleXml) - XmlGenerator.generate(pkg, all, includeKeys, new File(outFolder, "Ignite.xml"), askOverwrite); + XmlGenerator.generate(pkg, all, includeKeys, new File(outFolder, "ignite-type-metadata.xml"), askOverwrite); CodeGenerator.snippet(all, pkg, includeKeys, outFolder, askOverwrite); @@ -950,7 +960,7 @@ public class SchemaImportApp extends Application { "If selected then generate empty and full constructors for POJOs", false), 3); xmlSingleFileCh = genPnl.add(checkBox("Write all configurations to a single XML file", - "If selected then all configurations will be saved into the file 'Ignite.xml'", true), 3); + "If selected then all configurations will be saved into the file 'ignite-type-metadata.xml'", true), 3); GridPaneEx regexPnl = paneEx(5, 5, 5, 5); regexPnl.addColumn();