ignite-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From anovi...@apache.org
Subject [1/2] ignite git commit: # IGNITE-843 Updated sql page.
Date Tue, 01 Sep 2015 04:47:09 GMT
Repository: ignite
Updated Branches:
  refs/heads/ignite-843 98872d307 -> b11cbfd05


# IGNITE-843 Updated sql page.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/3228c4b0
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/3228c4b0
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/3228c4b0

Branch: refs/heads/ignite-843
Commit: 3228c4b0b9d8cad20964c281c1e187860a31775e
Parents: 5ce52e9
Author: Andrey <anovikov@gridgain.com>
Authored: Tue Sep 1 11:42:02 2015 +0700
Committer: Andrey <anovikov@gridgain.com>
Committed: Tue Sep 1 11:42:02 2015 +0700

----------------------------------------------------------------------
 .../bin/ignite-web-agent.sh                     | 15 ++++
 .../apache/ignite/agent/AgentConfiguration.java | 11 +--
 .../org/apache/ignite/agent/AgentLauncher.java  | 22 +++--
 .../ignite/agent/AgentLoggingConfigurator.java  |  8 +-
 .../org/apache/ignite/agent/AgentSocket.java    | 36 +++++---
 .../org/apache/ignite/agent/AgentUtils.java     | 10 ++-
 .../handlers/DatabaseMetadataExtractor.java     | 28 +++++--
 .../ignite/agent/handlers/RestExecutor.java     | 34 ++++----
 .../org/apache/ignite/agent/remote/Remote.java  |  5 +-
 .../ignite/agent/remote/RemoteHandler.java      | 23 ++++--
 .../ignite/agent/remote/WebSocketSender.java    |  2 +-
 .../agent/testdrive/AgentMetadataTestDrive.java | 19 +++--
 .../agent/testdrive/AgentSqlTestDrive.java      | 55 ++++++++++---
 .../ignite/agent/testdrive/model/Car.java       |  2 +-
 .../ignite/agent/testdrive/model/CarKey.java    |  2 +-
 .../ignite/agent/testdrive/model/Country.java   |  2 +-
 .../agent/testdrive/model/CountryKey.java       |  2 +-
 .../agent/testdrive/model/Department.java       |  2 +-
 .../agent/testdrive/model/DepartmentKey.java    |  2 +-
 .../ignite/agent/testdrive/model/Employee.java  |  2 +-
 .../agent/testdrive/model/EmployeeKey.java      |  2 +-
 .../ignite/agent/testdrive/model/Parking.java   |  2 +-
 .../agent/testdrive/model/ParkingKey.java       |  2 +-
 .../src/main/js/controllers/sql-controller.js   | 47 ++++++++++-
 modules/control-center-web/src/main/js/db.js    |  4 +-
 .../src/main/js/public/stylesheets/style.scss   | 12 +--
 .../src/main/js/views/includes/controls.jade    |  6 +-
 .../src/main/js/views/sql/sql.jade              | 87 +++++++++++---------
 28 files changed, 296 insertions(+), 148 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/bin/ignite-web-agent.sh
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/bin/ignite-web-agent.sh b/modules/control-center-agent/bin/ignite-web-agent.sh
index b0158a3..9acdc5c 100755
--- a/modules/control-center-agent/bin/ignite-web-agent.sh
+++ b/modules/control-center-agent/bin/ignite-web-agent.sh
@@ -16,4 +16,19 @@
 # limitations under the License.
 #
 
+SOURCE="${BASH_SOURCE[0]}"
+
+DIR="$( dirname "$SOURCE" )"
+
+while [ -h "$SOURCE" ]
+    do
+        SOURCE="$(readlink "$SOURCE")"
+
+        [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE"
+
+        DIR="$( cd -P "$( dirname "$SOURCE"  )" && pwd )"
+    done
+
+DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
+
 java -jar ignite-web-agent-${version}.jar "$@"

http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentConfiguration.java
b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentConfiguration.java
index 44a7f1f..f2de4a7 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentConfiguration.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentConfiguration.java
@@ -17,11 +17,12 @@
 
 package org.apache.ignite.agent;
 
-import com.beust.jcommander.*;
-
-import java.io.*;
-import java.net.*;
-import java.util.*;
+import com.beust.jcommander.Parameter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.net.URL;
+import java.util.Properties;
 
 /**
  * Agent configuration.

http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentLauncher.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentLauncher.java
b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentLauncher.java
index f04d9d9..01de963 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentLauncher.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentLauncher.java
@@ -17,15 +17,14 @@
 
 package org.apache.ignite.agent;
 
-import com.beust.jcommander.*;
-import org.apache.ignite.agent.handlers.*;
-import org.apache.ignite.agent.testdrive.*;
-import org.eclipse.jetty.util.ssl.*;
-import org.eclipse.jetty.websocket.client.*;
-
-import java.io.*;
-import java.net.*;
-import java.util.logging.*;
+import com.beust.jcommander.JCommander;
+import java.io.File;
+import java.net.URI;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.apache.ignite.agent.handlers.RestExecutor;
+import org.eclipse.jetty.util.ssl.SslContextFactory;
+import org.eclipse.jetty.websocket.client.WebSocketClient;
 
 /**
  * Control Center Agent launcher.
@@ -61,6 +60,11 @@ public class AgentLauncher {
             return;
         }
 
+        if (cmdCfg.testDriveSql() && cmdCfg.nodeUri() != null)
+            log.log(Level.WARNING,
+                "URI for connect to Ignite REST server will be ignored because --test-drive-sql
option was specified.");
+
+
         if (cmdCfg.configPath() != null)
             cfg.load(new File(cmdCfg.configPath()).toURI().toURL());
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentLoggingConfigurator.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentLoggingConfigurator.java
b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentLoggingConfigurator.java
index d492c45..3a0084a 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentLoggingConfigurator.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentLoggingConfigurator.java
@@ -17,8 +17,12 @@
 
 package org.apache.ignite.agent;
 
-import java.io.*;
-import java.util.logging.*;
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.logging.LogManager;
 
 /**
  * Configurator for java.util.Logger.

http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentSocket.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentSocket.java
b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentSocket.java
index b329967..d66393b 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentSocket.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentSocket.java
@@ -17,18 +17,28 @@
 
 package org.apache.ignite.agent;
 
-import com.google.gson.*;
-import org.apache.http.auth.*;
-import org.apache.ignite.agent.handlers.*;
-import org.apache.ignite.agent.remote.*;
-import org.apache.ignite.agent.testdrive.*;
-import org.eclipse.jetty.websocket.api.*;
-import org.eclipse.jetty.websocket.api.annotations.*;
-
-import java.io.*;
-import java.net.*;
-import java.util.concurrent.*;
-import java.util.logging.*;
+import com.google.gson.Gson;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import java.io.IOException;
+import java.net.ConnectException;
+import java.util.concurrent.CountDownLatch;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.apache.ignite.agent.handlers.DatabaseMetadataExtractor;
+import org.apache.ignite.agent.handlers.RestExecutor;
+import org.apache.ignite.agent.remote.Remote;
+import org.apache.ignite.agent.remote.RemoteHandler;
+import org.apache.ignite.agent.remote.WebSocketSender;
+import org.apache.ignite.agent.testdrive.AgentMetadataTestDrive;
+import org.apache.ignite.agent.testdrive.AgentSqlTestDrive;
+import org.eclipse.jetty.websocket.api.Session;
+import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose;
+import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect;
+import org.eclipse.jetty.websocket.api.annotations.OnWebSocketError;
+import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage;
+import org.eclipse.jetty.websocket.api.annotations.WebSocket;
 
 /**
  * Handler for web-socket connection.
@@ -170,7 +180,7 @@ public class AgentSocket implements WebSocketSender {
             AgentMetadataTestDrive.testDrive();
 
         if (cfg.testDriveSql())
-            AgentSqlTestDrive.testDrive();
+            AgentSqlTestDrive.testDrive(cfg);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentUtils.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentUtils.java
b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentUtils.java
index d756664..6ee5633 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentUtils.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentUtils.java
@@ -17,10 +17,12 @@
 
 package org.apache.ignite.agent;
 
-import java.io.*;
-import java.net.*;
-import java.security.*;
-import java.util.logging.*;
+import java.io.File;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.security.ProtectionDomain;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 /**
  * Utility methods.

http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/handlers/DatabaseMetadataExtractor.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/handlers/DatabaseMetadataExtractor.java
b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/handlers/DatabaseMetadataExtractor.java
index 55e3307..6012b3f 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/handlers/DatabaseMetadataExtractor.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/handlers/DatabaseMetadataExtractor.java
@@ -17,15 +17,25 @@
 
 package org.apache.ignite.agent.handlers;
 
-import org.apache.ignite.agent.*;
-import org.apache.ignite.agent.remote.*;
-import org.apache.ignite.schema.parser.*;
-
-import java.io.*;
-import java.net.*;
-import java.sql.*;
-import java.util.*;
-import java.util.logging.*;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.apache.ignite.agent.AgentConfiguration;
+import org.apache.ignite.agent.AgentUtils;
+import org.apache.ignite.agent.remote.Remote;
+import org.apache.ignite.schema.parser.DbMetadataReader;
+import org.apache.ignite.schema.parser.DbTable;
 
 /**
  * Remote API to extract database metadata.

http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/handlers/RestExecutor.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/handlers/RestExecutor.java
b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/handlers/RestExecutor.java
index 98fd2fa..7e8edf8 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/handlers/RestExecutor.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/handlers/RestExecutor.java
@@ -17,20 +17,26 @@
 
 package org.apache.ignite.agent.handlers;
 
-import org.apache.commons.codec.*;
-import org.apache.http.*;
-import org.apache.http.client.entity.*;
-import org.apache.http.client.methods.*;
-import org.apache.http.client.utils.*;
-import org.apache.http.entity.*;
-import org.apache.http.impl.client.*;
-import org.apache.ignite.agent.*;
-import org.apache.ignite.agent.remote.*;
-
-import java.io.*;
-import java.net.*;
-import java.nio.charset.*;
-import java.util.*;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.nio.charset.Charset;
+import java.util.List;
+import java.util.Map;
+import org.apache.commons.codec.Charsets;
+import org.apache.http.Header;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.methods.HttpRequestBase;
+import org.apache.http.client.utils.URIBuilder;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.ignite.agent.AgentConfiguration;
+import org.apache.ignite.agent.remote.Remote;
 
 /**
  * Executor for REST requests.

http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/Remote.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/Remote.java
b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/Remote.java
index ecd056c..8fe49bd 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/Remote.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/Remote.java
@@ -17,7 +17,10 @@
 
 package org.apache.ignite.agent.remote;
 
-import java.lang.annotation.*;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 /**
  * Use this annotation to associate methods with remote NodeJS server commands.

http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/RemoteHandler.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/RemoteHandler.java
b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/RemoteHandler.java
index 5ca6379..203f0fb 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/RemoteHandler.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/RemoteHandler.java
@@ -17,13 +17,22 @@
 
 package org.apache.ignite.agent.remote;
 
-import com.google.gson.*;
-import org.apache.http.auth.*;
-
-import java.lang.reflect.*;
-import java.util.*;
-import java.util.concurrent.*;
-import java.util.logging.*;
+import com.google.gson.Gson;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonNull;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Type;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.apache.http.auth.AuthenticationException;
 
 /**
  * Allow to execute methods remotely from NodeJS server by web-socket command.

http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/WebSocketSender.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/WebSocketSender.java
b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/WebSocketSender.java
index 44f4147..655ff85 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/WebSocketSender.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/WebSocketSender.java
@@ -17,7 +17,7 @@
 
 package org.apache.ignite.agent.remote;
 
-import com.google.gson.*;
+import com.google.gson.JsonObject;
 
 /**
  * Sender for messages to web-socket.

http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/AgentMetadataTestDrive.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/AgentMetadataTestDrive.java
b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/AgentMetadataTestDrive.java
index 6d2ab50..d3307b7 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/AgentMetadataTestDrive.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/AgentMetadataTestDrive.java
@@ -1,12 +1,17 @@
 package org.apache.ignite.agent.testdrive;
 
-import org.apache.ignite.agent.*;
-import org.h2.tools.*;
-
-import java.io.*;
-import java.sql.*;
-import java.util.concurrent.atomic.*;
-import java.util.logging.*;
+import java.io.File;
+import java.io.FileReader;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.apache.ignite.agent.AgentUtils;
+import org.h2.tools.RunScript;
+import org.h2.tools.Server;
 
 /**
  * Test drive for metadata load from database.

http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/AgentSqlTestDrive.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/AgentSqlTestDrive.java
b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/AgentSqlTestDrive.java
index d52deae..7a493a6 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/AgentSqlTestDrive.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/AgentSqlTestDrive.java
@@ -1,14 +1,34 @@
 package org.apache.ignite.agent.testdrive;
 
-import org.apache.ignite.*;
-import org.apache.ignite.agent.testdrive.model.*;
-import org.apache.ignite.cache.*;
-import org.apache.ignite.configuration.*;
-import org.apache.ignite.lang.*;
-
-import java.util.*;
-import java.util.concurrent.atomic.*;
-import java.util.logging.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Random;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.apache.ignite.Ignite;
+import org.apache.ignite.IgniteCache;
+import org.apache.ignite.Ignition;
+import org.apache.ignite.agent.AgentConfiguration;
+import org.apache.ignite.agent.testdrive.model.Car;
+import org.apache.ignite.agent.testdrive.model.CarKey;
+import org.apache.ignite.agent.testdrive.model.Country;
+import org.apache.ignite.agent.testdrive.model.CountryKey;
+import org.apache.ignite.agent.testdrive.model.Department;
+import org.apache.ignite.agent.testdrive.model.DepartmentKey;
+import org.apache.ignite.agent.testdrive.model.Employee;
+import org.apache.ignite.agent.testdrive.model.EmployeeKey;
+import org.apache.ignite.agent.testdrive.model.Parking;
+import org.apache.ignite.agent.testdrive.model.ParkingKey;
+import org.apache.ignite.cache.CacheTypeMetadata;
+import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.IgniteEx;
+import org.apache.ignite.internal.IgniteNodeAttributes;
+import org.apache.ignite.internal.util.typedef.F;
+import org.apache.ignite.lang.IgniteBiTuple;
 
 /**
  * Test drive for SQL.
@@ -299,7 +319,7 @@ public class AgentSqlTestDrive {
     /**
      * Start ignite node with cacheEmployee and populate it with data.
      */
-    public static void testDrive() {
+    public static void testDrive(AgentConfiguration acfg) {
         if (initLatch.compareAndSet(false, true)) {
             log.log(Level.INFO, "TEST-DRIVE: Prepare node configuration...");
 
@@ -312,7 +332,20 @@ public class AgentSqlTestDrive {
 
                 log.log(Level.INFO, "TEST-DRIVE: Start embedded node with indexed enabled
caches...");
 
-                Ignite ignite = Ignition.start(cfg);
+                IgniteEx ignite = (IgniteEx)Ignition.start(cfg);
+
+                String host = ((Collection<String>)
+                    ignite.localNode().attribute(IgniteNodeAttributes.ATTR_REST_JETTY_ADDRS)).iterator().next();
+
+                Integer port = ignite.localNode().attribute(IgniteNodeAttributes.ATTR_REST_JETTY_PORT);
+
+                if (F.isEmpty(host) || port == null) {
+                    log.log(Level.SEVERE, "TEST-DRIVE: Failed to start embedded node with
rest!");
+
+                    return;
+                }
+
+                acfg.nodeUri(String.format("http://%s:%d", "0.0.0.0".equals(host) ? "127.0.0.1"
: host, port));
 
                 log.log(Level.INFO, "TEST-DRIVE: Embedded node started");
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Car.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Car.java
b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Car.java
index 38cb1bc..969830b 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Car.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Car.java
@@ -17,7 +17,7 @@
 
 package org.apache.ignite.agent.testdrive.model;
 
-import java.io.*;
+import java.io.Serializable;
 
 /**
  * Car definition.

http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/CarKey.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/CarKey.java
b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/CarKey.java
index 7e9d0ce..1c661d2 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/CarKey.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/CarKey.java
@@ -17,7 +17,7 @@
 
 package org.apache.ignite.agent.testdrive.model;
 
-import java.io.*;
+import java.io.Serializable;
 
 /**
  * CarKey definition.

http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Country.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Country.java
b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Country.java
index 7a6ddf9..9f10e6f 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Country.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Country.java
@@ -17,7 +17,7 @@
 
 package org.apache.ignite.agent.testdrive.model;
 
-import java.io.*;
+import java.io.Serializable;
 
 /**
  * Country definition.

http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/CountryKey.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/CountryKey.java
b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/CountryKey.java
index e27d78c..8e10c94 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/CountryKey.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/CountryKey.java
@@ -17,7 +17,7 @@
 
 package org.apache.ignite.agent.testdrive.model;
 
-import java.io.*;
+import java.io.Serializable;
 
 /**
  * CountryKey definition.

http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Department.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Department.java
b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Department.java
index 054eb20..2786b0b 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Department.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Department.java
@@ -17,7 +17,7 @@
 
 package org.apache.ignite.agent.testdrive.model;
 
-import java.io.*;
+import java.io.Serializable;
 
 /**
  * Department definition.

http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/DepartmentKey.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/DepartmentKey.java
b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/DepartmentKey.java
index a176461..0f4ce64 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/DepartmentKey.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/DepartmentKey.java
@@ -17,7 +17,7 @@
 
 package org.apache.ignite.agent.testdrive.model;
 
-import java.io.*;
+import java.io.Serializable;
 
 /**
  * DepartmentKey definition.

http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Employee.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Employee.java
b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Employee.java
index 1695549..eacc538 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Employee.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Employee.java
@@ -17,7 +17,7 @@
 
 package org.apache.ignite.agent.testdrive.model;
 
-import java.io.*;
+import java.io.Serializable;
 
 /**
  * Employee definition.

http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/EmployeeKey.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/EmployeeKey.java
b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/EmployeeKey.java
index 2cce7c4..da89c20 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/EmployeeKey.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/EmployeeKey.java
@@ -17,7 +17,7 @@
 
 package org.apache.ignite.agent.testdrive.model;
 
-import java.io.*;
+import java.io.Serializable;
 
 /**
  * EmployeeKey definition.

http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Parking.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Parking.java
b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Parking.java
index 69048e5..3363d6f 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Parking.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/Parking.java
@@ -17,7 +17,7 @@
 
 package org.apache.ignite.agent.testdrive.model;
 
-import java.io.*;
+import java.io.Serializable;
 
 /**
  * Parking definition.

http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/ParkingKey.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/ParkingKey.java
b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/ParkingKey.java
index b076b33..1e0e595 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/ParkingKey.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/model/ParkingKey.java
@@ -17,7 +17,7 @@
 
 package org.apache.ignite.agent.testdrive.model;
 
-import java.io.*;
+import java.io.Serializable;
 
 /**
  * ParkingKey definition.

http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-web/src/main/js/controllers/sql-controller.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/sql-controller.js b/modules/control-center-web/src/main/js/controllers/sql-controller.js
index 8822dc3..1abab92 100644
--- a/modules/control-center-web/src/main/js/controllers/sql-controller.js
+++ b/modules/control-center-web/src/main/js/controllers/sql-controller.js
@@ -25,7 +25,7 @@ controlCenterModule.controller('sqlController', ['$scope', '$controller',
'$http
 
     $scope.joinTip = $common.joinTip;
 
-    $scope.pageSizes = [50, 100, 200, 400, 800, 1000];
+    $scope.pageSizes = [10, 25, 50];
 
     $scope.modes = [
         {value: 'PARTITIONED', label: 'PARTITIONED'},
@@ -40,6 +40,8 @@ controlCenterModule.controller('sqlController', ['$scope', '$controller',
'$http
 
                 $scope.notebook_name = notebook.name;
 
+                $scope.notebook.activeIdx = [];
+
                 if (!notebook.paragraphs || notebook.paragraphs.length == 0)
                     $scope.addParagraph();
             })
@@ -67,6 +69,8 @@ controlCenterModule.controller('sqlController', ['$scope', '$controller',
'$http
                     }
 
                     $scope.notebook.edit = false;
+
+                    $common.showInfo("Notebook successfully renamed.");
                 })
                 .error(function (errMsg) {
                     $common.showError(errMsg);
@@ -76,6 +80,26 @@ controlCenterModule.controller('sqlController', ['$scope', '$controller',
'$http
             $scope.notebook.edit = false
     };
 
+    $scope.saveNotebook = function() {
+        $http.post('/notebooks/save', $scope.notebook)
+            .success(function () {
+                $common.showInfo("Notebook successfully saved.");
+            })
+            .error(function (errMsg) {
+                $common.showError(errMsg);
+            });
+    };
+
+    $scope.removeNotebook = function() {
+        $http.post('/notebooks/remove', $scope.notebook)
+            .success(function () {
+                $common.showInfo("Notebook successfully removed.");
+            })
+            .error(function (errMsg) {
+                $common.showError(errMsg);
+            });
+    };
+
     $scope.renameParagraph = function(paragraph, newName) {
         if (paragraph.name != newName) {
             paragraph.name = newName;
@@ -103,11 +127,26 @@ controlCenterModule.controller('sqlController', ['$scope', '$controller',
'$http
         if ($scope.caches && $scope.caches.length > 0)
             paragraph.cache = $scope.caches[0];
 
+        $scope.notebook.activeIdx.push($scope.notebook.paragraphs.length);
+
         $scope.notebook.paragraphs.push(paragraph);
     };
 
-    $scope.removeParagraph = function(idx) {
-        $scope.notebook.splice(idx, 1);
+    $scope.removeParagraph = function(paragraph) {
+        var paragraph_idx = _.findIndex($scope.notebook.paragraphs, function (item) {
+            return paragraph == item;
+        });
+
+        var panel_idx = _.findIndex($scope.notebook.activeIdx, function (item) {
+            console.log(item);
+
+            return paragraph_idx == item;
+        });
+
+        if (panel_idx >= 0)
+            $scope.notebook.activeIdx.splice(panel_idx, 1);
+
+        $scope.notebook.paragraphs.splice(paragraph_idx, 1);
     };
 
     $http.get('/models/sql.json')
@@ -230,5 +269,5 @@ controlCenterModule.controller('sqlController', ['$scope', '$controller',
'$http
 
     $scope.getter = function (value) {
         return value;
-    }
+    };
 }]);

http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-web/src/main/js/db.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/db.js b/modules/control-center-web/src/main/js/db.js
index edaf9dd..84529a4 100644
--- a/modules/control-center-web/src/main/js/db.js
+++ b/modules/control-center-web/src/main/js/db.js
@@ -348,7 +348,9 @@ var NotebookSchema = new Schema({
     paragraphs: [{
         name: String,
         query: String,
-        result: {type: String, enum: ['table', 'bar']}
+        editor: Boolean,
+        result: {type: String, enum: ['none', 'table', 'bar']},
+        pageSize: Number
     }]
 });
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-web/src/main/js/public/stylesheets/style.scss
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/public/stylesheets/style.scss b/modules/control-center-web/src/main/js/public/stylesheets/style.scss
index 748dde8..0ba33d1 100644
--- a/modules/control-center-web/src/main/js/public/stylesheets/style.scss
+++ b/modules/control-center-web/src/main/js/public/stylesheets/style.scss
@@ -514,21 +514,21 @@ table tr:hover {
 }
 
 .theme-line .panel-heading {
-    padding: 5px 10px 8px 10px;
+    padding: 5px 10px;
     margin: 0;
     cursor: pointer;
-    font-size: 1.2em;
+    font-size: $font-size-large;
+    line-height: 27px;
 
-    i {
-        font-size: $font-size-base;
-    }
+    a { color: black; }
+
+    .btn-group { margin-left: 10px; }
 }
 
 .theme-line .panel-heading:hover {
     text-decoration: underline;
 }
 
-
 .theme-line .panel-body {
     padding: 10px 20px;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-web/src/main/js/views/includes/controls.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/views/includes/controls.jade b/modules/control-center-web/src/main/js/views/includes/controls.jade
index 9a046f7..a4cef34 100644
--- a/modules/control-center-web/src/main/js/views/includes/controls.jade
+++ b/modules/control-center-web/src/main/js/views/includes/controls.jade
@@ -437,9 +437,9 @@ mixin main-table(title, rows, focusId, click, rowTemplate)
 mixin groups(groups, dataSource)
     .panel.panel-default(ng-repeat='group in #{groups}' ng-click='triggerDigest=true' ng-hide='{{group.hide}}')
         .panel-heading(bs-collapse-toggle ng-click='hidePopover()') {{::group.label}}
-            label(id='{{::group.group + "-title"}}') &nbsp;
-            i.fa.fa-question-circle(ng-if='group.tip' bs-tooltip='joinTip(group.tip)' type='button')
-            i.fa.fa-question-circle.blank(ng-if='!group.tip')
+            label(id='{{::group.group + "-title"}}')
+            i.tipLabel.fa.fa-question-circle(ng-if='group.tip' bs-tooltip='joinTip(group.tip)'
type='button')
+            i.tipLabel.fa.fa-question-circle.blank(ng-if='!group.tip')
         .panel-collapse(role='tabpanel' bs-collapse-target id='{{::group.group}}' number='{{::group.number}}')
             .panel-body
                 .col-sm-6(id='{{::group.group + "-left"}}')

http://git-wip-us.apache.org/repos/asf/ignite/blob/3228c4b0/modules/control-center-web/src/main/js/views/sql/sql.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/views/sql/sql.jade b/modules/control-center-web/src/main/js/views/sql/sql.jade
index b5a03c9..45b251d 100644
--- a/modules/control-center-web/src/main/js/views/sql/sql.jade
+++ b/modules/control-center-web/src/main/js/views/sql/sql.jade
@@ -28,7 +28,10 @@ block container
                 .docs-header.notebook-header
                     h1.col-sm-6(ng-hide='notebook.edit')
                         a {{notebook.name}}
-                        i.fa.fa-pencil.tipLabel(ng-click='notebook.edit = true;notebook.edit_name
= notebook.name' bs-tooltip data-title='Rename notebook' data-trigger='hover')
+                        .btn-group
+                            i.btn.btn-default.fa.fa-pencil(ng-click='notebook.edit = true;notebook.edit_name
= notebook.name' bs-tooltip data-title='Rename notebook' data-trigger='hover')
+                            i.btn.btn-default.fa.fa-floppy-o(ng-click='saveNotebook()' bs-tooltip
data-title='Save notebook' data-trigger='hover')
+                            i.btn.btn-default.fa.fa-remove(ng-click='removeNotebook()' bs-tooltip
data-title='Remove notebook' data-trigger='hover')
                     h1.col-sm-6(ng-show='notebook.edit')
                         input.sql-name-input(ng-model='notebook.edit_name' on-enter='renameNotebook(notebook.edit_name)'
on-escape='notebook.edit = false;')
                         i.tipLabel.fa.fa-floppy-o(ng-click='renameNotebook(notebook.edit_name)'
bs-tooltip data-title='Save notebook name' data-trigger='hover')
@@ -38,16 +41,20 @@ block container
                     hr
                     .panel-group(bs-collapse ng-model='notebook.activeIdx' data-allow-multiple='true'
data-start-collapsed='false')
                         .panel.panel-default(ng-repeat='paragraph in notebook.paragraphs')
-                            .panel-heading
-                                h3(ng-hide='paragraph.edit')
-                                    a(bs-collapse-toggle ng-click='hidePopover()') {{paragraph.name}}
-                                    i.fa.fa-pencil.tipLabel(ng-click='paragraph.edit = true;
paragraph.edit_name = paragraph.name;' bs-tooltip data-title='Rename paragraph' data-trigger='hover')
-                                    .result.btn-group(ng-model='paragraph.result')
+                            .panel-heading(bs-collapse-toggle)
+                                div(ng-hide='paragraph.edit')
+                                    a {{paragraph.name}}
+                                    .btn-group(ng-click='$event.stopPropagation();')
+                                        i.btn.btn-default.fa.fa-pencil(ng-click='paragraph.edit
= true; paragraph.edit_name = paragraph.name;' bs-tooltip data-title='Rename paragraph' data-trigger='hover')
+                                        i.btn.btn-default.fa.fa-clock-o(ng-click='paragraph.edit
= true; paragraph.edit_name = paragraph.name;' bs-tooltip data-title='Refresh rate' data-trigger='hover')
+                                        i.btn.btn-default.fa.fa-remove(ng-click='removeParagraph(paragraph)'
bs-tooltip data-title='Remove paragraph' data-trigger='hover')
+
+                                    .btn-group(ng-model='paragraph.result' ng-click='$event.stopPropagation();'
style='float: right' )
                                         i.btn.btn-default.fa.fa-table(ng-click='paragraph.result="table"'
ng-class="{'active': resultMode(paragraph, 'table')}" bs-tooltip data-title='Show table' data-trigger='hover')
                                         i.btn.btn-default.fa.fa-bar-chart(ng-click='paragraph.result="bar"'
ng-class="{'active': resultMode(paragraph, 'bar')}" bs-tooltip data-title='Show bar chart'
data-trigger='hover')
-                                h3(ng-show='paragraph.edit')
-                                    input.sql-name-input(ng-model='paragraph.edit_name' on-enter='renameParagraph(paragraph,
paragraph.edit_name)' on-escape='paragraph.edit = false;')
-                                    i.tipLabel.fa.fa-floppy-o(ng-click='renameParagraph(paragraph,
paragraph.edit_name)' bs-tooltip data-title='Save paragraph name' data-trigger='hover')
+                                div(ng-show='paragraph.edit')
+                                    input.sql-name-input(ng-model='paragraph.edit_name' ng-click='$event.stopPropagation();'
on-enter='renameParagraph(paragraph, paragraph.edit_name)' on-escape='renameParagraph(paragraph,
paragraph.name)')
+                                    i.tipLabel.fa.fa-floppy-o(ng-click='renameParagraph(paragraph,
paragraph.edit_name); $event.stopPropagation();' bs-tooltip data-title='Save paragraph name'
data-trigger='hover')
                             .panel-collapse(role='tabpanel' bs-collapse-target)
                                 .panel-body(ng-show='paragraph.editor')
                                     .row
@@ -67,35 +74,33 @@ block container
                                                                 a(ng-click='paragraph.cache
= cache') {{$index + 1}}) {{::cache.name}}, {{::cache.mode}}
                                     hr(style='margin: 0')
                                     .settings-row
-                                        label Page Size:&nbsp;
-                                        button.btn.btn-default.base-control(ng-model='paragraph.pageSize'
bs-options='item for item in pageSizes' bs-select)
-                                    .settings-row
-                                        button.btn.btn-primary(ng-click='explain(paragraph)')
Explain
-                                        button.btn.btn-primary(ng-click='execute(paragraph)')
Execute
-                                        button.btn.btn-primary(ng-click='scan(paragraph)')
Scan
-                                .panel-body.table-responsive(ng-show='paragraph.result ===
"table"')
-                                    table.table.table-striped.col-sm-12.sql-results(st-table='displayedCollection'
st-safe-src='paragraph.rows')
-                                        thead
-                                            tr(style='border-size: 0')
-                                                td(colspan='{{paragraph.meta.length}}')
-                                                    .col-sm-8
-                                                        lable Page #:&nbsp;
-                                                        b {{paragraph.page}}&nbsp;&nbsp;&nbsp;
-                                                        | Results:&nbsp;
-                                                        b {{paragraph.rows.length + paragraph.total}}
-                                                    .col-sm-4
-                                                        button.btn.btn-primary.fieldButton(ng-click='nextPage(paragraph)'
ng-disabled='!paragraph.queryId') Next page
-                                                        //.input-tip
-                                                        //    input.form-control(st-search
placeholder='Filter...' type='search')
-                                            tr
-                                                th(ng-repeat='col in paragraph.meta track
by $index' st-sort='getter' data-ng-bind='::col.fieldName' bs-tooltip='columnToolTip(col)')
-                                        tbody
-                                            //tr
-                                            //    td(colspan='{{#{tab}.cols.length}}')
-                                            //        .loading-indicator
-                                            tr(ng-repeat='row in displayedCollection track
by $index')
-                                                td(ng-repeat='val in row track by $index')
{{ val }}
-                                        tfoot
-                                            tr
-                                                td.text-right(colspan='{{paragraph.meta.length}}')
-                                                    div(st-pagination st-items-by-page='10'
st-displayed-pages='5')
+                                        button.btn.btn-primary(ng-click='explain(paragraph)'
ng-disabled='!paragraph.query || !paragraph.cache') Explain
+                                        button.btn.btn-primary(ng-click='execute(paragraph)'
ng-disabled='!paragraph.query || !paragraph.cache') Execute
+                                        button.btn.btn-primary(ng-click='scan(paragraph)'
ng-disabled='!paragraph.cache') Scan
+                                        .pull-right
+                                            label Page Size:&nbsp;
+                                            button.btn.btn-default.base-control(ng-model='paragraph.pageSize'
bs-options='item for item in pageSizes' bs-select)
+                                .panel-body(ng-show='paragraph.result === "table"')
+                                    .row
+                                        .col-sm-8
+                                            lable Page #:&nbsp;
+                                            b {{paragraph.page}}&nbsp;&nbsp;&nbsp;
+                                            | Results:&nbsp;
+                                            b {{paragraph.rows.length + paragraph.total}}
+                                        .col-sm-4
+                                            button.btn.btn-primary.fieldButton(ng-click='nextPage(paragraph)'
ng-disabled='!paragraph.queryId') Next page
+                                    .table-responsive
+                                        table.table.table-condensed(st-table='displayedCollection'
st-safe-src='paragraph.rows')
+                                            thead
+                                                tr
+                                                    th(ng-repeat='col in paragraph.meta track
by $index' st-sort='getter' data-ng-bind='::col.fieldName' bs-tooltip='columnToolTip(col)')
+                                            tbody
+                                                    //tr
+                                                    //    td(colspan='{{#{tab}.cols.length}}')
+                                                    //        .loading-indicator
+                                                    tr(ng-repeat='row in displayedCollection
track by $index')
+                                                        td(ng-repeat='val in row track by
$index') {{ val }}
+                                            //tfoot
+                                            //    tr
+                                            //        td.text-right(colspan='{{paragraph.meta.length}}')
+                                            //            div(st-pagination st-items-by-page='10'
st-displayed-pages='5')


Mime
View raw message