Merge branches 'ignite-843' and 'master' and resolve merging conflicts.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/30a08ebd Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/30a08ebd Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/30a08ebd Branch: refs/heads/ignite-843 Commit: 30a08ebd1cc8cf27090aeefd5927089050116809 Parents: c220bd7 Author: Alexey Kuznetsov <[email protected]> Authored: Tue Sep 1 10:31:11 2015 +0700 Committer: Alexey Kuznetsov <[email protected]> Committed: Tue Sep 1 10:31:11 2015 +0700 ---------------------------------------------------------------------- .../JettyRestProcessorAbstractSelfTest.java | 7 + .../ignite/internal/GridKernalContext.java | 2 + .../ignite/internal/GridKernalContextImpl.java | 2 + .../apache/ignite/internal/IgniteKernal.java | 1 + .../processors/rest/GridRestProcessor.java | 5 +- .../handlers/cache/GridCacheCommandHandler.java | 2 + .../handlers/query/QueryCommandHandler.java | 8 +- .../top/GridTopologyCommandHandler.java | 2 + .../ignite/internal/util/GridJavaProcess.java | 1 + .../http/jetty/GridJettyJsonConfig.java | 7 + .../http/jetty/GridJettyRestHandler.java | 15 +- .../parser/dialect/MySQLMetadataDialect.java | 1 + .../ignite/schema/ui/SchemaImportApp.java | 164 +++++++++---------- 13 files changed, 123 insertions(+), 94 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/30a08ebd/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java index dcab059..8aecb61 100644 --- a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java +++ b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java @@ -20,10 +20,13 @@ package org.apache.ignite.internal.processors.rest; import java.io.InputStream; import java.io.InputStreamReader; import java.io.LineNumberReader; +import java.io.PrintStream; import java.io.Serializable; +import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; +import java.nio.charset.Charset; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -32,13 +35,17 @@ import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.regex.Pattern; import net.sf.json.JSONObject; +import org.apache.ignite.Ignite; import org.apache.ignite.IgniteCache; import org.apache.ignite.cache.CachePeekMode; import org.apache.ignite.cache.query.SqlQuery; import org.apache.ignite.cache.query.annotations.QuerySqlField; +import org.apache.ignite.cluster.ClusterNode; import org.apache.ignite.configuration.CacheConfiguration; +import org.apache.ignite.internal.processors.json.IgniteJsonString; import org.apache.ignite.internal.processors.rest.handlers.GridRestCommandHandler; import org.apache.ignite.internal.util.typedef.F; +import org.apache.ignite.lang.IgniteBiPredicate; import org.apache.ignite.testframework.GridTestUtils; import static org.apache.ignite.IgniteSystemProperties.IGNITE_JETTY_PORT; http://git-wip-us.apache.org/repos/asf/ignite/blob/30a08ebd/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContext.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContext.java b/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContext.java index f27ee8a..6c889a52 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContext.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContext.java @@ -48,6 +48,7 @@ import org.apache.ignite.internal.processors.igfs.IgfsHelper; import org.apache.ignite.internal.processors.igfs.IgfsProcessorAdapter; import org.apache.ignite.internal.processors.job.GridJobProcessor; import org.apache.ignite.internal.processors.jobmetrics.GridJobMetricsProcessor; +import org.apache.ignite.internal.processors.json.IgniteJsonProcessor; import org.apache.ignite.internal.processors.offheap.GridOffHeapProcessor; import org.apache.ignite.internal.processors.platform.PlatformProcessor; import org.apache.ignite.internal.processors.plugin.IgnitePluginProcessor; @@ -56,6 +57,7 @@ import org.apache.ignite.internal.processors.query.GridQueryProcessor; import org.apache.ignite.internal.processors.resource.GridResourceProcessor; import org.apache.ignite.internal.processors.rest.GridRestProcessor; import org.apache.ignite.internal.processors.schedule.IgniteScheduleProcessorAdapter; +import org.apache.ignite.internal.processors.scripting.IgniteScriptingProcessor; import org.apache.ignite.internal.processors.security.GridSecurityProcessor; import org.apache.ignite.internal.processors.segmentation.GridSegmentationProcessor; import org.apache.ignite.internal.processors.service.GridServiceProcessor; http://git-wip-us.apache.org/repos/asf/ignite/blob/30a08ebd/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java index 9f6e57e..f02720a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java @@ -64,6 +64,7 @@ import org.apache.ignite.internal.processors.igfs.IgfsHelper; import org.apache.ignite.internal.processors.igfs.IgfsProcessorAdapter; import org.apache.ignite.internal.processors.job.GridJobProcessor; import org.apache.ignite.internal.processors.jobmetrics.GridJobMetricsProcessor; +import org.apache.ignite.internal.processors.json.IgniteJsonProcessor; import org.apache.ignite.internal.processors.nodevalidation.DiscoveryNodeValidationProcessor; import org.apache.ignite.internal.processors.offheap.GridOffHeapProcessor; import org.apache.ignite.internal.processors.platform.PlatformProcessor; @@ -73,6 +74,7 @@ import org.apache.ignite.internal.processors.query.GridQueryProcessor; import org.apache.ignite.internal.processors.resource.GridResourceProcessor; import org.apache.ignite.internal.processors.rest.GridRestProcessor; import org.apache.ignite.internal.processors.schedule.IgniteScheduleProcessorAdapter; +import org.apache.ignite.internal.processors.scripting.IgniteScriptingProcessor; import org.apache.ignite.internal.processors.security.GridSecurityProcessor; import org.apache.ignite.internal.processors.segmentation.GridSegmentationProcessor; import org.apache.ignite.internal.processors.service.GridServiceProcessor; http://git-wip-us.apache.org/repos/asf/ignite/blob/30a08ebd/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java index 9843f1a..7fc5c7a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java @@ -125,6 +125,7 @@ import org.apache.ignite.internal.processors.query.GridQueryProcessor; import org.apache.ignite.internal.processors.resource.GridResourceProcessor; import org.apache.ignite.internal.processors.resource.GridSpringResourceContext; import org.apache.ignite.internal.processors.rest.GridRestProcessor; +import org.apache.ignite.internal.processors.scripting.IgniteScriptingProcessor; import org.apache.ignite.internal.processors.security.GridSecurityProcessor; import org.apache.ignite.internal.processors.segmentation.GridSegmentationProcessor; import org.apache.ignite.internal.processors.service.GridServiceProcessor; http://git-wip-us.apache.org/repos/asf/ignite/blob/30a08ebd/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java index a8a32ea..da22ae3 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java @@ -41,14 +41,15 @@ import org.apache.ignite.internal.processors.rest.handlers.GridRestCommandHandle import org.apache.ignite.internal.processors.rest.handlers.cache.GridCacheCommandHandler; import org.apache.ignite.internal.processors.rest.handlers.datastructures.DataStructuresCommandHandler; import org.apache.ignite.internal.processors.rest.handlers.query.QueryCommandHandler; +import org.apache.ignite.internal.processors.rest.handlers.scripting.IgniteScriptingCommandHandler; import org.apache.ignite.internal.processors.rest.handlers.task.GridTaskCommandHandler; import org.apache.ignite.internal.processors.rest.handlers.top.GridTopologyCommandHandler; -import org.apache.ignite.internal.processors.rest.handlers.version.GridVersionCommandHandler; +import org.apache.ignite.internal.processors.rest.handlers.version.GridVersionNameCommandHandler; import org.apache.ignite.internal.processors.rest.protocols.tcp.GridTcpRestProtocol; import org.apache.ignite.internal.processors.rest.request.GridRestCacheRequest; import org.apache.ignite.internal.processors.rest.request.GridRestRequest; import org.apache.ignite.internal.processors.rest.request.GridRestTaskRequest; -import org.apache.ignite.internal.processors.rest.request.RestSqlQueryRequest; +import org.apache.ignite.internal.processors.rest.request.RestQueryRequest; import org.apache.ignite.internal.processors.security.SecurityContext; import org.apache.ignite.internal.util.GridSpinReadWriteLock; import org.apache.ignite.internal.util.future.GridFinishedFuture; http://git-wip-us.apache.org/repos/asf/ignite/blob/30a08ebd/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java index baa1853..726f6ce 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java @@ -40,6 +40,7 @@ import org.apache.ignite.internal.IgniteInternalFuture; import org.apache.ignite.internal.IgniteKernal; import org.apache.ignite.internal.processors.cache.GridCacheAdapter; import org.apache.ignite.internal.processors.cache.IgniteInternalCache; +import org.apache.ignite.internal.processors.cache.query.GridCacheSqlMetadata; import org.apache.ignite.internal.processors.cache.transactions.IgniteInternalTx; import org.apache.ignite.internal.processors.rest.GridRestCommand; import org.apache.ignite.internal.processors.rest.GridRestResponse; @@ -73,6 +74,7 @@ import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_G import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_GET_AND_PUT_IF_ABSENT; import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_GET_AND_REMOVE; import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_GET_AND_REPLACE; +import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_METADATA; import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_METRICS; import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_PREPEND; import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_PUT; http://git-wip-us.apache.org/repos/asf/ignite/blob/30a08ebd/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java index 5a2944a..5828216 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java @@ -17,6 +17,8 @@ package org.apache.ignite.internal.processors.rest.handlers.query; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; @@ -25,8 +27,10 @@ import java.util.concurrent.Callable; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicLong; import org.apache.ignite.IgniteCache; +import org.apache.ignite.IgniteException; import org.apache.ignite.cache.query.Query; import org.apache.ignite.cache.query.QueryCursor; +import org.apache.ignite.cache.query.ScanQuery; import org.apache.ignite.cache.query.SqlFieldsQuery; import org.apache.ignite.cache.query.SqlQuery; import org.apache.ignite.internal.GridKernalContext; @@ -37,12 +41,14 @@ import org.apache.ignite.internal.processors.rest.GridRestCommand; import org.apache.ignite.internal.processors.rest.GridRestResponse; import org.apache.ignite.internal.processors.rest.handlers.GridRestCommandHandlerAdapter; import org.apache.ignite.internal.processors.rest.request.GridRestRequest; -import org.apache.ignite.internal.processors.rest.request.RestSqlQueryRequest; +import org.apache.ignite.internal.processors.rest.request.RestQueryRequest; import org.apache.ignite.internal.util.future.GridFinishedFuture; import org.apache.ignite.internal.util.typedef.internal.U; +import org.apache.ignite.lang.IgniteBiPredicate; import org.apache.ignite.lang.IgniteBiTuple; import static org.apache.ignite.internal.processors.rest.GridRestCommand.CLOSE_SQL_QUERY; +import static org.apache.ignite.internal.processors.rest.GridRestCommand.EXECUTE_SCAN_QUERY; import static org.apache.ignite.internal.processors.rest.GridRestCommand.EXECUTE_SQL_FIELDS_QUERY; import static org.apache.ignite.internal.processors.rest.GridRestCommand.EXECUTE_SQL_QUERY; import static org.apache.ignite.internal.processors.rest.GridRestCommand.FETCH_SQL_QUERY; http://git-wip-us.apache.org/repos/asf/ignite/blob/30a08ebd/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/top/GridTopologyCommandHandler.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/top/GridTopologyCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/top/GridTopologyCommandHandler.java index 95bbba5..c6b362c 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/top/GridTopologyCommandHandler.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/top/GridTopologyCommandHandler.java @@ -32,6 +32,8 @@ import org.apache.ignite.cluster.ClusterNode; import org.apache.ignite.internal.GridKernalContext; import org.apache.ignite.internal.IgniteInternalFuture; import org.apache.ignite.internal.processors.cache.GridCacheAttributes; +import org.apache.ignite.internal.processors.cache.GridCacheProcessor; +import org.apache.ignite.internal.processors.cache.IgniteInternalCache; import org.apache.ignite.internal.processors.port.GridPortRecord; import org.apache.ignite.internal.processors.rest.GridRestCommand; import org.apache.ignite.internal.processors.rest.GridRestProtocol; http://git-wip-us.apache.org/repos/asf/ignite/blob/30a08ebd/modules/core/src/main/java/org/apache/ignite/internal/util/GridJavaProcess.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/GridJavaProcess.java b/modules/core/src/main/java/org/apache/ignite/internal/util/GridJavaProcess.java index 183d412..1f6dcf5 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/GridJavaProcess.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/GridJavaProcess.java @@ -27,6 +27,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; +import java.util.Map; import org.apache.ignite.IgniteLogger; import org.apache.ignite.internal.util.lang.GridAbsClosure; import org.apache.ignite.internal.util.typedef.internal.U; http://git-wip-us.apache.org/repos/asf/ignite/blob/30a08ebd/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyJsonConfig.java ---------------------------------------------------------------------- diff --git a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyJsonConfig.java b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyJsonConfig.java index 39efe5e..49da684 100644 --- a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyJsonConfig.java +++ b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyJsonConfig.java @@ -17,11 +17,18 @@ package org.apache.ignite.internal.processors.rest.protocols.http.jetty; +import java.text.DateFormat; import java.util.UUID; +import net.sf.json.JSONObject; import net.sf.json.JsonConfig; +import net.sf.json.processors.JsonBeanProcessor; +import net.sf.json.processors.JsonBeanProcessorMatcher; import net.sf.json.processors.JsonValueProcessor; import java.util.*; +import net.sf.json.processors.JsonValueProcessorMatcher; +import org.apache.ignite.internal.processors.cache.query.GridCacheSqlIndexMetadata; +import org.apache.ignite.internal.processors.cache.query.GridCacheSqlMetadata; /** * Jetty protocol json configuration. http://git-wip-us.apache.org/repos/asf/ignite/blob/30a08ebd/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java ---------------------------------------------------------------------- diff --git a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java index 7ad49f2..3684491 100644 --- a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java +++ b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java @@ -24,7 +24,9 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.LineNumberReader; import java.net.InetSocketAddress; +import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; @@ -41,6 +43,7 @@ import net.sf.json.JsonConfig; import net.sf.json.processors.JsonValueProcessor; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteLogger; +import org.apache.ignite.internal.GridKernalContext; import org.apache.ignite.internal.processors.rest.GridRestCommand; import org.apache.ignite.internal.processors.rest.GridRestProtocolHandler; import org.apache.ignite.internal.processors.rest.GridRestResponse; @@ -51,19 +54,23 @@ import org.apache.ignite.internal.processors.rest.request.GridRestLogRequest; import org.apache.ignite.internal.processors.rest.request.GridRestRequest; import org.apache.ignite.internal.processors.rest.request.GridRestTaskRequest; import org.apache.ignite.internal.processors.rest.request.GridRestTopologyRequest; -import org.apache.ignite.internal.processors.rest.request.RestSqlQueryRequest; +import org.apache.ignite.internal.processors.rest.request.RestMapReduceScriptRequest; +import org.apache.ignite.internal.processors.rest.request.RestQueryRequest; +import org.apache.ignite.internal.processors.rest.request.RestRunScriptRequest; import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.lang.IgniteClosure; import org.apache.ignite.plugin.security.SecurityCredentials; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.handler.AbstractHandler; +import org.glassfish.json.JsonProviderImpl; import org.jetbrains.annotations.Nullable; import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_CONTAINS_KEYS; import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_GET_ALL; import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_PUT_ALL; import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_REMOVE_ALL; +import static org.apache.ignite.internal.processors.rest.GridRestCommand.EXECUTE_SQL_QUERY; import static org.apache.ignite.internal.processors.rest.GridRestResponse.STATUS_FAILED; /** @@ -686,9 +693,9 @@ public class GridJettyRestHandler extends AbstractHandler { restReq0.cacheName((String)params.get("cacheName")); if (cmd.equals(EXECUTE_SQL_QUERY)) - restReq0.queryType(QueryType.SQL); + restReq0.queryType(RestQueryRequest.QueryType.SQL); else - restReq0.queryType(QueryType.SQL_FIELDS); + restReq0.queryType(RestQueryRequest.QueryType.SQL_FIELDS); restReq = restReq0; @@ -709,7 +716,7 @@ public class GridJettyRestHandler extends AbstractHandler { restReq0.className((String)params.get("classname")); - restReq0.queryType(QueryType.SCAN); + restReq0.queryType(RestQueryRequest.QueryType.SCAN); restReq = restReq0; http://git-wip-us.apache.org/repos/asf/ignite/blob/30a08ebd/modules/schema-import-db/src/main/java/org/apache/ignite/schema/parser/dialect/MySQLMetadataDialect.java ---------------------------------------------------------------------- diff --git a/modules/schema-import-db/src/main/java/org/apache/ignite/schema/parser/dialect/MySQLMetadataDialect.java b/modules/schema-import-db/src/main/java/org/apache/ignite/schema/parser/dialect/MySQLMetadataDialect.java index dc7374f..3332046 100644 --- a/modules/schema-import-db/src/main/java/org/apache/ignite/schema/parser/dialect/MySQLMetadataDialect.java +++ b/modules/schema-import-db/src/main/java/org/apache/ignite/schema/parser/dialect/MySQLMetadataDialect.java @@ -21,6 +21,7 @@ import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.Set; http://git-wip-us.apache.org/repos/asf/ignite/blob/30a08ebd/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 80a9bbf..a0af0a7 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 @@ -22,16 +22,11 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; -import java.net.URL; -import java.net.URLClassLoader; import java.sql.Connection; -import java.sql.Driver; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collection; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.Properties; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -45,6 +40,7 @@ import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.concurrent.Task; +import javafx.embed.swing.SwingFXUtils; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.geometry.Insets; @@ -81,14 +77,7 @@ import org.apache.ignite.schema.model.PojoDescriptor; import org.apache.ignite.schema.model.PojoField; import org.apache.ignite.schema.model.SchemaDescriptor; import org.apache.ignite.schema.parser.DatabaseMetadataParser; - -import java.io.*; -import java.net.*; -import java.sql.*; -import java.util.*; -import java.util.List; -import java.util.concurrent.*; -import java.util.logging.*; +import org.apache.ignite.schema.parser.DbMetadataReader; /** * Schema Import utility application. @@ -293,6 +282,7 @@ public class SchemaImportApp extends Application { /** */ private ProgressIndicator pi; + /** */ private ObservableList<SchemaDescriptor> schemas = FXCollections.emptyObservableList(); /** List with POJOs descriptors. */ @@ -455,7 +445,7 @@ public class SchemaImportApp extends Application { prevBtn.setDisable(false); nextBtn.setText("Generate"); - tooltip(nextBtn, "Generate XML and POJO files"); + Controls.tooltip(nextBtn, "Generate XML and POJO files"); } finally { unlockUI(connLayerPnl, connPnl, nextBtn); @@ -678,15 +668,16 @@ public class SchemaImportApp extends Application { * @return Header pane with title label. */ private BorderPane createHeaderPane() { - dbIcon = hBox(0, true, imageView("data_connection", 48)); - genIcon = hBox(0, true, imageView("text_tree", 48)); + dbIcon = Controls.hBox(0, true, Controls.imageView("data_connection", 48)); + genIcon = Controls.hBox(0, true, Controls.imageView("text_tree", 48)); - titleLb = label(""); + titleLb = Controls.label(""); titleLb.setId("banner"); - subTitleLb = label(""); + subTitleLb = Controls.label(""); - BorderPane bp = borderPane(null, vBox(5, titleLb, subTitleLb), null, dbIcon, hBox(0, true, imageView("ignite", 48))); + BorderPane bp = Controls.borderPane(null, Controls.vBox(5, titleLb, subTitleLb), null, dbIcon, + Controls.hBox(0, true, Controls.imageView("ignite", 48))); bp.setId("banner"); return bp; @@ -696,19 +687,19 @@ public class SchemaImportApp extends Application { * @return Panel with control buttons. */ private Pane createButtonsPane() { - prevBtn = button("Prev", "Go to \"Database connection\" page", new EventHandler<ActionEvent>() { + prevBtn = Controls.button("Prev", "Go to \"Database connection\" page", new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent evt) { prev(); } }); - nextBtn = button("Next", "Go to \"POJO and XML generation\" page", new EventHandler<ActionEvent>() { + nextBtn = Controls.button("Next", "Go to \"POJO and XML generation\" page", new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent evt) { next(); } }); - return buttonsPane(Pos.BOTTOM_RIGHT, true, prevBtn, nextBtn); + return Controls.buttonsPane(Pos.BOTTOM_RIGHT, true, prevBtn, nextBtn); } /** @@ -739,7 +730,7 @@ public class SchemaImportApp extends Application { prevBtn.setDisable(true); nextBtn.setText("Next"); - tooltip(nextBtn, "Go to \"XML and POJO generation\" page"); + Controls.tooltip(nextBtn, "Go to \"XML and POJO generation\" page"); } /** @@ -787,7 +778,7 @@ public class SchemaImportApp extends Application { * @return Pane with connection controls. */ private Pane createConnectionPane() { - connPnl = paneEx(10, 10, 0, 10); + connPnl = Controls.paneEx(10, 10, 0, 10); connPnl.addColumn(); connPnl.addColumn(100, 100, Double.MAX_VALUE, Priority.ALWAYS); @@ -796,18 +787,18 @@ public class SchemaImportApp extends Application { connPnl.addRows(9); connPnl.addRow(100, 100, Double.MAX_VALUE, Priority.ALWAYS); - connPnl.add(text("This utility is designed to automatically generate configuration XML files and" + + connPnl.add(Controls.text("This utility is designed to automatically generate configuration XML files and" + " POJO classes from database schema information.", 550), 3); connPnl.wrap(); - GridPaneEx presetPnl = paneEx(0, 0, 0, 0); + GridPaneEx presetPnl = Controls.paneEx(0, 0, 0, 0); presetPnl.addColumn(100, 100, Double.MAX_VALUE, Priority.ALWAYS); presetPnl.addColumn(); - rdbmsCb = presetPnl.add(comboBox("Select database server to get predefined settings", presets)); + rdbmsCb = presetPnl.add(Controls.comboBox("Select database server to get predefined settings", presets)); - presetPnl.add(button("Save preset", "Save current settings in preferences", new EventHandler<ActionEvent>() { + presetPnl.add(Controls.button("Save preset", "Save current settings in preferences", new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent evt) { Preset preset = rdbmsCb.getSelectionModel().getSelectedItem(); @@ -815,12 +806,12 @@ public class SchemaImportApp extends Application { } })); - connPnl.add(label("DB Preset:")); + connPnl.add(Controls.label("DB Preset:")); connPnl.add(presetPnl, 2); - jdbcDrvJarTf = connPnl.addLabeled("Driver JAR:", textField("Path to driver jar")); + jdbcDrvJarTf = connPnl.addLabeled("Driver JAR:", Controls.textField("Path to driver jar")); - connPnl.add(button("...", "Select JDBC driver jar or zip", new EventHandler<ActionEvent>() { + connPnl.add(Controls.button("...", "Select JDBC driver jar or zip", new EventHandler<ActionEvent>() { /** {@inheritDoc} */ @Override public void handle(ActionEvent evt) { FileChooser fc = new FileChooser(); @@ -848,9 +839,9 @@ public class SchemaImportApp extends Application { } })); - jdbcDrvClsTf = connPnl.addLabeled("JDBC Driver:", textField("Enter class name for JDBC driver"), 2); + jdbcDrvClsTf = connPnl.addLabeled("JDBC Driver:", Controls.textField("Enter class name for JDBC driver"), 2); - jdbcUrlTf = connPnl.addLabeled("JDBC URL:", textField("JDBC URL of the database connection string"), 2); + jdbcUrlTf = connPnl.addLabeled("JDBC URL:", Controls.textField("JDBC URL of the database connection string"), 2); rdbmsCb.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Preset>() { @Override public void changed(ObservableValue<? extends Preset> val, Preset oldVal, Preset newVal) { @@ -861,34 +852,33 @@ public class SchemaImportApp extends Application { } }); - userTf = connPnl.addLabeled("User:", textField("User name"), 2); + userTf = connPnl.addLabeled("User:", Controls.textField("User name"), 2); - pwdTf = connPnl.addLabeled("Password:", passwordField("User password"), 2); + pwdTf = connPnl.addLabeled("Password:", Controls.passwordField("User password"), 2); - parseCb = connPnl.addLabeled("Parse:", comboBox("Type of tables to parse", "Tables only", "Tables and Views"), 2); + parseCb = connPnl.addLabeled("Parse:", Controls.comboBox("Type of tables to parse", "Tables only", "Tables and Views"), 2); - GridPaneEx schemaPnl = paneEx(5, 5, 5, 5); + GridPaneEx schemaPnl = Controls.paneEx(5, 5, 5, 5); schemaPnl.addColumn(100, 100, Double.MAX_VALUE, Priority.ALWAYS); schemaPnl.addColumn(); - schemaLst = schemaPnl.add(list("Select schemas to load", new SchemaCell())); + schemaLst = schemaPnl.add(Controls.list("Select schemas to load", new SchemaCell())); schemaPnl.wrap(); - schemaPnl.add(button("Load schemas", "Load schemas for specified database", new EventHandler<ActionEvent>() { - @Override - public void handle(ActionEvent evt) { + schemaPnl.add(Controls.button("Load schemas", "Load schemas for specified database", new EventHandler<ActionEvent>() { + @Override public void handle(ActionEvent evt) { loadSchemas(); } })); - TitledPane titledPnl = connPnl.add(titledPane("Schemas", schemaPnl, false), 3); + TitledPane titledPnl = connPnl.add(Controls.titledPane("Schemas", schemaPnl, false), 3); titledPnl.setExpanded(true); GridPaneEx.setValignment(titledPnl, VPos.TOP); - connLayerPnl = stackPane(connPnl); + connLayerPnl = Controls.stackPane(connPnl); return connLayerPnl; } @@ -952,7 +942,7 @@ public class SchemaImportApp extends Application { * Create generate pane with controls. */ private void createGeneratePane() { - genPnl = paneEx(10, 10, 0, 10); + genPnl = Controls.paneEx(10, 10, 0, 10); genPnl.addColumn(); genPnl.addColumn(100, 100, Double.MAX_VALUE, Priority.ALWAYS); @@ -961,10 +951,10 @@ public class SchemaImportApp extends Application { genPnl.addRow(100, 100, Double.MAX_VALUE, Priority.ALWAYS); genPnl.addRows(7); - TableColumn<PojoDescriptor, Boolean> useCol = customColumn("Schema / Table", "use", + TableColumn<PojoDescriptor, Boolean> useCol = Controls.customColumn("Schema / Table", "use", "If checked then this table will be used for XML and POJOs generation", PojoDescriptorCell.cellFactory()); - TableColumn<PojoDescriptor, String> keyClsCol = textColumn("Key Class Name", "keyClassName", "Key class name", + TableColumn<PojoDescriptor, String> keyClsCol = Controls.textColumn("Key Class Name", "keyClassName", "Key class name", new TextColumnValidator<PojoDescriptor>() { @Override public boolean valid(PojoDescriptor rowVal, String newVal) { boolean valid = checkClassName(rowVal, newVal, true); @@ -976,7 +966,7 @@ public class SchemaImportApp extends Application { } }); - TableColumn<PojoDescriptor, String> valClsCol = textColumn("Value Class Name", "valueClassName", "Value class name", + TableColumn<PojoDescriptor, String> valClsCol = Controls.textColumn("Value Class Name", "valueClassName", "Value class name", new TextColumnValidator<PojoDescriptor>() { @Override public boolean valid(PojoDescriptor rowVal, String newVal) { boolean valid = checkClassName(rowVal, newVal, false); @@ -988,26 +978,26 @@ public class SchemaImportApp extends Application { } }); - pojosTbl = tableView("Tables not found in database", useCol, keyClsCol, valClsCol); + pojosTbl = Controls.tableView("Tables not found in database", useCol, keyClsCol, valClsCol); - TableColumn<PojoField, Boolean> useFldCol = customColumn("Use", "use", + TableColumn<PojoField, Boolean> useFldCol = Controls.customColumn("Use", "use", "Check to use this field for XML and POJO generation\n" + - "Note that NOT NULL columns cannot be unchecked", PojoFieldUseCell.cellFactory()); + "Note that NOT NULL columns cannot be unchecked", PojoFieldUseCell.cellFactory()); useFldCol.setMinWidth(50); useFldCol.setMaxWidth(50); - TableColumn<PojoField, Boolean> keyCol = booleanColumn("Key", "key", + TableColumn<PojoField, Boolean> keyCol = Controls.booleanColumn("Key", "key", "Check to include this field into key object"); - TableColumn<PojoField, Boolean> akCol = booleanColumn("AK", "affinityKey", + TableColumn<PojoField, Boolean> akCol = Controls.booleanColumn("AK", "affinityKey", "Check to annotate key filed with @AffinityKeyMapped annotation in generated POJO class\n" + - "Note that a class can have only ONE key field annotated with @AffinityKeyMapped annotation"); + "Note that a class can have only ONE key field annotated with @AffinityKeyMapped annotation"); - TableColumn<PojoField, String> dbNameCol = tableColumn("DB Name", "dbName", "Field name in database"); + TableColumn<PojoField, String> dbNameCol = Controls.tableColumn("DB Name", "dbName", "Field name in database"); - TableColumn<PojoField, String> dbTypeNameCol = tableColumn("DB Type", "dbTypeName", "Field type in database"); + TableColumn<PojoField, String> dbTypeNameCol = Controls.tableColumn("DB Type", "dbTypeName", "Field type in database"); - TableColumn<PojoField, String> javaNameCol = textColumn("Java Name", "javaName", "Field name in POJO class", + TableColumn<PojoField, String> javaNameCol = Controls.textColumn("Java Name", "javaName", "Field name in POJO class", new TextColumnValidator<PojoField>() { @Override public boolean valid(PojoField rowVal, String newVal) { if (newVal.trim().isEmpty()) { @@ -1029,25 +1019,25 @@ public class SchemaImportApp extends Application { } }); - TableColumn<PojoField, String> javaTypeNameCol = customColumn("Java Type", "javaTypeName", + TableColumn<PojoField, String> javaTypeNameCol = Controls.customColumn("Java Type", "javaTypeName", "Field java type in POJO class", JavaTypeCell.cellFactory()); - fieldsTbl = tableView("Select table to see table columns", + fieldsTbl = Controls.tableView("Select table to see table columns", useFldCol, keyCol, akCol, dbNameCol, dbTypeNameCol, javaNameCol, javaTypeNameCol); - genPnl.add(splitPane(pojosTbl, fieldsTbl, 0.6), 3); + genPnl.add(Controls.splitPane(pojosTbl, fieldsTbl, 0.6), 3); - final GridPaneEx keyValPnl = paneEx(0, 0, 0, 0); + final GridPaneEx keyValPnl = Controls.paneEx(0, 0, 0, 0); keyValPnl.addColumn(100, 100, Double.MAX_VALUE, Priority.ALWAYS); keyValPnl.addColumn(); keyValPnl.addColumn(100, 100, Double.MAX_VALUE, Priority.ALWAYS); keyValPnl.addColumn(); - pkgTf = genPnl.addLabeled("Package:", textField("Package that will be used for POJOs generation"), 2); + pkgTf = genPnl.addLabeled("Package:", Controls.textField("Package that will be used for POJOs generation"), 2); - outFolderTf = genPnl.addLabeled("Output Folder:", textField("Output folder for XML and POJOs files")); + outFolderTf = genPnl.addLabeled("Output Folder:", Controls.textField("Output folder for XML and POJOs files")); - genPnl.add(button("...", "Select output folder", new EventHandler<ActionEvent>() { + genPnl.add(Controls.button("...", "Select output folder", new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent evt) { DirectoryChooser dc = new DirectoryChooser(); @@ -1068,30 +1058,30 @@ public class SchemaImportApp extends Application { } })); - pojoIncludeKeysCh = genPnl.add(checkBox("Include key fields into value POJOs", + pojoIncludeKeysCh = genPnl.add(Controls.checkBox("Include key fields into value POJOs", "If selected then include key fields into value object", true), 3); - pojoConstructorCh = genPnl.add(checkBox("Generate constructors for POJOs", + pojoConstructorCh = genPnl.add(Controls.checkBox("Generate constructors for POJOs", "If selected then generate empty and full constructors for POJOs", false), 3); - xmlSingleFileCh = genPnl.add(checkBox("Write all configurations to a single XML file", + xmlSingleFileCh = genPnl.add(Controls.checkBox("Write all configurations to a single XML file", "If selected then all configurations will be saved into the file 'ignite-type-metadata.xml'", true), 3); - GridPaneEx regexPnl = paneEx(5, 5, 5, 5); + GridPaneEx regexPnl = Controls.paneEx(5, 5, 5, 5); regexPnl.addColumn(); regexPnl.addColumn(100, 100, Double.MAX_VALUE, Priority.ALWAYS); regexPnl.addColumn(); regexPnl.addColumn(100, 100, Double.MAX_VALUE, Priority.ALWAYS); - regexTf = regexPnl.addLabeled(" Regexp:", textField("Regular expression. For example: (\\w+)")); + regexTf = regexPnl.addLabeled(" Regexp:", Controls.textField("Regular expression. For example: (\\w+)")); - replaceTf = regexPnl.addLabeled(" Replace with:", textField("Replace text. For example: $1_SomeText")); + replaceTf = regexPnl.addLabeled(" Replace with:", Controls.textField("Replace text. For example: $1_SomeText")); - final ComboBox<String> replaceCb = regexPnl.addLabeled(" Replace:", comboBox("Replacement target", + final ComboBox<String> replaceCb = regexPnl.addLabeled(" Replace:", Controls.comboBox("Replacement target", "Key class names", "Value class names", "Java names")); - regexPnl.add(buttonsPane(Pos.CENTER_LEFT, false, - button("Rename Selected", "Replaces each substring of this string that matches the given regular expression" + + regexPnl.add(Controls.buttonsPane(Pos.CENTER_LEFT, false, + Controls.button("Rename Selected", "Replaces each substring of this string that matches the given regular expression" + " with the given replacement", new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent evt) { @@ -1148,7 +1138,7 @@ public class SchemaImportApp extends Application { } } }), - button("Reset Selected", "Revert changes for selected items to initial auto-generated values", new EventHandler<ActionEvent>() { + Controls.button("Reset Selected", "Revert changes for selected items to initial auto-generated values", new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent evt) { String sel = replaceCb.getSelectionModel().getSelectedItem(); @@ -1244,10 +1234,10 @@ public class SchemaImportApp extends Application { } }); - genPnl.add(titledPane("Rename \"Key class name\", \"Value class name\" or \"Java name\" for selected tables", + genPnl.add(Controls.titledPane("Rename \"Key class name\", \"Value class name\" or \"Java name\" for selected tables", regexPnl, true), 3); - genLayerPnl = stackPane(genPnl); + genLayerPnl = Controls.stackPane(genPnl); } /** @@ -1509,21 +1499,21 @@ public class SchemaImportApp extends Application { primaryStage.setTitle("Apache Ignite Auto Schema Import Utility"); primaryStage.getIcons().addAll( - image("ignite", 16), - image("ignite", 24), - image("ignite", 32), - image("ignite", 48), - image("ignite", 64), - image("ignite", 128)); + Controls.image("ignite", 16), + Controls.image("ignite", 24), + Controls.image("ignite", 32), + Controls.image("ignite", 48), + Controls.image("ignite", 64), + Controls.image("ignite", 128)); - pi = progressIndicator(50); + pi = Controls.progressIndicator(50); createGeneratePane(); hdrPane = createHeaderPane(); - rootPane = borderPane(hdrPane, createConnectionPane(), createButtonsPane(), null, null); + rootPane = Controls.borderPane(hdrPane, createConnectionPane(), createButtonsPane(), null, null); - primaryStage.setScene(scene(rootPane)); + primaryStage.setScene(Controls.scene(rootPane)); primaryStage.setWidth(650); primaryStage.setMinWidth(650); @@ -1664,7 +1654,7 @@ public class SchemaImportApp extends Application { Object osxApp = appCls.getDeclaredMethod("getApplication").invoke(null); appCls.getDeclaredMethod("setDockIconImage", java.awt.Image.class) - .invoke(osxApp, fromFXImage(image("ignite", 128), null)); + .invoke(osxApp, SwingFXUtils.fromFXImage(Controls.image("ignite", 128), null)); } catch (Exception ignore) { // No-op. @@ -1759,8 +1749,8 @@ public class SchemaImportApp extends Application { * Special list view cell to select loaded schemas. */ private static class SchemaCell implements Callback<SchemaDescriptor, ObservableValue<Boolean>> { - @Override - public ObservableValue<Boolean> call(SchemaDescriptor item) { + /** {@inheritDoc} */ + @Override public ObservableValue<Boolean> call(SchemaDescriptor item) { return item.selected(); } }
