You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by im...@apache.org on 2018/05/31 21:43:26 UTC

[01/43] asterixdb git commit: [ASTERIXDB-2361][HYR] Memory Leak Due to Netty Close Listeners

Repository: asterixdb
Updated Branches:
  refs/heads/release-0.9.4-pre-rc 2a773feef -> b1767b157


[ASTERIXDB-2361][HYR] Memory Leak Due to Netty Close Listeners

- user model changes: no
- storage format changes: no
- interface changes:
  - add IServletResponse.notifyChannelInactive()

Change-Id: I40156538d62a3c06b9ccc14338c3f554921a12b8
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2579
Sonar-Qube: Jenkins <je...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Contrib: Jenkins <je...@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Murtadha Hubail <mh...@apache.org>


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

Branch: refs/heads/release-0.9.4-pre-rc
Commit: e20c7eea498263f92267f4cbc39ad9372006ff6c
Parents: 2a773fe
Author: Till Westmann <ti...@apache.org>
Authored: Mon Apr 9 18:56:45 2018 -0700
Committer: Till Westmann <ti...@apache.org>
Committed: Mon Apr 9 21:06:31 2018 -0700

----------------------------------------------------------------------
 .../hyracks/http/api/IServletResponse.java      |  8 ++++--
 .../http/server/ChunkedNettyOutputStream.java   | 10 ++-----
 .../hyracks/http/server/ChunkedResponse.java    |  5 ++++
 .../hyracks/http/server/FullResponse.java       |  6 ++++
 .../hyracks/http/server/HttpRequestHandler.java |  4 +++
 .../hyracks/http/server/HttpServerHandler.java  | 30 ++++++++++++++------
 6 files changed, 45 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e20c7eea/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/api/IServletResponse.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/api/IServletResponse.java b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/api/IServletResponse.java
index 1a7c65f..38f2d23 100644
--- a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/api/IServletResponse.java
+++ b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/api/IServletResponse.java
@@ -78,8 +78,12 @@ public interface IServletResponse extends Closeable {
     ChannelFuture lastContentFuture() throws IOException;
 
     /**
-     * Notifies the response that the channel has become writable
-     * became writable or unwritable. Used for flow control
+     * Notifies the response that the channel has become writable. Used for flow control
      */
     void notifyChannelWritable();
+
+    /**
+     * Notifies the response that the channel has become inactive.
+     */
+    void notifyChannelInactive();
 }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e20c7eea/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/ChunkedNettyOutputStream.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/ChunkedNettyOutputStream.java b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/ChunkedNettyOutputStream.java
index d5f81e5..d4f1b3d 100644
--- a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/ChunkedNettyOutputStream.java
+++ b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/ChunkedNettyOutputStream.java
@@ -43,12 +43,6 @@ public class ChunkedNettyOutputStream extends OutputStream {
         this.response = response;
         this.ctx = ctx;
         buffer = ctx.alloc().buffer(chunkSize);
-        // register listener for channel closed
-        ctx.channel().closeFuture().addListener(futureListener -> {
-            synchronized (ChunkedNettyOutputStream.this) {
-                ChunkedNettyOutputStream.this.notifyAll();
-            }
-        });
     }
 
     @Override
@@ -128,8 +122,8 @@ public class ChunkedNettyOutputStream extends OutputStream {
     private synchronized void ensureWritable() throws IOException {
         while (!ctx.channel().isWritable()) {
             try {
-                if (!ctx.channel().isOpen()) {
-                    throw new IOException("Closed channel");
+                if (!ctx.channel().isActive()) {
+                    throw new IOException("Inactive channel");
                 }
                 wait();
             } catch (InterruptedException e) {

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e20c7eea/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/ChunkedResponse.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/ChunkedResponse.java b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/ChunkedResponse.java
index 323a463..5a43d25 100644
--- a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/ChunkedResponse.java
+++ b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/ChunkedResponse.java
@@ -187,4 +187,9 @@ public class ChunkedResponse implements IServletResponse {
     public void notifyChannelWritable() {
         outputStream.resume();
     }
+
+    @Override
+    public void notifyChannelInactive() {
+        outputStream.resume();
+    }
 }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e20c7eea/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/FullResponse.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/FullResponse.java b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/FullResponse.java
index 598048e..90e33b6 100644
--- a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/FullResponse.java
+++ b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/FullResponse.java
@@ -105,4 +105,10 @@ public class FullResponse implements IServletResponse {
         // Do nothing.
         // This response is sent as a single piece
     }
+
+    @Override
+    public void notifyChannelInactive() {
+        // Do nothing.
+        // This response is sent as a single piece
+    }
 }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e20c7eea/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpRequestHandler.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpRequestHandler.java b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpRequestHandler.java
index bf8e629..65a082c 100644
--- a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpRequestHandler.java
+++ b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpRequestHandler.java
@@ -82,6 +82,10 @@ public class HttpRequestHandler implements Callable<Void> {
         response.notifyChannelWritable();
     }
 
+    public void notifyChannelInactive() {
+        response.notifyChannelInactive();
+    }
+
     public void reject() throws IOException {
         try {
             response.setStatus(HttpResponseStatus.SERVICE_UNAVAILABLE);

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e20c7eea/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpServerHandler.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpServerHandler.java b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpServerHandler.java
index 2787b30..7b3d18a 100644
--- a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpServerHandler.java
+++ b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpServerHandler.java
@@ -44,6 +44,9 @@ public class HttpServerHandler<T extends HttpServer> extends SimpleChannelInboun
     protected final T server;
     protected final int chunkSize;
     protected HttpRequestHandler handler;
+    protected IChannelClosedHandler closeHandler;
+    protected Future<Void> task;
+    protected IServlet servlet;
 
     public HttpServerHandler(T server, int chunkSize) {
         this.server = server;
@@ -64,10 +67,24 @@ public class HttpServerHandler<T extends HttpServer> extends SimpleChannelInboun
     }
 
     @Override
+    public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+        if (handler != null) {
+            handler.notifyChannelInactive();
+        }
+        if (closeHandler != null) {
+            closeHandler.channelClosed(server, servlet, task);
+        }
+        super.channelInactive(ctx);
+    }
+
+    @Override
     protected void channelRead0(ChannelHandlerContext ctx, Object msg) {
         FullHttpRequest request = (FullHttpRequest) msg;
+        handler = null;
+        task = null;
+        closeHandler = null;
         try {
-            IServlet servlet = server.getServlet(request);
+            servlet = server.getServlet(request);
             if (servlet == null) {
                 handleServletNotFound(ctx, request);
             } else {
@@ -94,16 +111,13 @@ public class HttpServerHandler<T extends HttpServer> extends SimpleChannelInboun
             return;
         }
         handler = new HttpRequestHandler(ctx, servlet, servletRequest, chunkSize);
-        submit(ctx, servlet);
+        submit(servlet);
     }
 
-    private void submit(ChannelHandlerContext ctx, IServlet servlet) throws IOException {
+    private void submit(IServlet servlet) throws IOException {
         try {
-            Future<Void> task = server.getExecutor(handler).submit(handler);
-            final IChannelClosedHandler closeHandler = servlet.getChannelClosedHandler(server);
-            if (closeHandler != null) {
-                ctx.channel().closeFuture().addListener(future -> closeHandler.channelClosed(server, servlet, task));
-            }
+            task = server.getExecutor(handler).submit(handler);
+            closeHandler = servlet.getChannelClosedHandler(server);
         } catch (RejectedExecutionException e) { // NOSONAR
             LOGGER.log(Level.WARN, "Request rejected by server executor service. " + e.getMessage());
             handler.reject();


[05/43] asterixdb git commit: [NO ISSUE][LIC] Licensing audit / fixes

Posted by im...@apache.org.
[NO ISSUE][LIC] Licensing audit / fixes

- Add ability to annotate supplemental model with verified assertions
- Reduce severity on certain WARNINGs to INFOs when the condition is
  matched against a verified assertion
- Fix license for slf4j-api
- Add assertions for a number of components, to correct the following warnings:

[WARNING] license list for org.slf4j:slf4j-api:1.8.0-alpha2 changed with supplemental model; was: [http://www.opensource.org/licenses/mit-license.php], now: [http://www.slf4j.org/license.html]
[WARNING] No NOTICE file found for com.fasterxml.jackson.core:jackson-annotations:2.8.4
[WARNING] No NOTICE file found for org.slf4j:slf4j-api:1.8.0-alpha2
[WARNING] No NOTICE file found for org.ini4j:ini4j:0.5.4
[WARNING] No NOTICE file found for io.netty:netty-all:4.1.6.Final
[WARNING] No NOTICE file found for args4j:args4j:2.33
[WARNING] No NOTICE file found for com.google.guava:guava:18.0
[WARNING] No LICENSE file found for org.slf4j:slf4j-api:1.8.0-alpha2
[WARNING] No LICENSE file found for org.ini4j:ini4j:0.5.4
[WARNING] No LICENSE file found for io.netty:netty-all:4.1.6.Final
[WARNING] No LICENSE file found for com.google.guava:guava:18.0
[WARNING] Using license other than from within artifact: io.netty:netty-all:4.1.6.Final
[WARNING] Using license other than from within artifact: com.google.guava:guava:18.0
[WARNING] Using license other than from within artifact: org.ini4j:ini4j:0.5.4
[WARNING] Using license other than from within artifact: org.slf4j:slf4j-api:1.8.0-alpha2

Change-Id: I9dcd1e212827845c972827e479b7a87e9f6c22ae
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2592
Reviewed-by: Michael Blow <mb...@apache.org>
Reviewed-by: Murtadha Hubail <mh...@apache.org>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>


Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/6406179b
Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/6406179b
Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/6406179b

Branch: refs/heads/release-0.9.4-pre-rc
Commit: 6406179b4ebf5633dde798bfef652b2ad83039e3
Parents: 4ef1f25
Author: Michael Blow <mb...@apache.org>
Authored: Fri Apr 13 21:13:44 2018 -0400
Committer: Michael Blow <mb...@apache.org>
Committed: Fri Apr 13 19:11:24 2018 -0700

----------------------------------------------------------------------
 asterixdb/pom.xml                               |  2 +-
 .../appended-resources/supplemental-models.xml  | 65 +++++++++++++++--
 ....com_qos-ch_slf4j_v_1.8.0-alpha2_LICENSE.txt | 21 ++++++
 .../content/www.slf4j.org_license.html.txt      | 21 ------
 .../license-automation-plugin/pom.xml           |  5 ++
 .../hyracks/maven/license/GenerateFileMojo.java | 30 +++++---
 .../hyracks/maven/license/LicenseMojo.java      | 41 +++++++++--
 .../hyracks/maven/license/LicenseSpec.java      |  3 +
 .../hyracks/maven/license/LicenseUtil.java      |  5 ++
 .../hyracks/maven/license/ProjectFlag.java      | 74 ++++++++++++++++++++
 hyracks-fullstack/hyracks/pom.xml               |  5 ++
 11 files changed, 232 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/6406179b/asterixdb/pom.xml
----------------------------------------------------------------------
diff --git a/asterixdb/pom.xml b/asterixdb/pom.xml
index d1aed7c..6e87cf0 100644
--- a/asterixdb/pom.xml
+++ b/asterixdb/pom.xml
@@ -532,7 +532,7 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-plugin-plugin</artifactId>
-          <version>3.5</version>
+          <version>3.5.1</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/6406179b/asterixdb/src/main/appended-resources/supplemental-models.xml
----------------------------------------------------------------------
diff --git a/asterixdb/src/main/appended-resources/supplemental-models.xml b/asterixdb/src/main/appended-resources/supplemental-models.xml
index aa57859..6fdbb91 100644
--- a/asterixdb/src/main/appended-resources/supplemental-models.xml
+++ b/asterixdb/src/main/appended-resources/supplemental-models.xml
@@ -31,17 +31,17 @@
     <project>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
-      <name>SLF4J API Module</name>
-      <organization>
-        <name>QOS.ch</name>
-        <url>http://www.qos.ch</url>
-      </organization>
       <licenses>
         <license>
           <name>an MIT-style license</name>
-          <url>http://www.slf4j.org/license.html</url>
+          <url>https://raw.githubusercontent.com/qos-ch/slf4j/v_1.8.0-alpha2/LICENSE.txt</url>
         </license>
       </licenses>
+      <properties>
+        <license.ignoreMissingEmbeddedNotice>1.8.0-alpha2</license.ignoreMissingEmbeddedNotice>
+        <license.ignoreMissingEmbeddedLicense>1.8.0-alpha2</license.ignoreMissingEmbeddedLicense>
+        <license.ignoreLicenseOverride>1.8.0-alpha2</license.ignoreLicenseOverride>
+      </properties>
     </project>
   </supplement>
   <supplement>
@@ -154,4 +154,57 @@
       </licenses>
     </project>
   </supplement>
+  <supplement>
+    <project>
+      <groupId>io.netty</groupId>
+      <artifactId>netty-all</artifactId>
+      <properties>
+        <!-- netty is ALv2, and does not contain any embedded LICENSE or NOTICE file -->
+        <license.ignoreMissingEmbeddedLicense>4.1.6.Final</license.ignoreMissingEmbeddedLicense>
+        <license.ignoreMissingEmbeddedNotice>4.1.6.Final</license.ignoreMissingEmbeddedNotice>
+      </properties>
+    </project>
+  </supplement>
+  <supplement>
+    <project>
+      <groupId>com.google.guava</groupId>
+      <artifactId>guava</artifactId>
+      <properties>
+        <!-- guava is ALv2, and does not contain any embedded LICENSE or NOTICE file -->
+        <license.ignoreMissingEmbeddedNotice>18.0</license.ignoreMissingEmbeddedNotice>
+        <license.ignoreMissingEmbeddedLicense>18.0</license.ignoreMissingEmbeddedLicense>
+      </properties>
+    </project>
+  </supplement>
+  <supplement>
+    <project>
+      <groupId>org.ini4j</groupId>
+      <artifactId>ini4j</artifactId>
+      <properties>
+        <!-- ini4j is ALv2, and does not contain any embedded LICENSE or NOTICE file -->
+        <license.ignoreMissingEmbeddedNotice>0.5.4</license.ignoreMissingEmbeddedNotice>
+        <license.ignoreMissingEmbeddedLicense>0.5.4</license.ignoreMissingEmbeddedLicense>
+      </properties>
+    </project>
+  </supplement>
+  <supplement>
+    <project>
+      <groupId>args4j</groupId>
+      <artifactId>args4j</artifactId>
+      <properties>
+        <!-- args4j does not provide an embedded NOTICE file -->
+        <license.ignoreMissingEmbeddedNotice>2.33</license.ignoreMissingEmbeddedNotice>
+      </properties>
+    </project>
+  </supplement>
+  <supplement>
+    <project>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-annotations</artifactId>
+      <properties>
+        <!-- jackson-annotation does not provide an embedded NOTICE file -->
+        <license.ignoreMissingEmbeddedNotice>2.8.4</license.ignoreMissingEmbeddedNotice>
+      </properties>
+    </project>
+  </supplement>
 </supplementalDataModels>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/6406179b/asterixdb/src/main/licenses/content/raw.githubusercontent.com_qos-ch_slf4j_v_1.8.0-alpha2_LICENSE.txt
----------------------------------------------------------------------
diff --git a/asterixdb/src/main/licenses/content/raw.githubusercontent.com_qos-ch_slf4j_v_1.8.0-alpha2_LICENSE.txt b/asterixdb/src/main/licenses/content/raw.githubusercontent.com_qos-ch_slf4j_v_1.8.0-alpha2_LICENSE.txt
new file mode 100644
index 0000000..744377c
--- /dev/null
+++ b/asterixdb/src/main/licenses/content/raw.githubusercontent.com_qos-ch_slf4j_v_1.8.0-alpha2_LICENSE.txt
@@ -0,0 +1,21 @@
+Copyright (c) 2004-2017 QOS.ch
+All rights reserved.
+
+Permission is hereby granted, free  of charge, to any person obtaining
+a  copy  of this  software  and  associated  documentation files  (the
+"Software"), to  deal in  the Software without  restriction, including
+without limitation  the rights to  use, copy, modify,  merge, publish,
+distribute,  sublicense, and/or sell  copies of  the Software,  and to
+permit persons to whom the Software  is furnished to do so, subject to
+the following conditions:
+
+The  above  copyright  notice  and  this permission  notice  shall  be
+included in all copies or substantial portions of the Software.
+
+THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
+EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
+MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/6406179b/asterixdb/src/main/licenses/content/www.slf4j.org_license.html.txt
----------------------------------------------------------------------
diff --git a/asterixdb/src/main/licenses/content/www.slf4j.org_license.html.txt b/asterixdb/src/main/licenses/content/www.slf4j.org_license.html.txt
deleted file mode 100644
index 05ee024..0000000
--- a/asterixdb/src/main/licenses/content/www.slf4j.org_license.html.txt
+++ /dev/null
@@ -1,21 +0,0 @@
- Copyright (c) 2004-2013 QOS.ch
- All rights reserved.
-
- Permission is hereby granted, free  of charge, to any person obtaining
- a  copy  of this  software  and  associated  documentation files  (the
- "Software"), to  deal in  the Software without  restriction, including
- without limitation  the rights to  use, copy, modify,  merge, publish,
- distribute,  sublicense, and/or sell  copies of  the Software,  and to
- permit persons to whom the Software  is furnished to do so, subject to
- the following conditions:
-
- The  above  copyright  notice  and  this permission  notice  shall  be
- included in all copies or substantial portions of the Software.
-
- THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
- EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
- MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/6406179b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/pom.xml
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/pom.xml b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/pom.xml
index 958d2ed..bc7e612 100644
--- a/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/pom.xml
+++ b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/pom.xml
@@ -95,6 +95,11 @@
       <artifactId>maven-compat</artifactId>
       <version>3.3.9</version>
     </dependency>
+    <dependency>
+      <groupId>org.apache.hyracks</groupId>
+      <artifactId>hyracks-util</artifactId>
+      <version>${project.version}</version>
+    </dependency>
   </dependencies>
 
 </project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/6406179b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/GenerateFileMojo.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/GenerateFileMojo.java b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/GenerateFileMojo.java
index e8625fc..22646c5 100644
--- a/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/GenerateFileMojo.java
+++ b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/GenerateFileMojo.java
@@ -18,6 +18,11 @@
  */
 package org.apache.hyracks.maven.license;
 
+import static org.apache.hyracks.maven.license.ProjectFlag.ALTERNATE_LICENSE_FILE;
+import static org.apache.hyracks.maven.license.ProjectFlag.ALTERNATE_NOTICE_FILE;
+import static org.apache.hyracks.maven.license.ProjectFlag.IGNORE_MISSING_EMBEDDED_LICENSE;
+import static org.apache.hyracks.maven.license.ProjectFlag.IGNORE_MISSING_EMBEDDED_NOTICE;
+
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
@@ -248,7 +253,9 @@ public class GenerateFileMojo extends LicenseMojo {
             for (Project p : lps.getProjects()) {
                 String licenseText = p.getLicenseText();
                 if (licenseText == null) {
-                    getLog().warn("Using license other than from within artifact: " + p.gav());
+                    warnUnlessFlag(p.gav(), IGNORE_MISSING_EMBEDDED_LICENSE,
+                            "Using license other than from within artifact: " + p.gav() + " (" + lps.getLicense()
+                                    + ")");
                     licenseText = resolveLicenseContent(lps.getLicense(), false);
                 }
                 LicenseSpec spec = lps.getLicense();
@@ -307,18 +314,21 @@ public class GenerateFileMojo extends LicenseMojo {
     }
 
     private void resolveNoticeFiles() throws MojoExecutionException, IOException {
-        resolveArtifactFiles("NOTICE", entry -> entry.getName().matches("(.*/|^)" + "NOTICE" + "(.txt)?"),
-                Project::setNoticeText,
+        // TODO(mblow): this will match *any* NOTICE[.txt] file located within the artifact- this seems way too liberal
+        resolveArtifactFiles("NOTICE", IGNORE_MISSING_EMBEDDED_NOTICE, ALTERNATE_NOTICE_FILE,
+                entry -> entry.getName().matches("(.*/|^)" + "NOTICE" + "(.txt)?"), Project::setNoticeText,
                 text -> stripFoundationAssertionFromNotices ? FOUNDATION_PATTERN.matcher(text).replaceAll("") : text);
     }
 
     private void resolveLicenseFiles() throws MojoExecutionException, IOException {
-        resolveArtifactFiles("LICENSE", entry -> entry.getName().matches("(.*/|^)" + "LICENSE" + "(.txt)?"),
-                Project::setLicenseText, UnaryOperator.identity());
+        // TODO(mblow): this will match *any* LICENSE[.txt] file located within the artifact- this seems way too liberal
+        resolveArtifactFiles("LICENSE", IGNORE_MISSING_EMBEDDED_LICENSE, ALTERNATE_LICENSE_FILE,
+                entry -> entry.getName().matches("(.*/|^)" + "LICENSE" + "(.txt)?"), Project::setLicenseText,
+                UnaryOperator.identity());
     }
 
-    private void resolveArtifactFiles(final String name, Predicate<JarEntry> filter,
-            BiConsumer<Project, String> consumer, UnaryOperator<String> contentTransformer)
+    private void resolveArtifactFiles(final String name, ProjectFlag ignoreFlag, ProjectFlag alternateFilenameFlag,
+            Predicate<JarEntry> filter, BiConsumer<Project, String> consumer, UnaryOperator<String> contentTransformer)
             throws MojoExecutionException, IOException {
         for (Project p : getProjects()) {
             File artifactFile = new File(p.getArtifactPath());
@@ -328,10 +338,14 @@ public class GenerateFileMojo extends LicenseMojo {
                 getLog().info("Skipping unknown artifact file type: " + artifactFile);
                 continue;
             }
+            String alternateFilename = (String) getProjectFlag(p.gav(), alternateFilenameFlag);
+            if (alternateFilename != null) {
+                filter = entry -> entry.getName().equals(alternateFilename);
+            }
             try (JarFile jarFile = new JarFile(artifactFile)) {
                 SortedMap<String, JarEntry> matches = gatherMatchingEntries(jarFile, filter);
                 if (matches.isEmpty()) {
-                    getLog().warn("No " + name + " file found for " + p.gav());
+                    warnUnlessFlag(p, ignoreFlag, "No " + name + " file found for " + p.gav());
                 } else {
                     if (matches.size() > 1) {
                         getLog().warn("Multiple " + name + " files found for " + p.gav() + ": " + matches.keySet()

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/6406179b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseMojo.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseMojo.java b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseMojo.java
index 97afffb..4466d20 100644
--- a/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseMojo.java
+++ b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseMojo.java
@@ -18,10 +18,14 @@
  */
 package org.apache.hyracks.maven.license;
 
+import static org.apache.hyracks.maven.license.LicenseUtil.toGav;
+import static org.apache.hyracks.maven.license.ProjectFlag.IGNORE_LICENSE_OVERRIDE;
+
 import java.io.File;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -55,6 +59,7 @@ import org.apache.maven.project.inheritance.ModelInheritanceAssembler;
 
 public abstract class LicenseMojo extends AbstractMojo {
 
+    private static final String VERIFIED_VERSIONS_PROP = "license-automation-plugin.verifiedVersions";
     @Parameter
     protected List<Override> overrides = new ArrayList<>();
 
@@ -108,6 +113,7 @@ public abstract class LicenseMojo extends AbstractMojo {
 
     Map<String, LicenseSpec> urlToLicenseMap = new HashMap<>();
     Map<String, LicensedProjects> licenseMap = new TreeMap<>();
+    private Map<Pair<String, ProjectFlag>, Object> projectFlags = new HashMap<>();
 
     protected Map<String, LicensedProjects> getLicenseMap() {
         return licenseMap;
@@ -283,6 +289,7 @@ public abstract class LicenseMojo extends AbstractMojo {
 
             Model supplement = supplementModels
                     .get(SupplementalModelHelper.generateSupplementMapKey(depObj.getGroupId(), depObj.getArtifactId()));
+            registerVerified(depProj, supplement);
             if (supplement != null) {
                 Model merged = SupplementalModelHelper.mergeModels(assembler, depProj.getModel(), supplement);
                 Set<String> origLicenses =
@@ -290,8 +297,8 @@ public abstract class LicenseMojo extends AbstractMojo {
                 Set<String> newLicenses =
                         merged.getLicenses().stream().map(License::getUrl).collect(Collectors.toSet());
                 if (!origLicenses.equals(newLicenses)) {
-                    getLog().warn("license list for " + toGav(depProj) + " changed with supplemental model; was: "
-                            + origLicenses + ", now: " + newLicenses);
+                    warnUnlessFlag(depProj, IGNORE_LICENSE_OVERRIDE, "license list for " + toGav(depProj)
+                            + " changed with supplemental model; was: " + origLicenses + ", now: " + newLicenses);
                 }
                 depProj = new MavenProject(merged);
                 depProj.setArtifact(depObj);
@@ -303,8 +310,34 @@ public abstract class LicenseMojo extends AbstractMojo {
         return depProj;
     }
 
-    private String toGav(MavenProject dep) {
-        return dep.getGroupId() + ":" + dep.getArtifactId() + ":" + dep.getVersion();
+    protected void warnUnlessFlag(MavenProject depProj, ProjectFlag flag, String message) {
+        warnUnlessFlag(toGav(depProj), flag, message);
+    }
+
+    protected void warnUnlessFlag(Project depProj, ProjectFlag flag, String message) {
+        warnUnlessFlag(depProj.gav(), flag, message);
+    }
+
+    protected void warnUnlessFlag(String gav, ProjectFlag flag, String message) {
+        if (projectFlags.containsKey(Pair.of(gav, flag))) {
+            getLog().info(message);
+        } else {
+            getLog().warn(message);
+        }
+    }
+
+    public Map<Pair<String, ProjectFlag>, Object> getProjectFlags() {
+        return projectFlags;
+    }
+
+    public Object getProjectFlag(String gav, ProjectFlag flag) {
+        return projectFlags.get(Pair.of(gav, flag));
+    }
+
+    private void registerVerified(MavenProject depObj, Model supplement) {
+        if (supplement != null) {
+            Arrays.stream(ProjectFlag.values()).forEach(flag -> flag.visit(depObj, supplement.getProperties(), this));
+        }
     }
 
     protected List<Pattern> compileExcludePatterns() {

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/6406179b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseSpec.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseSpec.java b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseSpec.java
index cd955d9..5ac2392 100644
--- a/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseSpec.java
+++ b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseSpec.java
@@ -111,4 +111,7 @@ public class LicenseSpec {
         this.displayName = displayName;
     }
 
+    public String toString() {
+        return getDisplayName() != null ? getDisplayName() : getUrl();
+    }
 }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/6406179b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseUtil.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseUtil.java b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseUtil.java
index 5ea768e..2a34fc7 100644
--- a/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseUtil.java
+++ b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseUtil.java
@@ -30,6 +30,7 @@ import java.nio.charset.StandardCharsets;
 
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.Pair;
+import org.apache.maven.project.MavenProject;
 
 public class LicenseUtil {
 
@@ -145,4 +146,8 @@ public class LicenseUtil {
         }
         return new ImmutablePair<>(freeSpaces, maxLineLength);
     }
+
+    static String toGav(MavenProject dep) {
+        return dep.getGroupId() + ":" + dep.getArtifactId() + ":" + dep.getVersion();
+    }
 }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/6406179b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/ProjectFlag.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/ProjectFlag.java b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/ProjectFlag.java
new file mode 100644
index 0000000..28b3bbc
--- /dev/null
+++ b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/ProjectFlag.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.hyracks.maven.license;
+
+import static org.apache.hyracks.maven.license.LicenseUtil.toGav;
+
+import java.util.Properties;
+import java.util.stream.Stream;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.Pair;
+import org.apache.hyracks.util.StringUtil;
+import org.apache.maven.project.MavenProject;
+
+enum ProjectFlag {
+    IGNORE_MISSING_EMBEDDED_LICENSE,
+    IGNORE_MISSING_EMBEDDED_NOTICE,
+    IGNORE_LICENSE_OVERRIDE,
+    ALTERNATE_LICENSE_FILE,
+    ALTERNATE_NOTICE_FILE;
+
+    String propName() {
+        return "license." + StringUtil.toCamelCase(name());
+    }
+
+    void visit(MavenProject depObj, Properties properties, LicenseMojo licenseMojo) {
+        String value = properties.getProperty(propName());
+        if (value == null) {
+            return;
+        }
+        switch (this) {
+            case IGNORE_MISSING_EMBEDDED_LICENSE:
+            case IGNORE_MISSING_EMBEDDED_NOTICE:
+            case IGNORE_LICENSE_OVERRIDE:
+                if (Stream.of(StringUtils.split(value, ",")).anyMatch(depObj.getVersion()::equals)) {
+                    licenseMojo.getProjectFlags().put(Pair.of(toGav(depObj), this), Boolean.TRUE);
+                } else {
+                    licenseMojo.getLog().info(propName() + " defined on versions that *do not* match: " + value
+                            + " for " + toGav(depObj));
+                }
+                break;
+            case ALTERNATE_LICENSE_FILE:
+            case ALTERNATE_NOTICE_FILE:
+                for (String spec : StringUtils.split(value, ",")) {
+                    String[] specSplit = StringUtils.split(spec, ":");
+                    if (specSplit.length != 2) {
+                        throw new IllegalArgumentException(spec);
+                    }
+                    if (specSplit[0].equals(depObj.getVersion())) {
+                        licenseMojo.getProjectFlags().put(Pair.of(toGav(depObj), this), specSplit[1]);
+                    }
+                }
+                break;
+            default:
+                throw new IllegalStateException("NYI: " + this);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/6406179b/hyracks-fullstack/hyracks/pom.xml
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/pom.xml b/hyracks-fullstack/hyracks/pom.xml
index 8d6a45f..7bef19e 100644
--- a/hyracks-fullstack/hyracks/pom.xml
+++ b/hyracks-fullstack/hyracks/pom.xml
@@ -32,6 +32,11 @@
   <build>
     <pluginManagement>
       <plugins>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-plugin-plugin</artifactId>
+          <version>3.5.1</version>
+        </plugin>
         <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
         <plugin>
           <groupId>org.eclipse.m2e</groupId>


[02/43] asterixdb git commit: [ASTERIXDB-2347][DOC] Update Configurable Parameters

Posted by im...@apache.org.
[ASTERIXDB-2347][DOC] Update Configurable Parameters

- user model changes: no
- storage format changes: no
- interface changes: no

Details:
- Update added/removed configurable parameters and
  fix defaults.

Change-Id: I92c6c1493e8ba5c76671169529653b9141ee748c
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2583
Sonar-Qube: Jenkins <je...@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Contrib: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Michael Blow <mb...@apache.org>


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

Branch: refs/heads/release-0.9.4-pre-rc
Commit: ce86b6e87d80b6d88679e46a94b6d0f2309e31d3
Parents: e20c7ee
Author: Murtadha Hubail <mh...@apache.org>
Authored: Wed Apr 11 07:28:46 2018 +0300
Committer: Murtadha Hubail <mh...@apache.org>
Committed: Wed Apr 11 15:48:38 2018 -0700

----------------------------------------------------------------------
 asterixdb/asterix-doc/src/site/markdown/ncservice.md        | 9 +++++----
 .../apache/hyracks/control/common/controllers/CCConfig.java | 3 ++-
 2 files changed, 7 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ce86b6e8/asterixdb/asterix-doc/src/site/markdown/ncservice.md
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-doc/src/site/markdown/ncservice.md b/asterixdb/asterix-doc/src/site/markdown/ncservice.md
index 1d174e9..d9df232 100644
--- a/asterixdb/asterix-doc/src/site/markdown/ncservice.md
+++ b/asterixdb/asterix-doc/src/site/markdown/ncservice.md
@@ -270,6 +270,7 @@ The following parameters are for the master process, under the "[cc]" section.
 |   cc    | cluster.topology                          | Sets the XML file that defines the cluster topology | &lt;undefined&gt; |
 |   cc    | console.listen.address                    | Sets the listen address for the Cluster Controller | same as address |
 |   cc    | console.listen.port                       | Sets the http port for the Cluster Controller) | 16001 |
+|   cc    | cores.multiplier                          | The factor to multiply by the number of cores to determine maximum query concurrent execution level | 3 |
 |   cc    | heartbeat.max.misses                      | Sets the maximum number of missed heartbeats before a node is marked as dead | 5 |
 |   cc    | heartbeat.period                          | Sets the time duration between two heartbeats from each node controller in milliseconds | 10000 |
 |   cc    | job.history.size                          | Limits the number of historical jobs remembered by the system to the specified value | 10 |
@@ -324,13 +325,12 @@ The following parameters for slave processes, under "[nc]" sections.
 |   nc    | result.ttl                                | Limits the amount of time results for asynchronous jobs should be retained by the system in milliseconds | 86400000 |
 |   nc    | storage.buffercache.maxopenfiles          | The maximum number of open files in the buffer cache | 2147483647 |
 |   nc    | storage.buffercache.pagesize              | The page size in bytes for pages in the buffer cache | 131072 (128 kB) |
-|   nc    | storage.buffercache.size                  | The size of memory allocated to the disk buffer cache.  The value should be a multiple of the buffer cache page size. | 715915264 (682.75 MB) |
+|   nc    | storage.buffercache.size                  | The size of memory allocated to the disk buffer cache.  The value should be a multiple of the buffer cache page size. | 1/4 of the JVM allocated memory |
 |   nc    | storage.lsm.bloomfilter.falsepositiverate | The maximum acceptable false positive rate for bloom filters associated with LSM indexes | 0.01 |
-|   nc    | storage.memorycomponent.globalbudget      | The size of memory allocated to the memory components.  The value should be a multiple of the memory component page size | 715915264 (682.75 MB) |
+|   nc    | storage.memorycomponent.globalbudget      | The size of memory allocated to the memory components.  The value should be a multiple of the memory component page size | 1/4 of the JVM allocated memory |
 |   nc    | storage.memorycomponent.numcomponents     | The number of memory components to be used per lsm index | 2 |
-|   nc    | storage.memorycomponent.numpages          | The number of pages to allocate for a memory component.  This budget is shared by all the memory components of the primary index and all its secondary indexes across all I/O devices on a node.  Note: in-memory components usually has fill factor of 75% since the pages are 75% full and the remaining 25% is un-utilized | 1/16th of the storage.memorycomponent.globalbudget value |
 |   nc    | storage.memorycomponent.pagesize          | The page size in bytes for pages allocated to memory components | 131072 (128 kB) |
-|   nc    | storage.metadata.memorycomponent.numpages | The number of pages to allocate for a metadata memory component | 1/64th of the storage.memorycomponent.globalbudget value or 256, whichever is larger |
+|   nc    | storage.metadata.memorycomponent.numpages | The number of pages to allocate for a metadata memory component | 8 |
 |   nc    | storage.subdir                            | The subdirectory name under each iodevice used for storage | storage |
 |   nc    | txn.log.dir                               | The directory where transaction logs should be stored | ${java.io.tmpdir}/asterixdb/txn-log |
 
@@ -360,6 +360,7 @@ The following parameters are configured under the "[common]" section.
 | common  | replication.log.buffer.pagesize           | The size in bytes of each log buffer page | 131072 (128 kB) |
 | common  | replication.max.remote.recovery.attempts  | The maximum number of times to attempt to recover from a replica on failure before giving up | 5 |
 | common  | replication.timeout                       | The time in seconds to timeout when trying to contact a replica, before assuming it is dead | 15 |
+| common  | storage.max.active.writable.datasets      | The maximum number of datasets that can be concurrently modified | 8 |
 | common  | txn.commitprofiler.enabled                | Enable output of commit profiler logs | false |
 | common  | txn.commitprofiler.reportinterval         | Interval (in seconds) to report commit profiler logs | 5 |
 | common  | txn.job.recovery.memorysize               | The memory budget (in bytes) used for recovery | 67108864 (64 MB) |

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ce86b6e8/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/CCConfig.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/CCConfig.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/CCConfig.java
index 13e4504..889e140 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/CCConfig.java
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/CCConfig.java
@@ -163,7 +163,8 @@ public class CCConfig extends ControllerConfig {
                     return "A flag indicating if runtime should enforce frame writer protocol and detect "
                             + "bad behaving operators";
                 case CORES_MULTIPLIER:
-                    return "Specifies the multiplier to use on the cluster available cores";
+                    return "the factor to multiply by the number of cores to determine maximum query concurrent "
+                            + "execution level";
                 case CONTROLLER_ID:
                     return "The 16-bit (0-65535) id of this Cluster Controller";
                 default:


[23/43] asterixdb git commit: [ASTERIXDB-2318] Build dashboard in mvn

Posted by im...@apache.org.
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/shared/services/async-metadata.service.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/shared/services/async-metadata.service.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/services/async-metadata.service.ts
new file mode 100755
index 0000000..8492a54
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/shared/services/async-metadata.service.ts
@@ -0,0 +1,120 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Injectable, ApplicationRef  } from '@angular/core';
+import { Store } from '@ngrx/store';
+import { Observable } from "rxjs/Observable";
+import 'rxjs/add/operator/map';
+import 'rxjs/add/observable/from';
+import * as dataverseActions from '../../shared/actions/dataverse.actions'
+import * as datasetActions from '../../shared/actions/dataset.actions'
+import * as datatypesActions from '../../shared/actions/datatype.actions'
+import * as indexesActions from '../../shared/actions/index.actions'
+import * as metadataActions from '../../shared/actions/metadata.actions'
+
+/*
+	Metadata service watch any changes in Dataverses, Datasets, Datatypes, indexes
+	state in store and builds a tree state structure with datasets->dataverse->datatype->index relationship
+*/
+@Injectable()
+export class MetadataService {
+
+	/* Arrays to expose updated dataverses, datasets, datatypes,
+	indexes collections*/
+	dv = [];
+	ds = [];
+	dt = [];
+	idx = [];
+
+	/*
+	* contructor will initialize the store state watchers
+	*/
+	constructor(private store: Store<any>, private ref: ApplicationRef ) {
+
+		/* Watching changes in dataverse collection */
+		this.store.select(s => s.dataverse.dataverses).subscribe((data: any) => {
+			if (data.results) {
+				this.dv = []
+				for (let i = 0; i < data.results.length; i++) {
+						let node = { id: 0, DataverseName: "", Datasets:[] }
+						node.id = i
+						node.DataverseName = data.results[i]['DataverseName']
+						this.dv.push(node)
+				}
+				this.updateMetadataTree();
+			}
+		})
+
+		/* Watching changes in datasets collections */
+		this.store.select(s => s.dataset.datasets).subscribe((data: any) => {
+			if (data.results) {
+				this.ds = data.results;
+				this.updateMetadataTree();
+			}
+		})
+
+		/* Watching changes in datatypes collections */
+		this.store.select(s => s.datatype.datatypes).subscribe((data: any) => {
+			if (data.results) {
+				this.dt = data.results;
+				this.updateMetadataTree();
+			}
+		})
+
+		/* Watching changes in index collections */
+		this.store.select(s => s.index.indexes).subscribe((data: any) => {
+			if (data.results) {
+				this.idx = data.results;
+				this.updateMetadataTree();
+			}
+		})
+	}
+
+	/*
+	*	convenience function to update and return the metadata tree.
+	*/
+  	getMetadataTree(): Observable<any[]> {
+		return Observable.from(this.dv);
+	}
+	  
+  	updateMetadataTree() {
+	for (let i = 0; i < this.dv.length; i++) {
+		// Filling datasets
+		this.dv[i]['Datasets'] = [];
+		for (let j = 0; j < this.ds.length; j++) {
+			if (this.ds[j]['DataverseName'] === this.dv[i]['DataverseName']){
+
+				// Filling datatypes, there is one datatype per dataset
+				this.ds[j]['Datatype'] = [];
+				for (let k = 0; k < this.dt.length; k++) {
+					if (this.dt[k]['DatatypeName'] === this.ds[j]['DatatypeName']){
+						this.ds[j]['Datatype'] = this.dt[k]; // push(this.dt[k])
+					}
+				}
+
+				// Filling indexes
+				this.ds[j]['Indexes'] = [];
+				for (let l = 0; l < this.idx.length; l++) {
+					if (this.idx[l]['DatasetName'] === this.ds[j]['DatasetName']){
+						this.ds[j]['Indexes'].push(this.idx[l])
+					}
+				}
+
+				this.dv[i]['Datasets'].push(this.ds[j])
+			}
+		}
+	}
+
+	this.store.dispatch(new metadataActions.UpdateMetadataTree());
+	}	
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/shared/services/async-query.service.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/shared/services/async-query.service.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/services/async-query.service.ts
new file mode 100755
index 0000000..e37872e
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/shared/services/async-query.service.ts
@@ -0,0 +1,190 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Injectable } from '@angular/core';
+import { HttpClient } from '@angular/common/http';
+import { Store } from '@ngrx/store';
+import { Observable } from "rxjs/Observable";
+import 'rxjs/add/operator/map';
+
+var AsterixRestApiUrl = 'http://localhost:19002/query/service'; 
+//var AsterixRestApiUrl = '/query-service'; 
+
+/*
+* SQL query service using AsterixDB REST API /query/service
+*/
+@Injectable()
+export class SQLService {
+
+	/*
+	* SQLQueryService constructor using
+	* HttpClient from Angular 4
+	*/
+	constructor(private http: HttpClient) {}
+
+ 	/*
+ 	* sends a select sql++ query to return all the dataverses
+	* from AsterixDB Metadata
+ 	*/
+	selectDataverses() : Observable<any[]> {
+		 let query = "SELECT VALUE dv FROM Metadata.`Dataverse` dv"
+		 return this.executeSQLQuery(query);
+  	}
+
+	/*
+	* sends a select sql++ query to return all the datasets
+	* from AsterixDB Metadata
+	*/
+  	selectDatasets() : Observable<any[]> {
+		let query = "SELECT VALUE ds FROM Metadata.`Dataset` ds"
+		return this.executeSQLQuery(query);
+  	}
+
+	/*
+	* sends a select sql++ query to return all the datatypes
+	* from AsterixDB Metadata
+	*/
+  	selectDatatypes() : Observable<any[]> {
+    	let query = "SELECT VALUE dt FROM Metadata.`Datatype` dt"
+		return this.executeSQLQuery(query);
+  	}
+
+	/*
+	* sends a select sql++ query to return all the indexes
+	* from AsterixDB Metadata
+	*/
+  	selectIndexes() : Observable<any[]> {
+    	let query = "SELECT VALUE ix FROM Metadata.`Index` ix"
+		return this.executeSQLQuery(query);
+	}
+
+	/*
+	* creates a sql++ ddl query to create a Dataverse
+	* from AsterixDB Metadata
+	*/
+	createDataverse(dataverse: string) : Observable<any[]> {
+    	let ddlQuery = "CREATE DATAVERSE " + dataverse + ";";
+		return this.executeDDLSQLQuery(ddlQuery);
+	}
+
+	/*
+	* creates a sql++ ddl query to drop a Dataverse
+	* from AsterixDB Metadata
+	*/
+	dropDataverse(dataverse: string) : Observable<any[]> {
+		let ddlQuery = "DROP DATAVERSE " + dataverse; // " IF EXISTS;";
+		return this.executeDDLSQLQuery(ddlQuery);
+	  }
+
+	/*
+	* creates a sql++ ddl query to create a Dataset
+	* from AsterixDB Metadata
+	*/
+	createDataset(dataset: string) : Observable<any[]> {
+		let ddlQuery = "CREATE DATASET " + dataset + ";";
+		return this.executeDDLSQLQuery(ddlQuery);
+	}
+
+	/*
+	* creates a sql++ ddl query to drop a Dataset
+	* from AsterixDB Metadata
+	*/
+	dropDataset(dataset: string) : Observable<any[]> {
+		let ddlQuery = "DROP DATASET " + dataset; //" IF EXISTS;";
+		return this.executeDDLSQLQuery(ddlQuery);
+	}
+
+	/*
+	* creates a sql++ ddl query to create a Datatype
+	* from AsterixDB Metadata
+	*/
+	createDatatype(datatype: string) : Observable<any[]> {
+    	let ddlQuery = "CREATE DATATYPE " + datatype + ";";
+		return this.executeDDLSQLQuery(ddlQuery);
+	}
+
+	/*
+	* creates a sql++ ddl query to drop a Datatype
+	* from AsterixDB Metadata
+	*/
+	dropDatatype(datatype: string) : Observable<any[]> {
+		let ddlQuery = "DROP TYPE " + datatype; //" IF EXISTS;";
+		return this.executeDDLSQLQuery(ddlQuery);
+	}
+
+	/*
+	* creates a sql++ ddl query to create a Index
+	* from AsterixDB Metadata
+	*/
+	createIndex(index: string) : Observable<any[]> {
+		let ddlQuery = "CREATE INDEX " + index + ";";
+		return this.executeDDLSQLQuery(ddlQuery);
+	}
+
+	/*
+	* creates a sql++ ddl query to drop a Index
+	* from AsterixDB Metadata
+	*/
+	dropIndex(index: string) : Observable<any[]> {
+		let ddlQuery = "DROP INDEX " + index; // + " IF EXISTS;";
+		return this.executeDDLSQLQuery(ddlQuery);
+	}
+
+	/*
+	* Executes a sql++ ddl query against AsterixDB
+	* response is a JSON object with following structure:
+		  metrics: Metrics;
+		  requestId: string;
+		  results: any[];
+		  signature: string;
+		  status: string;
+	*/
+	executeDDLSQLQuery(ddlQuery: string): Observable<any[]> {
+    const apiUrl = AsterixRestApiUrl;
+		return this.http.post(apiUrl, {statement: ddlQuery})
+			.map((response: Response) => { return response })
+			.catch((error: any) => this.handleExecuteQueryError(error));
+	}
+
+	/*
+	* Executes a sql++ query against AsterixDB
+	* response is a JSON object with following structure:
+		  metrics: Metrics;
+		  requestId: string;
+		  results: any[];
+		  signature: string;
+		  status: string;
+	*/
+	executeSQLQuery(query: string): Observable<any[]> {
+    const apiUrl = AsterixRestApiUrl;
+		return this.http.post(apiUrl, {statement: query})
+			.map((response: Response) => { return response })
+			.catch((error: any) => this.handleExecuteQueryError(error));
+	}
+
+	/*
+	* AsterixDB query-service API raises HTTP errors if the sql++ query has some
+	* syntax error, or some elements in the query are not found
+	* this function extract the error JSON object with the relevant information
+		response is a JSON object with following structure:
+		  metrics: Metrics;
+		  requestId: string;
+		  errors: any[];
+		  signature: string;
+		  status: string;
+	*/
+	private handleExecuteQueryError(error: any): Promise<any> {
+		console.log(error)
+		return Promise.reject(error.error || error);
+	}
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/assets/asterixdb_tm.png
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/assets/asterixdb_tm.png b/asterixdb/asterix-dashboard/src/node/src/assets/asterixdb_tm.png
new file mode 100755
index 0000000..0fa2ff0
Binary files /dev/null and b/asterixdb/asterix-dashboard/src/node/src/assets/asterixdb_tm.png differ

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/environments/environment.prod.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/environments/environment.prod.ts b/asterixdb/asterix-dashboard/src/node/src/environments/environment.prod.ts
new file mode 100755
index 0000000..ca15503
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/environments/environment.prod.ts
@@ -0,0 +1,16 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+export const environment = {
+  production: true
+};

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/environments/environment.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/environments/environment.ts b/asterixdb/asterix-dashboard/src/node/src/environments/environment.ts
new file mode 100755
index 0000000..2750f0a
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/environments/environment.ts
@@ -0,0 +1,21 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+// The file contents for the current environment will overwrite these during build.
+// The build system defaults to the dev environment which uses `environment.ts`, but if you do
+// `ng build --env=prod` then `environment.prod.ts` will be used instead.
+// The list of which env maps to which file can be found in `.angular-cli.json`.
+
+export const environment = {
+  production: false
+};

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/favicon.ico
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/favicon.ico b/asterixdb/asterix-dashboard/src/node/src/favicon.ico
new file mode 100755
index 0000000..282c28d
Binary files /dev/null and b/asterixdb/asterix-dashboard/src/node/src/favicon.ico differ

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/index.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/index.html b/asterixdb/asterix-dashboard/src/node/src/index.html
new file mode 100755
index 0000000..8dab418
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/index.html
@@ -0,0 +1,30 @@
+<!--/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/-->
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    <title>AsterixDb Administration Console</title>
+    <base href="/">
+    <link rel="icon" type="image/x-icon" href="favicon.ico">
+    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto+Mono">
+    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500">
+    <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
+    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
+  </head>
+  <body>
+    <awc-root></awc-root>
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/main.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/main.scss b/asterixdb/asterix-dashboard/src/node/src/main.scss
new file mode 100755
index 0000000..cc02584
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/main.scss
@@ -0,0 +1,29 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+@import './styles/general';
+
+// Include material core styles.
+@import '~@angular/material/theming';
+@include mat-core();
+
+// Define the light theme.
+$primary: mat-palette($mat-grey);
+$accent:  mat-palette($mat-orange, A200, A100, A400);
+
+$theme: mat-light-theme($primary, $accent);
+@include angular-material-theme($theme);
+
+* {
+    font-family: Roboto, "Helvetica Neue", sans-serif;
+  }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/main.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/main.ts b/asterixdb/asterix-dashboard/src/node/src/main.ts
new file mode 100755
index 0000000..446a9dc
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/main.ts
@@ -0,0 +1,26 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import './polyfills.ts';
+import 'hammerjs';
+import { enableProdMode } from '@angular/core';
+import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
+import { AppModule } from './app/app.module';
+import { environment } from './environments/environment';
+
+if (environment.production) {
+  enableProdMode();
+}
+
+platformBrowserDynamic().bootstrapModule(AppModule)
+  .catch(err => console.log(err));

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/polyfills.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/polyfills.ts b/asterixdb/asterix-dashboard/src/node/src/polyfills.ts
new file mode 100755
index 0000000..20d4075
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/polyfills.ts
@@ -0,0 +1,76 @@
+/**
+ * This file includes polyfills needed by Angular and is loaded before the app.
+ * You can add your own extra polyfills to this file.
+ *
+ * This file is divided into 2 sections:
+ *   1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.
+ *   2. Application imports. Files imported after ZoneJS that should be loaded before your main
+ *      file.
+ *
+ * The current setup is for so-called "evergreen" browsers; the last versions of browsers that
+ * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),
+ * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.
+ *
+ * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html
+ */
+
+/***************************************************************************************************
+ * BROWSER POLYFILLS
+ */
+
+/** IE9, IE10 and IE11 requires all of the following polyfills. **/
+// import 'core-js/es6/symbol';
+// import 'core-js/es6/object';
+// import 'core-js/es6/function';
+// import 'core-js/es6/parse-int';
+// import 'core-js/es6/parse-float';
+// import 'core-js/es6/number';
+// import 'core-js/es6/math';
+// import 'core-js/es6/string';
+// import 'core-js/es6/date';
+// import 'core-js/es6/array';
+// import 'core-js/es6/regexp';
+// import 'core-js/es6/map';
+// import 'core-js/es6/weak-map';
+// import 'core-js/es6/set';
+
+/** IE10 and IE11 requires the following for NgClass support on SVG elements */
+// import 'classlist.js';  // Run `npm install --save classlist.js`.
+
+/** IE10 and IE11 requires the following for the Reflect API. */
+// import 'core-js/es6/reflect';
+
+
+/** Evergreen browsers require these. **/
+// Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove.
+import 'core-js/es7/reflect';
+
+
+/**
+ * Required to support Web Animations `@angular/platform-browser/animations`.
+ * Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation
+ **/
+// import 'web-animations-js';  // Run `npm install --save web-animations-js`.
+
+
+
+/***************************************************************************************************
+ * Zone JS is required by Angular itself.
+ */
+import 'zone.js/dist/zone';  // Included with Angular CLI.
+
+
+
+/***************************************************************************************************
+ * APPLICATION IMPORTS
+ */
+
+/**
+ * Date, currency, decimal and percent pipes.
+ * Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10
+ */
+// import 'intl';  // Run `npm install --save intl`.
+/**
+ * Need to import at least one locale-data with intl.
+ */
+// import 'intl/locale-data/jsonp/en';

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/styles/_constants.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/styles/_constants.scss b/asterixdb/asterix-dashboard/src/node/src/styles/_constants.scss
new file mode 100755
index 0000000..b3a5d07
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/styles/_constants.scss
@@ -0,0 +1,21 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+@import '../../node_modules/@angular/material/theming';
+
+$small-breakpoint-width: 720px;
+
+/* For desktop, the content should be aligned with the page title. */
+$content-padding-side: 70px;
+$content-padding-side-xs: 15px;
+$awc-spacing-unit: 8px;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/styles/_general.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/styles/_general.scss b/asterixdb/asterix-dashboard/src/node/src/styles/_general.scss
new file mode 100755
index 0000000..9691cf8
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/styles/_general.scss
@@ -0,0 +1,32 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+html {
+  box-sizing: border-box;
+}
+
+body {
+  font-family: "Roboto Mono", monospace;
+  font-size: 0.80rem;
+	font-weight: 500;
+}
+
+// Tree and table styling
+
+.ui-datatable{
+  //overflow : auto
+}
+
+.ui-datatable .ui-sortable-column div.ui-dt-c {
+  padding-right: 15px !important;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/test.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/test.ts b/asterixdb/asterix-dashboard/src/node/src/test.ts
new file mode 100755
index 0000000..6edcb85
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/test.ts
@@ -0,0 +1,46 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+// This file is required by karma.conf.js and loads recursively all the .spec and framework files
+
+import 'zone.js/dist/long-stack-trace-zone';
+import 'zone.js/dist/proxy.js';
+import 'zone.js/dist/sync-test';
+import 'zone.js/dist/jasmine-patch';
+import 'zone.js/dist/async-test';
+import 'zone.js/dist/fake-async-test';
+import { getTestBed } from '@angular/core/testing';
+import {
+  BrowserDynamicTestingModule,
+  platformBrowserDynamicTesting
+} from '@angular/platform-browser-dynamic/testing';
+
+// Unfortunately there's no typing for the `__karma__` variable. Just declare it as any.
+declare const __karma__: any;
+declare const require: any;
+
+// Prevent Karma from running prematurely.
+__karma__.loaded = function () {};
+
+// First, initialize the Angular testing environment.
+getTestBed().initTestEnvironment(
+  BrowserDynamicTestingModule,
+  platformBrowserDynamicTesting()
+);
+// Then we find all the tests.
+const context = require.context('./', true, /\.spec\.ts$/);
+// And load the modules.
+context.keys().map(context);
+// Finally, start Karma to run the tests.
+__karma__.start();

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/tsconfig.app.json
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/tsconfig.app.json b/asterixdb/asterix-dashboard/src/node/src/tsconfig.app.json
new file mode 100755
index 0000000..54434df
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/tsconfig.app.json
@@ -0,0 +1,26 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+{
+  "extends": "../tsconfig.json",
+  "compilerOptions": {
+    "outDir": "../out-tsc/app",
+    "baseUrl": "./",
+    "module": "es2015",
+    "types": []
+  },
+  "exclude": [
+    "test.ts",
+    "**/*.spec.ts"
+  ]
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/tsconfig.spec.json
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/tsconfig.spec.json b/asterixdb/asterix-dashboard/src/node/src/tsconfig.spec.json
new file mode 100755
index 0000000..15bcf37
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/tsconfig.spec.json
@@ -0,0 +1,33 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+{
+  "extends": "../tsconfig.json",
+  "compilerOptions": {
+    "outDir": "../out-tsc/spec",
+    "baseUrl": "./",
+    "module": "commonjs",
+    "target": "es5",
+    "types": [
+      "jasmine",
+      "node"
+    ]
+  },
+  "files": [
+    "test.ts"
+  ],
+  "include": [
+    "**/*.spec.ts",
+    "**/*.d.ts"
+  ]
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/typings.d.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/typings.d.ts b/asterixdb/asterix-dashboard/src/node/src/typings.d.ts
new file mode 100755
index 0000000..ef5c7bd
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/typings.d.ts
@@ -0,0 +1,5 @@
+/* SystemJS module definition */
+declare var module: NodeModule;
+interface NodeModule {
+  id: string;
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/tsconfig.json
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/tsconfig.json b/asterixdb/asterix-dashboard/src/node/tsconfig.json
new file mode 100755
index 0000000..0897e9e
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/tsconfig.json
@@ -0,0 +1,32 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+{
+  "compileOnSave": false,
+  "compilerOptions": {
+    "outDir": "./dist/out-tsc",
+    "sourceMap": true,
+    "declaration": false,
+    "moduleResolution": "node",
+    "emitDecoratorMetadata": true,
+    "experimentalDecorators": true,
+    "target": "es5",
+    "typeRoots": [
+      "node_modules/@types"
+    ],
+    "lib": [
+      "es2017",
+      "dom"
+    ]
+  }
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/tslint.json
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/tslint.json b/asterixdb/asterix-dashboard/src/node/tslint.json
new file mode 100755
index 0000000..1d02629
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/tslint.json
@@ -0,0 +1,154 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+{
+  "rulesDirectory": [
+    "node_modules/codelyzer"
+  ],
+  "rules": {
+    "arrow-return-shorthand": true,
+    "callable-types": true,
+    "class-name": true,
+    "comment-format": [
+      true,
+      "check-space"
+    ],
+    "curly": true,
+    "eofline": true,
+    "forin": true,
+    "import-blacklist": [
+      true,
+      "rxjs",
+      "rxjs/Rx"
+    ],
+    "import-spacing": true,
+    "indent": [
+      true,
+      "spaces"
+    ],
+    "interface-over-type-literal": true,
+    "label-position": true,
+    "max-line-length": [
+      true,
+      140
+    ],
+    "member-access": false,
+    "member-ordering": [
+      true,
+      {
+        "order": [
+          "static-field",
+          "instance-field",
+          "static-method",
+          "instance-method"
+        ]
+      }
+    ],
+    "no-arg": true,
+    "no-bitwise": true,
+    "no-console": [
+      true,
+      "debug",
+      "info",
+      "time",
+      "timeEnd",
+      "trace"
+    ],
+    "no-construct": true,
+    "no-debugger": true,
+    "no-duplicate-super": true,
+    "no-empty": false,
+    "no-empty-interface": true,
+    "no-eval": true,
+    "no-inferrable-types": [
+      true,
+      "ignore-params"
+    ],
+    "no-misused-new": true,
+    "no-non-null-assertion": true,
+    "no-shadowed-variable": true,
+    "no-string-literal": false,
+    "no-string-throw": true,
+    "no-switch-case-fall-through": true,
+    "no-trailing-whitespace": true,
+    "no-unnecessary-initializer": true,
+    "no-unused-expression": true,
+    "no-use-before-declare": true,
+    "no-var-keyword": true,
+    "object-literal-sort-keys": false,
+    "one-line": [
+      true,
+      "check-open-brace",
+      "check-catch",
+      "check-else",
+      "check-whitespace"
+    ],
+    "prefer-const": true,
+    "quotemark": [
+      true,
+      "single"
+    ],
+    "radix": true,
+    "semicolon": [
+      true,
+      "always"
+    ],
+    "triple-equals": [
+      true,
+      "allow-null-check"
+    ],
+    "typedef-whitespace": [
+      true,
+      {
+        "call-signature": "nospace",
+        "index-signature": "nospace",
+        "parameter": "nospace",
+        "property-declaration": "nospace",
+        "variable-declaration": "nospace"
+      }
+    ],
+    "typeof-compare": true,
+    "unified-signatures": true,
+    "variable-name": false,
+    "whitespace": [
+      true,
+      "check-branch",
+      "check-decl",
+      "check-operator",
+      "check-separator",
+      "check-type"
+    ],
+    "directive-selector": [
+      true,
+      "attribute",
+      "app",
+      "camelCase"
+    ],
+    "component-selector": [
+      true,
+      "element",
+      "app",
+      "kebab-case"
+    ],
+    "use-input-property-decorator": true,
+    "use-output-property-decorator": true,
+    "use-host-property-decorator": true,
+    "no-input-rename": true,
+    "no-output-rename": true,
+    "use-life-cycle-interface": true,
+    "use-pipe-transform-interface": true,
+    "component-class-suffix": true,
+    "directive-class-suffix": true,
+    "invoke-injectable": true
+  }
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-server/pom.xml
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-server/pom.xml b/asterixdb/asterix-server/pom.xml
index fd6dd79..d014d2b 100644
--- a/asterixdb/asterix-server/pom.xml
+++ b/asterixdb/asterix-server/pom.xml
@@ -54,11 +54,36 @@
         </executions>
       </plugin>
       <plugin>
+        <artifactId>maven-resources-plugin</artifactId>
+        <version>2.7</version>
+        <executions>
+          <execution>
+            <id>copy-license</id>
+            <phase>generate-resources</phase>
+            <goals>
+              <goal>copy-resources</goal>
+            </goals>
+            <configuration>
+              <outputDirectory>${basedir}/../src/main/licenses/templates/</outputDirectory>
+              <resources>
+                <resource>
+                  <directory>${basedir}/../asterix-dashboard/src/node/static/
+                  </directory>
+                  <includes>
+                    <include>3rdpartylicenses.txt</include>
+                  </includes>
+                </resource>
+              </resources>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
         <groupId>org.apache.hyracks</groupId>
         <artifactId>license-automation-plugin</artifactId>
         <executions>
           <execution>
-            <phase>generate-resources</phase>
+            <phase>prepare-package</phase>
             <goals>
               <goal>generate</goal>
             </goals>
@@ -146,6 +171,11 @@
           </overrides>
           <licenses>
             <license>
+                <displayName>Various 3rd party</displayName>
+                <url>file://${basedir}}/../asterix-dashboard/src/main/resources/dashboard/static/3rdpartylicenses.txt</url>
+                <contentFile>${basedir}}/../asterix-dashboard/src/main/resources/dashboard/static/3rdpartylicenses.txt</contentFile>
+            </license>
+            <license>
               <displayName>a BSD 3-clause license</displayName>
               <url>http://asm.objectweb.org/license.html</url>
             </license>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/pom.xml
----------------------------------------------------------------------
diff --git a/asterixdb/pom.xml b/asterixdb/pom.xml
index 0520519..a56ffd8 100644
--- a/asterixdb/pom.xml
+++ b/asterixdb/pom.xml
@@ -245,6 +245,7 @@
           </checkstyleRules>
           <includes>**/*.java,**/*.jj</includes>
           <resourceIncludes>**/*.properties,**/*.xml,**/*.xsd,**/*.aql,**/*.sqlpp,**/*.sh</resourceIncludes>
+          <resourceExcludes>**/node_modules/**/*</resourceExcludes>
           <sourceDirectories>${project.build.sourceDirectory},${project.build.testSourceDirectory}</sourceDirectories>
         </configuration>
       </plugin>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/src/main/licenses/templates/3rdpartylicenses.txt
----------------------------------------------------------------------
diff --git a/asterixdb/src/main/licenses/templates/3rdpartylicenses.txt b/asterixdb/src/main/licenses/templates/3rdpartylicenses.txt
new file mode 100644
index 0000000..2c3d11d
--- /dev/null
+++ b/asterixdb/src/main/licenses/templates/3rdpartylicenses.txt
@@ -0,0 +1,373 @@
+core-js@2.5.6
+MIT
+Copyright (c) 2014-2018 Denis Pushkarev
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+primeng@4.3.0
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2016-2017 PrimeTek
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+@angular/forms@5.2.10
+MIT
+MIT
+
+@ngrx/store@4.1.1
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2017 Brandon Roberts, Mike Ryan, Victor Savkin, Rob Wormald
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+@angular/core@5.2.10
+MIT
+MIT
+
+webpack@3.8.1
+MIT
+Copyright JS Foundation and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+@angular/platform-browser@5.2.10
+MIT
+MIT
+
+zone.js@0.8.26
+MIT
+The MIT License
+
+Copyright (c) 2016-2018 Google, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+@angular/router@5.2.10
+MIT
+MIT
+
+@angular/common@5.2.10
+MIT
+MIT
+
+file-saver@1.3.8
+MIT
+The MIT License
+
+Copyright © 2016 [Eli Grey][1].
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+  [1]: http://eligrey.com
+
+@types/file-saver@1.3.0
+MIT
+MIT License
+
+    Copyright (c) Microsoft Corporation. All rights reserved.
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE
+
+css-loader@0.28.11
+MIT
+Copyright JS Foundation and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+@angular/cdk@5.2.5
+MIT
+The MIT License
+
+Copyright (c) 2018 Google LLC.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+@angular/material@5.2.5
+MIT
+The MIT License
+
+Copyright (c) 2018 Google LLC.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+@ngrx/effects@4.1.1
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2017 Brandon Roberts, Mike Ryan, Victor Savkin, Rob Wormald
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+@ngrx/db@2.1.0
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2015 ngrx
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+@ngrx/store-devtools@4.1.1
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2017 Brandon Roberts, Mike Ryan, Victor Savkin, Rob Wormald
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+codemirror@5.37.0
+MIT
+MIT License
+
+Copyright (C) 2017 by Marijn Haverbeke <ma...@gmail.com> and others
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+@angular/animations@5.2.10
+MIT
+MIT
+
+hammerjs@2.0.8
+MIT
+The MIT License (MIT)
+
+Copyright (C) 2011-2014 by Jorik Tangelder (Eight Media)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+@angular/platform-browser-dynamic@5.2.10
+MIT
+MIT
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/src/main/licenses/templates/asterix-license.ftl
----------------------------------------------------------------------
diff --git a/asterixdb/src/main/licenses/templates/asterix-license.ftl b/asterixdb/src/main/licenses/templates/asterix-license.ftl
index c93a2be..bf2c7ea 100644
--- a/asterixdb/src/main/licenses/templates/asterix-license.ftl
+++ b/asterixdb/src/main/licenses/templates/asterix-license.ftl
@@ -63,6 +63,18 @@ ${license.content}
    </#if>
 ---
 </#list>
+
+<#if !asterixDashboardSkip!false>
+===
+   ASTERIXDB Dashboard JS COMPONENTS:
+
+    includes a number of packed subcomponents under
+    dashboard/static/ with separate copyright
+    notices and license terms. Your use of these subcomponents is subject
+    to the terms and condition of the following licenses.
+===
+<#include "3rdpartylicenses.txt">
+</#if>
 ===
    AsterixDB includes source code with separate copyright notices and
    license terms. Your use of this source code is subject to the terms


[24/43] asterixdb git commit: [ASTERIXDB-2318] Build dashboard in mvn

Posted by im...@apache.org.
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/material.module.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/material.module.ts b/asterixdb/asterix-dashboard/src/node/src/app/material.module.ts
new file mode 100755
index 0000000..3bb67d9
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/material.module.ts
@@ -0,0 +1,105 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import {NgModule} from '@angular/core';
+import {
+  MatAutocompleteModule,
+  MatButtonModule,
+  MatButtonToggleModule,
+  MatCardModule,
+  MatCheckboxModule,
+  MatChipsModule,
+  MatDatepickerModule,
+  MatDialogModule,
+  MatExpansionModule,
+  MatFormFieldModule,
+  MatGridListModule,
+  MatIconModule,
+  MatInputModule,
+  MatListModule,
+  MatMenuModule,
+  MatPaginatorModule,
+  MatProgressBarModule,
+  MatProgressSpinnerModule,
+  MatRadioModule,
+  MatSelectModule,
+  MatSidenavModule,
+  MatSliderModule,
+  MatSlideToggleModule,
+  MatSnackBarModule,
+  MatSortModule,
+  MatTableModule,
+  MatTabsModule,
+  MatToolbarModule,
+  MatTooltipModule,
+  MatStepperModule,
+} from '@angular/material';
+import {MatNativeDateModule, MatRippleModule} from '@angular/material';
+import {CdkTableModule} from '@angular/cdk/table';
+//import {CdkAccordionModule} from '@angular/cdk/accordion';
+import {A11yModule} from '@angular/cdk/a11y';
+import {BidiModule} from '@angular/cdk/bidi';
+import {OverlayModule} from '@angular/cdk/overlay';
+import {PlatformModule} from '@angular/cdk/platform';
+import {ObserversModule} from '@angular/cdk/observers';
+import {PortalModule} from '@angular/cdk/portal';
+
+/*
+* NgModule that includes all Material modules that are required to
+* serve AsterixDB Dashboard
+*/
+@NgModule({
+  exports: [
+    MatAutocompleteModule,
+    MatButtonModule,
+    MatButtonToggleModule,
+    MatCardModule,
+    MatCheckboxModule,
+    MatChipsModule,
+    MatTableModule,
+    MatDatepickerModule,
+    MatDialogModule,
+    MatExpansionModule,
+    MatFormFieldModule,
+    MatGridListModule,
+    MatIconModule,
+    MatInputModule,
+    MatListModule,
+    MatMenuModule,
+    MatPaginatorModule,
+    MatProgressBarModule,
+    MatProgressSpinnerModule,
+    MatRadioModule,
+    MatRippleModule,
+    MatSelectModule,
+    MatSidenavModule,
+    MatSlideToggleModule,
+    MatSliderModule,
+    MatSnackBarModule,
+    MatSortModule,
+    MatStepperModule,
+    MatTabsModule,
+    MatToolbarModule,
+    MatTooltipModule,
+    MatNativeDateModule,
+    CdkTableModule,
+    A11yModule,
+    BidiModule,
+  //  CdkAccordionModule,
+    ObserversModule,
+    OverlayModule,
+    PlatformModule,
+    PortalModule,
+  ]
+})
+export class MaterialModule {}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/app.actions.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/app.actions.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/app.actions.ts
new file mode 100755
index 0000000..29da05f
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/app.actions.ts
@@ -0,0 +1,33 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Action } from '@ngrx/store';
+import { AsterixDBQueryMessage, Dataset } from '../models/asterixDB.model';
+
+/*
+* Definition of App Actions
+*/
+export const APP_MODE_CHANGE = '[App State] App Mode Change';
+
+/*
+* Guide Select Datasets for UI Helpers
+*/
+export class ChangeMode implements Action {
+  readonly type = APP_MODE_CHANGE;
+  constructor(public payload: string) {}
+}
+
+/*
+* Exports of datasets actions
+*/
+export type All = ChangeMode;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/dataset.actions.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/dataset.actions.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/dataset.actions.ts
new file mode 100755
index 0000000..a49e07c
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/dataset.actions.ts
@@ -0,0 +1,130 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Action } from '@ngrx/store';
+import { AsterixDBQueryMessage, Dataset } from '../models/asterixDB.model';
+
+/*
+* Definition of Datasets Actions
+*/
+export const SELECT_DATASETS          = '[Dataset Collection] Select Dataset';
+export const SELECT_DATASETS_SUCCESS  = '[Dataset Collection] Select Dataset Success';
+export const SELECT_DATASETS_FAIL     = '[Dataset Collection] Select Dataset Fail';
+export const CREATE_DATASET           = '[Dataset Collection] Create Dataset';
+export const CREATE_DATASET_SUCCESS   = '[Dataset Collection] Create Dataset Success';
+export const CREATE_DATASET_FAIL      = '[Dataset Collection] Create Dataset Fail';
+export const UPDATE_DATASET           = '[Dataset Collection] Update Dataset';
+export const UPDATE_DATASET_SUCCESS   = '[Dataset Collection] Update Dataset Success';
+export const UPDATE_DATASET_FAIL      = '[Dataset Collection] Update Dataset Fail';
+export const DROP_DATASET             = '[Dataset Collection] Drop Dataset';
+export const DROP_DATASET_SUCCESS     = '[Dataset Collection] Drop Dataset Success';
+export const DROP_DATASET_FAIL        = '[Dataset Collection] Drop Dataset Fail';
+export const GUIDE_SELECT_DATASET     = '[Dataset Collection] Guide Select Dataset';
+
+
+/*
+* Guide Select Datasets for UI Helpers
+*/
+export class GuideSelectDatasets implements Action {
+  readonly type = GUIDE_SELECT_DATASET;
+  constructor(public payload: string) {}
+}
+
+/*
+* Select Datasets
+*/
+export class SelectDatasets implements Action {
+  readonly type = SELECT_DATASETS;
+  constructor(public payload: string) {}
+}
+
+export class SelectDatasetsSuccess implements Action {
+  readonly type = SELECT_DATASETS_SUCCESS;
+  constructor(public payload: AsterixDBQueryMessage[]) {}
+}
+
+export class SelectDatasetsFail implements Action {
+  readonly type = SELECT_DATASETS_FAIL;
+  constructor(public payload: AsterixDBQueryMessage[]) {}
+}
+
+/*
+* Create Dataset
+*/
+export class CreateDataset implements Action {
+  readonly type = CREATE_DATASET;
+  constructor(public payload: string) {}
+}
+
+export class CreateDatasetSuccess implements Action {
+  readonly type = CREATE_DATASET_SUCCESS;
+  constructor(public payload: Dataset[]) {}
+}
+
+export class CreateDatasetFail implements Action {
+  readonly type = CREATE_DATASET_FAIL;
+  constructor(public payload: Dataset) {}
+}
+
+/*
+* Update Dataset
+*/
+export class UpdateDataset implements Action {
+  readonly type = UPDATE_DATASET;
+  constructor(public payload: Dataset) {}
+}
+
+export class UpdateDatasetSuccess implements Action {
+  readonly type = UPDATE_DATASET_SUCCESS;
+  constructor(public payload: Dataset[]) {}
+}
+
+export class UpdateDatasetFail implements Action {
+  readonly type = UPDATE_DATASET_FAIL;
+  constructor(public payload: Dataset) {}
+}
+
+/*
+* Drop Dataset
+*/
+export class DropDataset implements Action {
+  readonly type = DROP_DATASET;
+  constructor(public payload: string) {}
+}
+
+export class DropDatasetSuccess implements Action {
+  readonly type = DROP_DATASET_SUCCESS;
+  constructor(public payload: Dataset[]) {}
+}
+
+export class DropDatasetFail implements Action {
+  readonly type = DROP_DATASET_FAIL;
+  constructor(public payload: Dataset) {}
+}
+
+/*
+* Exports of datasets actions
+*/
+export type All = SelectDatasets |
+  SelectDatasetsSuccess |
+  SelectDatasetsFail |
+  CreateDataset |
+  CreateDatasetSuccess |
+  CreateDatasetFail |
+  UpdateDataset |
+  UpdateDatasetSuccess |
+  UpdateDatasetFail |
+  DropDataset |
+  DropDatasetSuccess |
+  DropDatasetFail | 
+  GuideSelectDatasets;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/datatype.actions.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/datatype.actions.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/datatype.actions.ts
new file mode 100755
index 0000000..5543a7a
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/datatype.actions.ts
@@ -0,0 +1,122 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Action } from '@ngrx/store';
+import { AsterixDBQueryMessage, Datatype } from '../models/asterixDB.model';
+
+/*
+* Definition of Datatypes Actions
+*/
+export const SELECT_DATATYPES         = '[Datatype Collection] Select Datatypes';
+export const SELECT_DATATYPES_SUCCESS = '[Datatype Collection] Select Datatypes Success';
+export const SELECT_DATATYPES_FAIL    = '[Datatype Collection] Select Datatypes Fail';
+export const CREATE_DATATYPE          = '[Datatype Collection] Create Datatypes';
+export const CREATE_DATATYPE_SUCCESS  = '[Datatype Collection] Create Datatypes Success';
+export const CREATE_DATATYPE_FAIL     = '[Datatype Collection] Create Datatypes Fail';
+export const UPDATE_DATATYPE          = '[Datatype Collection] Update Datatype';
+export const UPDATE_DATATYPE_SUCCESS  = '[Datatype Collection] Update Datatype Success';
+export const UPDATE_DATATYPE_FAIL     = '[Datatype Collection] Update Datatype Fail';
+export const DROP_DATATYPE            = '[Datatype Collection] Drop Datatypes';
+export const DROP_DATATYPE_SUCCESS    = '[Datatype Collection] Drop Datatypes Success';
+export const DROP_DATATYPE_FAIL       = '[Datatype Collection] Drop Datatypes Fail';
+
+/*
+* Select Datatypes
+*/
+export class SelectDatatypes implements Action {
+  readonly type = SELECT_DATATYPES;
+  constructor(public payload: string) {}
+}
+
+export class SelectDatatypesSuccess implements Action {
+  readonly type = SELECT_DATATYPES_SUCCESS;
+  constructor(public payload: AsterixDBQueryMessage[]) {}
+}
+
+export class SelectDatatypesFail implements Action {
+  readonly type = SELECT_DATATYPES_FAIL;
+  constructor(public payload: AsterixDBQueryMessage[]) {}
+}
+
+/*
+* Create Datatype
+*/
+export class CreateDatatype implements Action {
+  readonly type = CREATE_DATATYPE;
+  constructor(public payload: string) {}
+}
+
+export class CreateDatatypeSuccess implements Action {
+  readonly type = CREATE_DATATYPE_SUCCESS;
+  constructor(public payload: Datatype[]) {}
+}
+
+export class CreateDatatypeFail implements Action {
+  readonly type = CREATE_DATATYPE_FAIL;
+  constructor(public payload: Datatype) {}
+}
+
+/*
+* Update Datatype
+*/
+export class UpdateDatatype implements Action {
+  readonly type = UPDATE_DATATYPE;
+  constructor(public payload: Datatype) {}
+}
+
+export class UpdateDatatypeSuccess implements Action {
+  readonly type = UPDATE_DATATYPE_SUCCESS;
+  constructor(public payload: Datatype[]) {}
+}
+
+export class UpdateDatatypeFail implements Action {
+  readonly type = UPDATE_DATATYPE_FAIL;
+  constructor(public payload: Datatype) {}
+}
+
+/*
+* Drop Datatype
+*/
+export class DropDatatype implements Action {
+  readonly type = DROP_DATATYPE;
+
+  constructor(public payload: string) {}
+}
+
+export class DropDatatypeSuccess implements Action {
+  readonly type = DROP_DATATYPE_SUCCESS;
+
+  constructor(public payload: Datatype[]) {}
+}
+
+export class DropDatatypeFail implements Action {
+  readonly type = DROP_DATATYPE_FAIL;
+
+  constructor(public payload: Datatype) {}
+}
+
+/*
+* Exports of datastypes actions
+*/
+export type All = SelectDatatypes |
+  SelectDatatypesSuccess |
+  SelectDatatypesFail |
+  CreateDatatype |
+  CreateDatatypeSuccess |
+  CreateDatatypeFail |
+  UpdateDatatype |
+  UpdateDatatypeSuccess |
+  UpdateDatatypeFail |
+  DropDatatype |
+  DropDatatypeSuccess |
+  DropDatatypeFail;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/dataverse.actions.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/dataverse.actions.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/dataverse.actions.ts
new file mode 100755
index 0000000..dc33c0a
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/dataverse.actions.ts
@@ -0,0 +1,119 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Action } from '@ngrx/store';
+import { AsterixDBQueryMessage, Dataverse } from '../models/asterixDB.model';
+
+/*
+* Definition of Dataverses Actions
+*/
+export const SELECT_DATAVERSES          = '[Dataverse Collection] Select Dataverses';
+export const SELECT_DATAVERSES_SUCCESS  = '[Dataverse Collection] Select Dataverses Success';
+export const SELECT_DATAVERSES_FAIL     = '[Dataverse Collection] Select Dataverses Fail';
+export const CREATE_DATAVERSE           = '[Dataverse Collection] Create Dataverse';
+export const CREATE_DATAVERSE_SUCCESS   = '[Dataverse Collection] Create Dataverse Success';
+export const CREATE_DATAVERSE_FAIL      = '[Dataverse Collection] Create Dataverse Fail';
+export const UPDATE_DATAVERSE           = '[Dataverse Collection] Update Dataverse';
+export const UPDATE_DATAVERSE_SUCCESS   = '[Dataverse Collection] Update Dataverse Success';
+export const UPDATE_DATAVERSE_FAIL      = '[Dataverse Collection] Update Dataverse Fail';
+export const DROP_DATAVERSE             = '[Dataverse Collection] Drop Dataverses';
+export const DROP_DATAVERSE_SUCCESS     = '[Dataverse Collection] Drop Dataverses Success';
+export const DROP_DATAVERSE_FAIL        = '[Dataverse Collection] Drop Dataverses Fail';
+
+/*
+* Select Dataverses
+*/
+export class SelectDataverses implements Action {
+  readonly type = SELECT_DATAVERSES;
+  constructor(public payload: string) {}
+}
+
+export class SelectDataversesSuccess implements Action {
+  readonly type = SELECT_DATAVERSES_SUCCESS;
+  constructor(public payload: AsterixDBQueryMessage[]) {}
+}
+
+export class SelectDataversesFail implements Action {
+  readonly type = SELECT_DATAVERSES_FAIL;
+  constructor(public payload: AsterixDBQueryMessage[]) {}
+}
+
+/*
+* Create Dataverse
+*/
+export class CreateDataverse implements Action {
+  readonly type = CREATE_DATAVERSE;
+  constructor(public payload: string) {}
+}
+
+export class CreateDataverseSuccess implements Action {
+  readonly type = CREATE_DATAVERSE_SUCCESS;
+  constructor(public payload: Dataverse[]) {}
+}
+
+export class CreateDataverseFail implements Action {
+  readonly type = CREATE_DATAVERSE_FAIL;
+  constructor(public payload: Dataverse) {}
+}
+
+/*
+* Update Dataverse
+*/
+export class UpdateDataverse implements Action {
+  readonly type = UPDATE_DATAVERSE;
+  constructor(public payload: Dataverse) {}
+}
+
+export class UpdateDataverseSuccess implements Action {
+  readonly type = UPDATE_DATAVERSE_SUCCESS;
+  constructor(public payload: Dataverse[]) {}
+}
+
+export class UpdateDataverseFail implements Action {
+  readonly type = UPDATE_DATAVERSE_FAIL;
+  constructor(public payload: Dataverse) {}
+}
+
+/*
+* Drop Dataverse
+*/
+export class DropDataverse implements Action {
+  readonly type = DROP_DATAVERSE;
+  constructor(public payload: string) {}
+}
+
+export class DropDataverseSuccess implements Action {
+  readonly type = DROP_DATAVERSE_SUCCESS;
+  constructor(public payload: Dataverse[]) {}
+}
+
+export class DropDataverseFail implements Action {
+  readonly type = DROP_DATAVERSE_FAIL;
+  constructor(public payload: Dataverse) {}
+}
+
+/*
+* Exports of datasverses actions
+*/
+export type All = SelectDataverses |
+  SelectDataversesSuccess |
+  SelectDataversesFail |
+  CreateDataverse |
+  CreateDataverseSuccess |
+  CreateDataverseFail |
+  UpdateDataverse |
+  UpdateDataverseSuccess |
+  UpdateDataverseFail |
+  DropDataverse |
+  DropDataverseSuccess |
+  DropDataverseFail;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/index.actions.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/index.actions.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/index.actions.ts
new file mode 100755
index 0000000..1304644
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/index.actions.ts
@@ -0,0 +1,119 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Action } from '@ngrx/store';
+import { Index } from '../models/asterixDB.model';
+
+/*
+* Definition of Index Actions
+*/
+export const SELECT_INDEXES         = '[Index Collection] Select Indexes';
+export const SELECT_INDEXES_SUCCESS = '[Index Collection] Select Indexes Success';
+export const SELECT_INDEXES_FAIL    = '[Index Collection] Select Indexes Fail';
+export const CREATE_INDEX           = '[Index Collection] Create Index';
+export const CREATE_INDEX_SUCCESS   = '[Index Collection] Create Index Success';
+export const CREATE_INDEX_FAIL      = '[Index Collection] Create Index Fail';
+export const UPDATE_INDEX           = '[Index Collection] Update Index';
+export const UPDATE_INDEX_SUCCESS   = '[Index Collection] Update Index Success';
+export const UPDATE_INDEX_FAIL      = '[Index Collection] Update Index Fail';
+export const DROP_INDEX             = '[Index Collection] Drop Indexes';
+export const DROP_INDEX_SUCCESS     = '[Index Collection] Drop Indexes Success';
+export const DROP_INDEX_FAIL        = '[Index Collection] Drop Indexes Fail';
+
+/*
+* Select Indexes
+*/
+export class SelectIndexes implements Action {
+  readonly type = SELECT_INDEXES;
+  constructor(public payload: string) {}
+}
+
+export class SelectIndexesSuccess implements Action {
+  readonly type = SELECT_INDEXES_SUCCESS;
+  constructor(public payload: Index[]) {}
+}
+
+export class SelectIndexesFail implements Action {
+  readonly type = SELECT_INDEXES_FAIL;
+  constructor(public payload: Index[]) {}
+}
+
+/*
+* Create Index
+*/
+export class CreateIndex implements Action {
+  readonly type = CREATE_INDEX;
+  constructor(public payload: string) {}
+}
+
+export class CreateIndexSuccess implements Action {
+  readonly type = CREATE_INDEX_SUCCESS;
+  constructor(public payload: Index[]) {}
+}
+
+export class CreateIndexFail implements Action {
+  readonly type = CREATE_INDEX_FAIL;
+  constructor(public payload: Index) {}
+}
+
+/*
+* Update Index
+*/
+export class UpdateIndex implements Action {
+  readonly type = UPDATE_INDEX;
+  constructor(public payload: Index) {}
+}
+
+export class UpdateIndexSuccess implements Action {
+  readonly type = UPDATE_INDEX_SUCCESS;
+  constructor(public payload: Index[]) {}
+}
+
+export class UpdateIndexFail implements Action {
+  readonly type = UPDATE_INDEX_FAIL;
+  constructor(public payload: Index) {}
+}
+
+/*
+* Remove Index
+*/
+export class DropIndex implements Action {
+  readonly type = DROP_INDEX;
+  constructor(public payload: string) {}
+}
+
+export class DropIndexSuccess implements Action {
+  readonly type = DROP_INDEX_SUCCESS;
+  constructor(public payload: Index[]) {}
+}
+
+export class DropIndexFail implements Action {
+  readonly type = DROP_INDEX_FAIL;
+  constructor(public payload: Index) {}
+}
+
+/*
+* Exports of indexes actions
+*/
+export type All = SelectIndexes |
+  SelectIndexesSuccess |
+  SelectIndexesFail |
+  CreateIndex |
+  CreateIndexSuccess |
+  CreateIndexFail |
+  UpdateIndex |
+  UpdateIndexSuccess |
+  UpdateIndexFail |
+  DropIndex |
+  DropIndexSuccess |
+  DropIndexFail;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/metadata.actions.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/metadata.actions.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/metadata.actions.ts
new file mode 100755
index 0000000..4a3c125
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/metadata.actions.ts
@@ -0,0 +1,46 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Action } from '@ngrx/store';
+
+/*
+* Definition of Metadata Tree Actions
+*/
+export const UPDATE_METADATA_TREE         = '[Metadata Tree Query] UPDATE Metadata tree';
+export const UPDATE_METADATA_TREE_SUCCESS = '[Metadata Tree Query] UPDATE Metadata tree Success';
+export const UPDATE_METADATA_TREE_FAIL    = '[Metadata Tree Query] UPDATE Metadata tree Fail';
+
+/*
+* Construct Metadata Tree Actions
+*/
+export class UpdateMetadataTree implements Action {
+  readonly type = UPDATE_METADATA_TREE
+  constructor() {}
+}
+
+export class UpdateMetadataTreeSuccess implements Action {
+  readonly type = UPDATE_METADATA_TREE_SUCCESS;
+  constructor(public payload: any) {}
+}
+
+export class UpdateMetadataTreeFail implements Action {
+  readonly type = UPDATE_METADATA_TREE_FAIL;
+  constructor(public payload: any) {}
+}
+
+/*
+* Exports of Metatada Tree actions
+*/
+export type All = UpdateMetadataTree |
+    UpdateMetadataTreeSuccess |
+    UpdateMetadataTreeFail;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/query.actions.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/query.actions.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/query.actions.ts
new file mode 100755
index 0000000..866b3e9
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/query.actions.ts
@@ -0,0 +1,71 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Action } from '@ngrx/store';
+import { AsterixDBQueryMessage } from '../models/asterixDB.model';
+
+/*
+* Definition of SQL++ Actions
+*/
+export const EXECUTE_QUERY                  = '[Query] Execute SQL++ Query';
+export const EXECUTE_QUERY_SUCCESS          = '[Query] Execute SQL++ Query Success';
+export const EXECUTE_QUERY_FAIL             = '[Query] Execute SQL++ Query Fail';
+export const EXECUTE_METADATA_QUERY         = '[Query] Execute Metadata SQL++ Query';
+export const EXECUTE_METADATA_QUERY_SUCCESS = '[Query] Execute Metadata SQL++ Query Success';
+export const EXECUTE_METADATA_QUERY_FAIL     = '[Query] Execute Metadata SQL++ Query Fail';
+
+/*
+* Execute SQL++ Query
+*/
+export class ExecuteQuery implements Action {
+  readonly type = EXECUTE_QUERY;
+  constructor(public payload: string) {} // the AsterixDB Query String
+}
+
+export class ExecuteQuerySuccess implements Action {
+  readonly type = EXECUTE_QUERY_SUCCESS;
+  constructor(public payload: AsterixDBQueryMessage[]) {}
+}
+
+export class ExecuteQueryFail implements Action {
+  readonly type = EXECUTE_QUERY_FAIL;
+  constructor(public payload: AsterixDBQueryMessage[]) {}
+}
+
+/*
+* Execute Metadata SQL++ Query
+*/
+export class ExecuteMetadataQuery implements Action {
+  readonly type = EXECUTE_METADATA_QUERY;
+  constructor(public payload: string) {} // the AsterixDB Query String
+}
+
+export class ExecuteMetadataQuerySuccess implements Action {
+  readonly type = EXECUTE_METADATA_QUERY_SUCCESS;
+  constructor(public payload: AsterixDBQueryMessage[]) {}
+}
+
+export class ExecuteMetadataQueryFail implements Action {
+  readonly type = EXECUTE_METADATA_QUERY_FAIL;
+  constructor(public payload: AsterixDBQueryMessage[]) {}
+}
+
+/*
+* Exports of SQL++ actions
+*/
+export type All = ExecuteQuery |
+  ExecuteQuerySuccess |
+  ExecuteQueryFail |
+  ExecuteMetadataQuery |
+  ExecuteMetadataQuerySuccess |
+  ExecuteMetadataQueryFail;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/shared/effects/dataset.effects.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/shared/effects/dataset.effects.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/effects/dataset.effects.ts
new file mode 100755
index 0000000..b5624a4
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/shared/effects/dataset.effects.ts
@@ -0,0 +1,65 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Injectable } from '@angular/core';
+import { Action } from '@ngrx/store';
+import { Effect, Actions } from '@ngrx/effects';
+import { Observable } from 'rxjs/Observable';
+import { of } from 'rxjs/observable/of';
+import * as datasetActions from '../actions/dataset.actions';
+import { SQLService } from '../services/async-query.service';
+import 'rxjs/add/operator/map';
+import 'rxjs/add/operator/switchMap';
+import 'rxjs/add/operator/catch';
+
+export type Action = datasetActions.All
+
+@Injectable()
+export class DatasetEffects {
+    constructor(private actions: Actions,
+        private sqlService: SQLService) {}
+
+    /* Effect to load a collection of all Datasets from AsterixDB
+    */
+    @Effect()
+    selectDatasets$: Observable<Action> = this.actions
+        .ofType(datasetActions.SELECT_DATASETS)
+        .switchMap(query => {
+            return this.sqlService.selectDatasets()
+            .map(dataset => new datasetActions.SelectDatasetsSuccess(dataset))
+            .catch(err => of(new datasetActions.SelectDatasetsFail(err)));
+    });
+
+    /* Effect to create a Datasets from AsterixDB
+    */
+    @Effect()
+    createDatasets$: Observable<Action> = this.actions
+        .ofType(datasetActions.CREATE_DATASET)
+        .switchMap(dataset => {
+            return this.sqlService.createDataset((dataset as any).payload)
+            .map(dataset => new datasetActions.CreateDatasetSuccess(dataset))
+            .catch(err => of(new datasetActions.CreateDatasetFail(err)));
+    });
+
+    /* Effect to drop a Datasets from AsterixDB
+    */
+    @Effect()
+    dropDatasets$: Observable<Action> = this.actions
+        .ofType(datasetActions.DROP_DATASET)
+        .switchMap(dataset => {
+            console.log((dataset as any).payload)
+            return this.sqlService.dropDataset((dataset as any).payload)
+            .map(dataset => new datasetActions.DropDatasetSuccess(dataset))
+            .catch(err => of(new datasetActions.DropDatasetFail(err)));
+    });
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/shared/effects/datatype.effects.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/shared/effects/datatype.effects.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/effects/datatype.effects.ts
new file mode 100755
index 0000000..4fa187f
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/shared/effects/datatype.effects.ts
@@ -0,0 +1,63 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Injectable } from '@angular/core';
+import { Effect, Actions } from '@ngrx/effects';
+import { Observable } from 'rxjs/Observable';
+import { of } from 'rxjs/observable/of';
+import * as datatypeActions from '../actions/datatype.actions';
+import { SQLService } from '../services/async-query.service';
+import 'rxjs/add/operator/map';
+import 'rxjs/add/operator/switchMap';
+import 'rxjs/add/operator/catch';
+
+export type Action = datatypeActions.All
+
+@Injectable()
+export class DatatypeEffects {
+  constructor(private actions: Actions,
+      private sqlService: SQLService) {}
+
+  /* Effect to load a collection of all Datatypes from AsterixDB
+  */
+  @Effect()
+  selectDatatypes$: Observable<Action> = this.actions
+    .ofType(datatypeActions.SELECT_DATATYPES)
+    .switchMap(query => {
+        return this.sqlService.selectDatatypes()
+           .map(datatype => new datatypeActions.SelectDatatypesSuccess(datatype))
+           .catch(err => of(new datatypeActions.SelectDatatypesFail(err)));
+  });
+
+  /* Effect to create a Datatype from AsterixDB
+  */
+  @Effect()
+  createDatatypes$: Observable<Action> = this.actions
+    .ofType(datatypeActions.CREATE_DATATYPE)
+    .switchMap(datatype => {
+        return this.sqlService.createDatatype((datatype as any).payload)
+           .map(datatype => new datatypeActions.CreateDatatypeSuccess(datatype))
+           .catch(err => of(new datatypeActions.CreateDatatypeFail(err)));
+  });
+
+  /* Effect to drop a Datatype from AsterixDB
+  */
+  @Effect()
+  dropDatatypes$: Observable<Action> = this.actions
+    .ofType(datatypeActions.DROP_DATATYPE)
+    .switchMap(datatype => {
+        return this.sqlService.dropDatatype((datatype as any).payload)
+           .map(datatype => new datatypeActions.DropDatatypeSuccess(datatype))
+           .catch(err => of(new datatypeActions.DropDatatypeFail(err)));
+  });
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/shared/effects/dataverse.effects.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/shared/effects/dataverse.effects.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/effects/dataverse.effects.ts
new file mode 100755
index 0000000..d917420
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/shared/effects/dataverse.effects.ts
@@ -0,0 +1,63 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Injectable } from '@angular/core';
+import { Effect, Actions } from '@ngrx/effects';
+import { Observable } from 'rxjs/Observable';
+import { of } from 'rxjs/observable/of';
+import * as dataverseActions from '../actions/dataverse.actions';
+import { SQLService } from '../services/async-query.service';
+import 'rxjs/add/operator/map';
+import 'rxjs/add/operator/switchMap';
+import 'rxjs/add/operator/catch';
+
+export type Action = dataverseActions.All
+
+@Injectable()
+export class DataverseEffects {
+  constructor(private actions: Actions,
+      private sqlService: SQLService) {}
+
+  /* Effect to load a collection of all Dataverses from AsterixDB
+  */
+  @Effect()
+    selectDataverses$: Observable<Action> = this.actions
+        .ofType(dataverseActions.SELECT_DATAVERSES)
+        .switchMap(query => {
+            return this.sqlService.selectDataverses()
+            .map(dataverse => new dataverseActions.SelectDataversesSuccess(dataverse))
+            .catch(err => of(new dataverseActions.SelectDataversesFail(err)));
+    });
+
+    /* Effect to create Dataverse from AsterixDB
+    */
+    @Effect()
+    createDataverses$: Observable<Action> = this.actions
+        .ofType(dataverseActions.CREATE_DATAVERSE)
+        .switchMap(dataverseName => {
+            return this.sqlService.createDataverse((dataverseName as any).payload)
+            .map(dataverse => new dataverseActions.CreateDataverseSuccess(dataverse))
+            .catch(err => of(new dataverseActions.CreateDataverseFail(err)));
+    });
+
+    /* Effect to drop a Dataverse from AsterixDB
+    */
+    @Effect()
+    dropDataverses$: Observable<Action> = this.actions
+        .ofType(dataverseActions.DROP_DATAVERSE)
+        .switchMap(dataverseName => {
+            return this.sqlService.dropDataverse((dataverseName as any).payload)
+            .map(dataverse => new dataverseActions.DropDataverseSuccess(dataverse))
+            .catch(err => of(new dataverseActions.DropDataverseFail(err)));
+    });
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/shared/effects/index.effects.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/shared/effects/index.effects.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/effects/index.effects.ts
new file mode 100755
index 0000000..8491392
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/shared/effects/index.effects.ts
@@ -0,0 +1,63 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Injectable } from '@angular/core';
+import { Effect, Actions } from '@ngrx/effects';
+import { Observable } from 'rxjs/Observable';
+import { of } from 'rxjs/observable/of';
+import * as indexActions from '../actions/index.actions';
+import { SQLService } from '../services/async-query.service';
+import 'rxjs/add/operator/map';
+import 'rxjs/add/operator/switchMap';
+import 'rxjs/add/operator/catch';
+
+export type Action = indexActions.All
+
+@Injectable()
+export class IndexEffects {
+  constructor(private actions: Actions,
+      private sqlService: SQLService) {}
+
+  /* Effect to load a collection of all Index from AsterixDB
+  */
+  @Effect()
+  selectIndexes$: Observable<Action> = this.actions
+    .ofType(indexActions.SELECT_INDEXES)
+    .switchMap(query => {
+        return this.sqlService.selectIndexes()
+           .map(index => new indexActions.SelectIndexesSuccess(index))
+           .catch(err => of(new indexActions.SelectIndexesFail(err)));
+  });
+
+  /* Effect to create a Index
+  */
+  @Effect()
+  createIndexes$: Observable<Action> = this.actions
+    .ofType(indexActions.CREATE_INDEX)
+    .switchMap(index => {
+        return this.sqlService.createIndex((index as any).payload)
+           .map(index => new indexActions.CreateIndexSuccess(index))
+           .catch(err => of(new indexActions.CreateIndexFail(err)));
+  });
+
+  /* Effect to drop a Index
+  */
+  @Effect()
+  dropIndexes$: Observable<Action> = this.actions
+    .ofType(indexActions.DROP_INDEX)
+    .switchMap(index => {
+        return this.sqlService.dropIndex((index as any).payload)
+           .map(index => new indexActions.DropIndexSuccess(index))
+           .catch(err => of(new indexActions.DropIndexFail(err)));
+  });
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/shared/effects/metadata.effects.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/shared/effects/metadata.effects.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/effects/metadata.effects.ts
new file mode 100755
index 0000000..ddcdb27
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/shared/effects/metadata.effects.ts
@@ -0,0 +1,41 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Injectable } from '@angular/core';
+import { Action } from '@ngrx/store';
+import { Effect, Actions } from '@ngrx/effects';
+import { Observable } from 'rxjs/Observable';
+import { of } from 'rxjs/observable/of';
+import { MetadataService } from '../services/async-metadata.service';
+import * as metadataActions from '../actions/metadata.actions';
+import 'rxjs/add/operator/map';
+import 'rxjs/add/operator/switchMap';
+import 'rxjs/add/operator/catch';
+
+export type Action = metadataActions.All
+
+@Injectable()
+export class MetadataEffects {
+  constructor(private actions: Actions,
+      private metadataService: MetadataService) {}
+
+  /* Effect to update and retrieve the Metadata Tree
+  */
+  @Effect()
+  calculateDBTree$: Observable<Action> = this.actions
+    .ofType(metadataActions.UPDATE_METADATA_TREE)
+    .switchMap(() => {
+        return this.metadataService.getMetadataTree()
+          .map(tree => new metadataActions.UpdateMetadataTreeSuccess(tree))
+    });
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/shared/effects/query.effects.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/shared/effects/query.effects.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/effects/query.effects.ts
new file mode 100755
index 0000000..cb78255
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/shared/effects/query.effects.ts
@@ -0,0 +1,53 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Injectable } from '@angular/core';
+import { Action } from '@ngrx/store';
+import { Effect, Actions } from '@ngrx/effects';
+import { Observable } from 'rxjs/Observable';
+import { of } from 'rxjs/observable/of';
+import { SQLService } from '../services/async-query.service';
+import * as sqlQueryActions from '../actions/query.actions';
+import 'rxjs/add/operator/map';
+import 'rxjs/add/operator/switchMap';
+import 'rxjs/add/operator/catch';
+
+export type Action = sqlQueryActions.All
+
+@Injectable()
+export class SQLQueryEffects {
+  constructor(private actions: Actions,
+      private sqlService: SQLService) {}
+
+  /* Effect to Execute an SQL++ Query against the AsterixDB
+  */
+  @Effect()
+  executeQuery$: Observable<Action> = this.actions
+    .ofType(sqlQueryActions.EXECUTE_QUERY)
+    .switchMap(query => {
+        return this.sqlService.executeSQLQuery((query as any).payload)
+           .map(sqlQueryResult => new sqlQueryActions.ExecuteQuerySuccess(sqlQueryResult))
+           .catch(sqlQueryError => of(new sqlQueryActions.ExecuteQueryFail(sqlQueryError)));
+  });
+
+  /* Effect to Execute an SQL++ Metadata Query against the AsterixDB
+  */
+  @Effect()
+  executeMetadataQuery$: Observable<Action> = this.actions
+    .ofType(sqlQueryActions.EXECUTE_METADATA_QUERY)
+    .switchMap(query => {
+        return this.sqlService.executeSQLQuery((query as any).payload)
+           .map(sqlMetadataQueryResult => new sqlQueryActions.ExecuteMetadataQuerySuccess(sqlMetadataQueryResult))
+           .catch(sqlMetadataQueryError => of(new sqlQueryActions.ExecuteMetadataQueryFail(sqlMetadataQueryError)));
+  });
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/shared/models/asterixDB.model.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/shared/models/asterixDB.model.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/models/asterixDB.model.ts
new file mode 100755
index 0000000..bbdabe2
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/shared/models/asterixDB.model.ts
@@ -0,0 +1,112 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+/*
+* Interfaces representing AsterixDB data model structures.
+*/
+
+export interface Dataverse {
+  dataFormat: string;
+  dataverseName: string;
+  pendingOp: string;
+  timeStamp: string;
+};
+
+export interface ResultsM {
+  dataFormat: string;
+  dataverseName: string;
+  pendingOp: string;
+  timeStamp: string;
+};
+
+export interface Dataset {
+  compactionPolicy: string;
+  compactionPolicyProperties: CompactionPolicyProperties[];
+  datasetId: string;
+  datasetName: string;
+  datasetType:string;
+  datatypeDataverseName: string;
+  datatypeName: string;
+  dataverseName: string;
+  groupName:string;
+  hints: string[];
+  internalDetails: InternalDetails;
+  pendingOp: string;
+  timestamp: string;
+};
+
+export interface CompactionPolicyProperties {
+  name: string;
+  value: string;
+};
+
+export interface InternalDetails {
+  autogenerated: string;
+  fileStructure: string;
+  partitioningKey: string;
+  partitioningStrategy: string;
+  primaryKey: string[];
+};
+
+// Message format coming back from AsterixDB REST API
+export interface AsterixDBQueryMessage {
+  metrics: Metrics;
+  requestId: string;
+  results: any[];
+  signature: string;
+  status: string;
+};
+
+export interface Metrics {
+  elapsedTime: string;
+  executionTime: string;
+  resultCount: string;
+  resultSize: string;
+};
+
+// Datatype Data Model comming from AsterixDB REST API
+export interface Datatype {
+  datatypeName: string;
+  dataverseName: string;
+  derived: DatatypeDerived;
+  timeStamp: string;
+};
+
+export interface DatatypeDerived {
+  isAnonymous: boolean;
+  record: DatatypeDerivedRecord;
+  tag: string;
+};
+
+export interface DatatypeDerivedRecord {
+  Fields: DatatypeDerivedRecordField[];
+  isOpen: boolean;
+};
+
+export interface DatatypeDerivedRecordField {
+  fieldName: string;
+  fieldType: "string";
+  isNullable: boolean;
+}
+
+// Index Data Model comming from AsterixDB REST API
+export interface Index {
+  dataverseName: string;
+  datasetName: string;
+  indexName: string;
+  indexStructure: string;
+  searchKey: string[];
+  isPrimary: boolean;
+  timestamp: string;
+  pendingOp: string;
+};

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/shared/pipes/keys.pipe.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/shared/pipes/keys.pipe.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/pipes/keys.pipe.ts
new file mode 100755
index 0000000..77cac5a
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/shared/pipes/keys.pipe.ts
@@ -0,0 +1,25 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { PipeTransform, Pipe } from '@angular/core';
+
+@Pipe({name: 'keys'})
+export class KeysPipe implements PipeTransform {
+  transform(value, args:string[]) : any {
+    let keys = [];
+    for (let key in value) {
+      keys.push(key);
+    }
+    return keys;
+  }
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/shared/pipes/objectArrayType.pipe.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/shared/pipes/objectArrayType.pipe.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/pipes/objectArrayType.pipe.ts
new file mode 100755
index 0000000..220b53c
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/shared/pipes/objectArrayType.pipe.ts
@@ -0,0 +1,23 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+// Detecting if an object is an array
+import { PipeTransform, Pipe } from '@angular/core';
+
+@Pipe({name: 'isObjectArray'})
+export class ObjectArrayTypePipe implements PipeTransform {
+  transform(value, args:string[]) : any {
+		return value && (value.constructor.toString().indexOf("Array") != -1)
+					&& value[0] && (value[0].constructor.toString().indexOf("Object") != -1);
+  }
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/shared/pipes/objectType.pipe.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/shared/pipes/objectType.pipe.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/pipes/objectType.pipe.ts
new file mode 100755
index 0000000..5b8f795
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/shared/pipes/objectType.pipe.ts
@@ -0,0 +1,21 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { PipeTransform, Pipe } from '@angular/core';
+
+@Pipe({name: 'isObject'})
+export class ObjectTypePipe implements PipeTransform {
+  transform(value, args:string[]) : any {
+		return value && (value.constructor.toString().indexOf("Object") != -1);
+  }
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/app.reducer.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/app.reducer.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/app.reducer.ts
new file mode 100755
index 0000000..01c65ac
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/app.reducer.ts
@@ -0,0 +1,73 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { AsterixDBQueryMessage } from '../models/asterixDB.model';
+import * as appActions from '../actions/app.actions';
+
+export type Action = appActions.All;
+
+/*
+** Interfaces for app state in store/state
+*/
+export interface State {
+  loading: boolean,
+  loaded: boolean,
+  success: boolean,
+  sqlQueryString: string,
+  sqlQueryResult: AsterixDBQueryMessage[],
+  sqlQueryError: AsterixDBQueryMessage[],
+  sqlMetadataQueryString: string,
+  sqlMetadataQueryResult: AsterixDBQueryMessage[],
+  sqlMetadataQueryError: AsterixDBQueryMessage[]
+};
+
+const initialState: State = {
+  loading: false,
+  loaded: false,
+  success: false,
+  sqlQueryString: "",
+  sqlQueryResult: [],
+  sqlQueryError: [],
+  sqlMetadataQueryString: "",
+  sqlMetadataQueryResult: [],
+  sqlMetadataQueryError: [],
+};
+
+/*
+** Reducer function for app state in store/state
+*/
+export function appReducer(state = initialState, action: Action) {
+  switch (action.type) {
+
+    /*
+    * Change the load state to true, and clear previous results
+    * to signaling that a EXECUTE a SQL++ Query is ongoing
+    */
+    case appActions.APP_MODE_CHANGE: {
+      return Object.assign({}, state, {
+        loading: false,
+        loaded: true,
+        success: false,
+        sqlQueryString: action.payload,
+        sqlQueryResult: [],
+        sqlQueryError: []
+      });
+    }
+    
+    /*
+    * Just returns the current store/state object
+    */
+    default:
+      return state;
+  }
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/dataset.reducer.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/dataset.reducer.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/dataset.reducer.ts
new file mode 100755
index 0000000..25d09b9
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/dataset.reducer.ts
@@ -0,0 +1,177 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Dataset } from '../models/asterixDB.model';
+import * as DatasetAction from '../actions/dataset.actions';
+
+export type Action = DatasetAction.All;
+
+/*
+** Interfaces for datasets in store/state
+*/
+export interface State {
+  loaded: boolean,
+  loading: boolean,
+  datasets: any[],
+  createDataset: any[],
+  createDatasetError: any[],
+  createDatasetSuccess: boolean,
+  createDatasetFailed: boolean,
+  dropDataset: any[],
+  dropDatasetError: any[],
+  dropDatasetSuccess: boolean,
+  dropDatasetFailed: boolean,
+  guideSelectsDataset: string,
+};
+
+const initialState: State = {
+  loaded: false,
+  loading: false,
+  datasets: [],
+  createDataset: [],
+  createDatasetError: [],
+  createDatasetSuccess: false,
+  createDatasetFailed: false,
+  dropDataset: [],
+  dropDatasetError: [],
+  dropDatasetSuccess: false,
+  dropDatasetFailed: false,
+  guideSelectsDataset: ""
+};
+
+/*
+** Reducer function for datasets in store/state
+*/
+export function datasetReducer(state = initialState, action: Action) {
+  switch (action.type) {
+
+    /*
+    * Change the selected dataset state to true to signaling
+    * UI from metadata guide 
+    */
+    case DatasetAction.GUIDE_SELECT_DATASET: {
+      return Object.assign({}, state, { guideSelectsDataset: action.payload });
+    }
+
+    /*
+    * Change the load state to true to signaling
+    * that a SELECT Query is ongoing
+    */
+    case DatasetAction.SELECT_DATASETS: {
+        return Object.assign({}, state, { loading: true });
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a SELECT Query is success and there is datasets available in the
+    * store
+    */
+    case DatasetAction.SELECT_DATASETS_SUCCESS: {
+      return Object.assign({}, state, {
+        loaded: true,
+        loading: false,
+        datasets: action.payload
+      })
+    }
+
+    /*
+    * Change the load state to true to signaling
+    * that a CREATE a Dataset Query is ongoing
+    */
+    case DatasetAction.CREATE_DATASET: {
+      return Object.assign({}, state, { 
+        createDataset: [],
+        createDatasetError: [],
+        createDatasetSuccess: false,
+        createDatasetFailed: false,
+      });
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a CREATE a Dataset Query is success and there is datasets available in the
+    * store
+    */
+    case DatasetAction.CREATE_DATASET_SUCCESS: {
+      return Object.assign({}, state, {
+        createDataset: action.payload,
+        createDatasetName: action.payload,        
+        createDatasetError: [],
+        createDatasetSuccess: true,
+        createDatasetFailed: false
+      })
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a CREATE a Dataset Query is failed and there is an error message available in the
+    * store
+    */
+    case DatasetAction.CREATE_DATASET_FAIL: {
+      return Object.assign({}, state, {
+        createDataset: [],
+        createDatasetError: action.payload,
+        createDatasetSuccess: false,
+        createDatasetFailed: true
+      })
+    }
+
+    /*
+    * Change the load state to true to signaling
+    * that a DROP a Dataset Query is ongoing
+    */
+    case DatasetAction.DROP_DATASET: {
+      return Object.assign({}, state, { 
+        dropDataset: [],
+        dropDatasetError: [],
+        dropDatasetName: action.payload,
+        dropDatasetSuccess: false,
+        dropDatasetFailed: false
+       });
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a DROP a Dataset Query is success and there is datasets available in the
+    * store
+    */
+    case DatasetAction.DROP_DATASET_SUCCESS: {
+      return Object.assign({}, state, {
+        dropDataset: action.payload,
+        dropDatasetError: [],
+        dropDatasetSuccess: true,
+        dropDatasetFailed: false
+      })
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a DROP a Dataset Query is failed and there is an error message available in the
+    * store
+    */
+    case DatasetAction.DROP_DATASET_FAIL: {
+      return Object.assign({}, state, {
+        dropDataset: [],
+        dropDatasetError: action.payload,
+        dropDatasetSuccess: false,
+        dropDatasetFailed: true
+      })
+    }
+
+    /*
+    * Just returns the current store/state object
+    */
+    default:
+      return state;
+  }
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/datatype.reducer.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/datatype.reducer.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/datatype.reducer.ts
new file mode 100755
index 0000000..1036fdb
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/datatype.reducer.ts
@@ -0,0 +1,167 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Datatype } from '../models/asterixDB.model';
+import * as DatatypeAction from '../actions/datatype.actions';
+
+export type Action = DatatypeAction.All;
+
+/*
+** Interfaces for datatype in store/state
+*/
+export interface State {
+  loaded: boolean,
+  loading: boolean,
+  datatypes: Datatype[],
+  createDatatype: any[],
+  createDatatypeError: any[],
+  createDatatypeSuccess: boolean,
+  createDatatypeFailed: boolean,
+  dropDatatype: any[],
+  dropDatatypeError: any[],
+  dropDatatypeSuccess: boolean,
+  dropDatatypeFailed: boolean
+};
+
+const initialState: State = {
+  loaded: false,
+  loading: false,
+  datatypes: [],
+  createDatatype: [],
+  createDatatypeError: [],
+  createDatatypeSuccess: false,
+  createDatatypeFailed: false,
+  dropDatatype: [],
+  dropDatatypeError: [],
+  dropDatatypeSuccess: false,
+  dropDatatypeFailed: false
+};
+
+/*
+** Reducer function for datatypes in store/state
+*/
+export function datatypeReducer(state = initialState, action: Action) {
+  switch (action.type) {
+
+    /*
+    * Change the load state to true to signaling
+    * that a SELECT Query is ongoing
+    */
+    case DatatypeAction.SELECT_DATATYPES: {
+        return Object.assign({}, state, { loading: true });
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a SELECT Query is success and there is datatypes available in the
+    * store
+    */
+    case DatatypeAction.SELECT_DATATYPES_SUCCESS: {
+      return Object.assign({}, state, {
+        loaded: true,
+        loading: false,
+        datatypes: action.payload
+      })
+    }
+
+    /*
+    * Change the load state to true to signaling
+    * that a CREATE a Datatype Query is ongoing
+    */
+    case DatatypeAction.CREATE_DATATYPE: {
+      return Object.assign({}, state, { 
+        createDatatype: [],
+        createDatatypeName: action.payload,        
+        createDatatypeError: [],
+        createDatatypeSuccess: false,
+        createDatatypeFailed: false,
+      });
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a CREATE a Datatype Query is success and there is datasets available in the
+    * store
+    */
+    case DatatypeAction.CREATE_DATATYPE_SUCCESS: {
+      return Object.assign({}, state, {
+        createDatatype: action.payload,
+        createDatatypeError: [],
+        createDatatypeSuccess: true,
+        createDatatypeFailed: false
+      })
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a CREATE a Datatype Query is failed and there is an error message available in the
+    * store
+    */
+    case DatatypeAction.CREATE_DATATYPE_FAIL: {
+      return Object.assign({}, state, {
+        createDatatype: [],
+        createDatatypeError: action.payload,
+        createDatatypeSuccess: false,
+        createDatatypeFailed: true
+      })
+    }
+
+    /*
+    * Change the load state to true to signaling
+    * that a DROP a Datatype Query is ongoing
+    */
+    case DatatypeAction.DROP_DATATYPE: {
+      return Object.assign({}, state, { 
+        dropDatatype: [],
+        dropDatatypeName: action.payload,       
+        dropDatatypeError: [],
+        dropDatatypeSuccess: false,
+        dropDatatypeFailed: false
+        });
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a DROP a Datatype Query is success and there is datasets available in the
+    * store
+    */
+    case DatatypeAction.DROP_DATATYPE_SUCCESS: {
+      return Object.assign({}, state, {
+        dropDatatype: action.payload,
+        dropDatatypeError: [],
+        dropDatatypeSuccess: true,
+        dropDatatypeFailed: false
+      })
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a DROP a Datatype Query is failed and there is an error message available in the
+    * store
+    */
+    case DatatypeAction.DROP_DATATYPE_FAIL: {
+      return Object.assign({}, state, {
+        dropDatatype: [],
+        dropDatatypeError: action.payload,
+        dropDatatypeSuccess: false,
+        dropDatatypeFailed: true
+      })
+    }
+
+    /*
+    * Just returns the current store/state object
+    */
+    default:
+      return state;
+  }
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/dataverse.reducer.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/dataverse.reducer.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/dataverse.reducer.ts
new file mode 100755
index 0000000..7ac78ea
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/dataverse.reducer.ts
@@ -0,0 +1,171 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Dataverse } from '../models/asterixDB.model';
+import * as DataverseAction from '../actions/dataverse.actions';
+
+export type Action = DataverseAction.All;
+
+/*
+** Interfaces for dataverses in store/state
+*/
+export interface State {
+  loaded: boolean,
+  loading: boolean,
+  dataverses: any[],
+  createDataverse: any[],
+  createDataverseName: string,
+  createDataverseError: any[],
+  createDataverseSuccess: boolean,
+  createDataverseFailed: boolean
+  dropDataverse: any[],
+  dropDataverseName: string;
+  dropDataverseError: any[],
+  dropDataverseSuccess: boolean,
+  dropDataverseFailed: boolean
+};
+
+const initialState: State = {
+  loaded: false,
+  loading: false,
+  dataverses: [],
+  createDataverse: [],
+  createDataverseName: "",
+  createDataverseError: [],
+  createDataverseSuccess: false,
+  createDataverseFailed: false,
+  dropDataverse: [],
+  dropDataverseName: "",
+  dropDataverseError: [],
+  dropDataverseSuccess: false,
+  dropDataverseFailed: false
+};
+
+/*
+** Reducer function for dataverses in store/state
+*/
+export function dataverseReducer(state = initialState, action: Action) {
+  switch (action.type) {
+
+    /*
+    * Change the load state to true to signaling
+    * that a SELECT Query is ongoing
+    */
+    case DataverseAction.SELECT_DATAVERSES: {
+        return Object.assign({}, state, { loading: true });
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a SELECT Query is success and there is dataverses available in the
+    * store
+    */
+    case DataverseAction.SELECT_DATAVERSES_SUCCESS: {
+      return Object.assign({}, state, {
+        loaded: true,
+        loading: false,
+        dataverses: action.payload //  _.sortBy(_.values(action.payload), 'dataverseName')
+      })
+    }
+
+    /*
+    * Change the load state to true to signaling
+    * that a CREATE a Dataset Query is ongoing
+    */
+    case DataverseAction.CREATE_DATAVERSE: {
+      return Object.assign({}, state, { 
+        createDataverse: [],
+        createDataverseName: action.payload,
+        createDataverseError: [],
+        createDataverseSuccess: false,
+        createDataverseFailed: false
+      });
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a CREATE a Dataverse Query is success and there is a success message available in the
+    * store
+    */
+    case DataverseAction.CREATE_DATAVERSE_SUCCESS: {
+      return Object.assign({}, state, {
+        createDataverse: action.payload,
+        createDataverseError: [],        
+        createDataverseSuccess: true,
+        createDataverseFailed: false
+      })
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a CREATE a Dataverse Query is failed and there is an error message available in the
+    * store
+    */
+    case DataverseAction.CREATE_DATAVERSE_FAIL: {
+      return Object.assign({}, state, {
+        createDataverse: [],
+        createDataverseError: action.payload,
+        createDataverseSuccess: false,
+        createDataverseFailed: true
+      })
+    }
+
+    /*
+    * Change the load state to true to signaling
+    * that a DROP a Dataverse Query is ongoing
+    */
+    case DataverseAction.DROP_DATAVERSE: {
+      return Object.assign({}, state, { 
+        dropDataverse: [],
+        dropDataverseName: action.payload,
+        dropDataverseError: [],
+        dropDataverseSuccess: false,
+        dropDataverseFailed: false
+      });
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a DROP a Dataverse Query is success and there is success message available in the
+    * store
+    */
+    case DataverseAction.DROP_DATAVERSE_SUCCESS: {
+      return Object.assign({}, state, {
+        dropDataverse: action.payload,
+        dropDataverseError: [],
+        dropDataverseSuccess: true,
+        dropDataverseFailed: false
+      })
+    }
+
+     /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a DROP a Dataverse Query is failed and there is an error message available in the
+    * store
+    */
+    case DataverseAction.DROP_DATAVERSE_FAIL: {
+      return Object.assign({}, state, {
+        dropDataverse: [],
+        dropDataverseError: action.payload,
+        dropDataverseSuccess: false,
+        dropDataverseFailed: true
+      })
+    }
+
+    /*
+    * Just returns the current store/state object
+    */
+    default:
+      return state;
+  }
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/index.reducer.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/index.reducer.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/index.reducer.ts
new file mode 100755
index 0000000..792abc7
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/index.reducer.ts
@@ -0,0 +1,167 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Index } from '../models/asterixDB.model';
+import * as IndexAction from '../actions/index.actions';
+
+export type Action = IndexAction.All;
+
+/*
+** Interfaces for indexes in store/state
+*/
+export interface State {
+  loaded: boolean,
+  loading: boolean,
+  indexes: Index[],
+  createIndex: any[],
+  createIndexError: any[],
+  createIndexSuccess: boolean,
+  createIndexFailed: boolean,
+  dropIndex: any[],
+  dropIndexError: any[],
+  dropIndexSuccess: boolean,
+  dropIndexFailed: boolean
+};
+
+const initialState: State = {
+  loaded: false,
+  loading: false,
+  indexes: [],
+  createIndex: [],
+  createIndexError: [],
+  createIndexSuccess: false,
+  createIndexFailed: false,
+  dropIndex: [],
+  dropIndexError: [],
+  dropIndexSuccess: false,
+  dropIndexFailed: false
+};
+
+/*
+** Reducer function for indexes in store/state
+*/
+export function indexReducer(state = initialState, action: Action) {
+  switch (action.type) {
+
+    /*
+    * Change the load state to true to signaling
+    * that a SELECT Query is ongoing
+    */
+    case IndexAction.SELECT_INDEXES: {
+      return Object.assign({}, state, { loading: true });
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a SELECT Query is success and there is indexes available in the
+    * store
+    */
+    case IndexAction.SELECT_INDEXES_SUCCESS: {
+      return Object.assign({}, state, {
+        loaded: true,
+        loading: false,
+        indexes: action.payload
+      })
+    }
+
+    /*
+    * Change the load state to true to signaling
+    * that a CREATE a Index Query is ongoing
+    */
+    case IndexAction.CREATE_INDEX: {
+      return Object.assign({}, state, { 
+        createIndex: [],
+        createIndexName: action.payload,       
+        createIndexError: [],
+        createIndexSuccess: false,
+        createIndexFailed: false
+      });
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a CREATE a Index Query is success and there is datasets available in the
+    * store
+    */
+    case IndexAction.CREATE_INDEX_SUCCESS: {
+      return Object.assign({}, state, {
+        createIndex: [],
+        createIndexError: [],
+        createIndexSuccess: true,
+        createIndexFailed: false
+      })
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a CREATE a Index Query is success and there is datasets available in the
+    * store
+    */
+    case IndexAction.CREATE_INDEX_SUCCESS: {
+      return Object.assign({}, state, {
+        createIndex: action.payload,
+        createIndexError: [],
+        createIndexSuccess: false,
+        createIndexFailed: true
+      })
+    }
+
+    /*
+    * Change the load state to true to signaling
+    * that a DROP a Index Query is ongoing
+    */
+    case IndexAction.DROP_INDEX: {
+      return Object.assign({}, state, { 
+        dropIndex: [],
+        dropIndexError: [],
+        dropIndexName: action.payload,               
+        dropIndexSuccess: false,
+        dropIndexFailed: false 
+      });
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a DROP a Index Query is success and there is datasets available in the
+    * store
+    */
+    case IndexAction.DROP_INDEX_SUCCESS: {
+      return Object.assign({}, state, {
+        dropIndex: action.payload,
+        dropIndexError: [],
+        dropIndexSuccess: true,
+        dropIndexFailed: false 
+      })
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a DROP a Index Query is failed and there is an error message available in the
+    * store
+    */
+    case IndexAction.DROP_INDEX_FAIL: {
+      return Object.assign({}, state, {
+        dropIndex: [],
+        dropIndexError: action.payload,
+        dropIndexSuccess: false,
+        dropIndexFailed: true 
+      })
+    }
+
+    /*
+    * Just returns the current store/state object
+    */
+    default:
+      return state;
+  }
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/index.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/index.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/index.ts
new file mode 100755
index 0000000..1965d8c
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/index.ts
@@ -0,0 +1,49 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { ActionReducer } from '@ngrx/store';
+import * as fromDataverse from './dataverse.reducer';
+import * as fromDataset from './dataset.reducer';
+import * as fromDatatype from './datatype.reducer';
+import * as fromIndex from './index.reducer';
+import * as fromQuery from './query.reducer';
+import * as fromQueryMetadata from './query-metadata.reducer';
+import * as fromMetadata from './metadata.reducer';
+import * as fromAppState from './app.reducer';
+
+/*
+** Global Interfaces store/state
+*/
+export interface ModelState {
+  dataverse: fromDataverse.State,
+  dataset: fromDataset.State,
+  datatype: fromDatatype.State,
+  index: fromIndex.State,
+  sqlQuery: fromQuery.State,
+  sqlMetadataQuery: fromQueryMetadata.State,
+  metadata: fromMetadata.State,
+  appState: fromAppState.State,
+}
+
+/*
+** Global Reducers configuration
+*/
+export const reducers = {
+  dataverse: fromDataverse.dataverseReducer,
+  dataset: fromDataset.datasetReducer,
+  datatype: fromDatatype.datatypeReducer,
+  index: fromIndex.indexReducer,
+  sqlQuery: fromQuery.sqlReducer,
+  sqlMetadataQuery: fromQueryMetadata.sqlMetadataReducer,
+  metadata: fromMetadata.metadataTreeReducer
+};

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/metadata.reducer.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/metadata.reducer.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/metadata.reducer.ts
new file mode 100755
index 0000000..52b88f2
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/metadata.reducer.ts
@@ -0,0 +1,56 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import * as metadataTreeActions from '../actions/metadata.actions';
+
+export type Action = metadataTreeActions.All;
+
+/*
+** Interfaces for the metadata tree in store/state
+*/
+export interface State {
+  tree: any[],
+  loading: boolean,
+  loaded: boolean,
+};
+
+const initialState: State = {
+  tree: [],
+  loading: false,
+  loaded: false
+};
+
+export function metadataTreeReducer(state = initialState, action: Action) {
+  switch (action.type) {
+    case metadataTreeActions.UPDATE_METADATA_TREE: {
+      return Object.assign({}, state, {
+        tree: [],
+        loading: true,
+        loaded: false
+      });
+    }
+
+    case metadataTreeActions.UPDATE_METADATA_TREE_SUCCESS: {
+      return Object.assign({}, state, {
+        tree: [...state.tree, action.payload],
+        loading: false,
+        loaded: true
+      });
+    }
+    /*
+    * Just returns the current store/state object
+    */
+    default:
+      return state;
+  }
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/query-metadata.reducer.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/query-metadata.reducer.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/query-metadata.reducer.ts
new file mode 100755
index 0000000..e360e95
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/query-metadata.reducer.ts
@@ -0,0 +1,96 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { AsterixDBQueryMessage } from '../models/asterixDB.model';
+import * as sqlQueryActions from '../actions/query.actions';
+
+export type Action = sqlQueryActions.All;
+
+/*
+** Interfaces for sql++ queries in store/state
+*/
+export interface State {
+  loading: boolean,
+  loaded: boolean,
+  success: boolean,
+  sqlQueryMetadataString: string,
+  sqlQueryMetadataResult: AsterixDBQueryMessage[],
+  sqlQueryMetadataError: AsterixDBQueryMessage[]
+};
+
+const initialState: State = {
+  loading: false,
+  loaded: false,
+  success: false,
+  sqlQueryMetadataString: "",
+  sqlQueryMetadataResult: [],
+  sqlQueryMetadataError: [],
+};
+
+/*
+** Reducer function for sql++ queries in store/state
+*/
+export function sqlMetadataReducer(state = initialState, action: Action) {
+  switch (action.type) {
+    /*
+    * Change the load state to true, and clear previous results
+    * to signaling that a METADATA EXECUTE a SQL++ Query is ongoing
+    */
+    case sqlQueryActions.EXECUTE_METADATA_QUERY: {
+      return Object.assign({}, state, {
+        loading: false,
+        loaded: true,
+        success: false,
+        sqlQueryMetadataString: action.payload,
+        sqlQueryMetadataResult: [],
+        sqlQueryMetadataError: []
+      });
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a  METADATA EXECUTE Query is success and there is data available in the
+    * store
+    */
+    case sqlQueryActions.EXECUTE_METADATA_QUERY_SUCCESS: {
+      return Object.assign({}, state, {
+        loading: false,
+        loaded: true,
+        success: true,
+        sqlQueryMetadataResult: action.payload,
+        sqlQueryMetadataError: []
+      })
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a  METADATA EXECUTE Query is failed and there is error data available in the
+    * store
+    */
+    case sqlQueryActions.EXECUTE_METADATA_QUERY_FAIL: {
+      return Object.assign({}, state, {
+        loading: false,
+        loaded: true,
+        success: false,
+        sqlQueryMetadataResult: [],
+        sqlQueryMetadataError: action.payload
+      })
+    }
+
+    /*
+    * Just returns the current store/state object
+    */
+    default:
+      return state;
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/query.reducer.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/query.reducer.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/query.reducer.ts
new file mode 100755
index 0000000..5c8ad08
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/query.reducer.ts
@@ -0,0 +1,97 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { AsterixDBQueryMessage } from '../models/asterixDB.model';
+import * as sqlQueryActions from '../actions/query.actions';
+
+export type Action = sqlQueryActions.All;
+
+/*
+** Interfaces for sql++ queries in store/state
+*/
+export interface State {
+  loading: boolean,
+  loaded: boolean,
+  success: boolean,
+  sqlQueryString: string,
+  sqlQueryResult: AsterixDBQueryMessage[],
+  sqlQueryError: AsterixDBQueryMessage[]
+};
+
+const initialState: State = {
+  loading: false,
+  loaded: false,
+  success: false,
+  sqlQueryString: "",
+  sqlQueryResult: [],
+  sqlQueryError: []
+};
+
+/*
+** Reducer function for sql++ queries in store/state
+*/
+export function sqlReducer(state = initialState, action: Action) {
+  switch (action.type) {
+
+    /*
+    * Change the load state to true, and clear previous results
+    * to signaling that a EXECUTE a SQL++ Query is ongoing
+    */
+    case sqlQueryActions.EXECUTE_QUERY: {
+      return Object.assign({}, state, {
+        loading: false,
+        loaded: true,
+        success: false,
+        sqlQueryString: action.payload,
+        sqlQueryResult: [],
+        sqlQueryError: []
+      });
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a EXECUTE Query is success and there is data available in the
+    * store
+    */
+    case sqlQueryActions.EXECUTE_QUERY_SUCCESS: {
+      return Object.assign({}, state, {
+        loading: false,
+        loaded: true,
+        success: true,
+        sqlQueryResult: action.payload,
+        sqlQueryError: []
+      })
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a EXECUTE Query is failed and there is error data available in the
+    * store
+    */
+    case sqlQueryActions.EXECUTE_QUERY_FAIL: {
+      return Object.assign({}, state, {
+        loading: false,
+        loaded: true,
+        success: false,
+        sqlQueryResult: [],
+        sqlQueryError: action.payload
+      })
+    }
+    
+    /*
+    * Just returns the current store/state object
+    */
+    default:
+      return state;
+  }
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/shared/services/app-core.service.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/shared/services/app-core.service.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/services/app-core.service.ts
new file mode 100755
index 0000000..ed38c26
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/shared/services/app-core.service.ts
@@ -0,0 +1,38 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Injectable } from '@angular/core';
+import { Store } from '@ngrx/store';
+import * as dataverseActions from '../../shared/actions/dataverse.actions'
+import * as datasetActions from '../../shared/actions/dataset.actions'
+import * as datatypesActions from '../../shared/actions/datatype.actions'
+import * as indexesActions from '../../shared/actions/index.actions'
+import * as metadataActions from '../../shared/actions/metadata.actions'
+
+/*
+* Main application service to initialize,
+* load, set App status and initial data, and synchronize app level functionality
+*/
+@Injectable()
+export class AppCoreService {
+	/*
+  	* Initialize and load metadata store structures
+	*/
+	constructor(private store: Store<any>) {
+		console.log('AsterixDB Web Console Core Service')
+		this.store.dispatch(new dataverseActions.SelectDataverses('-'));
+		this.store.dispatch(new datasetActions.SelectDatasets('-'));
+		this.store.dispatch(new datatypesActions.SelectDatatypes('-'));
+		this.store.dispatch(new indexesActions.SelectIndexes('-'));
+	}
+}


[11/43] asterixdb git commit: [NO ISSUE][STO] Only re-use compatible accessors in LSM Cursors

Posted by im...@apache.org.
[NO ISSUE][STO] Only re-use compatible accessors in LSM Cursors

- user model changes: no
- storage format changes: no
- interface changes: no

Details:
- Currently, when a search operation starts, using a previously
  used LSMCursor, and the number of components didn't change, we
  re-use cursors and accessors.
- However, we didn't check the type of the underlying component
  and since disk cursors/accessors are incompatible with memory
  component trees, we end up getting ClassCastException.
- This change checks for compatibility. If the component/cursor
  pair are incompatible, the cursor and accessor are destroyed
  and new ones are created.

Change-Id: I0fe224af1049b53c8cc37448ee8bfa2ccd780564
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2608
Sonar-Qube: Jenkins <je...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Contrib: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Luo Chen <cl...@uci.edu>
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>


Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/62b17918
Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/62b17918
Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/62b17918

Branch: refs/heads/release-0.9.4-pre-rc
Commit: 62b1791893e80958a8aa124af9961d063ac5064f
Parents: 16ea11c
Author: Abdullah Alamoudi <ba...@gmail.com>
Authored: Fri Apr 20 06:03:48 2018 +0300
Committer: abdullah alamoudi <ba...@gmail.com>
Committed: Fri Apr 20 04:58:27 2018 -0700

----------------------------------------------------------------------
 .../btree/impls/LSMBTreePointSearchCursor.java  | 31 ++++++++++++++++++--
 .../btree/impls/LSMBTreeRangeSearchCursor.java  | 26 ++++++++++++++--
 2 files changed, 52 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/62b17918/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreePointSearchCursor.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreePointSearchCursor.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreePointSearchCursor.java
index 1209e17..3520e3a 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreePointSearchCursor.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreePointSearchCursor.java
@@ -22,6 +22,7 @@ package org.apache.hyracks.storage.am.lsm.btree.impls;
 import java.util.List;
 
 import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.util.CleanupUtils;
 import org.apache.hyracks.dataflow.common.data.accessors.ITupleReference;
 import org.apache.hyracks.storage.am.bloomfilter.impls.BloomFilter;
 import org.apache.hyracks.storage.am.btree.impls.BTree;
@@ -162,7 +163,16 @@ public class LSMBTreePointSearchCursor extends EnforcedIndexCursor implements IL
         searchCallback = lsmInitialState.getSearchOperationCallback();
         predicate = (RangePredicate) lsmInitialState.getSearchPredicate();
         numBTrees = operationalComponents.size();
-        if (btreeCursors == null || btreeCursors.length != numBTrees) {
+        if (btreeCursors != null && btreeCursors.length != numBTrees) {
+            Throwable failure = CleanupUtils.destroy(null, btreeCursors);
+            btreeCursors = null;
+            failure = CleanupUtils.destroy(failure, btreeAccessors);
+            btreeAccessors = null;
+            if (failure != null) {
+                throw HyracksDataException.create(failure);
+            }
+        }
+        if (btreeCursors == null) {
             // object creation: should be relatively low
             btreeCursors = new ITreeIndexCursor[numBTrees];
             btreeAccessors = new BTreeAccessor[numBTrees];
@@ -175,8 +185,13 @@ public class LSMBTreePointSearchCursor extends EnforcedIndexCursor implements IL
             BTree btree = (BTree) component.getIndex();
             if (component.getType() == LSMComponentType.MEMORY) {
                 includeMutableComponent = true;
-                bloomFilters[i] = null;
+                if (bloomFilters[i] != null) {
+                    destroyAndNullifyCursorAtIndex(i);
+                }
             } else {
+                if (bloomFilters[i] == null) {
+                    destroyAndNullifyCursorAtIndex(i);
+                }
                 bloomFilters[i] = ((LSMBTreeWithBloomFilterDiskComponent) component).getBloomFilter();
             }
 
@@ -193,6 +208,18 @@ public class LSMBTreePointSearchCursor extends EnforcedIndexCursor implements IL
         foundTuple = false;
     }
 
+    private void destroyAndNullifyCursorAtIndex(int i) throws HyracksDataException {
+        // component at location i was a disk component before, and is now a memory component, or vise versa
+        bloomFilters[i] = null;
+        Throwable failure = CleanupUtils.destroy(null, btreeCursors[i]);
+        btreeCursors[i] = null;
+        failure = CleanupUtils.destroy(failure, btreeAccessors[i]);
+        btreeAccessors[i] = null;
+        if (failure != null) {
+            throw HyracksDataException.create(failure);
+        }
+    }
+
     @Override
     public void doNext() throws HyracksDataException {
         nextHasBeenCalled = true;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/62b17918/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeRangeSearchCursor.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeRangeSearchCursor.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeRangeSearchCursor.java
index bfda985..a675047 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeRangeSearchCursor.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeRangeSearchCursor.java
@@ -47,10 +47,9 @@ import org.apache.hyracks.storage.common.util.IndexCursorUtils;
 public class LSMBTreeRangeSearchCursor extends LSMIndexSearchCursor {
     private final ArrayTupleReference copyTuple;
     private final RangePredicate reusablePred;
-
     private ISearchOperationCallback searchCallback;
-
     private BTreeAccessor[] btreeAccessors;
+    private boolean[] isMemoryComponent;
     private ArrayTupleBuilder tupleBuilder;
     private boolean canCallProceed = true;
     private boolean resultOfSearchCallbackProceed = false;
@@ -340,15 +339,19 @@ public class LSMBTreeRangeSearchCursor extends LSMIndexSearchCursor {
             // object creation: should be relatively low
             rangeCursors = new IIndexCursor[numBTrees];
             btreeAccessors = new BTreeAccessor[numBTrees];
+            isMemoryComponent = new boolean[numBTrees];
         } else if (rangeCursors.length != numBTrees) {
             // should destroy first
             Throwable failure = CleanupUtils.destroy(null, btreeAccessors);
+            btreeAccessors = null;
             failure = CleanupUtils.destroy(failure, rangeCursors);
+            rangeCursors = null;
             if (failure != null) {
                 throw HyracksDataException.create(failure);
             }
             rangeCursors = new IIndexCursor[numBTrees];
             btreeAccessors = new BTreeAccessor[numBTrees];
+            isMemoryComponent = new boolean[numBTrees];
         }
         for (int i = 0; i < numBTrees; i++) {
             ILSMComponent component = operationalComponents.get(i);
@@ -357,7 +360,7 @@ public class LSMBTreeRangeSearchCursor extends LSMIndexSearchCursor {
                 includeMutableComponent = true;
             }
             btree = (BTree) component.getIndex();
-            if (btreeAccessors[i] == null) {
+            if (btreeAccessors[i] == null || destroyIncompatible(component, i)) {
                 btreeAccessors[i] = btree.createAccessor(NoOpIndexAccessParameters.INSTANCE);
                 rangeCursors[i] = btreeAccessors[i].createSearchCursor(false);
             } else {
@@ -365,6 +368,7 @@ public class LSMBTreeRangeSearchCursor extends LSMIndexSearchCursor {
                 btreeAccessors[i].reset(btree, NoOpOperationCallback.INSTANCE, NoOpOperationCallback.INSTANCE);
                 rangeCursors[i].close();
             }
+            isMemoryComponent[i] = component.getType() == LSMComponentType.MEMORY;
         }
         IndexCursorUtils.open(btreeAccessors, rangeCursors, searchPred);
         try {
@@ -377,6 +381,22 @@ public class LSMBTreeRangeSearchCursor extends LSMIndexSearchCursor {
         }
     }
 
+    private boolean destroyIncompatible(ILSMComponent component, int index) throws HyracksDataException {
+        // exclusive or. if the component is memory and the previous one at that index was a disk component
+        // or vice versa, then we should destroy the cursor and accessor since they need to be recreated
+        if (component.getType() == LSMComponentType.MEMORY ^ isMemoryComponent[index]) {
+            Throwable failure = CleanupUtils.destroy(null, btreeAccessors[index]);
+            btreeAccessors[index] = null;
+            failure = CleanupUtils.destroy(failure, rangeCursors[index]);
+            rangeCursors[index] = null;
+            if (failure != null) {
+                throw HyracksDataException.create(failure);
+            }
+            return true;
+        }
+        return false;
+    }
+
     @Override
     public boolean getSearchOperationCallbackProceedResult() {
         return resultOfSearchCallbackProceed;


[15/43] asterixdb git commit: [ASTERIXDB-2377][OTH] Fix JSON of Additional Expressions

Posted by im...@apache.org.
[ASTERIXDB-2377][OTH] Fix JSON of Additional Expressions

- user model changes: no
- storage format changes: no
- interface changes: no

Details:
- Fix JSON of additional expressions in the JSON
  plan printer of InsertDeleteUpsertOperator.

Change-Id: I2d13b91b4e5e36b156f52fbb09f0ddcffe1deda3
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2627
Sonar-Qube: Jenkins <je...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Contrib: Jenkins <je...@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Till Westmann <ti...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/6cbb8da8
Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/6cbb8da8
Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/6cbb8da8

Branch: refs/heads/release-0.9.4-pre-rc
Commit: 6cbb8da8958fa42377391942ce9386d4336487ef
Parents: c2d19a5
Author: Murtadha Hubail <mh...@apache.org>
Authored: Sat Apr 28 18:09:46 2018 +0300
Committer: Murtadha Hubail <mh...@apache.org>
Committed: Sun Apr 29 12:13:15 2018 -0700

----------------------------------------------------------------------
 .../prettyprint/LogicalOperatorPrettyPrintVisitorJson.java       | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/6cbb8da8/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitorJson.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitorJson.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitorJson.java
index 1076eb5..8acf08b 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitorJson.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitorJson.java
@@ -544,9 +544,9 @@ public class LogicalOperatorPrettyPrintVisitorJson extends AbstractLogicalOperat
         addIndent(indent).append("\"from-record\": \"")
                 .append(op.getPayloadExpression().getValue().accept(exprVisitor, indent) + "\"");
         if (op.getAdditionalNonFilteringExpressions() != null) {
-            buffer.append(",\n\"meta\": \"");
+            buffer.append(",\n\"meta\": {");
             pprintExprList(op.getAdditionalNonFilteringExpressions(), 0);
-            buffer.append("\"");
+            buffer.append("}");
         }
         buffer.append(",\n");
         addIndent(indent).append("\"partitioned-by\": {");


[39/43] asterixdb git commit: [NO ISSUE] Introduce AsterixServerIntegrationUtil

Posted by im...@apache.org.
[NO ISSUE] Introduce AsterixServerIntegrationUtil

Add integration util flavor with 'asterix-server' classpath, e.g. includes
asterix-dashboard

Change-Id: I5371a6bb03249ca34f4797713ee6b176a8f8f757
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2667
Sonar-Qube: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Ian Maxon <im...@apache.org>
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>


Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/265919e4
Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/265919e4
Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/265919e4

Branch: refs/heads/release-0.9.4-pre-rc
Commit: 265919e47096eac7c9869fa3146241840a9b7af9
Parents: 0a7c566
Author: Michael Blow <mb...@apache.org>
Authored: Tue May 29 12:16:36 2018 -0400
Committer: Michael Blow <mb...@apache.org>
Committed: Tue May 29 12:26:39 2018 -0700

----------------------------------------------------------------------
 .../resources/licenses/3rdpartylicenses.txt     |  2 +-
 .../server/AsterixServerIntegrationUtil.java    | 24 ++++++++++++++++++++
 2 files changed, 25 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/265919e4/asterixdb/asterix-dashboard/src/main/resources/licenses/3rdpartylicenses.txt
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/licenses/3rdpartylicenses.txt b/asterixdb/asterix-dashboard/src/main/resources/licenses/3rdpartylicenses.txt
index 9334697..d552159 100644
--- a/asterixdb/asterix-dashboard/src/main/resources/licenses/3rdpartylicenses.txt
+++ b/asterixdb/asterix-dashboard/src/main/resources/licenses/3rdpartylicenses.txt
@@ -1,4 +1,4 @@
-core-js@2.5.6
+core-js@2.5.7
 MIT
 Copyright (c) 2014-2018 Denis Pushkarev
 

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/265919e4/asterixdb/asterix-server/src/test/java/org/apache/asterix/test/server/AsterixServerIntegrationUtil.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-server/src/test/java/org/apache/asterix/test/server/AsterixServerIntegrationUtil.java b/asterixdb/asterix-server/src/test/java/org/apache/asterix/test/server/AsterixServerIntegrationUtil.java
new file mode 100644
index 0000000..b62dddd
--- /dev/null
+++ b/asterixdb/asterix-server/src/test/java/org/apache/asterix/test/server/AsterixServerIntegrationUtil.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2009-2013 by The Regents of the University of California
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * you may obtain a copy of the License from
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.asterix.test.server;
+
+import org.apache.asterix.api.common.AsterixHyracksIntegrationUtil;
+
+public class AsterixServerIntegrationUtil extends AsterixHyracksIntegrationUtil {
+
+    public static void main(String a[]) throws Exception {
+        AsterixHyracksIntegrationUtil.main(a);
+    }
+}


[26/43] asterixdb git commit: [ASTERIXDB-2318] Build dashboard in mvn

Posted by im...@apache.org.
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/dataset-create-dialog.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/dataset-create-dialog.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/dataset-create-dialog.component.scss
new file mode 100755
index 0000000..c969489
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/dataset-create-dialog.component.scss
@@ -0,0 +1,18 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+.dataset-dialog {    
+    font-family: "Roboto Mono", monospace;
+    font-size: 0.80rem;
+    font-weight: 500;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/dataset-drop-dialog.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/dataset-drop-dialog.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/dataset-drop-dialog.component.html
new file mode 100755
index 0000000..517006c
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/dataset-drop-dialog.component.html
@@ -0,0 +1,26 @@
+<!--/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/-->
+<div class="dataset-dialog">
+    <p mat-dialog-title>DROP DATASET</p>
+    <mat-dialog-content>
+        <p>PLEASE GIVE THE NAME OF THE DATASET TO DROP</p>
+    </mat-dialog-content>
+        <mat-form-field>
+            <input matInput tabindex="0" [(ngModel)]="data.datasetName">
+        </mat-form-field>
+    <mat-dialog-actions>
+        <button mat-button (click)="onClick()" tabindex="1">DROP</button>
+        <button mat-button (click)="onNoClick()" tabindex="2">CANCEL</button>
+    </mat-dialog-actions>
+</div>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/dataset-drop-dialog.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/dataset-drop-dialog.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/dataset-drop-dialog.component.scss
new file mode 100755
index 0000000..c969489
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/dataset-drop-dialog.component.scss
@@ -0,0 +1,18 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+.dataset-dialog {    
+    font-family: "Roboto Mono", monospace;
+    font-size: 0.80rem;
+    font-weight: 500;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/datasets.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/datasets.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/datasets.component.html
new file mode 100755
index 0000000..f556951
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/datasets.component.html
@@ -0,0 +1,112 @@
+<!--/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/ -->
+<div class="container" (click)="onClick()">
+  <div class="master">
+      <mat-card class="datasets-card" *ngIf="loaded$ | async as ld">
+        <mat-toolbar color="primary" class="datasets-selector">
+            <mat-icon class="icon">menu</mat-icon>
+            <span>DATASETS - METADATA</span>
+            <span class="spacer"></span>
+        </mat-toolbar>
+        <mat-card-content class="datasets-content">
+            <mat-table #table [dataSource]="dataSource" class="datasets-table">
+                <!-- CompactionPolicy Column -->
+                <ng-container matColumnDef="CompactionPolicy">
+                  <mat-header-cell *matHeaderCellDef class="header-compactionpolicy-cell">Compaction Policy</mat-header-cell>
+                  <mat-cell *matCellDef="let element" class="dataset-compactionpolicy-cell"> {{element.CompactionPolicy}} </mat-cell>
+                </ng-container>
+    
+                <!-- DatasetId Column -->
+                <ng-container matColumnDef="DatasetId">
+                  <mat-header-cell *matHeaderCellDef class="header-datasetid-cell">Dataset Id</mat-header-cell>
+                  <mat-cell *matCellDef="let element" class="dataset-datasetid-cell"> {{element.DatasetId}} </mat-cell>
+                </ng-container>
+    
+                <!-- DatasetName Column -->
+                <ng-container matColumnDef="DatasetName">
+                  <mat-header-cell *matHeaderCellDef class="header-datasetname-cell">Dataset Name</mat-header-cell>
+                  <mat-cell *matCellDef="let element" class="dataset-datasetname-cell"> {{element.DatasetName}} </mat-cell>
+                </ng-container>
+    
+                <!-- DatasetType Column -->
+                <ng-container matColumnDef="DatasetType">
+                  <mat-header-cell *matHeaderCellDef class="header-datasettype-cell">Dataset Type</mat-header-cell>
+                  <mat-cell *matCellDef="let element" class="dataset-datasettype-cell"> {{element.DatasetType}} </mat-cell>
+                </ng-container>
+    
+                <!-- DatatypeDataverseName Column -->
+                <ng-container matColumnDef="DatatypeDataverseName">
+                  <mat-header-cell *matHeaderCellDef class="header-datatypedataversename-cell">Datatype Dataverse Name</mat-header-cell>
+                  <mat-cell *matCellDef="let element" class="dataset-datatypedataversename-cell"> {{element.DatatypeDataverseName}} </mat-cell>
+                </ng-container>
+    
+                <!-- DatatypeName Column -->
+                <ng-container matColumnDef="DatatypeName">
+                  <mat-header-cell *matHeaderCellDef class="header-datatypename-cell">Datatype Name</mat-header-cell>
+                  <mat-cell *matCellDef="let element" class="dataset-datatypename-cell"> {{element.DatatypeName}} </mat-cell>
+                </ng-container>
+    
+                <!-- DataverseName Column -->
+                <ng-container matColumnDef="DataverseName">
+                  <mat-header-cell *matHeaderCellDef class="header-dataversename-cell">Dataverse Name</mat-header-cell>
+                  <mat-cell *matCellDef="let element" class="dataset-dataversename-cell"> {{element.DataverseName}} </mat-cell>
+                </ng-container>
+    
+                <!-- GroupName Column -->
+                <ng-container matColumnDef="GroupName">
+                  <mat-header-cell *matHeaderCellDef class="header-groupname-cell">Group Name</mat-header-cell>
+                  <mat-cell *matCellDef="let element" class="dataset-groupname-cell"> {{element.GroupName}} </mat-cell>
+                </ng-container>
+    
+                <!-- PendingOp Column -->
+                <ng-container matColumnDef="PendingOp">
+                  <mat-header-cell *matHeaderCellDef class="header-pendingop-cell">Pending Op</mat-header-cell>
+                  <mat-cell *matCellDef="let element" class="dataset-pendingop-cell"> {{element.PendingOp}} </mat-cell>
+                </ng-container>
+    
+                <!-- DatasetType Column -->
+                <ng-container matColumnDef="Timestamp">
+                  <mat-header-cell *matHeaderCellDef class="header-timestamp-cell">Timestamp</mat-header-cell>
+                  <mat-cell *matCellDef="let element" class="dataset-timestamp-cell"> {{element.Timestamp}} </mat-cell>
+                </ng-container>
+    
+                <mat-header-row *matHeaderRowDef="['DatasetName', 'DataverseName', 'DatatypeName', 'Timestamp']"></mat-header-row>
+                <mat-row *matRowDef="let row; columns: ['DatasetName', 'DataverseName', 'DatatypeName', 'Timestamp'];"
+                  [ngClass]="{'highlight': selectedRowIndex == row.id}"
+                  (click)="highlight(row)">
+                </mat-row>
+            </mat-table>
+        </mat-card-content>
+        <mat-card-actions class="actions">
+            <button class="refresh-button" mat-button (click)="openDropDatasetDialog()">DROP</button>
+            <span class="error-message">{{errorMessage}}</span>
+            <span class="spacer"></span>
+            <button class="refresh-button" mat-button (click)="getDatasets()">REFRESH</button>
+        </mat-card-actions>
+      </mat-card>
+      <awc-query-metadata #querymetadata class="query"></awc-query-metadata>
+  </div>
+  <div class="detail">
+      <mat-card class="datasets-details-card">
+          <mat-toolbar color="primary" class="datasets-selector">
+              <mat-icon class="icon">menu</mat-icon>
+              <span>DATASET - METADATA - DETAILS</span>
+              <span class="spacer"></span>
+          </mat-toolbar>
+          <mat-card-content class="datasets-content output">
+            <span><pre>{{output}}</pre></span>
+          </mat-card-content>
+        </mat-card>
+  </div>
+</div>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/datasets.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/datasets.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/datasets.component.scss
new file mode 100755
index 0000000..38a8272
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/datasets.component.scss
@@ -0,0 +1,415 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+$datasets-spacing-unit: 8px;
+
+.container {
+  display: flex;
+	flex-flow: row;
+	padding: 0;
+  margin: 0;
+}
+
+.master {
+  width: 60%;
+  overflow: hidden;
+}
+
+.detail {
+  width: 40%;
+  overflow: hidden;
+}
+
+.datasets-card {
+	display: flex;
+	flex-flow: column;
+  padding: 0;
+  margin:0 auto;
+  margin-top: ($datasets-spacing-unit * 2);
+  min-height: 450px;
+  max-height: 450px;
+  //min-width: 98%; //(100vw / 2);
+  //max-width: 98%; // (100vw / 2);
+  width: 95%; // 98%;
+  overflow: hidden;
+}
+
+.datasets-details-card {
+	display: flex;
+	flex-flow: column;
+  padding: 0;
+  margin:0 auto;
+  margin: ($datasets-spacing-unit * 2);
+  min-height: 716px;
+  max-height: 716px;
+  //min-width: 95%; //(100vw / 2);
+  //max-width: 95%; // (100vw / 2);
+  overflow: hidden;
+}
+
+.icon {
+	padding: 0 14px 0 0;
+	margin: 0;
+}
+
+.spacer {
+  flex: 1 1 auto;
+}
+
+.datasets-selector {
+	min-height: 42px;
+	max-height: 42px;
+	justify-content: center;
+	font-size: 0.80rem;
+  font-weight: 500;
+  background-color: white;
+	border: 1px solid rgba(54, 147, 209, 0.87);
+}
+
+.datasets-content {
+  position:relative;
+  top: 0;
+  left: 0;
+  margin: 0px;
+  padding: 0px;
+  overflow: auto;
+}
+
+.datasets-table {
+  margin: $datasets-spacing-unit !important;
+  height: 330px;
+  overflow: auto;
+}
+
+.spacer {
+  flex: 1 1 auto;
+}
+
+.example-header {
+  min-height: 64px;
+  display: flex;
+  align-items: center;
+  padding-left: 24px;
+  font-size: 20px;
+}
+
+.mat-table {
+  overflow: auto;
+}
+
+.customWidthClass{
+   flex: 0 0 250px;
+}
+
+.mat-column-DataverseName {
+  text-align: left;
+}
+
+.mat-header-cell.mat-column-DataverseName {
+  text-align: left;
+}
+
+.mat-cell.mat-column-DataverseName {
+  text-align: left;
+}
+
+.header-compactionpolicy-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 250px;
+}
+
+.dataset-compactionpolicy-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 250px;
+}
+
+.header-datasetid-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 250px;
+}
+
+.dataset-datasetid-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 250px;
+}
+
+.header-datasetname-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 250px;
+}
+
+.dataset-datasetname-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 250px;
+}
+
+.header-datasettype-cell {
+  border: none;
+  font-size: 12px;
+  //letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 250px;
+}
+
+.dataset-datasettype-cell {
+  border: none;
+  font-size: 12px;
+  //letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 250px;
+}
+
+.header-datatypedataversename-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 250px;
+}
+
+.dataset-datatypedataversename-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 250px;
+}
+
+.header-datatypename-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 250px;
+}
+
+.dataset-datatypename-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 250px;
+}
+
+.header-dataversename-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 250px;
+}
+
+.dataset-dataversename-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 250px;
+}
+
+
+.header-groupname-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 250px;
+}
+
+.dataset-groupname-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 250px;
+}
+
+.header-timestamp-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 250px;
+}
+
+.dataset-timestamp-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 250px;
+}
+
+.example-header {
+  min-height: 56px;
+  max-height: 56px;
+  display: flex;
+  align-items: center;
+  padding: 8px 24px 0;
+  font-size: 20px;
+  justify-content: space-between;
+  border-bottom: 1px solid transparent;
+}
+
+.mat-form-field {
+  font-size: 14px;
+  flex-grow: 1;
+  margin-top: 8px;
+}
+
+.example-no-results {
+  display: flex;
+  justify-content: center;
+  padding: 24px;
+  font-size: 12px;
+  font-style: italic;
+}
+
+.actions {
+  display: flex;
+  border-top: 1px solid rgba(0, 0, 0, 0.1);
+  color: rgba(54, 147, 209, 0.87);
+  padding: $datasets-spacing-unit;
+  margin: 0;
+}
+
+.error-message {
+  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
+  color: rgba(209, 54, 54, 0.87);
+  padding-top: 10px;  
+  padding-left: 20px;
+  text-overflow: ellipsis;
+}
+
+.output {
+  padding-left: ($datasets-spacing-unit * 2);
+}
+
+

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/datasets.component.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/datasets.component.ts b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/datasets.component.ts
new file mode 100755
index 0000000..0fe8c74
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/datasets.component.ts
@@ -0,0 +1,231 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Component, ElementRef, ViewChild, Inject, Input } from '@angular/core';
+import { Dataset } from '../../../shared/models/asterixDB.model'
+import { Store } from '@ngrx/store';
+import { Observable } from 'rxjs/Observable';
+import * as datasetActions from '../../../shared/actions/dataset.actions'
+import {DataSource} from '@angular/cdk/collections';
+import {BehaviorSubject} from 'rxjs/BehaviorSubject';
+import { Subscription } from "rxjs/Rx";
+import { State } from '../../../shared/reducers/dataset.reducer';
+import 'rxjs/add/operator/startWith';
+import 'rxjs/add/observable/merge';
+import 'rxjs/add/operator/map';
+import 'rxjs/add/operator/debounceTime';
+import 'rxjs/add/operator/distinctUntilChanged';
+import 'rxjs/add/observable/fromEvent';
+import { MatPaginator } from '@angular/material';
+import { SelectionModel } from '@angular/cdk/collections';
+import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';
+
+/**
+ * Root component
+ * Defines our application's layout
+ */
+@Component({
+  selector: 'awc-datasets',
+  templateUrl: 'datasets.component.html',
+  styleUrls: ['datasets.component.scss']
+})
+
+export class DatasetCollection {
+  displayedColumns = "['CompactionPolicy', 'DatasetId', 'DatasetName', 'DatasetType', 'DatatypeDataverseName', 'DatatypeName', 'DataverseName', 'GroupName', 'PendingOp', 'Timestamp']"
+
+/*
+  compactionPolicy: string;
+  compactionPolicyProperties: CompactionPolicyProperties[]; *
+  datasetId: string;
+  datasetName: string;
+  datasetType:string;
+  datatypeDataverseName: string;
+  datatypeName: string;
+  dataverseName: string;
+  groupName:string;
+  hints: string[]; *
+  internalDetails: InternalDetails; *
+  pendingOp: string;
+  timestamp: string; */
+  datasetName: string;  
+  dataSource: DatasetDataSource | null;
+  loaded$: Observable<any>
+  @Input('message') errorMessage: string = ""
+  dsName = "";
+
+  constructor(private store: Store<any>, public dialog: MatDialog) {
+    this.loaded$ = this.store.select('dataset');
+
+    // Watching the name of the latest create dataset
+    this.store.select(s => s.dataset.createDatasetName).subscribe((data: any) => {
+      this.dsName = data;
+    })
+
+    // Watching the name of the latest drop dataset
+    this.store.select(s => s.dataset.dropDatasetName).subscribe((data: any) => {
+      this.dsName = data;
+    })
+
+    // Watching for the if there is a change in the collection
+		this.store.select(s => s.dataset.createDatasetSuccess).subscribe((data: any) => {
+      if (data === true) {
+        this.getDatasets();
+        this.errorMessage = "SUCCEED: CREATE DATASET " + this.dsName;
+      }  
+    })
+
+    // Watching for the if there is a error in a create dataset operation 
+		this.store.select(s => s.dataset.createDatasetError).subscribe((data: any) => {
+      if (data.errors) {
+        this.errorMessage = "ERROR: " + data.errors[0].msg;
+      }  
+    })
+
+
+    // Watching for the success message in a drop dataset operation 
+    this.store.select(s => s.dataset.dropDatasetSuccess).subscribe((data: any) => {
+      if (data === true) {
+        this.getDatasets();
+        this.errorMessage = "SUCCEED: DROP DATASET " + this.dsName;
+      }  
+    })
+
+    // Watching for the if there is a error in a drop dataset operation 
+		this.store.select(s => s.dataset.dropDatasetError).subscribe((data: any) => {
+      if (data.errors) {
+        this.errorMessage = "ERROR: " + data.errors[0].msg;
+      }  
+    })
+  }
+
+  getDatasets() {
+    // Trigger the effect to refresh the dataset
+    this.store.dispatch(new datasetActions.SelectDatasets('-'));
+  }
+
+  ngOnInit() {
+    // Assign the datasource for the table 
+    this.dataSource = new DatasetDataSource(this.store);
+  }
+
+  /* 
+  * opens the create dataverse dialog
+  */
+  openCreateDatasetDialog(): void {
+    let dialogRef = this.dialog.open(DialogCreateDataset, {
+      width: '420px',
+      data: { name: this.datasetName }
+    });
+
+    dialogRef.afterClosed().subscribe(result => {
+      this.datasetName = result;
+    });
+  }
+
+  /* 
+  * opens the drop dataverse dialog
+  */
+  openDropDatasetDialog(): void {
+    let dialogRef = this.dialog.open(DialogDropDataset, {
+      width: '420px',
+      data: { name: this.datasetName }
+    });
+
+    dialogRef.afterClosed().subscribe(result => {
+      this.datasetName = result;
+    });
+  }
+
+  /* 
+  * Clean up the error message on the screen
+  */
+  onClick(): void {
+    this.errorMessage = "";
+  }
+
+  output: any;
+
+  highlight(row){
+    this.output = JSON.stringify(row, null, 2);
+  }
+
+  @ViewChild('querymetadata') inputQuery;
+  
+  /* Cleans up error message */
+  cleanUp() {
+    this.errorMessage = ""; 
+    // Cascading   
+    this.inputQuery.cleanUp(); 
+  }
+}
+
+@Component({
+  selector: 'dataset-create-dialog',
+  templateUrl: 'dataset-create-dialog.component.html',
+  styleUrls: ['dataset-create-dialog.component.scss']
+})
+
+export class DialogCreateDataset {
+  constructor(  private store: Store<any>,
+                public dialogCreateDsRef: MatDialogRef<DialogCreateDataset>,
+                @Inject(MAT_DIALOG_DATA) public data: any) { }
+
+  onClick(): void {
+    this.store.dispatch(new datasetActions.CreateDataset(this.data.datasetName));
+    this.dialogCreateDsRef.close();
+  }
+
+  onNoClick(): void {
+    this.dialogCreateDsRef.close();
+  }
+}
+
+@Component({
+  selector: 'dataset-drop-dialog',
+  templateUrl: 'dataset-drop-dialog.component.html',
+  styleUrls: ['dataset-drop-dialog.component.scss']
+})
+
+export class DialogDropDataset {
+  constructor(  private store: Store<any>,
+                public dialogDropDsRef: MatDialogRef<DialogDropDataset>,
+                @Inject(MAT_DIALOG_DATA) public data: any) { }
+
+  onClick(): void {
+    this.store.dispatch(new datasetActions.DropDataset(this.data.datasetName));
+    this.dialogDropDsRef.close();
+  }
+
+  onNoClick(): void {
+    this.dialogDropDsRef.close();
+  }
+}
+
+export class DatasetDataSource extends DataSource<any> {
+  private datasets$: Observable<any>
+  constructor(private store: Store<any>) {
+    super();
+    this.datasets$ = this.store.select(s => s.dataset.datasets.results);
+  }
+
+  /** Connect function called by the table to retrieve one stream containing the data to render. */
+  connect(): Observable<Dataset[]> {
+      const displayDataChanges = [
+        this.datasets$,
+      ];
+
+    return this.datasets$;
+  }
+
+  disconnect() {}
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatype-create-dialog.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatype-create-dialog.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatype-create-dialog.component.html
new file mode 100755
index 0000000..aca06fd
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatype-create-dialog.component.html
@@ -0,0 +1,14 @@
+<!--/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/-->
+<!-- Place holder for future expansion -->
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatype-create-dialog.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatype-create-dialog.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatype-create-dialog.component.scss
new file mode 100755
index 0000000..9502a7e
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatype-create-dialog.component.scss
@@ -0,0 +1,18 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+.datatype-dialog {    
+    font-family: "Roboto Mono", monospace;
+    font-size: 0.80rem;
+    font-weight: 500;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatype-drop-dialog.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatype-drop-dialog.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatype-drop-dialog.component.html
new file mode 100755
index 0000000..1157261
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatype-drop-dialog.component.html
@@ -0,0 +1,26 @@
+<!--/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/-->
+<div class="datatype-dialog">
+    <p mat-dialog-title>DROP DATATYPE</p>
+    <mat-dialog-content>
+        <p>PLEASE GIVE THE NAME OF THE DATATYPE TO DROP</p>
+    </mat-dialog-content>
+        <mat-form-field>
+            <input matInput tabindex="0" [(ngModel)]="data.datatypeName">
+        </mat-form-field>
+    <mat-dialog-actions>
+        <button mat-button (click)="onClick()" tabindex="1">DROP</button>
+        <button mat-button (click)="onNoClick()" tabindex="2">CANCEL</button>
+    </mat-dialog-actions>
+</div>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatype-drop-dialog.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatype-drop-dialog.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatype-drop-dialog.component.scss
new file mode 100755
index 0000000..9502a7e
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatype-drop-dialog.component.scss
@@ -0,0 +1,18 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+.datatype-dialog {    
+    font-family: "Roboto Mono", monospace;
+    font-size: 0.80rem;
+    font-weight: 500;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatypes.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatypes.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatypes.component.html
new file mode 100755
index 0000000..e580a54
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatypes.component.html
@@ -0,0 +1,70 @@
+<!--/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/ -->
+<div class="container" (click)="onClick()">
+  <div class="master">
+   <mat-card class="datatypes-card" *ngIf="loaded$ | async as ld">
+      <mat-toolbar color="primary" class="datatypes-selector">
+          <mat-icon class="icon">menu</mat-icon>
+          <span>DATATYPES - METADATA</span>
+          <span class="spacer"></span>
+      </mat-toolbar>
+      <mat-card-content class="datatypes-content">
+        <mat-table #table [dataSource]="dataSource" class="datatypes-table" role="treegrid">
+            <!-- Datatype Name -->
+            <ng-container matColumnDef="DatatypeName">
+              <mat-header-cell *matHeaderCellDef class="header-datatypename-cell">Datatype Name</mat-header-cell>
+              <mat-cell *matCellDef="let element" class="datatypes-datatypename-cell">{{element.DatatypeName}} </mat-cell>
+            </ng-container>
+
+            <!-- Data Type Dataverse Name -->
+            <ng-container matColumnDef="DataverseName">
+              <mat-header-cell *matHeaderCellDef class="header-dataversename-cell">Dataverse Name </mat-header-cell>
+              <mat-cell *matCellDef="let element" class="datatypes-dataversename-cell">{{element.DataverseName}} </mat-cell>
+            </ng-container>
+
+            <!-- Timestamp Column -->
+            <ng-container matColumnDef="Timestamp">
+              <mat-header-cell *matHeaderCellDef class="header-timestamp-cell">Timestamp</mat-header-cell>
+              <mat-cell *matCellDef="let element" class="datatypes-timestamp-cell">{{element.Timestamp}}</mat-cell>
+            </ng-container>
+
+            <mat-header-row *matHeaderRowDef="['DatatypeName', 'DataverseName', 'Timestamp']"></mat-header-row>
+            <mat-row *matRowDef="let row; columns: ['DatatypeName', 'DataverseName', 'Timestamp'];"
+                [ngClass]="{'highlight': selectedRowIndex == row.id}"
+                (click)="highlight(row)">
+            </mat-row>
+        </mat-table>
+      </mat-card-content>
+      <mat-card-actions class="actions">
+          <button class="refresh-button" mat-button (click)="openDropDatatypeDialog()">DROP</button>
+          <span class="error-message">{{errorMessage}}</span>
+          <span class="spacer"></span>
+          <button class="refresh-button" mat-button (click)="getDatatypes()">REFRESH</button>
+      </mat-card-actions>
+    </mat-card> 
+    <awc-query-metadata #querymetadata class="query"></awc-query-metadata>
+  </div>
+  <div class="detail">
+      <mat-card class="datatypes-details-card">
+          <mat-toolbar color="primary" class="datatypes-selector">
+              <mat-icon class="icon">menu</mat-icon>
+              <span>DATATYPE - METADATA - DETAILS</span>
+              <span class="spacer"></span>
+          </mat-toolbar>
+          <mat-card-content class="datatypes-content output">
+            <span><pre>{{output}}</pre></span>
+          </mat-card-content>
+        </mat-card>
+  </div>
+</div>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatypes.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatypes.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatypes.component.scss
new file mode 100755
index 0000000..d4aeffc
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatypes.component.scss
@@ -0,0 +1,267 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+$datatypes-spacing-unit: 8px;
+
+.container {
+  display: flex;
+	flex-flow: row;
+	padding: 0;
+  margin: 0;
+}
+
+.master {
+  width: 60%;
+  overflow: hidden;
+}
+
+.detail {
+  width: 40%;
+  overflow: hidden;
+}
+
+.datatypes-card {
+	display: flex;
+	flex-flow: column;
+  padding: 0;
+  margin:0 auto;
+  margin-top: ($datatypes-spacing-unit * 2);
+  min-height: 450px;
+  max-height: 450px;
+  //min-width: 98%; //(100vw / 2);
+  //max-width: 98%; // (100vw / 2);
+  width: 95%; // 98%;
+  overflow: hidden;
+}
+
+.datatypes-details-card {
+	display: flex;
+	flex-flow: column;
+  padding: 0;
+  margin:0 auto;
+  margin: ($datatypes-spacing-unit * 2);
+  min-height: 716px;
+  max-height: 716px;
+  //min-width: 95%; //(100vw / 2);
+  //max-width: 95%; // (100vw / 2);
+  overflow: hidden;
+}
+
+.icon {
+	padding: 0 14px 0 0;
+	margin: 0;
+}
+
+.spacer {
+  flex: 1 1 auto;
+}
+
+.datatypes-selector {
+	min-height: 42px;
+	max-height: 42px;
+	justify-content: center;
+	//align-items: center;
+	font-size: 0.80rem;
+  font-weight: 500;
+  background-color: white;
+	border: 1px solid rgba(54, 147, 209, 0.87);
+}
+
+.datatypes-content {
+  position:relative;
+  top: 0;
+  left: 0;
+  margin: 0px;
+  padding: 0px;
+  overflow: auto;
+}
+
+.datatypes-table {
+  margin: $datatypes-spacing-unit !important;
+  height: 330px;
+  overflow: auto;
+}
+
+.spacer {
+  flex: 1 1 auto;
+}
+
+.datatypes-toolbar {
+	display: block;
+  min-height: 56px;
+	height: 56px;
+//	width: 250px;
+  font-size: 12px;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+	letter-spacing: 1px;
+	font-weight: 400;
+	background: rgba(0,0,1, .80);
+}
+
+.example-header {
+  min-height: 64px;
+  display: flex;
+  align-items: center;
+  padding-left: 24px;
+  font-size: 20px;
+}
+
+.mat-table {
+  overflow: auto;
+}
+
+.customWidthClass{
+   flex: 0 0 75px;
+}
+
+.mat-column-DataverseName {
+  text-align: left;
+}
+
+.mat-header-cell.mat-column-DataverseName {
+  text-align: left;
+}
+
+.mat-cell.mat-column-DataverseName {
+  text-align: left;
+}
+
+.header-datatypename-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datatypes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datatypes-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 400px;
+}
+
+.datatypes-datatypename-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datatypes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datatypes-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 400px;
+}
+
+.header-dataversename-cell {
+  display: flex;
+  justify-content: center;
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datatypes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datatypes-spacing-unit * 2);
+  text-align: center;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 250px;
+}
+
+.datatypes-dataversename-cell {
+  display: flex;
+  justify-content: center;
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datatypes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datatypes-spacing-unit * 2);
+  flex: 0 0 250px;
+}
+
+.header-timestamp-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datatypes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datatypes-spacing-unit * 2);
+  text-align: center;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 250px;
+}
+
+.datatypes-timestamp-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datatypes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datatypes-spacing-unit * 2);
+  text-align: center;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 250px;
+}
+
+.example-header {
+  min-height: 56px;
+  max-height: 56px;
+  display: flex;
+  align-items: center;
+  padding: 8px 24px 0;
+  font-size: 20px;
+  justify-content: space-between;
+  border-bottom: 1px solid transparent;
+}
+
+.mat-form-field {
+  font-size: 14px;
+  flex-grow: 1;
+  margin-top: 8px;
+}
+
+.example-no-results {
+  display: flex;
+  justify-content: center;
+  padding: 24px;
+  font-size: 12px;
+  font-style: italic;
+}
+
+.actions {
+  display: flex;
+  border-top: 1px solid rgba(0, 0, 0, 0.1);
+  color: rgba(54, 147, 209, 0.87);
+  padding: $datatypes-spacing-unit;
+  margin: 0;
+}
+
+.error-message {
+  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
+  color: rgba(209, 54, 54, 0.87);
+  padding-top: 10px;  
+  padding-left: 20px;
+  text-overflow: ellipsis;
+}
+
+.output {
+  padding-left: ($datatypes-spacing-unit * 2);
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatypes.component.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatypes.component.ts b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatypes.component.ts
new file mode 100755
index 0000000..953a27e
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatypes.component.ts
@@ -0,0 +1,220 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Component, ChangeDetectionStrategy, Inject, Input } from '@angular/core';
+import { Datatype } from '../../../shared/models/asterixDB.model'
+import { Store } from '@ngrx/store';
+import { Observable } from 'rxjs/Observable';
+import * as datatypeActions from '../../../shared/actions/datatype.actions'
+import { ElementRef, ViewChild} from '@angular/core';
+import {DataSource} from '@angular/cdk/collections';
+import {BehaviorSubject} from 'rxjs/BehaviorSubject';
+import 'rxjs/add/operator/startWith';
+import 'rxjs/add/observable/merge';
+import 'rxjs/add/operator/map';
+import 'rxjs/add/operator/debounceTime';
+import 'rxjs/add/operator/distinctUntilChanged';
+import 'rxjs/add/observable/fromEvent';
+import { Subscription } from "rxjs/Rx";
+import { State } from '../../../shared/reducers/datatype.reducer';
+import { MatPaginator } from '@angular/material';
+import { SelectionModel } from '@angular/cdk/collections';
+import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';
+
+@Component({
+  selector: 'awc-datatypes',
+  templateUrl: 'datatypes.component.html',
+  styleUrls: ['datatypes.component.scss']
+})
+
+export class DatatypeCollection {
+  displayedColumns = "['datatypeName', 'dataverseName', 'timeStamp']"
+  /*
+  datatypeName: string;
+  dataverseName: string;
+  derived: DatatypeDerived;
+  timeStamp: string;
+  */
+  datatypeName: string;
+  dataSource: DatatypeDataSource | null;
+  loaded$: Observable<any>;
+  @ViewChild(MatPaginator) paginator: MatPaginator;
+  @ViewChild('filter') filter: ElementRef;
+  selection = new SelectionModel<string>(true, []);
+  @Input('message') errorMessage: string = ""
+  dtName = "";
+  
+  constructor(private store: Store<any>, public dialog: MatDialog) {
+    this.loaded$ = this.store.select('datatype');
+    // Watching the name of the latest create datatype
+    this.store.select(s => s.datatype.createDatatypeName).subscribe((data: any) => {
+      this.dtName = data;
+    })
+
+    // Watching the name of the latest drop datatype
+    this.store.select(s => s.datatype.dropDatatypeName).subscribe((data: any) => {
+      this.dtName = data;
+    })
+
+    // Watching for the if there is a change in the collection
+		this.store.select(s => s.datatype.createDatatypeSuccess).subscribe((data: any) => {
+      if (data === true) {
+        this.getDatatypes();
+        this.errorMessage = "SUCCEED: CREATE DATATYPE " + this.dtName;
+      }  
+    })
+
+    // Watching for the if there is a error in a create datatype operation 
+		this.store.select(s => s.datatype.createDatatypeError).subscribe((data: any) => {
+      if (data.errors) {
+        this.errorMessage = "ERROR: " + data.errors[0].msg;
+      }  
+    })
+
+    // Watching for the success message in a drop datatype operation 
+    this.store.select(s => s.datatype.dropDatatypeSuccess).subscribe((data: any) => {
+      if (data === true) {
+        this.getDatatypes();
+        this.errorMessage = "SUCCEED: DROP DATATYPE " + this.dtName;
+      }  
+    })
+
+    // Watching for the if there is a error in a drop datatype operation 
+		this.store.select(s => s.datatype.dropDatatypeError).subscribe((data: any) => {
+      if (data.errors) {
+        this.errorMessage = "ERROR: " + data.errors[0].msg;
+      }  
+    })
+  }
+
+  getDatatypes() {
+    // Triggers the effect to refresg the datatypes
+    this.store.dispatch(new datatypeActions.SelectDatatypes('-'));
+  }
+
+  ngOnInit() {
+    // Assign the datasource for the table 
+    this.dataSource = new DatatypeDataSource(this.store);
+  }
+
+   /* 
+  * opens the create datatype dialog
+  */
+  openCreateDatatypeDialog(): void {
+    let dialogRef = this.dialog.open(DialogCreateDatatype, {
+      width: '420px',
+      data: { name: this.datatypeName }
+    });
+
+    dialogRef.afterClosed().subscribe(result => {
+      this.datatypeName = result;
+    });
+  }
+
+  /* 
+  * opens the drop datatype dialog
+  */
+  openDropDatatypeDialog(): void {
+    let dialogRef = this.dialog.open(DialogDropDatatype, {
+      width: '420px',
+      data: { name: this.datatypeName }
+    });
+
+    dialogRef.afterClosed().subscribe(result => {
+      this.datatypeName = result;
+    });
+  }
+
+  onClick(): void {
+    this.errorMessage = "";
+  }
+
+  /* Showing all the datatype metadata information */
+  output: any;
+  
+  highlight(row){
+    this.output = JSON.stringify(row, null, 2);
+  }
+
+  @ViewChild('querymetadata') inputQuery;
+
+  /* Cleans up error message */
+  cleanUp() {
+    this.errorMessage = ""; 
+    // Cascading   
+    this.inputQuery.cleanUp();    
+  }
+}
+
+@Component({
+  selector: 'datatype-create-dialog',
+  templateUrl: 'datatype-create-dialog.component.html',
+  styleUrls: ['datatype-create-dialog.component.scss']
+})
+
+export class DialogCreateDatatype {
+  constructor(  private store: Store<any>,
+                public dialogCreateDtRef: MatDialogRef<DialogCreateDatatype>,
+                @Inject(MAT_DIALOG_DATA) public data: any) { }
+
+  onClick(): void {
+    this.store.dispatch(new datatypeActions.CreateDatatype(this.data.datasetName));
+    this.dialogCreateDtRef.close();
+  }
+
+  onNoClick(): void {
+    this.dialogCreateDtRef.close();
+  }
+}
+
+@Component({
+  selector: 'datatypes-drop-dialog',
+  templateUrl: 'datatype-drop-dialog.component.html',
+  styleUrls: ['datatype-drop-dialog.component.scss']
+})
+
+export class DialogDropDatatype {
+  constructor(  private store: Store<any>,
+                public dialogDropDtRef: MatDialogRef<DialogDropDatatype>,
+                @Inject(MAT_DIALOG_DATA) public data: any) { }
+
+  onClick(): void {
+    this.store.dispatch(new datatypeActions.DropDatatype(this.data.datatypeName));
+    this.dialogDropDtRef.close();
+  }
+
+  onNoClick(): void {
+    this.dialogDropDtRef.close();
+  }
+}
+
+export class DatatypeDataSource extends DataSource<any> {
+    private datatypes$: Observable<any>
+
+    constructor(private store: Store<any>) {
+      super();
+      this.datatypes$ = this.store.select(s => s.datatype.datatypes.results);
+    }
+
+    /** Connect function called by the table to retrieve one stream containing the data to render. */
+    connect(): Observable<Datatype[]> {
+        const displayDataChanges = [
+          this.datatypes$,
+        //  this._filterChange,
+        ];
+
+      return this.datatypes$;
+    }
+
+    disconnect() {}
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses-create-dialog.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses-create-dialog.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses-create-dialog.component.html
new file mode 100755
index 0000000..5159e38
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses-create-dialog.component.html
@@ -0,0 +1,27 @@
+<!--/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/-->
+<div class="dataverse-dialog">
+    <p mat-dialog-title>CREATE DATAVERSE</p>
+    <mat-dialog-content>
+        <p>GIVE A NAME TO THE NEW DATAVERSE</p>
+    </mat-dialog-content>
+    <mat-form-field>
+        <input matInput tabindex="0" [(ngModel)]="data.dataverseName">
+    </mat-form-field>
+    </div>
+    <div mat-dialog-actions>
+    <button mat-button [mat-dialog-close]="data.dataverseName" (click)="onClick()" tabindex="1">CREATE</button>
+    <button mat-button (click)="onNoClick()" tabindex="2">CANCEL</button>
+</div>
+

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses-create-dialog.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses-create-dialog.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses-create-dialog.component.scss
new file mode 100755
index 0000000..6371068
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses-create-dialog.component.scss
@@ -0,0 +1,18 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+.dataverse-dialog {    
+    font-family: "Roboto Mono", monospace;
+    font-size: 0.80rem;
+    font-weight: 500;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses-drop-dialog.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses-drop-dialog.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses-drop-dialog.component.html
new file mode 100755
index 0000000..b546a70
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses-drop-dialog.component.html
@@ -0,0 +1,26 @@
+<!--/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/-->
+<div class="dataverse-dialog">
+    <p mat-dialog-title>DROP DATAVERSE</p>
+    <mat-dialog-content>
+        <p>PLEASE GIVE THE NAME OF THE DATAVERSE TO DROP</p>
+    </mat-dialog-content>
+        <mat-form-field>
+            <input matInput tabindex="0" [(ngModel)]="data.dataverseName">
+        </mat-form-field>
+    <mat-dialog-actions>
+        <button mat-button (click)="onClick()" tabindex="1">DROP</button>
+        <button mat-button (click)="onNoClick()" tabindex="2">CANCEL</button>
+    </mat-dialog-actions>
+</div>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses-drop-dialog.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses-drop-dialog.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses-drop-dialog.component.scss
new file mode 100755
index 0000000..6371068
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses-drop-dialog.component.scss
@@ -0,0 +1,18 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+.dataverse-dialog {    
+    font-family: "Roboto Mono", monospace;
+    font-size: 0.80rem;
+    font-weight: 500;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses.component.html
new file mode 100755
index 0000000..4099704
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses.component.html
@@ -0,0 +1,77 @@
+<!--/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/ -->
+<div class="container" (click)="onClick()">
+  <div class="master">
+    <mat-card class="dataverses-card">
+      <mat-toolbar color="primary" class="dataverses-selector">
+          <mat-icon class="icon">menu</mat-icon>
+          <span>DATAVERSES - METADATA</span>
+          <span class="spacer"></span>
+      </mat-toolbar>
+      <mat-card-content class="dataverses-content">
+        <mat-table #table [dataSource]="dataSource" class="dataverses-table" *ngIf="loaded$ | async as ld">
+            <!-- Dataverse Name Column -->
+            <ng-container matColumnDef="DataverseName">
+              <mat-header-cell *matHeaderCellDef class="header-name-cell">Dataverse Name</mat-header-cell>
+              <mat-cell *matCellDef="let element" class="dataverse-name-cell">{{element.DataverseName}}</mat-cell>
+            </ng-container>
+
+            <!-- Data Format Column -->
+            <ng-container matColumnDef="DataFormat">
+              <mat-header-cell *matHeaderCellDef class="header-dataformat-cell">Data Format</mat-header-cell>
+              <mat-cell *matCellDef="let element" class="dataverse-dataformat-cell">{{element.DataFormat}}</mat-cell>
+            </ng-container>
+
+            <!-- Pending Ops -->
+            <ng-container matColumnDef="PendingOp">
+              <mat-header-cell *matHeaderCellDef class="header-pendingop-cell">Pending Ops</mat-header-cell>
+              <mat-cell *matCellDef="let element" class="dataverse-pendingop-cell">{{element.PendingOp}}</mat-cell>
+            </ng-container>
+
+            <!-- Timestamp Column -->
+            <ng-container matColumnDef="Timestamp">
+              <mat-header-cell *matHeaderCellDef class="header-timestamp-cell">Timestamp</mat-header-cell>
+              <mat-cell *matCellDef="let element" class="dataverse-timestamp-cell">{{element.Timestamp}}</mat-cell>
+            </ng-container>
+
+            <mat-header-row *matHeaderRowDef="['DataverseName',  'DataFormat', 'Timestamp']"></mat-header-row>
+            <mat-row *matRowDef="let row; columns: ['DataverseName', 'DataFormat', 'Timestamp'];"
+              [ngClass]="{'highlight': selectedRowIndex == row.id}"
+              (click)="highlight(row)">
+            </mat-row>
+        </mat-table>
+      </mat-card-content>
+      <mat-card-actions class="actions">
+          <button class="refresh-button" mat-button (click)="openCreateDataverseDialog()">CREATE</button>
+          <button class="refresh-button" mat-button (click)="openDropDataverseDialog()">DROP</button>
+          <span class="error-message">{{errorMessage}}</span>
+          <span class="spacer"></span>
+          <button class="refresh-button" mat-button (click)="getDataverse()">REFRESH</button>
+      </mat-card-actions>
+    </mat-card>
+  <awc-query-metadata #querymetadata class="query"></awc-query-metadata>  
+  </div>
+  <div class="detail">
+      <mat-card class="dataverses-details-card">
+          <mat-toolbar color="primary" class="dataverses-selector">
+              <mat-icon class="icon">menu</mat-icon>
+              <span>DATAVERSE - METADATA - DETAILS</span>
+              <span class="spacer"></span>
+          </mat-toolbar>
+          <mat-card-content class="dataverses-content output">
+            <span><pre>{{output}}</pre></span>
+          </mat-card-content>
+        </mat-card>
+  </div>
+</div>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses.component.scss
new file mode 100755
index 0000000..2821766
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses.component.scss
@@ -0,0 +1,259 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+$dataverses-spacing-unit: 8px;
+
+.container {
+  display: flex;
+	flex-flow: row;
+	padding: 0;
+  margin: 0;
+}
+
+.master {
+  width: 60%;
+}
+
+.detail {
+  width: 40%;
+}
+
+.dataverses-card {
+  display: flex;
+	flex-flow: column;
+  padding: 0;
+  margin:0 auto;
+  margin-top: ($dataverses-spacing-unit * 2);
+  min-height: 450px;
+  max-height: 450px;
+  //min-width: 98%; //(100vw / 2);
+  //max-width: 98%; // (100vw / 2);
+  width: 95%; // 98%;
+  overflow: hidden;
+}
+
+.dataverses-details-card {
+	display: flex;
+	flex-flow: column;
+  padding: 0;
+  margin:0 auto;
+  margin: ($dataverses-spacing-unit * 2);
+  min-height: 716px;
+  max-height: 716px;
+  //min-width: 95%; //(100vw / 2);
+  //max-width: 95%; // (100vw / 2);
+  overflow: hidden;
+}
+
+.icon {
+	padding: 0 14px 0 0;
+	margin: 0;
+}
+
+.spacer {
+  flex: 1 1 auto;
+}
+
+.dataverses-selector {
+	min-height: 42px;
+	max-height: 42px;
+	justify-content: center;
+	font-size: 0.80rem;
+  font-weight: 500;
+  background-color: white;
+	border: 1px solid rgba(54, 147, 209, 0.87);
+}
+
+//.metadata-content-area {
+//	padding: ($dataverses-spacing-unit * 2);
+//	margin: 0;
+//	overflow: auto;
+//}
+
+
+.dataverses-content {
+  position:relative;
+  top: 0;
+  left: 0;
+  margin: 0px;
+  padding: 0px;
+  overflow: auto;
+}
+
+.dataverses-table {
+  margin: $dataverses-spacing-unit !important;
+  height: 330px;
+  overflow: auto;
+}
+
+.spacer {
+  flex: 1 1 auto;
+}
+
+.example-header {
+  min-height: 64px;
+  display: flex;
+  align-items: center;
+  padding-left: 24px;
+  font-size: 20px;
+}
+
+.mat-table {
+  overflow: auto;
+}
+
+.customWidthClass{
+   flex: 0 0 75px;
+}
+
+.mat-column-DataverseName {
+  text-align: left;
+}
+
+.mat-header-cell.mat-column-DataverseName {
+  text-align: left;
+}
+
+.mat-cell.mat-column-DataverseName {
+  text-align: left;
+}
+
+.header-name-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $dataverses-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($dataverses-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 150px;
+  text-transform: uppercase;
+}
+
+.header-dataformat-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $dataverses-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($dataverses-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 400px;
+  text-transform: uppercase;
+}
+
+.header-timestamp-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $dataverses-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($dataverses-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 250px;
+  text-transform: uppercase;
+}
+
+.dataverse-name-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $dataverses-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($dataverses-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 150px;
+}
+
+.dataverse-dataformat-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $dataverses-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($dataverses-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 400px;
+}
+
+.dataverse-timestamp-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $dataverses-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($dataverses-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 250px;
+}
+
+.example-header {
+  min-height: 56px;
+  max-height: 56px;
+  display: flex;
+  align-items: center;
+  padding: 8px 24px 0;
+  font-size: 20px;
+  justify-content: space-between;
+  border-bottom: 1px solid transparent;
+}
+
+.mat-form-field {
+  font-size: 14px;
+  flex-grow: 1;
+  margin-top: 8px;
+}
+
+.example-no-results {
+  display: flex;
+  justify-content: center;
+  padding: 24px;
+  font-size: 12px;
+  font-style: italic;
+}
+
+.actions {
+  display: flex;
+  border-top: 1px solid rgba(0, 0, 0, 0.1);
+  color: rgba(54, 147, 209, 0.87);
+  padding: $dataverses-spacing-unit;
+  margin: 0;
+}
+
+.error-message {
+  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
+  color: rgba(209, 54, 54, 0.87);
+  padding-top: 10px;  
+  padding-left: 20px;
+  text-overflow: ellipsis;
+}
+
+.highlight{
+  background: #42A948; /* green */
+}
+
+.output {
+  padding-left: ($dataverses-spacing-unit * 2);
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses.component.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses.component.ts b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses.component.ts
new file mode 100755
index 0000000..981f029
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses.component.ts
@@ -0,0 +1,234 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Component, ChangeDetectionStrategy, Inject, OnInit, AfterViewChecked, AfterViewInit, Input} from '@angular/core';
+import { Dataverse } from '../../../shared/models/asterixDB.model'
+import { Store } from '@ngrx/store';
+import { Observable } from 'rxjs/Observable';
+import * as dataverseActions from '../../../shared/actions/dataverse.actions'
+import { ElementRef, ViewChild} from '@angular/core';
+import { DataSource } from '@angular/cdk/collections';
+import { BehaviorSubject } from 'rxjs/BehaviorSubject';
+import 'rxjs/add/operator/startWith';
+import 'rxjs/add/observable/merge';
+import 'rxjs/add/operator/map';
+import 'rxjs/add/operator/debounceTime';
+import 'rxjs/add/operator/distinctUntilChanged';
+import 'rxjs/add/observable/fromEvent';
+import { Subscription } from "rxjs/Rx";
+import * as fromRoot from '../../../shared/reducers/dataverse.reducer';
+import { State } from '../../../shared/reducers/dataverse.reducer';
+import { MatPaginator } from '@angular/material';
+import { SelectionModel } from '@angular/cdk/collections';
+import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';
+
+@Component({
+  selector: 'awc-dataverses',
+  templateUrl: 'dataverses.component.html',
+  styleUrls: ['dataverses.component.scss'],
+})
+
+export class DataverseCollection implements OnInit, AfterViewChecked, AfterViewInit {
+  dataverseName: string;
+  displayedColumns = ['DataverseName', 'Dataformat', 'Timestamp', 'PendingOp'];
+  dataSource: DataversesDataSource | null;
+  loaded$: Observable<any>;
+  selection = new SelectionModel<string>(true, []);
+  @Input('message') errorMessage: string = ""
+  dvName = "";
+
+  constructor(private store: Store<any>, public dialog: MatDialog) {
+    this.loaded$ = this.store.select('dataverse');
+    
+    // Watching the name of the latest created dataset
+    this.store.select(s => s.dataverse.createDataverseName).subscribe((data: any) => {
+      this.dvName = data;
+    })
+
+    // Watching for the success message in a drop dataset operation 
+    this.store.select(s => s.dataverse.dropDataverseName).subscribe((data: any) => {
+      this.dvName = data;
+    })
+
+    // Watching for the if there is a change in the collection
+		this.store.select(s => s.dataverse.createDataverseSuccess).subscribe((data: any) => {
+      if (data === true) {
+        this.getDataverse();
+        this.errorMessage = "SUCCEED: CREATED DATAVERSE " + this.dvName + " ";
+      }  
+    })
+
+    // Watching for the if there is a error in a create dataverse operation 
+		this.store.select(s => s.dataverse.createDataverseError).subscribe((data: any) => {
+      if (data.errors) {
+        this.errorMessage = "ERROR: " + data.errors[0].msg;
+      }  
+    })
+
+    // Watching for the if there is a change in the collection
+		this.store.select(s => s.dataverse.dropDataverseSuccess).subscribe((data: any) => {
+      if (data === true) {
+        this.getDataverse();
+        this.errorMessage = "SUCCEED: DROP DATAVERSE " + this.dvName;
+      }  
+    })
+
+    // Watching for the if there is a error in a drop dataverse operation 
+		this.store.select(s => s.dataverse.dropDataverseError).subscribe((data: any) => {
+      if (data.errors) {
+        this.errorMessage = "ERROR: " + data.errors[0].msg;
+      }  
+    })
+  }
+
+  getDataverse() {
+    // Triggers the effect to refresg the dataverse
+    this.store.dispatch(new dataverseActions.SelectDataverses('-'));
+  }
+
+  ngOnInit() {
+    // Assign the datasource for the table 
+    this.dataSource = new DataversesDataSource(this.store);
+  }
+
+  ngAfterViewChecked() {}
+
+  ngAfterViewInit() {}
+
+
+  /* 
+  * opens the create dataverse dialog
+  */
+  openCreateDataverseDialog(): void {
+    let dialogRef = this.dialog.open(DialogCreateDataverse, {
+      width: '420px',
+      data: { name: this.dataverseName }
+    });
+
+    dialogRef.afterClosed().subscribe(result => {
+      //reference code
+      //this.dvName = result;
+    });
+  }
+
+  /* 
+  * opens the drop dataverse dialog
+  */
+  openDropDataverseDialog(): void {
+    let dialogRef = this.dialog.open(DialogDropDataverse, {
+      width: '420px',
+      data: { name: this.dataverseName }
+    });
+
+    dialogRef.afterClosed().subscribe(result => {
+      this.dataverseName = result;
+    });
+  }
+
+   /* 
+  * Clean up the error message on the screen
+  */
+  onClick(): void {
+    this.errorMessage = "";
+  }
+
+  selectedRowIndex: number = -1;
+
+  /* Showing all the datatype metadata information */
+  output: any;
+  
+  highlight(row){
+    this.output = JSON.stringify(row, null, 2);
+  }
+
+  @ViewChild('querymetadata') inputQuery;
+
+  /* Cleans up error message */
+  cleanUp() {
+    this.errorMessage = "";   
+    // Cascading   
+    this.inputQuery.cleanUp();  
+  }
+}
+
+@Component({
+  selector: 'dataverse-create-dialog',
+  templateUrl: 'dataverses-create-dialog.component.html',
+  styleUrls: ['dataverses-create-dialog.component.scss']
+})
+
+export class DialogCreateDataverse {
+  constructor(  private store: Store<any>,
+                public dialogCreateDvRef: MatDialogRef<DialogCreateDataverse>,
+                @Inject(MAT_DIALOG_DATA) public data: any) { }
+
+  onClick(): void {
+    this.store.dispatch(new dataverseActions.CreateDataverse(this.data.dataverseName));
+    this.dialogCreateDvRef.close(this.data.dataverseName);
+  }
+
+  onNoClick(): void {
+    this.dialogCreateDvRef.close();
+  }
+}
+
+@Component({
+  selector: 'dataverse-drop-dialog',
+  templateUrl: 'dataverses-drop-dialog.component.html',
+  styleUrls: ['dataverses-drop-dialog.component.scss']
+})
+
+export class DialogDropDataverse {
+  constructor(  private store: Store<any>,
+                public dialogDropDvRef: MatDialogRef<DialogDropDataverse>,
+                @Inject(MAT_DIALOG_DATA) public data: any) { }
+
+  onClick(): void {
+    this.store.dispatch(new dataverseActions.DropDataverse(this.data.dataverseName));
+    this.dialogDropDvRef.close(this.data.dataverseName);
+  }
+
+  onNoClick(): void {
+    this.dialogDropDvRef.close();
+  }
+}
+
+/**
+ * Data source to provide what data should be rendered in the table. Note that the data source
+ * can retrieve its data in any way. In this case, the data source is provided a reference
+ * to a common data base, ExampleDatabase. It is not the data source's responsibility to manage
+ * the underlying data. Instead, it only needs to take the data and send the table exactly what
+ * should be rendered.
+ */
+ export class DataversesDataSource extends DataSource<any> {
+    dataverse$: Observable<any>
+    _filterChange = new BehaviorSubject('');
+    get filter(): string { return this._filterChange.value; }
+    set filter(filter: string) { this._filterChange.next(filter); }
+
+    constructor(private store: Store<any>) {
+      super();
+      this.dataverse$ = this.store.select(s => s.dataverse.dataverses.results);
+    }
+
+    /** Connect function called by the table to retrieve one stream containing the data to render. */
+    connect(): Observable<Dataverse[]> {
+        const displayDataChanges = [
+          this.dataverse$,
+        ];
+
+      return this.dataverse$;
+    }
+
+    disconnect() {}
+  }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/index-create-dialog.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/index-create-dialog.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/index-create-dialog.component.html
new file mode 100755
index 0000000..aca06fd
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/index-create-dialog.component.html
@@ -0,0 +1,14 @@
+<!--/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/-->
+<!-- Place holder for future expansion -->
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/index-create-dialog.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/index-create-dialog.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/index-create-dialog.component.scss
new file mode 100755
index 0000000..039dcf1
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/index-create-dialog.component.scss
@@ -0,0 +1,18 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+.index-dialog {    
+    font-family: "Roboto Mono", monospace;
+    font-size: 0.80rem;
+    font-weight: 500;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/index-drop-dialog.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/index-drop-dialog.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/index-drop-dialog.component.html
new file mode 100755
index 0000000..5e675d8
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/index-drop-dialog.component.html
@@ -0,0 +1,26 @@
+<!--/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/-->
+<div class="index-dialog">
+    <p mat-dialog-title>DROP INDEX</p>
+    <mat-dialog-content>
+        <p>PLEASE GIVE THE DATAVERSENAME.INDEXNAME OF THE INDEX TO DROP</p>
+    </mat-dialog-content>
+        <mat-form-field>
+            <input matInput tabindex="0" [(ngModel)]="data.indexName">
+        </mat-form-field>
+    <mat-dialog-actions>
+        <button mat-button (click)="onClick()" tabindex="1">DROP</button>
+        <button mat-button (click)="onNoClick()" tabindex="2">CANCEL</button>
+    </mat-dialog-actions>
+</div>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/index-drop-dialog.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/index-drop-dialog.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/index-drop-dialog.component.scss
new file mode 100755
index 0000000..039dcf1
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/index-drop-dialog.component.scss
@@ -0,0 +1,18 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+.index-dialog {    
+    font-family: "Roboto Mono", monospace;
+    font-size: 0.80rem;
+    font-weight: 500;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/indexes.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/indexes.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/indexes.component.html
new file mode 100755
index 0000000..c63b254
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/indexes.component.html
@@ -0,0 +1,94 @@
+<!--/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/ -->
+<div class="container"  (click)="onClick()">
+  <div class="master">
+    <mat-card class="indexes-card" *ngIf="loaded$ | async as ld">
+      <mat-toolbar color="primary" class="indexes-selector">
+          <mat-icon class="icon">menu</mat-icon>
+          <span>INDEXES - METADATA</span>
+          <span class="spacer"></span>
+      </mat-toolbar>
+      <mat-card-content class="indexes-content">
+        <mat-table #table [dataSource]="dataSource" class="indexes-table">
+            <!-- Dataverse Name -->
+            <ng-container matColumnDef="DataverseName">
+              <mat-header-cell *matHeaderCellDef class="header-dataversename-cell"> Dataverse Name </mat-header-cell>
+              <mat-cell *matCellDef="let element" class="indexes-dataversename-cell"> {{element.DataverseName}} </mat-cell>
+            </ng-container>
+
+            <!-- Dataset Name -->
+            <ng-container matColumnDef="DatasetName">
+              <mat-header-cell *matHeaderCellDef class="header-datasetname-cell"> Dataset Name </mat-header-cell>
+              <mat-cell *matCellDef="let element" class="indexes-datasetname-cell"> {{element.DatasetName}} </mat-cell>
+            </ng-container>
+
+            <!-- Index Name -->
+            <ng-container matColumnDef="IndexName">
+              <mat-header-cell *matHeaderCellDef class="header-indexname-cell"> Index Name </mat-header-cell>
+              <mat-cell *matCellDef="let element" class="indexes-indexname-cell"> {{element.IndexName}} </mat-cell>
+            </ng-container>
+
+            <!-- Index Structure -->
+            <ng-container matColumnDef="IndexStructure">
+              <mat-header-cell *matHeaderCellDef class="header-indexestructure-cell"> Index Structure </mat-header-cell>
+              <mat-cell *matCellDef="let element" class="indexes-indexstructure-cell"> {{element.IndexStructure}} </mat-cell>
+            </ng-container>
+
+            <!-- IsPrimary  -->
+            <ng-container matColumnDef="IsPrimary">
+              <mat-header-cell *matHeaderCellDef class="header-isprimary-cell"> Is Primary </mat-header-cell>
+              <mat-cell *matCellDef="let element" class="indexes-isprimary-cell"> {{element.IsPrimary}} </mat-cell>
+            </ng-container>
+
+            <!-- Timestamp Column -->
+            <ng-container matColumnDef="Timestamp">
+              <mat-header-cell *matHeaderCellDef class="header-timestamp-cell"> Timestamp </mat-header-cell>
+              <mat-cell *matCellDef="let element" class="indexes-timestamp-cell"> {{element.Timestamp}} </mat-cell>
+            </ng-container>
+
+            <!-- Pending Op Column -->
+            <ng-container matColumnDef="PendingOp">
+              <mat-header-cell *matHeaderCellDef class="header-pendingop-cell"> PendingOp </mat-header-cell>
+              <mat-cell *matCellDef="let element" class="indexes-dataverse-cell"> {{element.PendingOp}} </mat-cell>
+            </ng-container>
+
+            <mat-header-row *matHeaderRowDef="['IndexName', 'DatasetName', 'DataverseName', 'IndexStructure', 'IsPrimary', 'Timestamp']"></mat-header-row>
+            <mat-row *matRowDef="let row; columns: ['IndexName', 'DatasetName', 'DataverseName', 'IndexStructure', 'IsPrimary', 'Timestamp'];"
+              [ngClass]="{'highlight': selectedRowIndex == row.id}"
+              (click)="highlight(row)">
+            </mat-row>
+        </mat-table>
+      </mat-card-content>
+      <mat-card-actions class="actions">
+          <button class="refresh-button" mat-button (click)="openDropIndexDialog()">DROP</button>
+          <span class="error-message">{{errorMessage}}</span>
+          <span class="spacer"></span>
+          <button class="refresh-button" mat-button (click)="getIndexes()">REFRESH</button>
+      </mat-card-actions>
+    </mat-card>
+    <awc-query-metadata #querymetadata class="query"></awc-query-metadata>  
+  </div>
+  <div class="detail">
+      <mat-card class="indexes-details-card">
+          <mat-toolbar color="primary" class="indexes-selector">
+              <mat-icon class="icon">menu</mat-icon>
+              <span>INDEX - METADATA - DETAILS</span>
+              <span class="spacer"></span>
+          </mat-toolbar>
+          <mat-card-content class="indexes-content output">
+            <span><pre>{{output}}</pre></span>
+          </mat-card-content>
+        </mat-card>
+  </div>
+</div>


[18/43] asterixdb git commit: [NO ISSUE] Move noindexonly docs to a separate file

Posted by im...@apache.org.
[NO ISSUE] Move noindexonly docs to a separate file

Change-Id: I3be16d0381cd2d69a71ce1c5f922f0665ef6b431
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2634
Sonar-Qube: Jenkins <je...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Contrib: Jenkins <je...@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: abdullah alamoudi <ba...@gmail.com>


Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/5c687935
Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/5c687935
Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/5c687935

Branch: refs/heads/release-0.9.4-pre-rc
Commit: 5c6879355e0179c80585b18cb6102eea80f4b4e3
Parents: c076968
Author: Till Westmann <ti...@apache.org>
Authored: Sat May 5 00:31:16 2018 -0700
Committer: Till Westmann <ti...@apache.org>
Committed: Sat May 5 08:25:29 2018 -0700

----------------------------------------------------------------------
 asterixdb/asterix-doc/pom.xml                   |  2 +-
 .../markdown/sqlpp/appendix_2_index_only.md     | 37 ++++++++++++++++++++
 .../markdown/sqlpp/appendix_2_parameters.md     | 20 -----------
 3 files changed, 38 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5c687935/asterixdb/asterix-doc/pom.xml
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-doc/pom.xml b/asterixdb/asterix-doc/pom.xml
index a5284ad..734f7a3 100644
--- a/asterixdb/asterix-doc/pom.xml
+++ b/asterixdb/asterix-doc/pom.xml
@@ -52,7 +52,7 @@
             <configuration>
               <target>
                 <concat destfile="${project.build.directory}/generated-site/markdown/sqlpp/manual.md">
-                  <filelist dir="${project.basedir}/src/main/markdown/sqlpp" files="0_toc.md,1_intro.md,2_expr_title.md,2_expr.md,3_query_title.md,3_declare_dataverse.md,3_declare_function.md,3_query.md,4_error_title.md,4_error.md,5_ddl_head.md,5_ddl_dataset_index.md,5_ddl_nonenforced_index.md,5_ddl_function_removal.md,5_ddl_dml.md,appendix_1_title.md,appendix_1_keywords.md,appendix_2_title.md,appendix_2_parameters.md" />
+                  <filelist dir="${project.basedir}/src/main/markdown/sqlpp" files="0_toc.md,1_intro.md,2_expr_title.md,2_expr.md,3_query_title.md,3_declare_dataverse.md,3_declare_function.md,3_query.md,4_error_title.md,4_error.md,5_ddl_head.md,5_ddl_dataset_index.md,5_ddl_nonenforced_index.md,5_ddl_function_removal.md,5_ddl_dml.md,appendix_1_title.md,appendix_1_keywords.md,appendix_2_title.md,appendix_2_parameters.md,appendix_2_index_only.md" />
                 </concat>
                 <concat destfile="${project.build.directory}/generated-site/markdown/sqlpp/builtins.md">
                   <filelist dir="${project.basedir}/src/main/markdown/builtins" files="0_toc.md,1_numeric_common.md,1_numeric_delta.md,2_string_common.md,2_string_delta.md,3_binary.md,4_spatial.md,5_similarity.md,6_tokenizing.md,7_temporal.md,7_allens.md,8_record.md,9_aggregate_sql.md,10_comparison.md,11_type.md,13_conditional.md,12_misc.md" />

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5c687935/asterixdb/asterix-doc/src/main/markdown/sqlpp/appendix_2_index_only.md
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-doc/src/main/markdown/sqlpp/appendix_2_index_only.md b/asterixdb/asterix-doc/src/main/markdown/sqlpp/appendix_2_index_only.md
new file mode 100644
index 0000000..7a71259
--- /dev/null
+++ b/asterixdb/asterix-doc/src/main/markdown/sqlpp/appendix_2_index_only.md
@@ -0,0 +1,37 @@
+<!--
+ ! Licensed to the Apache Software Foundation (ASF) under one
+ ! or more contributor license agreements.  See the NOTICE file
+ ! distributed with this work for additional information
+ ! regarding copyright ownership.  The ASF licenses this file
+ ! to you under the Apache License, Version 2.0 (the
+ ! "License"); you may not use this file except in compliance
+ ! with the License.  You may obtain a copy of the License at
+ !
+ !   http://www.apache.org/licenses/LICENSE-2.0
+ !
+ ! Unless required by applicable law or agreed to in writing,
+ ! software distributed under the License is distributed on an
+ ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ! KIND, either express or implied.  See the License for the
+ ! specific language governing permissions and limitations
+ ! under the License.
+ !-->
+
+## <a id="Index_Only">Controlling Index-Only-Plan Parameter</a>
+By default, the system tries to build an index-only plan whenever utilizing a secondary index is possible.
+For example, if a SELECT or JOIN query can utilize an enforced B+Tree or R-Tree index on a field, the optimizer
+checks whether a secondary-index search alone can generate the result that the query asks for. It
+mainly checks two conditions: (1) predicates used in WHERE only uses the primary key field and/or secondary key field
+and (2) the result does not return any other fields. If these two conditions hold, it builds an index-only plan.
+Since an index-only plan only searches a secondary-index to answer a query, it is faster than
+a non-index-only plan that needs to search the primary index.
+However, this index-only plan can be turned off per query by setting the following parameter.
+
+*  **noindexonly**: if this is set to true, the index-only-plan will not be applied; the default value is false.
+
+##### Example
+
+    SET noindexonly 'true';
+
+    SELECT m.message AS message
+    FROM GleambookMessages m where m.message = " love product-b its shortcut-menu is awesome:)";

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5c687935/asterixdb/asterix-doc/src/main/markdown/sqlpp/appendix_2_parameters.md
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-doc/src/main/markdown/sqlpp/appendix_2_parameters.md b/asterixdb/asterix-doc/src/main/markdown/sqlpp/appendix_2_parameters.md
index 6ba6aba..1cc3cb1 100644
--- a/asterixdb/asterix-doc/src/main/markdown/sqlpp/appendix_2_parameters.md
+++ b/asterixdb/asterix-doc/src/main/markdown/sqlpp/appendix_2_parameters.md
@@ -91,23 +91,3 @@ If there is no user-provided suffix, "B" is the default suffix. See the followin
 
     SELECT u.name AS uname, m.message AS message
     FROM GleambookUsers u JOIN GleambookMessages m ON m.authorId = u.id;
-
-
-## <a id="Index_Only">Controlling Index-Only-Plan Parameter</a>
-By default, the system tries to build an index-only plan whenever utilizing a secondary index is possible.
-For example, if a SELECT or JOIN query can utilize an enforced B+Tree or R-Tree index on a field, the optimizer
-checks whether a secondary-index search alone can generate the result that the query asks for. It
-mainly checks two conditions: (1) predicates used in WHERE only uses the primary key field and/or secondary key field
-and (2) the result does not return any other fields. If these two conditions hold, it builds an index-only plan.
-Since an index-only plan only searches a secondary-index to answer a query, it is faster than
-a non-index-only plan that needs to search the primary index.
-However, this index-only plan can be turned off per query by setting the following parameter.
-
-*  **noindexonly**: if this is set to true, the index-only-plan will not be applied; the default value is false.
-
-##### Example
-
-    SET noindexonly 'true';
-
-    SELECT m.message AS message
-    FROM GleambookMessages m where m.message = " love product-b its shortcut-menu is awesome:)";


[33/43] asterixdb git commit: [ASTERIXDB-2318] Build dashboard in mvn

Posted by im...@apache.org.
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/app.reducer.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/app.reducer.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/app.reducer.ts
deleted file mode 100755
index 01c65ac..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/app.reducer.ts
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { AsterixDBQueryMessage } from '../models/asterixDB.model';
-import * as appActions from '../actions/app.actions';
-
-export type Action = appActions.All;
-
-/*
-** Interfaces for app state in store/state
-*/
-export interface State {
-  loading: boolean,
-  loaded: boolean,
-  success: boolean,
-  sqlQueryString: string,
-  sqlQueryResult: AsterixDBQueryMessage[],
-  sqlQueryError: AsterixDBQueryMessage[],
-  sqlMetadataQueryString: string,
-  sqlMetadataQueryResult: AsterixDBQueryMessage[],
-  sqlMetadataQueryError: AsterixDBQueryMessage[]
-};
-
-const initialState: State = {
-  loading: false,
-  loaded: false,
-  success: false,
-  sqlQueryString: "",
-  sqlQueryResult: [],
-  sqlQueryError: [],
-  sqlMetadataQueryString: "",
-  sqlMetadataQueryResult: [],
-  sqlMetadataQueryError: [],
-};
-
-/*
-** Reducer function for app state in store/state
-*/
-export function appReducer(state = initialState, action: Action) {
-  switch (action.type) {
-
-    /*
-    * Change the load state to true, and clear previous results
-    * to signaling that a EXECUTE a SQL++ Query is ongoing
-    */
-    case appActions.APP_MODE_CHANGE: {
-      return Object.assign({}, state, {
-        loading: false,
-        loaded: true,
-        success: false,
-        sqlQueryString: action.payload,
-        sqlQueryResult: [],
-        sqlQueryError: []
-      });
-    }
-    
-    /*
-    * Just returns the current store/state object
-    */
-    default:
-      return state;
-  }
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/dataset.reducer.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/dataset.reducer.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/dataset.reducer.ts
deleted file mode 100755
index 25d09b9..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/dataset.reducer.ts
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Dataset } from '../models/asterixDB.model';
-import * as DatasetAction from '../actions/dataset.actions';
-
-export type Action = DatasetAction.All;
-
-/*
-** Interfaces for datasets in store/state
-*/
-export interface State {
-  loaded: boolean,
-  loading: boolean,
-  datasets: any[],
-  createDataset: any[],
-  createDatasetError: any[],
-  createDatasetSuccess: boolean,
-  createDatasetFailed: boolean,
-  dropDataset: any[],
-  dropDatasetError: any[],
-  dropDatasetSuccess: boolean,
-  dropDatasetFailed: boolean,
-  guideSelectsDataset: string,
-};
-
-const initialState: State = {
-  loaded: false,
-  loading: false,
-  datasets: [],
-  createDataset: [],
-  createDatasetError: [],
-  createDatasetSuccess: false,
-  createDatasetFailed: false,
-  dropDataset: [],
-  dropDatasetError: [],
-  dropDatasetSuccess: false,
-  dropDatasetFailed: false,
-  guideSelectsDataset: ""
-};
-
-/*
-** Reducer function for datasets in store/state
-*/
-export function datasetReducer(state = initialState, action: Action) {
-  switch (action.type) {
-
-    /*
-    * Change the selected dataset state to true to signaling
-    * UI from metadata guide 
-    */
-    case DatasetAction.GUIDE_SELECT_DATASET: {
-      return Object.assign({}, state, { guideSelectsDataset: action.payload });
-    }
-
-    /*
-    * Change the load state to true to signaling
-    * that a SELECT Query is ongoing
-    */
-    case DatasetAction.SELECT_DATASETS: {
-        return Object.assign({}, state, { loading: true });
-    }
-
-    /*
-    * Change the load state to false, and loaded to true to signaling
-    * that a SELECT Query is success and there is datasets available in the
-    * store
-    */
-    case DatasetAction.SELECT_DATASETS_SUCCESS: {
-      return Object.assign({}, state, {
-        loaded: true,
-        loading: false,
-        datasets: action.payload
-      })
-    }
-
-    /*
-    * Change the load state to true to signaling
-    * that a CREATE a Dataset Query is ongoing
-    */
-    case DatasetAction.CREATE_DATASET: {
-      return Object.assign({}, state, { 
-        createDataset: [],
-        createDatasetError: [],
-        createDatasetSuccess: false,
-        createDatasetFailed: false,
-      });
-    }
-
-    /*
-    * Change the load state to false, and loaded to true to signaling
-    * that a CREATE a Dataset Query is success and there is datasets available in the
-    * store
-    */
-    case DatasetAction.CREATE_DATASET_SUCCESS: {
-      return Object.assign({}, state, {
-        createDataset: action.payload,
-        createDatasetName: action.payload,        
-        createDatasetError: [],
-        createDatasetSuccess: true,
-        createDatasetFailed: false
-      })
-    }
-
-    /*
-    * Change the load state to false, and loaded to true to signaling
-    * that a CREATE a Dataset Query is failed and there is an error message available in the
-    * store
-    */
-    case DatasetAction.CREATE_DATASET_FAIL: {
-      return Object.assign({}, state, {
-        createDataset: [],
-        createDatasetError: action.payload,
-        createDatasetSuccess: false,
-        createDatasetFailed: true
-      })
-    }
-
-    /*
-    * Change the load state to true to signaling
-    * that a DROP a Dataset Query is ongoing
-    */
-    case DatasetAction.DROP_DATASET: {
-      return Object.assign({}, state, { 
-        dropDataset: [],
-        dropDatasetError: [],
-        dropDatasetName: action.payload,
-        dropDatasetSuccess: false,
-        dropDatasetFailed: false
-       });
-    }
-
-    /*
-    * Change the load state to false, and loaded to true to signaling
-    * that a DROP a Dataset Query is success and there is datasets available in the
-    * store
-    */
-    case DatasetAction.DROP_DATASET_SUCCESS: {
-      return Object.assign({}, state, {
-        dropDataset: action.payload,
-        dropDatasetError: [],
-        dropDatasetSuccess: true,
-        dropDatasetFailed: false
-      })
-    }
-
-    /*
-    * Change the load state to false, and loaded to true to signaling
-    * that a DROP a Dataset Query is failed and there is an error message available in the
-    * store
-    */
-    case DatasetAction.DROP_DATASET_FAIL: {
-      return Object.assign({}, state, {
-        dropDataset: [],
-        dropDatasetError: action.payload,
-        dropDatasetSuccess: false,
-        dropDatasetFailed: true
-      })
-    }
-
-    /*
-    * Just returns the current store/state object
-    */
-    default:
-      return state;
-  }
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/datatype.reducer.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/datatype.reducer.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/datatype.reducer.ts
deleted file mode 100755
index 1036fdb..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/datatype.reducer.ts
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Datatype } from '../models/asterixDB.model';
-import * as DatatypeAction from '../actions/datatype.actions';
-
-export type Action = DatatypeAction.All;
-
-/*
-** Interfaces for datatype in store/state
-*/
-export interface State {
-  loaded: boolean,
-  loading: boolean,
-  datatypes: Datatype[],
-  createDatatype: any[],
-  createDatatypeError: any[],
-  createDatatypeSuccess: boolean,
-  createDatatypeFailed: boolean,
-  dropDatatype: any[],
-  dropDatatypeError: any[],
-  dropDatatypeSuccess: boolean,
-  dropDatatypeFailed: boolean
-};
-
-const initialState: State = {
-  loaded: false,
-  loading: false,
-  datatypes: [],
-  createDatatype: [],
-  createDatatypeError: [],
-  createDatatypeSuccess: false,
-  createDatatypeFailed: false,
-  dropDatatype: [],
-  dropDatatypeError: [],
-  dropDatatypeSuccess: false,
-  dropDatatypeFailed: false
-};
-
-/*
-** Reducer function for datatypes in store/state
-*/
-export function datatypeReducer(state = initialState, action: Action) {
-  switch (action.type) {
-
-    /*
-    * Change the load state to true to signaling
-    * that a SELECT Query is ongoing
-    */
-    case DatatypeAction.SELECT_DATATYPES: {
-        return Object.assign({}, state, { loading: true });
-    }
-
-    /*
-    * Change the load state to false, and loaded to true to signaling
-    * that a SELECT Query is success and there is datatypes available in the
-    * store
-    */
-    case DatatypeAction.SELECT_DATATYPES_SUCCESS: {
-      return Object.assign({}, state, {
-        loaded: true,
-        loading: false,
-        datatypes: action.payload
-      })
-    }
-
-    /*
-    * Change the load state to true to signaling
-    * that a CREATE a Datatype Query is ongoing
-    */
-    case DatatypeAction.CREATE_DATATYPE: {
-      return Object.assign({}, state, { 
-        createDatatype: [],
-        createDatatypeName: action.payload,        
-        createDatatypeError: [],
-        createDatatypeSuccess: false,
-        createDatatypeFailed: false,
-      });
-    }
-
-    /*
-    * Change the load state to false, and loaded to true to signaling
-    * that a CREATE a Datatype Query is success and there is datasets available in the
-    * store
-    */
-    case DatatypeAction.CREATE_DATATYPE_SUCCESS: {
-      return Object.assign({}, state, {
-        createDatatype: action.payload,
-        createDatatypeError: [],
-        createDatatypeSuccess: true,
-        createDatatypeFailed: false
-      })
-    }
-
-    /*
-    * Change the load state to false, and loaded to true to signaling
-    * that a CREATE a Datatype Query is failed and there is an error message available in the
-    * store
-    */
-    case DatatypeAction.CREATE_DATATYPE_FAIL: {
-      return Object.assign({}, state, {
-        createDatatype: [],
-        createDatatypeError: action.payload,
-        createDatatypeSuccess: false,
-        createDatatypeFailed: true
-      })
-    }
-
-    /*
-    * Change the load state to true to signaling
-    * that a DROP a Datatype Query is ongoing
-    */
-    case DatatypeAction.DROP_DATATYPE: {
-      return Object.assign({}, state, { 
-        dropDatatype: [],
-        dropDatatypeName: action.payload,       
-        dropDatatypeError: [],
-        dropDatatypeSuccess: false,
-        dropDatatypeFailed: false
-        });
-    }
-
-    /*
-    * Change the load state to false, and loaded to true to signaling
-    * that a DROP a Datatype Query is success and there is datasets available in the
-    * store
-    */
-    case DatatypeAction.DROP_DATATYPE_SUCCESS: {
-      return Object.assign({}, state, {
-        dropDatatype: action.payload,
-        dropDatatypeError: [],
-        dropDatatypeSuccess: true,
-        dropDatatypeFailed: false
-      })
-    }
-
-    /*
-    * Change the load state to false, and loaded to true to signaling
-    * that a DROP a Datatype Query is failed and there is an error message available in the
-    * store
-    */
-    case DatatypeAction.DROP_DATATYPE_FAIL: {
-      return Object.assign({}, state, {
-        dropDatatype: [],
-        dropDatatypeError: action.payload,
-        dropDatatypeSuccess: false,
-        dropDatatypeFailed: true
-      })
-    }
-
-    /*
-    * Just returns the current store/state object
-    */
-    default:
-      return state;
-  }
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/dataverse.reducer.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/dataverse.reducer.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/dataverse.reducer.ts
deleted file mode 100755
index 7ac78ea..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/dataverse.reducer.ts
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Dataverse } from '../models/asterixDB.model';
-import * as DataverseAction from '../actions/dataverse.actions';
-
-export type Action = DataverseAction.All;
-
-/*
-** Interfaces for dataverses in store/state
-*/
-export interface State {
-  loaded: boolean,
-  loading: boolean,
-  dataverses: any[],
-  createDataverse: any[],
-  createDataverseName: string,
-  createDataverseError: any[],
-  createDataverseSuccess: boolean,
-  createDataverseFailed: boolean
-  dropDataverse: any[],
-  dropDataverseName: string;
-  dropDataverseError: any[],
-  dropDataverseSuccess: boolean,
-  dropDataverseFailed: boolean
-};
-
-const initialState: State = {
-  loaded: false,
-  loading: false,
-  dataverses: [],
-  createDataverse: [],
-  createDataverseName: "",
-  createDataverseError: [],
-  createDataverseSuccess: false,
-  createDataverseFailed: false,
-  dropDataverse: [],
-  dropDataverseName: "",
-  dropDataverseError: [],
-  dropDataverseSuccess: false,
-  dropDataverseFailed: false
-};
-
-/*
-** Reducer function for dataverses in store/state
-*/
-export function dataverseReducer(state = initialState, action: Action) {
-  switch (action.type) {
-
-    /*
-    * Change the load state to true to signaling
-    * that a SELECT Query is ongoing
-    */
-    case DataverseAction.SELECT_DATAVERSES: {
-        return Object.assign({}, state, { loading: true });
-    }
-
-    /*
-    * Change the load state to false, and loaded to true to signaling
-    * that a SELECT Query is success and there is dataverses available in the
-    * store
-    */
-    case DataverseAction.SELECT_DATAVERSES_SUCCESS: {
-      return Object.assign({}, state, {
-        loaded: true,
-        loading: false,
-        dataverses: action.payload //  _.sortBy(_.values(action.payload), 'dataverseName')
-      })
-    }
-
-    /*
-    * Change the load state to true to signaling
-    * that a CREATE a Dataset Query is ongoing
-    */
-    case DataverseAction.CREATE_DATAVERSE: {
-      return Object.assign({}, state, { 
-        createDataverse: [],
-        createDataverseName: action.payload,
-        createDataverseError: [],
-        createDataverseSuccess: false,
-        createDataverseFailed: false
-      });
-    }
-
-    /*
-    * Change the load state to false, and loaded to true to signaling
-    * that a CREATE a Dataverse Query is success and there is a success message available in the
-    * store
-    */
-    case DataverseAction.CREATE_DATAVERSE_SUCCESS: {
-      return Object.assign({}, state, {
-        createDataverse: action.payload,
-        createDataverseError: [],        
-        createDataverseSuccess: true,
-        createDataverseFailed: false
-      })
-    }
-
-    /*
-    * Change the load state to false, and loaded to true to signaling
-    * that a CREATE a Dataverse Query is failed and there is an error message available in the
-    * store
-    */
-    case DataverseAction.CREATE_DATAVERSE_FAIL: {
-      return Object.assign({}, state, {
-        createDataverse: [],
-        createDataverseError: action.payload,
-        createDataverseSuccess: false,
-        createDataverseFailed: true
-      })
-    }
-
-    /*
-    * Change the load state to true to signaling
-    * that a DROP a Dataverse Query is ongoing
-    */
-    case DataverseAction.DROP_DATAVERSE: {
-      return Object.assign({}, state, { 
-        dropDataverse: [],
-        dropDataverseName: action.payload,
-        dropDataverseError: [],
-        dropDataverseSuccess: false,
-        dropDataverseFailed: false
-      });
-    }
-
-    /*
-    * Change the load state to false, and loaded to true to signaling
-    * that a DROP a Dataverse Query is success and there is success message available in the
-    * store
-    */
-    case DataverseAction.DROP_DATAVERSE_SUCCESS: {
-      return Object.assign({}, state, {
-        dropDataverse: action.payload,
-        dropDataverseError: [],
-        dropDataverseSuccess: true,
-        dropDataverseFailed: false
-      })
-    }
-
-     /*
-    * Change the load state to false, and loaded to true to signaling
-    * that a DROP a Dataverse Query is failed and there is an error message available in the
-    * store
-    */
-    case DataverseAction.DROP_DATAVERSE_FAIL: {
-      return Object.assign({}, state, {
-        dropDataverse: [],
-        dropDataverseError: action.payload,
-        dropDataverseSuccess: false,
-        dropDataverseFailed: true
-      })
-    }
-
-    /*
-    * Just returns the current store/state object
-    */
-    default:
-      return state;
-  }
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/index.reducer.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/index.reducer.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/index.reducer.ts
deleted file mode 100755
index 792abc7..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/index.reducer.ts
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Index } from '../models/asterixDB.model';
-import * as IndexAction from '../actions/index.actions';
-
-export type Action = IndexAction.All;
-
-/*
-** Interfaces for indexes in store/state
-*/
-export interface State {
-  loaded: boolean,
-  loading: boolean,
-  indexes: Index[],
-  createIndex: any[],
-  createIndexError: any[],
-  createIndexSuccess: boolean,
-  createIndexFailed: boolean,
-  dropIndex: any[],
-  dropIndexError: any[],
-  dropIndexSuccess: boolean,
-  dropIndexFailed: boolean
-};
-
-const initialState: State = {
-  loaded: false,
-  loading: false,
-  indexes: [],
-  createIndex: [],
-  createIndexError: [],
-  createIndexSuccess: false,
-  createIndexFailed: false,
-  dropIndex: [],
-  dropIndexError: [],
-  dropIndexSuccess: false,
-  dropIndexFailed: false
-};
-
-/*
-** Reducer function for indexes in store/state
-*/
-export function indexReducer(state = initialState, action: Action) {
-  switch (action.type) {
-
-    /*
-    * Change the load state to true to signaling
-    * that a SELECT Query is ongoing
-    */
-    case IndexAction.SELECT_INDEXES: {
-      return Object.assign({}, state, { loading: true });
-    }
-
-    /*
-    * Change the load state to false, and loaded to true to signaling
-    * that a SELECT Query is success and there is indexes available in the
-    * store
-    */
-    case IndexAction.SELECT_INDEXES_SUCCESS: {
-      return Object.assign({}, state, {
-        loaded: true,
-        loading: false,
-        indexes: action.payload
-      })
-    }
-
-    /*
-    * Change the load state to true to signaling
-    * that a CREATE a Index Query is ongoing
-    */
-    case IndexAction.CREATE_INDEX: {
-      return Object.assign({}, state, { 
-        createIndex: [],
-        createIndexName: action.payload,       
-        createIndexError: [],
-        createIndexSuccess: false,
-        createIndexFailed: false
-      });
-    }
-
-    /*
-    * Change the load state to false, and loaded to true to signaling
-    * that a CREATE a Index Query is success and there is datasets available in the
-    * store
-    */
-    case IndexAction.CREATE_INDEX_SUCCESS: {
-      return Object.assign({}, state, {
-        createIndex: [],
-        createIndexError: [],
-        createIndexSuccess: true,
-        createIndexFailed: false
-      })
-    }
-
-    /*
-    * Change the load state to false, and loaded to true to signaling
-    * that a CREATE a Index Query is success and there is datasets available in the
-    * store
-    */
-    case IndexAction.CREATE_INDEX_SUCCESS: {
-      return Object.assign({}, state, {
-        createIndex: action.payload,
-        createIndexError: [],
-        createIndexSuccess: false,
-        createIndexFailed: true
-      })
-    }
-
-    /*
-    * Change the load state to true to signaling
-    * that a DROP a Index Query is ongoing
-    */
-    case IndexAction.DROP_INDEX: {
-      return Object.assign({}, state, { 
-        dropIndex: [],
-        dropIndexError: [],
-        dropIndexName: action.payload,               
-        dropIndexSuccess: false,
-        dropIndexFailed: false 
-      });
-    }
-
-    /*
-    * Change the load state to false, and loaded to true to signaling
-    * that a DROP a Index Query is success and there is datasets available in the
-    * store
-    */
-    case IndexAction.DROP_INDEX_SUCCESS: {
-      return Object.assign({}, state, {
-        dropIndex: action.payload,
-        dropIndexError: [],
-        dropIndexSuccess: true,
-        dropIndexFailed: false 
-      })
-    }
-
-    /*
-    * Change the load state to false, and loaded to true to signaling
-    * that a DROP a Index Query is failed and there is an error message available in the
-    * store
-    */
-    case IndexAction.DROP_INDEX_FAIL: {
-      return Object.assign({}, state, {
-        dropIndex: [],
-        dropIndexError: action.payload,
-        dropIndexSuccess: false,
-        dropIndexFailed: true 
-      })
-    }
-
-    /*
-    * Just returns the current store/state object
-    */
-    default:
-      return state;
-  }
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/index.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/index.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/index.ts
deleted file mode 100755
index 1965d8c..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/index.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { ActionReducer } from '@ngrx/store';
-import * as fromDataverse from './dataverse.reducer';
-import * as fromDataset from './dataset.reducer';
-import * as fromDatatype from './datatype.reducer';
-import * as fromIndex from './index.reducer';
-import * as fromQuery from './query.reducer';
-import * as fromQueryMetadata from './query-metadata.reducer';
-import * as fromMetadata from './metadata.reducer';
-import * as fromAppState from './app.reducer';
-
-/*
-** Global Interfaces store/state
-*/
-export interface ModelState {
-  dataverse: fromDataverse.State,
-  dataset: fromDataset.State,
-  datatype: fromDatatype.State,
-  index: fromIndex.State,
-  sqlQuery: fromQuery.State,
-  sqlMetadataQuery: fromQueryMetadata.State,
-  metadata: fromMetadata.State,
-  appState: fromAppState.State,
-}
-
-/*
-** Global Reducers configuration
-*/
-export const reducers = {
-  dataverse: fromDataverse.dataverseReducer,
-  dataset: fromDataset.datasetReducer,
-  datatype: fromDatatype.datatypeReducer,
-  index: fromIndex.indexReducer,
-  sqlQuery: fromQuery.sqlReducer,
-  sqlMetadataQuery: fromQueryMetadata.sqlMetadataReducer,
-  metadata: fromMetadata.metadataTreeReducer
-};

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/metadata.reducer.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/metadata.reducer.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/metadata.reducer.ts
deleted file mode 100755
index 52b88f2..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/metadata.reducer.ts
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import * as metadataTreeActions from '../actions/metadata.actions';
-
-export type Action = metadataTreeActions.All;
-
-/*
-** Interfaces for the metadata tree in store/state
-*/
-export interface State {
-  tree: any[],
-  loading: boolean,
-  loaded: boolean,
-};
-
-const initialState: State = {
-  tree: [],
-  loading: false,
-  loaded: false
-};
-
-export function metadataTreeReducer(state = initialState, action: Action) {
-  switch (action.type) {
-    case metadataTreeActions.UPDATE_METADATA_TREE: {
-      return Object.assign({}, state, {
-        tree: [],
-        loading: true,
-        loaded: false
-      });
-    }
-
-    case metadataTreeActions.UPDATE_METADATA_TREE_SUCCESS: {
-      return Object.assign({}, state, {
-        tree: [...state.tree, action.payload],
-        loading: false,
-        loaded: true
-      });
-    }
-    /*
-    * Just returns the current store/state object
-    */
-    default:
-      return state;
-  }
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/query-metadata.reducer.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/query-metadata.reducer.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/query-metadata.reducer.ts
deleted file mode 100755
index e360e95..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/query-metadata.reducer.ts
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { AsterixDBQueryMessage } from '../models/asterixDB.model';
-import * as sqlQueryActions from '../actions/query.actions';
-
-export type Action = sqlQueryActions.All;
-
-/*
-** Interfaces for sql++ queries in store/state
-*/
-export interface State {
-  loading: boolean,
-  loaded: boolean,
-  success: boolean,
-  sqlQueryMetadataString: string,
-  sqlQueryMetadataResult: AsterixDBQueryMessage[],
-  sqlQueryMetadataError: AsterixDBQueryMessage[]
-};
-
-const initialState: State = {
-  loading: false,
-  loaded: false,
-  success: false,
-  sqlQueryMetadataString: "",
-  sqlQueryMetadataResult: [],
-  sqlQueryMetadataError: [],
-};
-
-/*
-** Reducer function for sql++ queries in store/state
-*/
-export function sqlMetadataReducer(state = initialState, action: Action) {
-  switch (action.type) {
-    /*
-    * Change the load state to true, and clear previous results
-    * to signaling that a METADATA EXECUTE a SQL++ Query is ongoing
-    */
-    case sqlQueryActions.EXECUTE_METADATA_QUERY: {
-      return Object.assign({}, state, {
-        loading: false,
-        loaded: true,
-        success: false,
-        sqlQueryMetadataString: action.payload,
-        sqlQueryMetadataResult: [],
-        sqlQueryMetadataError: []
-      });
-    }
-
-    /*
-    * Change the load state to false, and loaded to true to signaling
-    * that a  METADATA EXECUTE Query is success and there is data available in the
-    * store
-    */
-    case sqlQueryActions.EXECUTE_METADATA_QUERY_SUCCESS: {
-      return Object.assign({}, state, {
-        loading: false,
-        loaded: true,
-        success: true,
-        sqlQueryMetadataResult: action.payload,
-        sqlQueryMetadataError: []
-      })
-    }
-
-    /*
-    * Change the load state to false, and loaded to true to signaling
-    * that a  METADATA EXECUTE Query is failed and there is error data available in the
-    * store
-    */
-    case sqlQueryActions.EXECUTE_METADATA_QUERY_FAIL: {
-      return Object.assign({}, state, {
-        loading: false,
-        loaded: true,
-        success: false,
-        sqlQueryMetadataResult: [],
-        sqlQueryMetadataError: action.payload
-      })
-    }
-
-    /*
-    * Just returns the current store/state object
-    */
-    default:
-      return state;
-  }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/query.reducer.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/query.reducer.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/query.reducer.ts
deleted file mode 100755
index 5c8ad08..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/query.reducer.ts
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { AsterixDBQueryMessage } from '../models/asterixDB.model';
-import * as sqlQueryActions from '../actions/query.actions';
-
-export type Action = sqlQueryActions.All;
-
-/*
-** Interfaces for sql++ queries in store/state
-*/
-export interface State {
-  loading: boolean,
-  loaded: boolean,
-  success: boolean,
-  sqlQueryString: string,
-  sqlQueryResult: AsterixDBQueryMessage[],
-  sqlQueryError: AsterixDBQueryMessage[]
-};
-
-const initialState: State = {
-  loading: false,
-  loaded: false,
-  success: false,
-  sqlQueryString: "",
-  sqlQueryResult: [],
-  sqlQueryError: []
-};
-
-/*
-** Reducer function for sql++ queries in store/state
-*/
-export function sqlReducer(state = initialState, action: Action) {
-  switch (action.type) {
-
-    /*
-    * Change the load state to true, and clear previous results
-    * to signaling that a EXECUTE a SQL++ Query is ongoing
-    */
-    case sqlQueryActions.EXECUTE_QUERY: {
-      return Object.assign({}, state, {
-        loading: false,
-        loaded: true,
-        success: false,
-        sqlQueryString: action.payload,
-        sqlQueryResult: [],
-        sqlQueryError: []
-      });
-    }
-
-    /*
-    * Change the load state to false, and loaded to true to signaling
-    * that a EXECUTE Query is success and there is data available in the
-    * store
-    */
-    case sqlQueryActions.EXECUTE_QUERY_SUCCESS: {
-      return Object.assign({}, state, {
-        loading: false,
-        loaded: true,
-        success: true,
-        sqlQueryResult: action.payload,
-        sqlQueryError: []
-      })
-    }
-
-    /*
-    * Change the load state to false, and loaded to true to signaling
-    * that a EXECUTE Query is failed and there is error data available in the
-    * store
-    */
-    case sqlQueryActions.EXECUTE_QUERY_FAIL: {
-      return Object.assign({}, state, {
-        loading: false,
-        loaded: true,
-        success: false,
-        sqlQueryResult: [],
-        sqlQueryError: action.payload
-      })
-    }
-    
-    /*
-    * Just returns the current store/state object
-    */
-    default:
-      return state;
-  }
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/services/app-core.service.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/services/app-core.service.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/services/app-core.service.ts
deleted file mode 100755
index ed38c26..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/services/app-core.service.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Injectable } from '@angular/core';
-import { Store } from '@ngrx/store';
-import * as dataverseActions from '../../shared/actions/dataverse.actions'
-import * as datasetActions from '../../shared/actions/dataset.actions'
-import * as datatypesActions from '../../shared/actions/datatype.actions'
-import * as indexesActions from '../../shared/actions/index.actions'
-import * as metadataActions from '../../shared/actions/metadata.actions'
-
-/*
-* Main application service to initialize,
-* load, set App status and initial data, and synchronize app level functionality
-*/
-@Injectable()
-export class AppCoreService {
-	/*
-  	* Initialize and load metadata store structures
-	*/
-	constructor(private store: Store<any>) {
-		console.log('AsterixDB Web Console Core Service')
-		this.store.dispatch(new dataverseActions.SelectDataverses('-'));
-		this.store.dispatch(new datasetActions.SelectDatasets('-'));
-		this.store.dispatch(new datatypesActions.SelectDatatypes('-'));
-		this.store.dispatch(new indexesActions.SelectIndexes('-'));
-	}
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/services/async-metadata.service.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/services/async-metadata.service.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/services/async-metadata.service.ts
deleted file mode 100755
index 8492a54..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/services/async-metadata.service.ts
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Injectable, ApplicationRef  } from '@angular/core';
-import { Store } from '@ngrx/store';
-import { Observable } from "rxjs/Observable";
-import 'rxjs/add/operator/map';
-import 'rxjs/add/observable/from';
-import * as dataverseActions from '../../shared/actions/dataverse.actions'
-import * as datasetActions from '../../shared/actions/dataset.actions'
-import * as datatypesActions from '../../shared/actions/datatype.actions'
-import * as indexesActions from '../../shared/actions/index.actions'
-import * as metadataActions from '../../shared/actions/metadata.actions'
-
-/*
-	Metadata service watch any changes in Dataverses, Datasets, Datatypes, indexes
-	state in store and builds a tree state structure with datasets->dataverse->datatype->index relationship
-*/
-@Injectable()
-export class MetadataService {
-
-	/* Arrays to expose updated dataverses, datasets, datatypes,
-	indexes collections*/
-	dv = [];
-	ds = [];
-	dt = [];
-	idx = [];
-
-	/*
-	* contructor will initialize the store state watchers
-	*/
-	constructor(private store: Store<any>, private ref: ApplicationRef ) {
-
-		/* Watching changes in dataverse collection */
-		this.store.select(s => s.dataverse.dataverses).subscribe((data: any) => {
-			if (data.results) {
-				this.dv = []
-				for (let i = 0; i < data.results.length; i++) {
-						let node = { id: 0, DataverseName: "", Datasets:[] }
-						node.id = i
-						node.DataverseName = data.results[i]['DataverseName']
-						this.dv.push(node)
-				}
-				this.updateMetadataTree();
-			}
-		})
-
-		/* Watching changes in datasets collections */
-		this.store.select(s => s.dataset.datasets).subscribe((data: any) => {
-			if (data.results) {
-				this.ds = data.results;
-				this.updateMetadataTree();
-			}
-		})
-
-		/* Watching changes in datatypes collections */
-		this.store.select(s => s.datatype.datatypes).subscribe((data: any) => {
-			if (data.results) {
-				this.dt = data.results;
-				this.updateMetadataTree();
-			}
-		})
-
-		/* Watching changes in index collections */
-		this.store.select(s => s.index.indexes).subscribe((data: any) => {
-			if (data.results) {
-				this.idx = data.results;
-				this.updateMetadataTree();
-			}
-		})
-	}
-
-	/*
-	*	convenience function to update and return the metadata tree.
-	*/
-  	getMetadataTree(): Observable<any[]> {
-		return Observable.from(this.dv);
-	}
-	  
-  	updateMetadataTree() {
-	for (let i = 0; i < this.dv.length; i++) {
-		// Filling datasets
-		this.dv[i]['Datasets'] = [];
-		for (let j = 0; j < this.ds.length; j++) {
-			if (this.ds[j]['DataverseName'] === this.dv[i]['DataverseName']){
-
-				// Filling datatypes, there is one datatype per dataset
-				this.ds[j]['Datatype'] = [];
-				for (let k = 0; k < this.dt.length; k++) {
-					if (this.dt[k]['DatatypeName'] === this.ds[j]['DatatypeName']){
-						this.ds[j]['Datatype'] = this.dt[k]; // push(this.dt[k])
-					}
-				}
-
-				// Filling indexes
-				this.ds[j]['Indexes'] = [];
-				for (let l = 0; l < this.idx.length; l++) {
-					if (this.idx[l]['DatasetName'] === this.ds[j]['DatasetName']){
-						this.ds[j]['Indexes'].push(this.idx[l])
-					}
-				}
-
-				this.dv[i]['Datasets'].push(this.ds[j])
-			}
-		}
-	}
-
-	this.store.dispatch(new metadataActions.UpdateMetadataTree());
-	}	
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/services/async-query.service.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/services/async-query.service.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/services/async-query.service.ts
deleted file mode 100755
index e37872e..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/services/async-query.service.ts
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Injectable } from '@angular/core';
-import { HttpClient } from '@angular/common/http';
-import { Store } from '@ngrx/store';
-import { Observable } from "rxjs/Observable";
-import 'rxjs/add/operator/map';
-
-var AsterixRestApiUrl = 'http://localhost:19002/query/service'; 
-//var AsterixRestApiUrl = '/query-service'; 
-
-/*
-* SQL query service using AsterixDB REST API /query/service
-*/
-@Injectable()
-export class SQLService {
-
-	/*
-	* SQLQueryService constructor using
-	* HttpClient from Angular 4
-	*/
-	constructor(private http: HttpClient) {}
-
- 	/*
- 	* sends a select sql++ query to return all the dataverses
-	* from AsterixDB Metadata
- 	*/
-	selectDataverses() : Observable<any[]> {
-		 let query = "SELECT VALUE dv FROM Metadata.`Dataverse` dv"
-		 return this.executeSQLQuery(query);
-  	}
-
-	/*
-	* sends a select sql++ query to return all the datasets
-	* from AsterixDB Metadata
-	*/
-  	selectDatasets() : Observable<any[]> {
-		let query = "SELECT VALUE ds FROM Metadata.`Dataset` ds"
-		return this.executeSQLQuery(query);
-  	}
-
-	/*
-	* sends a select sql++ query to return all the datatypes
-	* from AsterixDB Metadata
-	*/
-  	selectDatatypes() : Observable<any[]> {
-    	let query = "SELECT VALUE dt FROM Metadata.`Datatype` dt"
-		return this.executeSQLQuery(query);
-  	}
-
-	/*
-	* sends a select sql++ query to return all the indexes
-	* from AsterixDB Metadata
-	*/
-  	selectIndexes() : Observable<any[]> {
-    	let query = "SELECT VALUE ix FROM Metadata.`Index` ix"
-		return this.executeSQLQuery(query);
-	}
-
-	/*
-	* creates a sql++ ddl query to create a Dataverse
-	* from AsterixDB Metadata
-	*/
-	createDataverse(dataverse: string) : Observable<any[]> {
-    	let ddlQuery = "CREATE DATAVERSE " + dataverse + ";";
-		return this.executeDDLSQLQuery(ddlQuery);
-	}
-
-	/*
-	* creates a sql++ ddl query to drop a Dataverse
-	* from AsterixDB Metadata
-	*/
-	dropDataverse(dataverse: string) : Observable<any[]> {
-		let ddlQuery = "DROP DATAVERSE " + dataverse; // " IF EXISTS;";
-		return this.executeDDLSQLQuery(ddlQuery);
-	  }
-
-	/*
-	* creates a sql++ ddl query to create a Dataset
-	* from AsterixDB Metadata
-	*/
-	createDataset(dataset: string) : Observable<any[]> {
-		let ddlQuery = "CREATE DATASET " + dataset + ";";
-		return this.executeDDLSQLQuery(ddlQuery);
-	}
-
-	/*
-	* creates a sql++ ddl query to drop a Dataset
-	* from AsterixDB Metadata
-	*/
-	dropDataset(dataset: string) : Observable<any[]> {
-		let ddlQuery = "DROP DATASET " + dataset; //" IF EXISTS;";
-		return this.executeDDLSQLQuery(ddlQuery);
-	}
-
-	/*
-	* creates a sql++ ddl query to create a Datatype
-	* from AsterixDB Metadata
-	*/
-	createDatatype(datatype: string) : Observable<any[]> {
-    	let ddlQuery = "CREATE DATATYPE " + datatype + ";";
-		return this.executeDDLSQLQuery(ddlQuery);
-	}
-
-	/*
-	* creates a sql++ ddl query to drop a Datatype
-	* from AsterixDB Metadata
-	*/
-	dropDatatype(datatype: string) : Observable<any[]> {
-		let ddlQuery = "DROP TYPE " + datatype; //" IF EXISTS;";
-		return this.executeDDLSQLQuery(ddlQuery);
-	}
-
-	/*
-	* creates a sql++ ddl query to create a Index
-	* from AsterixDB Metadata
-	*/
-	createIndex(index: string) : Observable<any[]> {
-		let ddlQuery = "CREATE INDEX " + index + ";";
-		return this.executeDDLSQLQuery(ddlQuery);
-	}
-
-	/*
-	* creates a sql++ ddl query to drop a Index
-	* from AsterixDB Metadata
-	*/
-	dropIndex(index: string) : Observable<any[]> {
-		let ddlQuery = "DROP INDEX " + index; // + " IF EXISTS;";
-		return this.executeDDLSQLQuery(ddlQuery);
-	}
-
-	/*
-	* Executes a sql++ ddl query against AsterixDB
-	* response is a JSON object with following structure:
-		  metrics: Metrics;
-		  requestId: string;
-		  results: any[];
-		  signature: string;
-		  status: string;
-	*/
-	executeDDLSQLQuery(ddlQuery: string): Observable<any[]> {
-    const apiUrl = AsterixRestApiUrl;
-		return this.http.post(apiUrl, {statement: ddlQuery})
-			.map((response: Response) => { return response })
-			.catch((error: any) => this.handleExecuteQueryError(error));
-	}
-
-	/*
-	* Executes a sql++ query against AsterixDB
-	* response is a JSON object with following structure:
-		  metrics: Metrics;
-		  requestId: string;
-		  results: any[];
-		  signature: string;
-		  status: string;
-	*/
-	executeSQLQuery(query: string): Observable<any[]> {
-    const apiUrl = AsterixRestApiUrl;
-		return this.http.post(apiUrl, {statement: query})
-			.map((response: Response) => { return response })
-			.catch((error: any) => this.handleExecuteQueryError(error));
-	}
-
-	/*
-	* AsterixDB query-service API raises HTTP errors if the sql++ query has some
-	* syntax error, or some elements in the query are not found
-	* this function extract the error JSON object with the relevant information
-		response is a JSON object with following structure:
-		  metrics: Metrics;
-		  requestId: string;
-		  errors: any[];
-		  signature: string;
-		  status: string;
-	*/
-	private handleExecuteQueryError(error: any): Promise<any> {
-		console.log(error)
-		return Promise.reject(error.error || error);
-	}
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/assets/asterixdb_tm.png
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/assets/asterixdb_tm.png b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/assets/asterixdb_tm.png
deleted file mode 100755
index 0fa2ff0..0000000
Binary files a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/assets/asterixdb_tm.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/environments/environment.prod.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/environments/environment.prod.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/environments/environment.prod.ts
deleted file mode 100755
index ca15503..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/environments/environment.prod.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-export const environment = {
-  production: true
-};

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/environments/environment.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/environments/environment.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/environments/environment.ts
deleted file mode 100755
index 2750f0a..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/environments/environment.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-// The file contents for the current environment will overwrite these during build.
-// The build system defaults to the dev environment which uses `environment.ts`, but if you do
-// `ng build --env=prod` then `environment.prod.ts` will be used instead.
-// The list of which env maps to which file can be found in `.angular-cli.json`.
-
-export const environment = {
-  production: false
-};

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/favicon.ico
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/favicon.ico b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/favicon.ico
deleted file mode 100755
index 282c28d..0000000
Binary files a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/favicon.ico and /dev/null differ

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/index.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/index.html b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/index.html
deleted file mode 100755
index 8dab418..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/index.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!--/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/-->
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
-    <title>AsterixDb Administration Console</title>
-    <base href="/">
-    <link rel="icon" type="image/x-icon" href="favicon.ico">
-    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto+Mono">
-    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500">
-    <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
-    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
-  </head>
-  <body>
-    <awc-root></awc-root>
-  </body>
-</html>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/main.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/main.scss b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/main.scss
deleted file mode 100755
index cc02584..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/main.scss
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-@import './styles/general';
-
-// Include material core styles.
-@import '~@angular/material/theming';
-@include mat-core();
-
-// Define the light theme.
-$primary: mat-palette($mat-grey);
-$accent:  mat-palette($mat-orange, A200, A100, A400);
-
-$theme: mat-light-theme($primary, $accent);
-@include angular-material-theme($theme);
-
-* {
-    font-family: Roboto, "Helvetica Neue", sans-serif;
-  }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/main.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/main.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/main.ts
deleted file mode 100755
index 446a9dc..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/main.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import './polyfills.ts';
-import 'hammerjs';
-import { enableProdMode } from '@angular/core';
-import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
-import { AppModule } from './app/app.module';
-import { environment } from './environments/environment';
-
-if (environment.production) {
-  enableProdMode();
-}
-
-platformBrowserDynamic().bootstrapModule(AppModule)
-  .catch(err => console.log(err));

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/polyfills.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/polyfills.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/polyfills.ts
deleted file mode 100755
index 20d4075..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/polyfills.ts
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * This file includes polyfills needed by Angular and is loaded before the app.
- * You can add your own extra polyfills to this file.
- *
- * This file is divided into 2 sections:
- *   1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.
- *   2. Application imports. Files imported after ZoneJS that should be loaded before your main
- *      file.
- *
- * The current setup is for so-called "evergreen" browsers; the last versions of browsers that
- * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),
- * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.
- *
- * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html
- */
-
-/***************************************************************************************************
- * BROWSER POLYFILLS
- */
-
-/** IE9, IE10 and IE11 requires all of the following polyfills. **/
-// import 'core-js/es6/symbol';
-// import 'core-js/es6/object';
-// import 'core-js/es6/function';
-// import 'core-js/es6/parse-int';
-// import 'core-js/es6/parse-float';
-// import 'core-js/es6/number';
-// import 'core-js/es6/math';
-// import 'core-js/es6/string';
-// import 'core-js/es6/date';
-// import 'core-js/es6/array';
-// import 'core-js/es6/regexp';
-// import 'core-js/es6/map';
-// import 'core-js/es6/weak-map';
-// import 'core-js/es6/set';
-
-/** IE10 and IE11 requires the following for NgClass support on SVG elements */
-// import 'classlist.js';  // Run `npm install --save classlist.js`.
-
-/** IE10 and IE11 requires the following for the Reflect API. */
-// import 'core-js/es6/reflect';
-
-
-/** Evergreen browsers require these. **/
-// Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove.
-import 'core-js/es7/reflect';
-
-
-/**
- * Required to support Web Animations `@angular/platform-browser/animations`.
- * Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation
- **/
-// import 'web-animations-js';  // Run `npm install --save web-animations-js`.
-
-
-
-/***************************************************************************************************
- * Zone JS is required by Angular itself.
- */
-import 'zone.js/dist/zone';  // Included with Angular CLI.
-
-
-
-/***************************************************************************************************
- * APPLICATION IMPORTS
- */
-
-/**
- * Date, currency, decimal and percent pipes.
- * Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10
- */
-// import 'intl';  // Run `npm install --save intl`.
-/**
- * Need to import at least one locale-data with intl.
- */
-// import 'intl/locale-data/jsonp/en';

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/styles/_constants.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/styles/_constants.scss b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/styles/_constants.scss
deleted file mode 100755
index b3a5d07..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/styles/_constants.scss
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-@import '../../node_modules/@angular/material/theming';
-
-$small-breakpoint-width: 720px;
-
-/* For desktop, the content should be aligned with the page title. */
-$content-padding-side: 70px;
-$content-padding-side-xs: 15px;
-$awc-spacing-unit: 8px;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/styles/_general.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/styles/_general.scss b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/styles/_general.scss
deleted file mode 100755
index 9691cf8..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/styles/_general.scss
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-html {
-  box-sizing: border-box;
-}
-
-body {
-  font-family: "Roboto Mono", monospace;
-  font-size: 0.80rem;
-	font-weight: 500;
-}
-
-// Tree and table styling
-
-.ui-datatable{
-  //overflow : auto
-}
-
-.ui-datatable .ui-sortable-column div.ui-dt-c {
-  padding-right: 15px !important;
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/test.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/test.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/test.ts
deleted file mode 100755
index 6edcb85..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/test.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// This file is required by karma.conf.js and loads recursively all the .spec and framework files
-
-import 'zone.js/dist/long-stack-trace-zone';
-import 'zone.js/dist/proxy.js';
-import 'zone.js/dist/sync-test';
-import 'zone.js/dist/jasmine-patch';
-import 'zone.js/dist/async-test';
-import 'zone.js/dist/fake-async-test';
-import { getTestBed } from '@angular/core/testing';
-import {
-  BrowserDynamicTestingModule,
-  platformBrowserDynamicTesting
-} from '@angular/platform-browser-dynamic/testing';
-
-// Unfortunately there's no typing for the `__karma__` variable. Just declare it as any.
-declare const __karma__: any;
-declare const require: any;
-
-// Prevent Karma from running prematurely.
-__karma__.loaded = function () {};
-
-// First, initialize the Angular testing environment.
-getTestBed().initTestEnvironment(
-  BrowserDynamicTestingModule,
-  platformBrowserDynamicTesting()
-);
-// Then we find all the tests.
-const context = require.context('./', true, /\.spec\.ts$/);
-// And load the modules.
-context.keys().map(context);
-// Finally, start Karma to run the tests.
-__karma__.start();

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/tsconfig.app.json
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/tsconfig.app.json b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/tsconfig.app.json
deleted file mode 100755
index 54434df..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/tsconfig.app.json
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-{
-  "extends": "../tsconfig.json",
-  "compilerOptions": {
-    "outDir": "../out-tsc/app",
-    "baseUrl": "./",
-    "module": "es2015",
-    "types": []
-  },
-  "exclude": [
-    "test.ts",
-    "**/*.spec.ts"
-  ]
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/tsconfig.spec.json
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/tsconfig.spec.json b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/tsconfig.spec.json
deleted file mode 100755
index 15bcf37..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/tsconfig.spec.json
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-{
-  "extends": "../tsconfig.json",
-  "compilerOptions": {
-    "outDir": "../out-tsc/spec",
-    "baseUrl": "./",
-    "module": "commonjs",
-    "target": "es5",
-    "types": [
-      "jasmine",
-      "node"
-    ]
-  },
-  "files": [
-    "test.ts"
-  ],
-  "include": [
-    "**/*.spec.ts",
-    "**/*.d.ts"
-  ]
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/typings.d.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/typings.d.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/typings.d.ts
deleted file mode 100755
index ef5c7bd..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/typings.d.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-/* SystemJS module definition */
-declare var module: NodeModule;
-interface NodeModule {
-  id: string;
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/3rdpartylicenses.txt
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/3rdpartylicenses.txt b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/3rdpartylicenses.txt
deleted file mode 100644
index 03758a4..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/3rdpartylicenses.txt
+++ /dev/null
@@ -1,222 +0,0 @@
-@angular/animations@5.1.1
-MIT
-MIT
-
-@angular/common@5.1.1
-MIT
-MIT
-
-@angular/core@5.1.1
-MIT
-MIT
-
-@angular/platform-browser@5.1.1
-MIT
-MIT
-
-@ngrx/store-devtools@4.1.1
-MIT
-The MIT License (MIT)
-
-Copyright (c) 2017 Brandon Roberts, Mike Ryan, Victor Savkin, Rob Wormald
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-codemirror@5.32.0
-MIT
-MIT License
-
-Copyright (C) 2017 by Marijn Haverbeke <ma...@gmail.com> and others
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-core-js@2.5.3
-MIT
-Copyright (c) 2014-2017 Denis Pushkarev
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-file-saver@1.3.3
-MIT
-The MIT License
-
-Copyright © 2016 [Eli Grey][1].
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-  [1]: http://eligrey.com
-
-hammerjs@2.0.8
-MIT
-The MIT License (MIT)
-
-Copyright (C) 2011-2014 by Jorik Tangelder (Eight Media)
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-primeng@4.3.0
-MIT
-The MIT License (MIT)
-
-Copyright (c) 2016-2017 PrimeTek
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-@angular/forms@5.1.1
-MIT
-MIT
-
-@ngrx/store@4.1.1
-MIT
-The MIT License (MIT)
-
-Copyright (c) 2017 Brandon Roberts, Mike Ryan, Victor Savkin, Rob Wormald
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-webpack@3.8.1
-MIT
-Copyright JS Foundation and other contributors
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-'Software'), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-zone.js@0.8.18
-MIT
-The MIT License
-
-Copyright (c) 2016 Google, Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/assets/asterixdb_tm.png
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/assets/asterixdb_tm.png b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/assets/asterixdb_tm.png
deleted file mode 100644
index 0fa2ff0..0000000
Binary files a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/assets/asterixdb_tm.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/color.c7a33805ffda0d32bd2a.png
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/color.c7a33805ffda0d32bd2a.png b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/color.c7a33805ffda0d32bd2a.png
deleted file mode 100644
index 561cdd9..0000000
Binary files a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/color.c7a33805ffda0d32bd2a.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/favicon.ico
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/favicon.ico b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/favicon.ico
deleted file mode 100644
index 282c28d..0000000
Binary files a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/favicon.ico and /dev/null differ

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/index.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/index.html b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/index.html
deleted file mode 100644
index c34009b..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/index.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/--><!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><title>AsterixDb Administration Console</title><base href="/dashboard/static/"><link rel="icon" type="image/x-icon" href="favicon.ico"><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto+Mono"><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500"><link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"><link href="styles.9f50282210bba5318775.bundle.css" rel="stylesheet"/></head><body><awc-root></awc-root><script type="text/javascript" src="inline.66bd6b83f86cf773a001.bundle.js"></script><script type="text/javascript" src="polyfills.32ca5670d6503e090789.bundle.js"></script><script type="text/javascript" src="scripts.da68998bdd77aff4e764.bundle.js"></s
 cript><script type="text/javascript" src="main.37b7b7cad656490b195a.bundle.js"></script></body></html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/inline.66bd6b83f86cf773a001.bundle.js
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/inline.66bd6b83f86cf773a001.bundle.js b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/inline.66bd6b83f86cf773a001.bundle.js
deleted file mode 100644
index 1868b98..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/inline.66bd6b83f86cf773a001.bundle.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var r=window.webpackJsonp;window.webpackJsonp=function(t,c,a){for(var u,i,f,l=0,s=[];l<t.length;l++)o[i=t[l]]&&s.push(o[i][0]),o[i]=0;for(u in c)Object.prototype.hasOwnProperty.call(c,u)&&(e[u]=c[u]);for(r&&r(t,c,a);s.length;)s.shift()();if(a)for(l=0;l<a.length;l++)f=n(n.s=a[l]);return f};var t={},o={3:0};n.e=function(e){function r(){u.onerror=u.onload=null,clearTimeout(i);var n=o[e];0!==n&&(n&&n[1](new Error("Loading chunk "+e+" failed.")),o[e]=void 0)}var t=o[e];if(0===t)return new Promise(function(e){e()});if(t)return t[2];var c=new Promise(function(n,r){t=o[e]=[n,r]});t[2]=c;var a=document.getElementsByTagName("head")[0],u=document.createElement("script");u.type="text/javascript",u.charset="utf-8",u.async=!0,u.timeout=12e4,n.nc&&u.setAttribute("nonce",n.nc),u.src=n.p+""+e+"."+{0:"37b7b7cad656490b195a",1:"32ca5670d6503e090789",2:"bd9c5
 1474f663c9da388"}[e]+".chunk.js";var i=setTimeout(r,12e4);return u.onerror=u.onload=r,a.appendChild(u),c},n.m=e,n.c=t,n.d=function(e,r,t){n.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:t})},n.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(r,"a",r),r},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="",n.oe=function(e){throw console.error(e),e}}([]);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/line.567f57385ea3dde2c9ae.gif
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/line.567f57385ea3dde2c9ae.gif b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/line.567f57385ea3dde2c9ae.gif
deleted file mode 100644
index 64e2280..0000000
Binary files a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/line.567f57385ea3dde2c9ae.gif and /dev/null differ


[30/43] asterixdb git commit: [ASTERIXDB-2318] Build dashboard in mvn

Posted by im...@apache.org.
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.3d3a53586bd78d1069ae.svg
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.3d3a53586bd78d1069ae.svg b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.3d3a53586bd78d1069ae.svg
deleted file mode 100644
index ed55c10..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.3d3a53586bd78d1069ae.svg
+++ /dev/null
@@ -1,308 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg">
-<defs >
-<font id="Roboto" horiz-adv-x="1157" ><font-face
-    font-family="Roboto"
-    units-per-em="2048"
-    panose-1="2 0 0 0 0 0 0 0 0 0"
-    ascent="1900"
-    descent="-500"
-    alphabetic="0" />
-<glyph unicode=" " horiz-adv-x="507" />
-<glyph unicode="!" horiz-adv-x="527" d="M347 411H180L167 1456H361L347 411ZM160 93Q160 138 187 168T269 199T351 169T379 93T351 19T269 -11T188 18T160 93Z" />
-<glyph unicode="&quot;" horiz-adv-x="655" d="M277 1400L247 1042H136L137 1536H277V1400ZM547 1400L517 1042H406L407 1536H547V1400Z" />
-<glyph unicode="#" horiz-adv-x="1261" d="M765 410H501L421 0H278L358 410H119V547H384L453 901H195V1040H480L562 1456H705L623 1040H887L969 1456H1113L1031 1040H1235V901H1004L935 547H1160V410H909L829 0H685L765 410ZM527 547H791L860 901H596L527 547Z" />
-<glyph unicode="$" horiz-adv-x="1150" d="M856 375Q856 467 792 530T574 644Q361 709 264 813T166 1079Q166 1243 261 1348T524 1473V1692H673V1472Q841 1449 934 1331T1028 1008H844Q844 1149 777 1232T596 1315Q477 1315 414 1254T351 1082Q351 980 417 920T636
-810T874 701T1000 562T1041 377Q1041 208 940 105T655 -17V-208H507V-17Q321 0 216 115T110 429H295Q295 290 368 215T575 140Q706 140 781 203T856 375Z" />
-<glyph unicode="%" horiz-adv-x="1500" d="M105 1176Q105 1307 188 1392T403 1477Q536 1477 618 1392T701 1170V1099Q701 967 618 884T405 800Q275 800 190 883T105 1106V1176ZM243 1099Q243 1021 287 971T405 920Q476 920 519 969T563 1103V1176Q563 1254 520
-1305T403 1356T286 1305T243 1172V1099ZM814 357Q814 488 897 572T1112 657T1327 573T1411 350V279Q1411 148 1328 64T1114 -21T899 62T814 285V357ZM952 279Q952 200 996 150T1114 99Q1186 99 1229 148T1272 283V357Q1272 436 1229 486T1112 536Q1041 536 997
-487T952 353V279ZM447 110L342 176L1053 1314L1158 1248L447 110Z" />
-<glyph unicode="&amp;" horiz-adv-x="1273" d="M101 391Q101 496 159 584T383 789Q286 907 253 979T220 1122Q220 1288 318 1382T584 1476Q734 1476 832 1389T930 1168Q930 1080 886 1006T730 849L623 770L947 383Q1015 513 1015 672H1182Q1182 417 1059 249L1267
-0H1045L948 115Q874 49 775 15T572 -20Q359 -20 230 93T101 391ZM572 131Q719 131 841 243L486 668L453 644Q286 521 286 391Q286 273 362 202T572 131ZM405 1128Q405 1032 523 888L641 971Q709 1019 734 1062T759 1168Q759 1235 709 1279T583 1324Q501 1324 453
-1269T405 1128Z" />
-<glyph unicode="&apos;" horiz-adv-x="357" d="M253 1425L232 1057H103L104 1536H253V1425Z" />
-<glyph unicode="(" horiz-adv-x="700" d="M133 591Q133 817 193 1025T374 1403T623 1643L661 1521Q515 1409 422 1179T319 664L318 579Q318 193 459 -91Q544 -261 661 -357L623 -470Q490 -396 369 -222Q133 118 133 591Z" />
-<glyph unicode=")" horiz-adv-x="712" d="M567 581Q567 358 509 154T330 -224T77 -470L38 -357Q192 -239 285 9T381 561V593Q381 803 337 983T215 1307T38 1530L77 1643Q209 1570 328 1399T507 1022T567 581Z" />
-<glyph unicode="*" horiz-adv-x="882" d="M330 983L28 1073L74 1224L376 1112L367 1456H520L510 1107L807 1217L853 1065L546 974L744 703L620 609L434 897L254 616L129 707L330 983Z" />
-<glyph unicode="+" horiz-adv-x="1161" d="M670 781H1076V606H670V146H484V606H78V781H484V1206H670V781Z" />
-<glyph unicode="," horiz-adv-x="402" d="M134 -290L29 -218Q123 -87 127 52V219H308V74Q308 -27 259 -128T134 -290Z" />
-<glyph unicode="-" horiz-adv-x="565" d="M525 543H37V694H525V543Z" />
-<glyph unicode="." horiz-adv-x="539" d="M144 97Q144 145 172 177T258 209T344 177T374 97Q374 51 345 20T258 -11T173 20T144 97Z" />
-<glyph unicode="/" horiz-adv-x="844" d="M177 -125H18L626 1456H784L177 -125Z" />
-<glyph unicode="0" horiz-adv-x="1150" d="M1034 621Q1034 296 923 138T576 -20Q343 -20 231 134T115 596V843Q115 1164 226 1320T574 1476Q809 1476 920 1326T1034 861V621ZM849 874Q849 1109 783 1216T574 1324Q432 1324 367 1217T300 888V592Q300 356 368 244T576
-131Q713 131 779 237T849 571V874Z" />
-<glyph unicode="1" horiz-adv-x="1150" d="M729 0H543V1233L170 1096V1264L700 1463H729V0Z" />
-<glyph unicode="2" horiz-adv-x="1150" d="M1075 0H121V133L625 693Q737 820 779 899T822 1064Q822 1178 753 1251T569 1324Q431 1324 355 1246T278 1027H93Q93 1228 222 1352T569 1476Q772 1476 890 1370T1008 1086Q1008 871 734 574L344 151H1075V0Z" />
-<glyph unicode="3" horiz-adv-x="1150" d="M390 818H529Q660 820 735 887T810 1068Q810 1324 555 1324Q435 1324 364 1256T292 1074H107Q107 1247 233 1361T555 1476Q761 1476 878 1367T995 1064Q995 969 934 880T766 747Q886 709 951 621T1017 406Q1017 210 889
-95T556 -20T223 91T94 384H280Q280 269 355 200T556 131Q690 131 761 201T832 402Q832 529 754 597T529 667H390V818Z" />
-<glyph unicode="4" horiz-adv-x="1150" d="M902 489H1104V338H902V0H716V338H53V447L705 1456H902V489ZM263 489H716V1203L694 1163L263 489Z" />
-<glyph unicode="5" horiz-adv-x="1150" d="M206 730L280 1456H1026V1285H437L393 888Q500 951 636 951Q835 951 952 820T1069 464Q1069 239 948 110T608 -20Q415 -20 293 87T154 383H329Q346 258 418 195T608 131Q737 131 810 219T884 462Q884 608 805 696T593
-785Q472 785 403 732L354 692L206 730Z" />
-<glyph unicode="6" horiz-adv-x="1150" d="M847 1457V1300H813Q597 1296 469 1172T321 823Q436 955 635 955Q825 955 938 821T1052 475Q1052 250 930 115T601 -20Q392 -20 262 140T132 554V625Q132 1027 303 1239T814 1457H847ZM604 801Q509 801 429 744T318 601V533Q318
-353 399 243T601 133Q726 133 797 225T869 466Q869 616 797 708T604 801Z" />
-<glyph unicode="7" horiz-adv-x="1150" d="M1061 1352L458 0H264L865 1304H77V1456H1061V1352Z" />
-<glyph unicode="8" horiz-adv-x="1150" d="M1004 1076Q1004 967 947 882T791 749Q905 700 971 606T1038 393Q1038 204 911 92T575 -20Q365 -20 239 92T112 393Q112 511 176 606T355 750Q258 798 202 883T146 1076Q146 1260 264 1368T575 1476Q767 1476 885 1368T1004
-1076ZM853 397Q853 519 776 596T573 673T373 597T297 397T370 202T575 131Q705 131 779 202T853 397ZM575 1324Q466 1324 399 1257T331 1073Q331 962 397 894T575 825T752 893T819 1073T750 1254T575 1324Z" />
-<glyph unicode="9" horiz-adv-x="1150" d="M830 640Q772 571 692 529T515 487Q389 487 296 549T151 723T100 972Q100 1118 155 1235T313 1414T551 1476Q767 1476 891 1315T1016 874V820Q1016 395 848 200T341 -1H305V155H344Q573 159 696 274T830 640ZM545 640Q638
-640 716 697T831 838V912Q831 1094 752 1208T552 1322Q430 1322 356 1229T282 982Q282 833 353 737T545 640Z" />
-<glyph unicode=":" horiz-adv-x="496" d="M390 97Q390 145 418 177T504 209T590 177T620 97Q620 51 591 20T504 -11T419 20T390 97ZM135 980Q135 1028 163 1060T249 1092T335 1060T365 980Q365 934 336 903T249 872T164 903T135 980Z" />
-<glyph unicode=";" horiz-adv-x="433" d="M111 980Q111 1028 139 1060T225 1092T311 1060T341 980Q341 934 312 903T225 872T140 903T111 980ZM146 -290L41 -218Q135 -87 139 52V219H320V74Q320 -27 271 -128T146 -290Z" />
-<glyph unicode="&lt;" horiz-adv-x="1041" d="M264 644L890 391V195L72 574V720L890 1098V902L264 644Z" />
-<glyph unicode="=" horiz-adv-x="1124" d="M986 814H152V975H986V814ZM986 399H152V559H986V399Z" />
-<glyph unicode="&gt;" horiz-adv-x="1070" d="M795 650L134 909V1099L988 721V575L134 196V388L795 650Z" />
-<glyph unicode="?" horiz-adv-x="967" d="M357 410Q359 529 384 598T486 751L617 886Q701 981 701 1090Q701 1195 646 1254T486 1314Q384 1314 322 1260T260 1115H75Q77 1277 190 1376T486 1476Q675 1476 780 1375T886 1096Q886 921 724 751L615 643Q542 562 542
-410H357ZM349 93Q349 138 376 168T458 199T540 169T568 93T540 19T458 -11T377 18T349 93Z" />
-<glyph unicode="@" horiz-adv-x="1839" d="M1738 502Q1726 260 1618 120T1329 -20Q1142 -20 1089 148Q1035 63 966 22T822 -20Q680 -20 607 96T553 417Q568 582 628 711T784 915T985 989Q1066 989 1130 968T1274 883L1222 329Q1203 98 1350 98Q1463 98 1533 210T1609
-502Q1628 891 1465 1095T967 1299Q766 1299 610 1200T364 912T263 478Q251 230 323 48T542 -231T899 -328Q989 -328 1079 -306T1230 -249L1267 -364Q1205 -403 1103 -428T895 -453Q645 -453 465 -341T196 -17T118 478Q130 753 241 972T542 1311T971 1431Q1220 1431
-1398 1319T1663 996T1738 502ZM712 417Q698 275 738 199T867 123Q927 123 982 174T1074 320L1075 329L1121 832Q1065 861 1001 861Q884 861 808 742T712 417Z" />
-<glyph unicode="A" horiz-adv-x="1336" d="M973 380H363L226 0H28L584 1456H752L1309 0H1112L973 380ZM421 538H916L668 1219L421 538Z" />
-<glyph unicode="B" horiz-adv-x="1275" d="M169 0V1456H645Q882 1456 1001 1358T1121 1068Q1121 966 1063 888T905 766Q1023 733 1091 641T1160 420Q1160 224 1033 112T674 0H169ZM361 681V157H678Q812 157 889 226T967 418Q967 681 681 681H361ZM361 835H651Q777
-835 852 898T928 1069Q928 1189 858 1243T645 1298H361V835Z" />
-<glyph unicode="C" horiz-adv-x="1333" d="M1240 462Q1213 231 1070 106T688 -20Q430 -20 275 165T119 660V800Q119 1003 191 1157T397 1393T705 1476Q937 1476 1077 1347T1240 988H1047Q1022 1162 939 1240T705 1318Q521 1318 417 1182T312 795V654Q312 417 411
-277T688 137Q848 137 933 209T1047 462H1240Z" />
-<glyph unicode="D" horiz-adv-x="1343" d="M169 0V1456H580Q770 1456 916 1372T1141 1133T1222 777V684Q1222 478 1143 323T916 85T572 0H169ZM361 1298V157H563Q785 157 908 295T1032 688V773Q1032 1021 916 1158T585 1298H361Z" />
-<glyph unicode="E" horiz-adv-x="1164" d="M992 673H361V157H1094V0H169V1456H1084V1298H361V830H992V673Z" />
-<glyph unicode="F" horiz-adv-x="1132" d="M972 643H361V0H169V1456H1071V1298H361V800H972V643Z" />
-<glyph unicode="G" horiz-adv-x="1395" d="M1244 191Q1170 85 1038 33T729 -20Q551 -20 413 63T200 301T122 658V785Q122 1114 275 1295T707 1476Q935 1476 1074 1360T1244 1029H1052Q998 1318 708 1318Q515 1318 416 1183T315 790V671Q315 426 427 282T730 137Q838
-137 919 161T1053 242V569H716V725H1244V191Z" />
-<glyph unicode="H" horiz-adv-x="1460" d="M1288 0H1095V673H361V0H169V1456H361V830H1095V1456H1288V0Z" />
-<glyph unicode="I" horiz-adv-x="557" d="M375 0H183V1456H375V0Z" />
-<glyph unicode="J" horiz-adv-x="1130" d="M779 1456H972V425Q972 216 847 98T512 -20Q295 -20 174 91T53 402H245Q245 277 313 207T512 137Q631 137 704 212T779 422V1456Z" />
-<glyph unicode="K" horiz-adv-x="1284" d="M539 677L361 492V0H169V1456H361V736L1008 1456H1240L667 813L1285 0H1055L539 677Z" />
-<glyph unicode="L" horiz-adv-x="1102" d="M362 157H1052V0H169V1456H362V157Z" />
-<glyph unicode="M" horiz-adv-x="1788" d="M417 1456L893 268L1369 1456H1618V0H1426V567L1444 1179L966 0H819L342 1176L361 567V0H169V1456H417Z" />
-<glyph unicode="N" horiz-adv-x="1460" d="M1288 0H1095L362 1122V0H169V1456H362L1097 329V1456H1288V0Z" />
-<glyph unicode="O" horiz-adv-x="1408" d="M1289 681Q1289 467 1217 308T1013 64T705 -20Q533 -20 400 64T194 305T118 668V773Q118 983 191 1144T397 1390T703 1476Q878 1476 1011 1392T1217 1147T1289 773V681ZM1098 775Q1098 1034 994 1172T703 1311Q521 1311
-417 1173T309 788V681Q309 430 414 287T705 143Q891 143 993 278T1098 667V775Z" />
-<glyph unicode="P" horiz-adv-x="1292" d="M361 570V0H169V1456H706Q945 1456 1080 1334T1216 1011Q1216 799 1084 685T704 570H361ZM361 727H706Q860 727 942 799T1024 1009Q1024 1139 942 1217T717 1298H361V727Z" />
-<glyph unicode="Q" horiz-adv-x="1408" d="M1281 681Q1281 470 1214 318T1026 79L1286 -125L1155 -246L848 -2Q776 -20 696 -20Q524 -20 391 64T185 305T109 668V773Q109 983 182 1144T388 1390T694 1476Q870 1476 1003 1391T1209 1147T1281 774V681ZM1089 775Q1089
-1032 987 1171T694 1311Q513 1311 409 1173T301 788V681Q301 431 405 287T696 143T984 278T1089 667V775Z" />
-<glyph unicode="R" horiz-adv-x="1261" d="M703 589H361V0H168V1456H650Q896 1456 1028 1344T1161 1018Q1161 882 1088 781T883 630L1225 12V0H1019L703 589ZM361 746H656Q799 746 883 820T968 1018Q968 1153 888 1225T655 1298H361V746Z" />
-<glyph unicode="S" horiz-adv-x="1215" d="M598 649Q351 720 239 823T126 1079Q126 1251 263 1363T621 1476Q771 1476 888 1418T1070 1258T1135 1035H942Q942 1167 858 1242T621 1318Q479 1318 400 1256T320 1082Q320 993 395 932T652 819T936 707T1088 563T1138
-370Q1138 193 1000 87T631 -20Q481 -20 351 37T151 195T80 422H273Q273 290 370 214T631 137Q783 137 864 199T945 368T870 533T598 649Z" />
-<glyph unicode="T" horiz-adv-x="1222" d="M1175 1298H707V0H516V1298H49V1456H1175V1298Z" />
-<glyph unicode="U" horiz-adv-x="1328" d="M1194 1456V466Q1193 260 1065 129T716 -18L665 -20Q426 -20 284 109T140 464V1456H330V470Q330 312 417 225T665 137Q828 137 914 224T1001 469V1456H1194Z" />
-<glyph unicode="V" horiz-adv-x="1303" d="M651 255L1067 1456H1277L737 0H567L28 1456H237L651 255Z" />
-<glyph unicode="W" horiz-adv-x="1817" d="M483 459L511 267L552 440L840 1456H1002L1283 440L1323 264L1354 460L1580 1456H1773L1420 0H1245L945 1061L922 1172L899 1061L588 0H413L61 1456H253L483 459Z" />
-<glyph unicode="X" horiz-adv-x="1284" d="M644 898L993 1456H1219L759 734L1230 0H1002L644 568L284 0H57L529 734L68 1456H293L644 898Z" />
-<glyph unicode="Y" horiz-adv-x="1230" d="M613 725L993 1456H1211L709 543V0H517V543L15 1456H235L613 725Z" />
-<glyph unicode="Z" horiz-adv-x="1226" d="M313 157H1146V0H86V144L884 1298H99V1456H1114V1315L313 157Z" />
-<glyph unicode="[" horiz-adv-x="543" d="M523 1512H332V-160H523V-312H146V1664H523V1512Z" />
-<glyph unicode="\" horiz-adv-x="840" d="M40 1456H216L824 -125H648L40 1456Z" />
-<glyph unicode="]" horiz-adv-x="543" d="M9 1664H387V-312H9V-160H202V1512H9V1664Z" />
-<glyph unicode="^" horiz-adv-x="856" d="M426 1211L236 729H64L363 1456H490L788 729H617L426 1211Z" />
-<glyph unicode="_" horiz-adv-x="924" d="M920 -151H4V0H920V-151Z" />
-<glyph unicode="`" horiz-adv-x="633" d="M474 1240H315L57 1534H280L474 1240Z" />
-<glyph unicode="a" horiz-adv-x="1114" d="M808 0Q792 32 782 114Q653 -20 474 -20Q314 -20 212 70T109 300Q109 469 237 562T599 656H779V741Q779 838 721 895T550 953Q451 953 384 903T317 782H131Q131 863 188 938T344 1058T561 1102Q748 1102 854 1009T964
-751V253Q964 104 1002 16V0H808ZM501 141Q588 141 666 186T779 303V525H634Q294 525 294 326Q294 239 352 190T501 141Z" />
-<glyph unicode="b" horiz-adv-x="1149" d="M1056 529Q1056 281 942 131T636 -20Q431 -20 319 125L310 0H140V1536H325V963Q437 1102 634 1102T943 953T1056 545V529ZM871 550Q871 739 798 842T588 945Q405 945 325 775V307Q410 137 590 137Q723 137 797 240T871 550Z" />
-<glyph unicode="c" horiz-adv-x="1072" d="M574 131Q673 131 747 191T829 341H1004Q999 248 940 164T783 30T574 -20Q353 -20 223 127T92 531V562Q92 720 150 843T316 1034T573 1102Q755 1102 875 993T1004 710H829Q821 815 750 882T573 950Q432 950 355 849T277
-555V520Q277 333 354 232T574 131Z" />
-<glyph unicode="d" horiz-adv-x="1155" d="M95 550Q95 799 213 950T522 1102Q712 1102 823 972V1536H1008V0H838L829 116Q718 -20 520 -20Q332 -20 214 134T95 536V550ZM280 529Q280 345 356 241T566 137Q742 137 823 295V792Q740 945 568 945Q432 945 356 840T280 529Z" />
-<glyph unicode="e" horiz-adv-x="1085" d="M589 -20Q369 -20 231 124T93 511V545Q93 706 154 832T326 1030T566 1102Q777 1102 894 963T1011 565V488H278Q282 328 371 230T599 131Q697 131 765 171T884 277L997 189Q861 -20 589 -20ZM566 950Q454 950 378 869T284
-640H826V654Q818 795 750 872T566 950Z" />
-<glyph unicode="f" horiz-adv-x="711" d="M231 0V939H60V1082H231V1193Q231 1367 324 1462T587 1557Q651 1557 714 1540L704 1390Q657 1399 604 1399Q514 1399 465 1347T416 1196V1082H647V939H416V0H231Z" />
-<glyph unicode="g" horiz-adv-x="1149" d="M96 550Q96 803 213 952T523 1102Q721 1102 832 962L841 1082H1010V26Q1010 -184 886 -305T551 -426Q434 -426 322 -376T151 -239L247 -128Q366 -275 538 -275Q673 -275 748 -199T824 15V108Q713 -20 521 -20Q331 -20
-214 133T96 550ZM282 529Q282 346 357 242T567 137Q742 137 824 296V790Q739 945 569 945Q434 945 358 840T282 529Z" />
-<glyph unicode="h" horiz-adv-x="1128" d="M325 951Q448 1102 645 1102Q988 1102 991 715V0H806V716Q805 833 753 889T589 945Q499 945 431 897T325 771V0H140V1536H325V951Z" />
-<glyph unicode="i" horiz-adv-x="497" d="M341 0H156V1082H341V0ZM141 1369Q141 1414 168 1445T250 1476T332 1445T360 1369T332 1294T250 1264T169 1294T141 1369Z" />
-<glyph unicode="j" horiz-adv-x="489" d="M331 1082V-125Q331 -437 48 -437Q-13 -437 -65 -419V-271Q-33 -279 19 -279Q81 -279 113 -246T146 -129V1082H331ZM127 1369Q127 1413 154 1444T235 1476Q289 1476 317 1445T345 1369T317 1294T235 1264T154 1294T127 1369Z" />
-<glyph unicode="k" horiz-adv-x="1038" d="M442 501L326 380V0H141V1536H326V607L425 726L762 1082H987L566 630L1036 0H819L442 501Z" />
-<glyph unicode="l" horiz-adv-x="497" d="M341 0H156V1536H341V0Z" />
-<glyph unicode="m" horiz-adv-x="1795" d="M314 1082L319 962Q438 1102 640 1102Q867 1102 949 928Q1003 1006 1089 1054T1294 1102Q1650 1102 1656 725V0H1471V714Q1471 830 1418 887T1240 945Q1137 945 1069 884T990 718V0H804V709Q804 945 573 945Q391 945
-324 790V0H139V1082H314Z" />
-<glyph unicode="n" horiz-adv-x="1130" d="M315 1082L321 946Q445 1102 645 1102Q988 1102 991 715V0H806V716Q805 833 753 889T589 945Q499 945 431 897T325 771V0H140V1082H315Z" />
-<glyph unicode="o" horiz-adv-x="1168" d="M91 551Q91 710 153 837T327 1033T582 1102Q803 1102 939 949T1076 542V529Q1076 371 1016 246T843 50T584 -20Q364 -20 228 133T91 538V551ZM277 529Q277 349 360 240T584 131Q725 131 808 241T891 551Q891 729 807
-839T582 950Q445 950 361 841T277 529Z" />
-<glyph unicode="p" horiz-adv-x="1149" d="M1054 529Q1054 282 941 131T635 -20Q438 -20 325 105V-416H140V1082H309L318 962Q431 1102 632 1102Q827 1102 940 955T1054 546V529ZM869 550Q869 733 791 839T577 945Q409 945 325 796V279Q408 131 579 131Q712 131
-790 236T869 550Z" />
-<glyph unicode="q" horiz-adv-x="1164" d="M95 550Q95 805 212 953T526 1102Q718 1102 829 973L837 1082H1007V-416H822V100Q710 -20 524 -20Q328 -20 212 132T95 537V550ZM280 529Q280 343 358 237T570 131Q735 131 822 277V807Q734 950 572 950Q438 950 359
-844T280 529Z" />
-<glyph unicode="r" horiz-adv-x="693" d="M663 916Q621 923 572 923Q390 923 325 768V0H140V1082H320L323 957Q414 1102 581 1102Q635 1102 663 1088V916Z" />
-<glyph unicode="s" horiz-adv-x="1056" d="M770 287Q770 362 714 403T517 475T294 547T172 647T132 785Q132 918 244 1010T532 1102Q716 1102 830 1007T945 764H759Q759 840 695 895T532 950Q431 950 374 906T317 791Q317 724 370 690T561 625T786 551T913 448T955
-300Q955 155 839 68T538 -20Q408 -20 308 26T152 154T95 333H280Q285 240 354 186T538 131Q643 131 706 173T770 287Z" />
-<glyph unicode="t" horiz-adv-x="669" d="M391 1344V1082H593V939H391V268Q391 203 418 171T510 138Q542 138 598 150V0Q525 -20 456 -20Q332 -20 269 55T206 268V939H9V1082H206V1344H391Z" />
-<glyph unicode="u" horiz-adv-x="1129" d="M808 107Q700 -20 491 -20Q318 -20 228 80T136 378V1082H321V383Q321 137 521 137Q733 137 803 295V1082H988V0H812L808 107Z" />
-<glyph unicode="v" horiz-adv-x="992" d="M497 251L765 1082H954L566 0H425L33 1082H222L497 251Z" />
-<glyph unicode="w" horiz-adv-x="1539" d="M1098 255L1306 1082H1491L1176 0H1026L763 820L507 0H357L43 1082H227L440 272L692 1082H841L1098 255Z" />
-<glyph unicode="x" horiz-adv-x="1015" d="M503 687L743 1082H959L605 547L970 0H756L506 405L256 0H41L406 547L52 1082H266L503 687Z" />
-<glyph unicode="y" horiz-adv-x="969" d="M494 271L746 1082H944L509 -167Q408 -437 188 -437L153 -434L84 -421V-271L134 -275Q228 -275 280 -237T367 -98L408 12L22 1082H224L494 271Z" />
-<glyph unicode="z" horiz-adv-x="1015" d="M314 151H947V0H88V136L685 929H97V1082H917V951L314 151Z" />
-<glyph unicode="{" horiz-adv-x="693" d="M632 -366Q455 -316 366 -202T276 101V300Q276 543 64 543V688Q276 688 276 930V1138Q278 1321 365 1433T632 1597L670 1482Q461 1415 461 1133V931Q461 704 294 615Q461 525 461 296V90Q464 -185 670 -251L632 -366Z" />
-<glyph unicode="|" horiz-adv-x="499" d="M324 -270H175V1456H324V-270Z" />
-<glyph unicode="}" horiz-adv-x="693" d="M19 -251Q222 -186 229 80V300Q229 531 410 615Q229 697 229 930V1133Q229 1415 20 1482L58 1597Q235 1547 324 1435T414 1137V927Q414 688 626 688V543Q414 543 414 300V98Q414 -90 324 -203T58 -366L19 -251Z" />
-<glyph unicode="~" horiz-adv-x="1393" d="M1263 777Q1263 619 1170 511T939 402Q867 402 803 428T655 529T533 621T454 639Q376 639 334 586T292 438L131 436Q131 596 223 699T454 802Q530 802 600 770T758 658T910 567L939 565Q1015 565 1062 623T1110 776L1263 777Z" />
-<glyph unicode="&#xa0;" horiz-adv-x="507" />
-<glyph unicode="&#xa1;" horiz-adv-x="499" d="M170 684H338L351 -360H157L170 684ZM358 996Q358 951 331 920T249 889T167 920T139 996T167 1071T249 1101T330 1071T358 996Z" />
-<glyph unicode="&#xa2;" horiz-adv-x="1120" d="M586 131Q686 131 760 191T842 341H1017Q1011 215 912 115T669 -12V-245H484V-11Q305 23 205 165T105 527V562Q105 774 206 916T484 1092V1318H669V1095Q819 1072 915 966T1017 710H842Q834 815 763 882T586 950Q445
-950 368 849T290 555V520Q290 333 367 232T586 131Z" />
-<glyph unicode="&#xa3;" horiz-adv-x="1190" d="M449 622L457 402Q457 248 395 157H1128L1127 0H95V157H172Q212 166 237 231T264 393V401L256 622H91V779H251L242 1039Q242 1238 364 1357T687 1476Q877 1476 988 1370T1099 1087H908Q908 1194 845 1256T670 1318Q565
-1318 500 1241T435 1039L444 779H763V622H449Z" />
-<glyph unicode="&#xa4;" horiz-adv-x="1460" d="M1103 112Q944 -20 735 -20Q528 -20 369 110L235 -26L105 109L244 250Q140 406 140 608Q140 814 252 977L105 1128L235 1264L382 1114Q540 1234 735 1234Q931 1234 1090 1113L1239 1265L1371 1128L1220 974Q1330
-811 1330 608Q1330 412 1228 253L1371 109L1239 -27L1103 112ZM311 608Q311 485 368 379T524 212T735 151T946 212T1100 379T1157 608Q1157 730 1101 835T946 1001T735 1062Q622 1062 524 1002T369 836T311 608Z" />
-<glyph unicode="&#xa5;" horiz-adv-x="1240" d="M614 782L978 1456H1197L779 736H1091V611H707V446H1091V322H707V0H514V322H136V446H514V611H136V736H449L31 1456H251L614 782Z" />
-<glyph unicode="&#xa6;" horiz-adv-x="491" d="M147 -270V521H333V-270H147ZM333 698H147V1456H333V698Z" />
-<glyph unicode="&#xa7;" horiz-adv-x="1256" d="M1145 431Q1145 242 959 157Q1028 108 1064 40T1100 -128Q1100 -296 970 -395T612 -495Q500 -495 400 -467T229 -382Q90 -269 90 -64L276 -62Q276 -192 366 -267T612 -343Q748 -343 831 -285T914 -130Q914 -41 843
-11T563 126Q381 174 285 229T143 362T96 551Q96 737 278 825Q212 874 177 942T141 1110Q141 1276 274 1376T630 1476Q862 1476 992 1363T1122 1045H937Q937 1170 853 1247T630 1325Q488 1325 408 1268T327 1112Q327 1043 355 1003T450 931T661 858T889 782T1030
-698T1116 585T1145 431ZM602 691Q512 715 437 742Q357 723 320 673T282 553Q282 483 309 443T402 370T611 296T797 238Q875 258 917 308T959 428Q959 516 890 570T602 691Z" />
-<glyph unicode="&#xa8;" horiz-adv-x="856" d="M102 1371Q102 1416 129 1446T211 1477T293 1447T321 1371T293 1296T211 1266T130 1296T102 1371ZM532 1369Q532 1414 559 1445T641 1476T723 1445T751 1369T723 1294T641 1264T560 1294T532 1369Z" />
-<glyph unicode="&#xa9;" horiz-adv-x="1609" d="M1119 597Q1119 444 1033 364T788 283Q631 283 537 388T442 676V786Q442 962 537 1067T788 1173Q948 1173 1034 1091T1120 860H974Q974 959 927 1001T788 1044Q694 1044 640 975T586 783V670Q586 550 640 481T788
-412Q880 412 926 454T973 597H1119ZM206 729Q206 557 286 411T503 181T801 98T1098 181T1315 410T1395 729Q1395 899 1316 1044T1100 1272T801 1356Q641 1356 503 1274T286 1045T206 729ZM91 729Q91 931 184 1104T443 1376T801 1476T1158 1377T1416 1104T1510 729Q1510
-532 1420 360T1165 84T801 -21Q604 -21 439 82T182 358T91 729Z" />
-<glyph unicode="&#xaa;" horiz-adv-x="915" d="M618 705Q606 739 600 777Q524 691 396 691Q277 691 212 753T147 918Q147 1029 230 1089T486 1149H594V1201Q594 1336 470 1336Q401 1336 362 1309T322 1231L161 1243Q161 1346 247 1411T470 1476Q603 1476 680 1405T757
-1199V883Q757 786 783 705H618ZM435 828Q478 828 522 848T594 895V1037H482Q399 1036 355 1005T310 922Q310 828 435 828Z" />
-<glyph unicode="&#xab;" horiz-adv-x="961" d="M536 804L794 407H653L358 795V814L653 1203H794L536 804ZM610 548L868 151H727L432 539V558L727 947H868L610 548Z" />
-<glyph unicode="&#xac;" horiz-adv-x="1134" d="M958 375H772V639H127V800H958V375Z" />
-<glyph unicode="&#xad;" horiz-adv-x="565" d="M525 543H37V694H525V543Z" />
-<glyph unicode="&#xae;" horiz-adv-x="1610" d="M90 729Q90 931 183 1104T442 1376T800 1476T1157 1377T1415 1104T1509 729Q1509 532 1419 360T1164 84T800 -21Q603 -21 438 82T181 358T90 729ZM205 729Q205 557 285 411T502 181T800 98Q961 98 1099 182T1315
-412T1394 729Q1394 900 1316 1044T1099 1272T800 1356Q640 1356 502 1274T285 1045T205 729ZM653 654V316H512V1165H788Q941 1165 1025 1100T1110 909Q1110 786 982 721Q1104 671 1105 517V456Q1105 370 1122 332V316H977Q963 352 963 444T960 554Q944 650 829
-654H653ZM653 782H809Q881 784 925 817T969 904Q969 977 930 1007T791 1038H653V782Z" />
-<glyph unicode="&#xaf;" horiz-adv-x="938" d="M834 1313H120V1456H834V1313Z" />
-<glyph unicode="&#xb0;" horiz-adv-x="765" d="M130 1216Q130 1320 204 1398T385 1476Q489 1476 562 1399T636 1216Q636 1110 563 1035T385 960Q280 960 205 1035T130 1216ZM385 1088Q439 1088 476 1123T513 1216Q513 1274 476 1311T385 1349Q330 1349 293 1310T255
-1216T292 1125T385 1088Z" />
-<glyph unicode="&#xb1;" horiz-adv-x="1094" d="M649 854H1013V703H649V289H482V703H97V854H482V1267H649V854ZM970 0H135V152H970V0Z" />
-<glyph unicode="&#xb2;" horiz-adv-x="751" d="M683 667H84V775L384 1057Q493 1159 493 1228Q493 1277 461 1307T369 1338Q294 1338 259 1300T223 1205H66Q66 1319 149 1393T365 1467T574 1404T651 1230Q651 1126 544 1019L460 940L284 795H683V667Z" />
-<glyph unicode="&#xb3;" horiz-adv-x="751" d="M265 1125H349Q423 1125 459 1155T495 1234Q495 1279 464 1308T362 1337Q305 1337 268 1312T230 1245H73Q73 1343 154 1404T360 1466Q497 1466 575 1406T653 1241Q653 1186 618 1141T517 1070Q666 1029 666 886Q666
-780 581 718T360 655Q228 655 145 718T62 888H220Q220 843 259 813T366 783Q436 783 472 813T509 894Q509 1007 353 1009H265V1125Z" />
-<glyph unicode="&#xb4;" horiz-adv-x="642" d="M316 1534H540L272 1240H123L316 1534Z" />
-<glyph unicode="&#xb5;" horiz-adv-x="1160" d="M339 1082V449Q340 286 391 208T559 130Q758 130 820 282V1082H1006V0H839L830 115Q737 -20 567 -20Q420 -20 339 53V-416H154V1082H339Z" />
-<glyph unicode="&#xb6;" horiz-adv-x="1001" d="M646 0V520H562Q332 520 200 647T67 988Q67 1201 200 1328T563 1456H832V0H646Z" />
-<glyph unicode="&#xb7;" horiz-adv-x="534" d="M147 729Q147 777 175 809T261 841T347 809T377 729Q377 682 348 651T261 619T176 650T147 729Z" />
-<glyph unicode="&#xb8;" horiz-adv-x="507" d="M285 0L273 -52Q426 -79 426 -225Q426 -322 346 -378T123 -435L116 -328Q195 -328 238 -302T282 -229Q282 -185 250 -164T120 -134L152 0H285Z" />
-<glyph unicode="&#xb9;" horiz-adv-x="751" d="M495 674H338V1275L122 1218V1346L477 1463H495V674Z" />
-<glyph unicode="&#xba;" horiz-adv-x="931" d="M122 1123Q122 1281 216 1378T464 1476Q619 1476 713 1380T807 1117V1043Q807 884 714 787T466 690T217 787T122 1049V1123ZM285 1043Q285 943 333 886T466 829Q549 829 596 886T644 1045V1123Q644 1222 596 1279T464
-1336Q383 1336 335 1281T285 1129V1043Z" />
-<glyph unicode="&#xbb;" horiz-adv-x="960" d="M244 949L539 560V541L244 152H102L360 550L102 949H244ZM593 949L888 560V541L593 152H451L709 550L451 949H593Z" />
-<glyph unicode="&#xbc;" horiz-adv-x="1500" d="M458 664H301V1265L85 1208V1336L440 1453H458V664ZM443 118L339 184L1050 1322L1154 1256L443 118ZM1318 299H1425V169H1318V0H1161V169H786L780 271L1157 789H1318V299ZM938 299H1161V588L1144 560L938 299Z" />
-<glyph unicode="&#xbd;" horiz-adv-x="1589" d="M399 118L295 184L1006 1322L1110 1256L399 118ZM453 664H296V1265L80 1208V1336L435 1453H453V664ZM1481 0H882V108L1182 390Q1291 492 1291 561Q1291 610 1259 640T1167 671Q1092 671 1057 633T1021 538H864Q864
-652 947 726T1163 800T1372 737T1449 563Q1449 459 1342 352L1258 273L1082 128H1481V0Z" />
-<glyph unicode="&#xbe;" horiz-adv-x="1593" d="M570 118L466 184L1177 1322L1281 1256L570 118ZM1410 299H1517V169H1410V0H1253V169H878L872 271L1249 789H1410V299ZM1030 299H1253V588L1236 560L1030 299ZM314 1126H398Q472 1126 508 1156T544 1235Q544 1280
-513 1309T411 1338Q354 1338 317 1313T279 1246H122Q122 1344 203 1405T409 1467Q546 1467 624 1407T702 1242Q702 1187 667 1142T566 1071Q715 1030 715 887Q715 781 630 719T409 656Q277 656 194 719T111 889H269Q269 844 308 814T415 784Q485 784 521 814T558
-895Q558 1008 402 1010H314V1126Z" />
-<glyph unicode="&#xbf;" horiz-adv-x="969" d="M588 680Q587 574 567 511T498 388T358 233T255 37L253 0Q253 -109 311 -166T478 -224Q578 -224 640 -168T703 -20H888Q886 -181 774 -283T478 -385Q282 -385 175 -285T68 -5Q68 168 228 343L337 456Q403 534 403
-680H588ZM596 997Q596 952 569 921T487 890T405 921T377 997Q377 1041 405 1071T487 1101T568 1071T596 997Z" />
-<glyph unicode="&#xc0;" horiz-adv-x="1336" d="M973 380H363L226 0H28L584 1456H752L1309 0H1112L973 380ZM421 538H916L668 1219L421 538ZM778 1550H619L361 1844H584L778 1550Z" />
-<glyph unicode="&#xc1;" horiz-adv-x="1336" d="M973 380H363L226 0H28L584 1456H752L1309 0H1112L973 380ZM421 538H916L668 1219L421 538ZM763 1844H987L719 1550H570L763 1844Z" />
-<glyph unicode="&#xc2;" horiz-adv-x="1336" d="M973 380H363L226 0H28L584 1456H752L1309 0H1112L973 380ZM421 538H916L668 1219L421 538ZM975 1572V1562H822L672 1732L523 1562H370V1574L616 1846H728L975 1572Z" />
-<glyph unicode="&#xc3;" horiz-adv-x="1336" d="M973 380H363L226 0H28L584 1456H752L1309 0H1112L973 380ZM421 538H916L668 1219L421 538ZM1027 1814Q1027 1706 966 1639T812 1572Q771 1572 741 1582T663 1623T593 1660T543 1667Q502 1667 473 1636T444 1555L320
-1562Q320 1669 380 1739T534 1809Q569 1809 597 1799T673 1760T746 1722T803 1713Q846 1713 874 1747T903 1826L1027 1814Z" />
-<glyph unicode="&#xc4;" horiz-adv-x="1336" d="M973 380H363L226 0H28L584 1456H752L1309 0H1112L973 380ZM421 538H916L668 1219L421 538ZM351 1681Q351 1726 378 1756T460 1787T542 1757T570 1681T542 1606T460 1576T379 1606T351 1681ZM781 1679Q781 1724
-808 1755T890 1786T972 1755T1000 1679T972 1604T890 1574T809 1604T781 1679Z" />
-<glyph unicode="&#xc5;" horiz-adv-x="1336" d="M973 380H363L226 0H28L584 1456H752L1309 0H1112L973 380ZM421 538H916L668 1219L421 538ZM887 1729Q887 1642 825 1584T672 1525Q580 1525 519 1584T457 1729T518 1876T672 1937T825 1876T887 1729ZM556 1729Q556
-1682 589 1648T672 1614Q720 1614 754 1647T788 1729T755 1812T672 1847Q622 1847 589 1812T556 1729Z" />
-<glyph unicode="&#xc6;" horiz-adv-x="1914" d="M1879 0H996L981 353H417L212 0H-14L866 1456H1817V1304H1126L1146 833H1736V682H1152L1174 151H1879V0ZM518 527H974L943 1260L518 527Z" />
-<glyph unicode="&#xc7;" horiz-adv-x="1333" d="M1240 462Q1213 231 1070 106T688 -20Q430 -20 275 165T119 660V800Q119 1003 191 1157T397 1393T705 1476Q937 1476 1077 1347T1240 988H1047Q1022 1162 939 1240T705 1318Q521 1318 417 1182T312 795V654Q312
-417 411 277T688 137Q848 137 933 209T1047 462H1240ZM751 -9L739 -61Q892 -88 892 -234Q892 -331 812 -387T589 -444L582 -337Q661 -337 704 -311T748 -238Q748 -194 716 -173T586 -143L618 -9H751Z" />
-<glyph unicode="&#xc8;" horiz-adv-x="1164" d="M992 673H361V157H1094V0H169V1456H1084V1298H361V830H992V673ZM725 1562H566L308 1856H531L725 1562Z" />
-<glyph unicode="&#xc9;" horiz-adv-x="1164" d="M992 673H361V157H1094V0H169V1456H1084V1298H361V830H992V673ZM710 1856H934L666 1562H517L710 1856Z" />
-<glyph unicode="&#xca;" horiz-adv-x="1164" d="M992 673H361V157H1094V0H169V1456H1084V1298H361V830H992V673ZM922 1584V1574H769L619 1744L470 1574H317V1586L563 1858H675L922 1584Z" />
-<glyph unicode="&#xcb;" horiz-adv-x="1164" d="M992 673H361V157H1094V0H169V1456H1084V1298H361V830H992V673ZM298 1693Q298 1738 325 1768T407 1799T489 1769T517 1693T489 1618T407 1588T326 1618T298 1693ZM728 1691Q728 1736 755 1767T837 1798T919 1767T947
-1691T919 1616T837 1586T756 1616T728 1691Z" />
-<glyph unicode="&#xcc;" horiz-adv-x="557" d="M375 0H183V1456H375V0ZM385 1562H226L-32 1856H191L385 1562Z" />
-<glyph unicode="&#xcd;" horiz-adv-x="557" d="M375 0H183V1456H375V0ZM369 1856H593L325 1562H176L369 1856Z" />
-<glyph unicode="&#xce;" horiz-adv-x="557" d="M375 0H183V1456H375V0ZM582 1584V1574H429L279 1744L130 1574H-23V1586L223 1858H335L582 1584Z" />
-<glyph unicode="&#xcf;" horiz-adv-x="557" d="M375 0H183V1456H375V0ZM-42 1693Q-42 1738 -15 1768T67 1799T149 1769T177 1693T149 1618T67 1588T-14 1618T-42 1693ZM388 1691Q388 1736 415 1767T497 1798T579 1767T607 1691T579 1616T497 1586T416 1616T388 1691Z" />
-<glyph unicode="&#xd0;" horiz-adv-x="1373" d="M199 0V666H37V817H199V1456H610Q800 1456 946 1372T1171 1133T1252 777V684Q1252 478 1173 323T946 85T602 0H199ZM673 666H391V157H592Q814 157 937 294T1062 680V773Q1062 1021 946 1158T615 1298H391V817H673V666Z" />
-<glyph unicode="&#xd1;" horiz-adv-x="1460" d="M1288 0H1095L362 1122V0H169V1456H362L1097 329V1456H1288V0ZM1081 1814Q1081 1706 1020 1639T866 1572Q825 1572 795 1582T717 1623T647 1660T597 1667Q556 1667 527 1636T498 1555L374 1562Q374 1669 434 1739T588
-1809Q623 1809 651 1799T727 1760T800 1722T857 1713Q900 1713 928 1747T957 1826L1081 1814Z" />
-<glyph unicode="&#xd2;" horiz-adv-x="1408" d="M1289 681Q1289 467 1217 308T1013 64T705 -20Q533 -20 400 64T194 305T118 668V773Q118 983 191 1144T397 1390T703 1476Q878 1476 1011 1392T1217 1147T1289 773V681ZM1098 775Q1098 1034 994 1172T703 1311Q521
-1311 417 1173T309 788V681Q309 430 414 287T705 143Q891 143 993 278T1098 667V775ZM812 1552H653L395 1846H618L812 1552Z" />
-<glyph unicode="&#xd3;" horiz-adv-x="1408" d="M1289 681Q1289 467 1217 308T1013 64T705 -20Q533 -20 400 64T194 305T118 668V773Q118 983 191 1144T397 1390T703 1476Q878 1476 1011 1392T1217 1147T1289 773V681ZM1098 775Q1098 1034 994 1172T703 1311Q521
-1311 417 1173T309 788V681Q309 430 414 287T705 143Q891 143 993 278T1098 667V775ZM797 1846H1021L753 1552H604L797 1846Z" />
-<glyph unicode="&#xd4;" horiz-adv-x="1408" d="M1289 681Q1289 467 1217 308T1013 64T705 -20Q533 -20 400 64T194 305T118 668V773Q118 983 191 1144T397 1390T703 1476Q878 1476 1011 1392T1217 1147T1289 773V681ZM1098 775Q1098 1034 994 1172T703 1311Q521
-1311 417 1173T309 788V681Q309 430 414 287T705 143Q891 143 993 278T1098 667V775ZM1009 1574V1564H856L706 1734L557 1564H404V1576L650 1848H762L1009 1574Z" />
-<glyph unicode="&#xd5;" horiz-adv-x="1408" d="M1289 681Q1289 467 1217 308T1013 64T705 -20Q533 -20 400 64T194 305T118 668V773Q118 983 191 1144T397 1390T703 1476Q878 1476 1011 1392T1217 1147T1289 773V681ZM1098 775Q1098 1034 994 1172T703 1311Q521
-1311 417 1173T309 788V681Q309 430 414 287T705 143Q891 143 993 278T1098 667V775ZM1061 1816Q1061 1708 1000 1641T846 1574Q805 1574 775 1584T697 1625T627 1662T577 1669Q536 1669 507 1638T478 1557L354 1564Q354 1671 414 1741T568 1811Q603 1811 631 1801T707
-1762T780 1724T837 1715Q880 1715 908 1749T937 1828L1061 1816Z" />
-<glyph unicode="&#xd6;" horiz-adv-x="1408" d="M1289 681Q1289 467 1217 308T1013 64T705 -20Q533 -20 400 64T194 305T118 668V773Q118 983 191 1144T397 1390T703 1476Q878 1476 1011 1392T1217 1147T1289 773V681ZM1098 775Q1098 1034 994 1172T703 1311Q521
-1311 417 1173T309 788V681Q309 430 414 287T705 143Q891 143 993 278T1098 667V775ZM385 1683Q385 1728 412 1758T494 1789T576 1759T604 1683T576 1608T494 1578T413 1608T385 1683ZM815 1681Q815 1726 842 1757T924 1788T1006 1757T1034 1681T1006 1606T924
-1576T843 1606T815 1681Z" />
-<glyph unicode="&#xd7;" horiz-adv-x="1092" d="M89 329L419 665L91 1000L210 1123L539 788L868 1123L987 1000L659 665L989 329L870 206L539 543L208 206L89 329Z" />
-<glyph unicode="&#xd8;" horiz-adv-x="1408" d="M1289 681Q1289 467 1217 308T1013 64T705 -20Q534 -20 403 62L306 -93H164L308 138Q118 330 118 690V773Q118 983 191 1144T397 1390T703 1476Q917 1476 1065 1351L1168 1516H1309L1150 1261Q1287 1074 1289 780V681ZM309
-681Q309 437 407 296L971 1200Q869 1311 703 1311Q521 1311 417 1173T309 788V681ZM1098 775Q1098 957 1042 1088L493 207Q584 143 705 143Q891 143 993 278T1098 667V775Z" />
-<glyph unicode="&#xd9;" horiz-adv-x="1328" d="M1194 1456V466Q1193 260 1065 129T716 -18L665 -20Q426 -20 284 109T140 464V1456H330V470Q330 312 417 225T665 137Q828 137 914 224T1001 469V1456H1194ZM773 1550H614L356 1844H579L773 1550Z" />
-<glyph unicode="&#xda;" horiz-adv-x="1328" d="M1194 1456V466Q1193 260 1065 129T716 -18L665 -20Q426 -20 284 109T140 464V1456H330V470Q330 312 417 225T665 137Q828 137 914 224T1001 469V1456H1194ZM758 1844H982L714 1550H565L758 1844Z" />
-<glyph unicode="&#xdb;" horiz-adv-x="1328" d="M1194 1456V466Q1193 260 1065 129T716 -18L665 -20Q426 -20 284 109T140 464V1456H330V470Q330 312 417 225T665 137Q828 137 914 224T1001 469V1456H1194ZM970 1572V1562H817L667 1732L518 1562H365V1574L611
-1846H723L970 1572Z" />
-<glyph unicode="&#xdc;" horiz-adv-x="1328" d="M1194 1456V466Q1193 260 1065 129T716 -18L665 -20Q426 -20 284 109T140 464V1456H330V470Q330 312 417 225T665 137Q828 137 914 224T1001 469V1456H1194ZM346 1681Q346 1726 373 1756T455 1787T537 1757T565
-1681T537 1606T455 1576T374 1606T346 1681ZM776 1679Q776 1724 803 1755T885 1786T967 1755T995 1679T967 1604T885 1574T804 1604T776 1679Z" />
-<glyph unicode="&#xdd;" horiz-adv-x="1230" d="M613 725L993 1456H1211L709 543V0H517V543L15 1456H235L613 725ZM708 1844H932L664 1550H515L708 1844Z" />
-<glyph unicode="&#xde;" horiz-adv-x="1210" d="M352 1456V1163H631Q778 1163 888 1111T1057 961T1117 738Q1117 544 985 429T626 313H352V0H166V1456H352ZM352 1011V465H629Q771 465 851 540T931 736Q931 859 851 934T635 1011H352Z" />
-<glyph unicode="&#xdf;" horiz-adv-x="1218" d="M324 0H139V1111Q139 1319 242 1436T532 1554Q712 1554 810 1465T909 1216Q909 1091 845 990T781 819Q781 768 818 721T950 601T1087 461T1130 317Q1130 158 1029 69T745 -20Q664 -20 574 2T445 52L488 207Q537
-175 604 153T725 131Q832 131 888 178T945 307Q945 359 908 407T777 528T639 671T595 821Q595 910 664 1013T734 1201Q734 1295 682 1348T542 1402Q324 1402 324 1109V0Z" />
-<glyph unicode="&#xe0;" horiz-adv-x="1114" d="M808 0Q792 32 782 114Q653 -20 474 -20Q314 -20 212 70T109 300Q109 469 237 562T599 656H779V741Q779 838 721 895T550 953Q451 953 384 903T317 782H131Q131 863 188 938T344 1058T561 1102Q748 1102 854 1009T964
-751V253Q964 104 1002 16V0H808ZM501 141Q588 141 666 186T779 303V525H634Q294 525 294 326Q294 239 352 190T501 141ZM687 1240H528L270 1534H493L687 1240Z" />
-<glyph unicode="&#xe1;" horiz-adv-x="1114" d="M808 0Q792 32 782 114Q653 -20 474 -20Q314 -20 212 70T109 300Q109 469 237 562T599 656H779V741Q779 838 721 895T550 953Q451 953 384 903T317 782H131Q131 863 188 938T344 1058T561 1102Q748 1102 854 1009T964
-751V253Q964 104 1002 16V0H808ZM501 141Q588 141 666 186T779 303V525H634Q294 525 294 326Q294 239 352 190T501 141ZM672 1534H896L628 1240H479L672 1534Z" />
-<glyph unicode="&#xe2;" horiz-adv-x="1114" d="M808 0Q792 32 782 114Q653 -20 474 -20Q314 -20 212 70T109 300Q109 469 237 562T599 656H779V741Q779 838 721 895T550 953Q451 953 384 903T317 782H131Q131 863 188 938T344 1058T561 1102Q748 1102 854 1009T964
-751V253Q964 104 1002 16V0H808ZM501 141Q588 141 666 186T779 303V525H634Q294 525 294 326Q294 239 352 190T501 141ZM884 1262V1252H731L581 1422L432 1252H279V1264L525 1536H637L884 1262Z" />
-<glyph unicode="&#xe3;" horiz-adv-x="1114" d="M808 0Q792 32 782 114Q653 -20 474 -20Q314 -20 212 70T109 300Q109 469 237 562T599 656H779V741Q779 838 721 895T550 953Q451 953 384 903T317 782H131Q131 863 188 938T344 1058T561 1102Q748 1102 854 1009T964
-751V253Q964 104 1002 16V0H808ZM501 141Q588 141 666 186T779 303V525H634Q294 525 294 326Q294 239 352 190T501 141ZM936 1504Q936 1396 875 1329T721 1262Q680 1262 650 1272T572 1313T502 1350T452 1357Q411 1357 382 1326T353 1245L229 1252Q229 1359 289
-1429T443 1499Q478 1499 506 1489T582 1450T655 1412T712 1403Q755 1403 783 1437T812 1516L936 1504Z" />
-<glyph unicode="&#xe4;" horiz-adv-x="1114" d="M808 0Q792 32 782 114Q653 -20 474 -20Q314 -20 212 70T109 300Q109 469 237 562T599 656H779V741Q779 838 721 895T550 953Q451 953 384 903T317 782H131Q131 863 188 938T344 1058T561 1102Q748 1102 854 1009T964
-751V253Q964 104 1002 16V0H808ZM501 141Q588 141 666 186T779 303V525H634Q294 525 294 326Q294 239 352 190T501 141ZM260 1371Q260 1416 287 1446T369 1477T451 1447T479 1371T451 1296T369 1266T288 1296T260 1371ZM690 1369Q690 1414 717 1445T799 1476T881
-1445T909 1369T881 1294T799 1264T718 1294T690 1369Z" />
-<glyph unicode="&#xe5;" horiz-adv-x="1114" d="M808 0Q792 32 782 114Q653 -20 474 -20Q314 -20 212 70T109 300Q109 469 237 562T599 656H779V741Q779 838 721 895T550 953Q451 953 384 903T317 782H131Q131 863 188 938T344 1058T561 1102Q748 1102 854 1009T964
-751V253Q964 104 1002 16V0H808ZM501 141Q588 141 666 186T779 303V525H634Q294 525 294 326Q294 239 352 190T501 141ZM796 1419Q796 1332 734 1274T581 1215Q489 1215 428 1274T366 1419T427 1566T581 1627T734 1566T796 1419ZM465 1419Q465 1372 498 1338T581
-1304Q629 1304 663 1337T697 1419T664 1502T581 1537Q531 1537 498 1502T465 1419Z" />
-<glyph unicode="&#xe6;" horiz-adv-x="1729" d="M1262 -20Q1001 -20 865 160Q800 74 687 27T433 -20Q266 -20 172 66T78 304Q78 461 191 548T526 635H749V720Q749 827 694 888T535 950Q430 950 360 895T290 759L106 778Q106 921 227 1011T535 1102Q650 1102 738
-1061T876 936Q939 1015 1026 1058T1218 1102Q1428 1102 1544 974T1660 612V497H932Q939 321 1026 226T1262 130Q1410 130 1531 206L1578 237L1642 101Q1484 -20 1262 -20ZM469 130Q541 130 620 167T749 258V495H521Q404 493 334 438T264 300Q264 223 317 177T469
-130ZM1218 950Q1103 950 1029 865T937 640H1475V671Q1475 803 1408 876T1218 950Z" />
-<glyph unicode="&#xe7;" horiz-adv-x="1072" d="M574 131Q673 131 747 191T829 341H1004Q999 248 940 164T783 30T574 -20Q353 -20 223 127T92 531V562Q92 720 150 843T316 1034T573 1102Q755 1102 875 993T1004 710H829Q821 815 750 882T573 950Q432 950 355
-849T277 555V520Q277 333 354 232T574 131ZM604 -9L592 -61Q745 -88 745 -234Q745 -331 665 -387T442 -444L435 -337Q514 -337 557 -311T601 -238Q601 -194 569 -173T439 -143L471 -9H604Z" />
-<glyph unicode="&#xe8;" horiz-adv-x="1085" d="M589 -20Q369 -20 231 124T93 511V545Q93 706 154 832T326 1030T566 1102Q777 1102 894 963T1011 565V488H278Q282 328 371 230T599 131Q697 131 765 171T884 277L997 189Q861 -20 589 -20ZM566 950Q454 950 378
-869T284 640H826V654Q818 795 750 872T566 950ZM671 1240H512L254 1534H477L671 1240Z" />
-<glyph unicode="&#xe9;" horiz-adv-x="1085" d="M589 -20Q369 -20 231 124T93 511V545Q93 706 154 832T326 1030T566 1102Q777 1102 894 963T1011 565V488H278Q282 328 371 230T599 131Q697 131 765 171T884 277L997 189Q861 -20 589 -20ZM566 950Q454 950 378
-869T284 640H826V654Q818 795 750 872T566 950ZM656 1534H880L612 1240H463L656 1534Z" />
-<glyph unicode="&#xea;" horiz-adv-x="1085" d="M589 -20Q369 -20 231 124T93 511V545Q93 706 154 832T326 1030T566 1102Q777 1102 894 963T1011 565V488H278Q282 328 371 230T599 131Q697 131 765 171T884 277L997 189Q861 -20 589 -20ZM566 950Q454 950 378
-869T284 640H826V654Q818 795 750 872T566 950ZM868 1262V1252H715L565 1422L416 1252H263V1264L509 1536H621L868 1262Z" />
-<glyph unicode="&#xeb;" horiz-adv-x="1085" d="M589 -20Q369 -20 231 124T93 511V545Q93 706 154 832T326 1030T566 1102Q777 1102 894 963T1011 565V488H278Q282 328 371 230T599 131Q697 131 765 171T884 277L997 189Q861 -20 589 -20ZM566 950Q454 950 378
-869T284 640H826V654Q818 795 750 872T566 950ZM244 1371Q244 1416 271 1446T353 1477T435 1447T463 1371T435 1296T353 1266T272 1296T244 1371ZM674 1369Q674 1414 701 1445T783 1476T865 1445T893 1369T865 1294T783 1264T702 1294T674 1369Z" />
-<glyph unicode="&#xec;" horiz-adv-x="506" d="M341 0H155V1082H341V0ZM615 1495H456L198 1789H421L615 1495Z" />
-<glyph unicode="&#xed;" horiz-adv-x="506" d="M341 0H155V1082H341V0ZM343 1789H567L299 1495H150L343 1789Z" />
-<glyph unicode="&#xee;" horiz-adv-x="506" d="M341 0H155V1082H341V0ZM556 1261V1251H403L253 1421L104 1251H-49V1263L197 1535H309L556 1261Z" />
-<glyph unicode="&#xef;" horiz-adv-x="506" d="M341 0H155V1082H341V0ZM-68 1370Q-68 1415 -41 1445T41 1476T123 1446T151 1370T123 1295T41 1265T-40 1295T-68 1370ZM362 1368Q362 1413 389 1444T471 1475T553 1444T581 1368T553 1293T471 1263T390 1293T362 1368Z" />
-<glyph unicode="&#xf0;" horiz-adv-x="1200" d="M820 1301Q1069 1037 1069 628V535Q1069 377 1011 251T844 52T602 -20Q467 -20 357 44T187 221T126 467Q126 614 182 730T341 912T574 977Q737 977 858 863Q810 1058 669 1199L451 1051L378 1150L570 1281Q438 1372
-255 1421L312 1580Q551 1526 726 1387L915 1516L988 1416L820 1301ZM884 635L882 691Q849 752 780 788T618 825Q473 825 392 730T311 467Q311 327 394 229T606 131Q731 131 807 244T884 541V635Z" />
-<glyph unicode="&#xf1;" horiz-adv-x="1130" d="M315 1082L321 946Q445 1102 645 1102Q988 1102 991 715V0H806V716Q805 833 753 889T589 945Q499 945 431 897T325 771V0H140V1082H315ZM927 1504Q927 1396 866 1329T712 1262Q671 1262 641 1272T563 1313T493 1350T443
-1357Q402 1357 373 1326T344 1245L220 1252Q220 1359 280 1429T434 1499Q469 1499 497 1489T573 1450T646 1412T703 1403Q746 1403 774 1437T803 1516L927 1504Z" />
-<glyph unicode="&#xf2;" horiz-adv-x="1168" d="M91 551Q91 710 153 837T327 1033T582 1102Q803 1102 939 949T1076 542V529Q1076 371 1016 246T843 50T584 -20Q364 -20 228 133T91 538V551ZM277 529Q277 349 360 240T584 131Q725 131 808 241T891 551Q891 729
-807 839T582 950Q445 950 361 841T277 529ZM681 1240H522L264 1534H487L681 1240Z" />
-<glyph unicode="&#xf3;" horiz-adv-x="1168" d="M91 551Q91 710 153 837T327 1033T582 1102Q803 1102 939 949T1076 542V529Q1076 371 1016 246T843 50T584 -20Q364 -20 228 133T91 538V551ZM277 529Q277 349 360 240T584 131Q725 131 808 241T891 551Q891 729
-807 839T582 950Q445 950 361 841T277 529ZM666 1534H890L622 1240H473L666 1534Z" />
-<glyph unicode="&#xf4;" horiz-adv-x="1168" d="M91 551Q91 710 153 837T327 1033T582 1102Q803 1102 939 949T1076 542V529Q1076 371 1016 246T843 50T584 -20Q364 -20 228 133T91 538V551ZM277 529Q277 349 360 240T584 131Q725 131 808 241T891 551Q891 729
-807 839T582 950Q445 950 361 841T277 529ZM878 1262V1252H725L575 1422L426 1252H273V1264L519 1536H631L878 1262Z" />
-<glyph unicode="&#xf5;" horiz-adv-x="1168" d="M91 551Q91 710 153 837T327 1033T582 1102Q803 1102 939 949T1076 542V529Q1076 371 1016 246T843 50T584 -20Q364 -20 228 133T91 538V551ZM277 529Q277 349 360 240T584 131Q725 131 808 241T891 551Q891 729
-807 839T582 950Q445 950 361 841T277 529ZM930 1504Q930 1396 869 1329T715 1262Q674 1262 644 1272T566 1313T496 1350T446 1357Q405 1357 376 1326T347 1245L223 1252Q223 1359 283 1429T437 1499Q472 1499 500 1489T576 1450T649 1412T706 1403Q749 1403 777
-1437T806 1516L930 1504Z" />
-<glyph unicode="&#xf6;" horiz-adv-x="1168" d="M91 551Q91 710 153 837T327 1033T582 1102Q803 1102 939 949T1076 542V529Q1076 371 1016 246T843 50T584 -20Q364 -20 228 133T91 538V551ZM277 529Q277 349 360 240T584 131Q725 131 808 241T891 551Q891 729
-807 839T582 950Q445 950 361 841T277 529ZM254 1371Q254 1416 281 1446T363 1477T445 1447T473 1371T445 1296T363 1266T282 1296T254 1371ZM684 1369Q684 1414 711 1445T793 1476T875 1445T903 1369T875 1294T793 1264T712 1294T684 1369Z" />
-<glyph unicode="&#xf7;" horiz-adv-x="1169" d="M1069 600H71V784H1069V600ZM461 1098Q461 1146 489 1178T575 1210T661 1178T691 1098Q691 1051 662 1020T575 989T490 1020T461 1098ZM461 281Q461 329 489 361T575 393T661 361T691 281Q691 235 662 204T575 172T490
-203T461 281Z" />
-<glyph unicode="&#xf8;" horiz-adv-x="1160" d="M91 551Q91 710 152 836T326 1032T582 1102Q692 1102 786 1060L859 1208H983L881 1003Q1076 849 1076 529Q1076 371 1014 244T840 49T584 -20Q480 -20 394 15L320 -134H196L296 69Q91 218 91 551ZM276 529Q276 335
-373 224L716 918Q654 950 582 950Q444 950 360 841T276 529ZM890 551Q890 733 803 844L463 156Q518 131 584 131Q723 131 806 240T890 535V551Z" />
-<glyph unicode="&#xf9;" horiz-adv-x="1129" d="M808 107Q700 -20 491 -20Q318 -20 228 80T136 378V1082H321V383Q321 137 521 137Q733 137 803 295V1082H988V0H812L808 107ZM673 1240H514L256 1534H479L673 1240Z" />
-<glyph unicode="&#xfa;" horiz-adv-x="1129" d="M808 107Q700 -20 491 -20Q318 -20 228 80T136 378V1082H321V383Q321 137 521 137Q733 137 803 295V1082H988V0H812L808 107ZM658 1534H882L614 1240H465L658 1534Z" />
-<glyph unicode="&#xfb;" horiz-adv-x="1129" d="M808 107Q700 -20 491 -20Q318 -20 228 80T136 378V1082H321V383Q321 137 521 137Q733 137 803 295V1082H988V0H812L808 107ZM870 1262V1252H717L567 1422L418 1252H265V1264L511 1536H623L870 1262Z" />
-<glyph unicode="&#xfc;" horiz-adv-x="1129" d="M808 107Q700 -20 491 -20Q318 -20 228 80T136 378V1082H321V383Q321 137 521 137Q733 137 803 295V1082H988V0H812L808 107ZM246 1371Q246 1416 273 1446T355 1477T437 1447T465 1371T437 1296T355 1266T274 1296T246
-1371ZM676 1369Q676 1414 703 1445T785 1476T867 1445T895 1369T867 1294T785 1264T704 1294T676 1369Z" />
-<glyph unicode="&#xfd;" horiz-adv-x="969" d="M494 271L746 1082H944L509 -167Q408 -437 188 -437L153 -434L84 -421V-271L134 -275Q228 -275 280 -237T367 -98L408 12L22 1082H224L494 271ZM599 1534H823L555 1240H406L599 1534Z" />
-<glyph unicode="&#xfe;" horiz-adv-x="1180" d="M1063 529Q1063 282 950 131T644 -20Q447 -20 334 105V-416H149V1536H334V970Q447 1102 641 1102Q836 1102 949 955T1063 546V529ZM878 550Q878 733 800 839T586 945Q418 945 334 796V279Q417 131 588 131Q721 131
-799 236T878 550Z" />
-<glyph unicode="&#xff;" horiz-adv-x="969" d="M494 271L746 1082H944L509 -167Q408 -437 188 -437L153 -434L84 -421V-271L134 -275Q228 -275 280 -237T367 -98L408 12L22 1082H224L494 271ZM187 1371Q187 1416 214 1446T296 1477T378 1447T406 1371T378 1296T296
-1266T215 1296T187 1371ZM617 1369Q617 1414 644 1445T726 1476T808 1445T836 1369T808 1294T726 1264T645 1294T617 1369Z" />
-<glyph unicode="&#x2013;" horiz-adv-x="1344" d="M1421 651H419V802H1421V651Z" />
-<glyph unicode="&#x2014;" horiz-adv-x="1599" d="M1737 651H401V802H1737V651Z" />
-<glyph unicode="&#x2018;" horiz-adv-x="409" d="M270 1555L376 1483Q283 1356 280 1209V1073H96V1189Q96 1291 144 1391T270 1555Z" />
-<glyph unicode="&#x2019;" horiz-adv-x="409" d="M153 1046L48 1118Q141 1248 144 1392V1536H327V1406Q326 1306 278 1207T153 1046Z" />
-<glyph unicode="&#x201a;" horiz-adv-x="407" d="M141 -283L36 -210Q127 -83 130 63V181H315V81Q315 -20 266 -121T141 -283Z" />
-<glyph unicode="&#x201c;" horiz-adv-x="724" d="M278 1555L384 1483Q291 1356 288 1209V1073H104V1189Q104 1291 152 1391T278 1555ZM593 1555L699 1483Q606 1356 603 1209V1073H419V1189Q419 1291 467 1391T593 1555Z" />
-<glyph unicode="&#x201d;" horiz-adv-x="731" d="M165 1046L60 1118Q153 1248 156 1392V1536H339V1406Q338 1306 290 1207T165 1046ZM472 1046L367 1118Q460 1248 463 1392V1536H646V1406Q645 1306 597 1207T472 1046Z" />
-<glyph unicode="&#x201e;" horiz-adv-x="705" d="M141 -301L36 -229Q127 -92 130 61V246H315V82Q315 -26 266 -131T141 -301ZM437 -301L332 -229Q423 -92 426 61V246H612V82Q612 -25 564 -129T437 -301Z" />
-<glyph unicode="&#x2022;" horiz-adv-x="690" d="M138 772Q138 859 193 915T341 971Q432 971 489 917T546 769V732Q546 645 491 590T342 535Q249 535 194 590T138 734V772Z" />
-<glyph unicode="&#x2039;" horiz-adv-x="614" d="M286 550L544 153H403L108 541V560L403 949H544L286 550Z" />
-<glyph unicode="&#x203a;" horiz-adv-x="614" d="M231 949L526 560V541L231 152H89L347 550L89 949H231Z" />
-</font>
-</defs>
-</svg>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.7e367be02cd17a96d513.woff2
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.7e367be02cd17a96d513.woff2 b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.7e367be02cd17a96d513.woff2
deleted file mode 100644
index 120796b..0000000
Binary files a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.7e367be02cd17a96d513.woff2 and /dev/null differ

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.9f916e330c478bbfa2a0.eot
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.9f916e330c478bbfa2a0.eot b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.9f916e330c478bbfa2a0.eot
deleted file mode 100644
index d26bc8f..0000000
Binary files a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.9f916e330c478bbfa2a0.eot and /dev/null differ


[19/43] asterixdb git commit: [ASTERIXDB-2387][MTD] Prevent Dataset Primary Index Drop

Posted by im...@apache.org.
[ASTERIXDB-2387][MTD] Prevent Dataset Primary Index Drop

- user model changes: no
- storage format changes: no
- interface changes: no

Details:
- Ensure a dataset primary index cannot be dropped
  without dropping the dataset.
- Add test case.

Change-Id: Ic2256925d088fa5b5ba3b9623a29b6219b5a9b1e
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2645
Sonar-Qube: Jenkins <je...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Till Westmann <ti...@apache.org>


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

Branch: refs/heads/release-0.9.4-pre-rc
Commit: f02b43bcff1c859b933f55df9654899d025b1ed3
Parents: 5c68793
Author: Murtadha Hubail <mh...@apache.org>
Authored: Thu May 17 01:33:02 2018 +0300
Committer: Murtadha Hubail <mh...@apache.org>
Committed: Wed May 16 19:22:29 2018 -0700

----------------------------------------------------------------------
 .../asterix/app/translator/QueryTranslator.java |  8 ++++++
 .../drop-primary-index.1.ddl.sqlpp              | 26 ++++++++++++++++++++
 .../drop-primary-index.2.ddl.sqlpp              | 19 ++++++++++++++
 .../resources/runtimets/testsuite_sqlpp.xml     |  6 +++++
 .../asterix/common/exceptions/ErrorCode.java    |  1 +
 .../main/resources/asx_errormsg/en.properties   |  1 +
 6 files changed, 61 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/f02b43bc/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
index 453bcb5..e983763 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
@@ -1468,6 +1468,7 @@ public class QueryTranslator extends AbstractLangTranslator implements IStatemen
                         throw new AlgebricksException("There is no index with this name " + indexName + ".");
                     }
                 }
+                ensureNonPrimaryIndexDrop(index);
                 // #. prepare a job to drop the index in NC.
                 jobsToExecute.add(IndexUtil.buildDropIndexJobSpec(index, metadataProvider, ds));
 
@@ -1509,6 +1510,7 @@ public class QueryTranslator extends AbstractLangTranslator implements IStatemen
                 } else if (ExternalIndexingOperations.isFileIndex(index)) {
                     throw new AlgebricksException("Dropping a dataset's files index is not allowed.");
                 }
+                ensureNonPrimaryIndexDrop(index);
                 // #. prepare a job to drop the index in NC.
                 jobsToExecute.add(IndexUtil.buildDropIndexJobSpec(index, metadataProvider, ds));
                 List<Index> datasetIndexes =
@@ -2812,4 +2814,10 @@ public class QueryTranslator extends AbstractLangTranslator implements IStatemen
         IStatementRewriter rewriter = rewriterFactory.createStatementRewriter();
         rewriter.rewrite(stmt);
     }
+
+    private void ensureNonPrimaryIndexDrop(Index index) throws AlgebricksException {
+        if (index.isPrimaryIndex()) {
+            throw new MetadataException(ErrorCode.CANNOT_DROP_INDEX, index.getIndexName(), index.getDatasetName());
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/f02b43bc/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/drop-primary-index/drop-primary-index.1.ddl.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/drop-primary-index/drop-primary-index.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/drop-primary-index/drop-primary-index.1.ddl.sqlpp
new file mode 100644
index 0000000..2dfd4aa
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/drop-primary-index/drop-primary-index.1.ddl.sqlpp
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+drop  dataverse test if exists;
+create  dataverse test;
+
+use test;
+
+create type aType as {id:int};
+create dataset ds(aType) primary key id;
+drop index ds.ds;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/f02b43bc/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/drop-primary-index/drop-primary-index.2.ddl.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/drop-primary-index/drop-primary-index.2.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/drop-primary-index/drop-primary-index.2.ddl.sqlpp
new file mode 100644
index 0000000..8268a20
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/drop-primary-index/drop-primary-index.2.ddl.sqlpp
@@ -0,0 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+drop  dataverse test if exists;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/f02b43bc/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
index 3823234..2ee294a 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
@@ -1654,6 +1654,12 @@
         <expected-error>Syntax error: In line 53 >>create  primary index if exists sec_primary_idx1  on LineItem;&lt;&lt; Encountered "exists" at column 26.</expected-error>
       </compilation-unit>
     </test-case>
+    <test-case FilePath="ddl">
+      <compilation-unit name="drop-primary-index">
+        <output-dir compare="Text">drop-primary-index</output-dir>
+        <expected-error>Cannot drop index "ds". Drop dataset "ds" to remove this index</expected-error>
+      </compilation-unit>
+    </test-case>
   </test-group>
   <test-group name="dml">
     <test-case FilePath="dml">

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/f02b43bc/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
index b9a5b29..bd84832 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
@@ -149,6 +149,7 @@ public class ErrorCode {
     public static final int CANNOT_SERIALIZE_A_VALUE = 1066;
     public static final int CANNOT_FIND_NON_MISSING_SELECT_OPERATOR = 1067;
     public static final int CANNOT_GET_CONDITIONAL_SPLIT_KEY_VARIABLE = 1068;
+    public static final int CANNOT_DROP_INDEX = 1069;
 
     // Feed errors
     public static final int DATAFLOW_ILLEGAL_STATE = 3001;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/f02b43bc/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties b/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
index 175f144..a0cebea 100644
--- a/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
+++ b/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
@@ -136,6 +136,7 @@
 1066 = Cannot serialize a value.
 1067 = Cannot find a non-missing SELECT operator in GROUP operator for a left-outer-join plan optimization.
 1068 = Cannot get the conditional split variable for the given UNNESTMAP operator.
+1069 = Cannot drop index \"%1$s\". Drop dataset \"%1$s\" to remove this index
 
 # Feed Errors
 3001 = Illegal state.


[07/43] asterixdb git commit: [ASTERIXDB-2358][LIC] Fix asterix-replication packaging

Posted by im...@apache.org.
[ASTERIXDB-2358][LIC] Fix asterix-replication packaging

Change-Id: Ieaf59ef163379e8950a40216b85305452a53fce0
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2594
Integration-Tests: Michael Blow <mb...@apache.org>
Tested-by: Michael Blow <mb...@apache.org>
Reviewed-by: Michael Blow <mb...@apache.org>
Reviewed-by: Murtadha Hubail <mh...@apache.org>


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

Branch: refs/heads/release-0.9.4-pre-rc
Commit: d8959ee59d9d12e6fed29f4ada87b7fd75db0180
Parents: 5e4ad72
Author: Michael Blow <mb...@apache.org>
Authored: Sat Apr 14 12:20:03 2018 -0400
Committer: Michael Blow <mb...@apache.org>
Committed: Sat Apr 14 11:20:59 2018 -0700

----------------------------------------------------------------------
 asterixdb/asterix-replication/pom.xml | 22 ----------------------
 1 file changed, 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/d8959ee5/asterixdb/asterix-replication/pom.xml
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-replication/pom.xml b/asterixdb/asterix-replication/pom.xml
index 787a0b4..c8a84ee 100644
--- a/asterixdb/asterix-replication/pom.xml
+++ b/asterixdb/asterix-replication/pom.xml
@@ -17,28 +17,6 @@
   <properties>
     <root.dir>${basedir}/..</root.dir>
   </properties>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <configuration>
-          <includes>
-            <include>**/*.class</include>
-            <include>**/*.txt</include>
-          </includes>
-        </configuration>
-        <executions>
-          <execution>
-            <goals>
-              <goal>test-jar</goal>
-            </goals>
-            <phase>package</phase>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
   <dependencies>
     <dependency>
       <groupId>org.apache.asterix</groupId>


[03/43] asterixdb git commit: [NO ISSUE] Remove instance.name, storage.subdir config properties

Posted by im...@apache.org.
[NO ISSUE] Remove instance.name, storage.subdir config properties

Change-Id: Ic530559e96eb4c744499f46a5595e3a4c59f7683
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2585
Reviewed-by: Murtadha Hubail <mh...@apache.org>
Integration-Tests: Murtadha Hubail <mh...@apache.org>
Tested-by: Murtadha Hubail <mh...@apache.org>
Reviewed-by: Michael Blow <mb...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/0b9177d5
Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/0b9177d5
Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/0b9177d5

Branch: refs/heads/release-0.9.4-pre-rc
Commit: 0b9177d559f0084b7eb8325ad7683771e1342abd
Parents: ce86b6e
Author: Michael Blow <mb...@apache.org>
Authored: Thu Apr 12 13:13:52 2018 -0400
Committer: Michael Blow <mb...@apache.org>
Committed: Thu Apr 12 10:17:49 2018 -0700

----------------------------------------------------------------------
 asterixdb/asterix-app/src/main/resources/cc-rep.conf        | 1 -
 asterixdb/asterix-app/src/test/resources/cc-multipart.conf  | 1 -
 asterixdb/asterix-app/src/test/resources/cc.conf            | 1 -
 .../results/api/cluster_state_1/cluster_state_1.1.regexadm  | 1 -
 .../cluster_state_1_full/cluster_state_1_full.1.regexadm    | 1 -
 .../cluster_state_1_less/cluster_state_1_less.1.regexadm    | 1 -
 .../apache/asterix/common/config/MetadataProperties.java    | 7 -------
 .../org/apache/asterix/common/config/NodeProperties.java    | 5 -----
 .../apache/asterix/common/config/PropertiesAccessor.java    | 9 ++++-----
 asterixdb/asterix-doc/src/site/markdown/ncservice.md        | 3 ---
 .../apache/asterix/runtime/utils/ClusterStateManager.java   | 4 ----
 asterixdb/asterix-server/src/main/opt/local/conf/cc.conf    | 1 -
 .../src/test/resources/NCServiceExecutionIT/cc.conf         | 1 -
 .../asterix-server/src/test/resources/NcLifecycleIT/cc.conf | 1 -
 .../asterix-server/src/test/resources/ReplicationIT/cc.conf | 1 -
 15 files changed, 4 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/0b9177d5/asterixdb/asterix-app/src/main/resources/cc-rep.conf
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/main/resources/cc-rep.conf b/asterixdb/asterix-app/src/main/resources/cc-rep.conf
index 1f4e5a5..818b835 100644
--- a/asterixdb/asterix-app/src/main/resources/cc-rep.conf
+++ b/asterixdb/asterix-app/src/main/resources/cc-rep.conf
@@ -37,7 +37,6 @@ address=127.0.0.1
 command=asterixnc
 app.class=org.apache.asterix.hyracks.bootstrap.NCApplication
 jvm.args=-Xmx4096m -Dnode.Resolver="org.apache.asterix.external.util.IdentitiyResolverFactory"
-storage.subdir=test_storage
 storage.memorycomponent.globalbudget = 1073741824
 
 [cc]

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/0b9177d5/asterixdb/asterix-app/src/test/resources/cc-multipart.conf
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/cc-multipart.conf b/asterixdb/asterix-app/src/test/resources/cc-multipart.conf
index 5cf1bbe..9c64ab4 100644
--- a/asterixdb/asterix-app/src/test/resources/cc-multipart.conf
+++ b/asterixdb/asterix-app/src/test/resources/cc-multipart.conf
@@ -35,7 +35,6 @@ address=127.0.0.1
 command=asterixnc
 app.class=org.apache.asterix.hyracks.bootstrap.NCApplication
 jvm.args=-Xmx4096m -Dnode.Resolver="org.apache.asterix.external.util.IdentitiyResolverFactory"
-storage.subdir=test_storage
 storage.buffercache.pagesize=32KB
 storage.buffercache.size=48MB
 storage.memorycomponent.globalbudget=512MB

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/0b9177d5/asterixdb/asterix-app/src/test/resources/cc.conf
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/cc.conf b/asterixdb/asterix-app/src/test/resources/cc.conf
index 1c141f1..fc95dd4 100644
--- a/asterixdb/asterix-app/src/test/resources/cc.conf
+++ b/asterixdb/asterix-app/src/test/resources/cc.conf
@@ -35,7 +35,6 @@ address=127.0.0.1
 command=asterixnc
 app.class=org.apache.asterix.hyracks.bootstrap.NCApplication
 jvm.args=-Xmx4096m -Dnode.Resolver="org.apache.asterix.external.util.IdentitiyResolverFactory"
-storage.subdir=test_storage
 storage.buffercache.pagesize=32KB
 storage.buffercache.size=48MB
 storage.memorycomponent.globalbudget=512MB

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/0b9177d5/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1/cluster_state_1.1.regexadm
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1/cluster_state_1.1.regexadm b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1/cluster_state_1.1.regexadm
index 28ef0eb..0e619cc 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1/cluster_state_1.1.regexadm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1/cluster_state_1.1.regexadm
@@ -13,7 +13,6 @@
     "compiler\.sortmemory" : 327680,
     "compiler\.textsearchmemory" : 163840,
     "default\.dir" : "target/io/dir/asterixdb",
-    "instance\.name" : "DEFAULT_INSTANCE",
     "log\.level" : "INFO",
     "max\.wait\.active\.cluster" : 60,
     "messaging\.frame\.count" : 512,

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/0b9177d5/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_full/cluster_state_1_full.1.regexadm
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_full/cluster_state_1_full.1.regexadm b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_full/cluster_state_1_full.1.regexadm
index 61cf528..b3a3eed 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_full/cluster_state_1_full.1.regexadm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_full/cluster_state_1_full.1.regexadm
@@ -13,7 +13,6 @@
     "compiler\.sortmemory" : 327680,
     "compiler\.textsearchmemory" : 163840,
     "default\.dir" : "target/io/dir/asterixdb",
-    "instance\.name" : "DEFAULT_INSTANCE",
     "log\.level" : "WARN",
     "max\.wait\.active\.cluster" : 60,
     "messaging\.frame\.count" : 512,

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/0b9177d5/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_less/cluster_state_1_less.1.regexadm
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_less/cluster_state_1_less.1.regexadm b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_less/cluster_state_1_less.1.regexadm
index d340386..75e879c 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_less/cluster_state_1_less.1.regexadm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_less/cluster_state_1_less.1.regexadm
@@ -13,7 +13,6 @@
     "compiler\.sortmemory" : 327680,
     "compiler\.textsearchmemory" : 163840,
     "default\.dir" : "target/io/dir/asterixdb",
-    "instance\.name" : "DEFAULT_INSTANCE",
     "log\.level" : "WARN",
     "max\.wait\.active\.cluster" : 60,
     "messaging\.frame\.count" : 512,

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/0b9177d5/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/MetadataProperties.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/MetadataProperties.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/MetadataProperties.java
index 0b18f98..7325c98 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/MetadataProperties.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/MetadataProperties.java
@@ -34,7 +34,6 @@ import org.apache.hyracks.api.config.Section;
 public class MetadataProperties extends AbstractProperties {
 
     public enum Option implements IOption {
-        INSTANCE_NAME(STRING, "DEFAULT_INSTANCE"),
         METADATA_NODE(STRING, null),
         METADATA_REGISTRATION_TIMEOUT_SECS(INTEGER, 60),
         METADATA_LISTEN_PORT(INTEGER, 0),
@@ -56,8 +55,6 @@ public class MetadataProperties extends AbstractProperties {
         @Override
         public String description() {
             switch (this) {
-                case INSTANCE_NAME:
-                    return "The name of this cluster instance";
                 case METADATA_NODE:
                     return "the node which should serve as the metadata node";
                 case METADATA_REGISTRATION_TIMEOUT_SECS:
@@ -97,10 +94,6 @@ public class MetadataProperties extends AbstractProperties {
         super(accessor);
     }
 
-    public String getInstanceName() {
-        return accessor.getString(Option.INSTANCE_NAME);
-    }
-
     public String getMetadataNodeName() {
         return accessor.getString(Option.METADATA_NODE);
     }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/0b9177d5/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/NodeProperties.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/NodeProperties.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/NodeProperties.java
index 1443b8e..aaf6316 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/NodeProperties.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/NodeProperties.java
@@ -43,7 +43,6 @@ public class NodeProperties extends AbstractProperties {
                 appConfig -> FileUtil.joinPath(appConfig.getString(ControllerConfig.Option.DEFAULT_DIR), "txn-log"),
                 "The directory where transaction logs should be stored",
                 "<value of " + ControllerConfig.Option.DEFAULT_DIR.cmdline() + ">/txn-log"),
-        STORAGE_SUBDIR(OptionTypes.STRING, "storage", "The subdirectory name under each iodevice used for storage"),
         STARTING_PARTITION_ID(
                 OptionTypes.INTEGER,
                 -1,
@@ -116,8 +115,4 @@ public class NodeProperties extends AbstractProperties {
     public String getTxnLogDir() {
         return accessor.getString(Option.TXN_LOG_DIR);
     }
-
-    public String getStorageSubdir() {
-        return accessor.getString(Option.STORAGE_SUBDIR);
-    }
 }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/0b9177d5/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/PropertiesAccessor.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/PropertiesAccessor.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/PropertiesAccessor.java
index 9c002b5..3b6100c 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/PropertiesAccessor.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/PropertiesAccessor.java
@@ -18,10 +18,10 @@
  */
 package org.apache.asterix.common.config;
 
-import static org.apache.asterix.common.config.NodeProperties.Option.STORAGE_SUBDIR;
+import static org.apache.asterix.common.utils.StorageConstants.STORAGE_ROOT_DIR_NAME;
 import static org.apache.hyracks.control.common.controllers.NCConfig.Option.IODEVICES;
+import static org.apache.hyracks.util.file.FileUtil.joinPath;
 
-import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
@@ -116,12 +116,11 @@ public class PropertiesAccessor implements IApplicationConfig {
         // Now we create an array of ClusterPartitions for all the partitions
         // on this NC.
         String[] iodevices = nodeCfg.getStringArray(IODEVICES);
-        String storageSubdir = nodeCfg.getString(STORAGE_SUBDIR);
         String[] nodeStores = new String[iodevices.length];
         ClusterPartition[] nodePartitions = new ClusterPartition[iodevices.length];
         for (int i = 0; i < nodePartitions.length; i++) {
-            // Construct final storage path from iodevice dir + storage subdirs
-            nodeStores[i] = iodevices[i] + File.separator + storageSubdir;
+            // Construct final storage path from iodevice dir
+            nodeStores[i] = joinPath(iodevices[i], STORAGE_ROOT_DIR_NAME);
             // Create ClusterPartition instances for this NC.
             ClusterPartition partition = new ClusterPartition(uniquePartitionId.getAndIncrement(), ncId, i);
             ClusterPartition orig = clusterPartitions.put(partition.getPartitionId(), partition);

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/0b9177d5/asterixdb/asterix-doc/src/site/markdown/ncservice.md
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-doc/src/site/markdown/ncservice.md b/asterixdb/asterix-doc/src/site/markdown/ncservice.md
index d9df232..605ee30 100644
--- a/asterixdb/asterix-doc/src/site/markdown/ncservice.md
+++ b/asterixdb/asterix-doc/src/site/markdown/ncservice.md
@@ -138,7 +138,6 @@ The second configuration file is
 
     [nc]
     app.class=org.apache.asterix.hyracks.bootstrap.NCApplicationEntryPoint
-    storage.subdir=storage
     address=127.0.0.1
     command=asterixnc
 
@@ -331,7 +330,6 @@ The following parameters for slave processes, under "[nc]" sections.
 |   nc    | storage.memorycomponent.numcomponents     | The number of memory components to be used per lsm index | 2 |
 |   nc    | storage.memorycomponent.pagesize          | The page size in bytes for pages allocated to memory components | 131072 (128 kB) |
 |   nc    | storage.metadata.memorycomponent.numpages | The number of pages to allocate for a metadata memory component | 8 |
-|   nc    | storage.subdir                            | The subdirectory name under each iodevice used for storage | storage |
 |   nc    | txn.log.dir                               | The directory where transaction logs should be stored | ${java.io.tmpdir}/asterixdb/txn-log |
 
 
@@ -346,7 +344,6 @@ The following parameters are configured under the "[common]" section.
 | common  | compiler.parallelism                      | The degree of parallelism for query execution. Zero means to use the storage parallelism as the query execution parallelism, while other integer values dictate the number of query execution parallel partitions. The system will fall back to use the number of all available CPU cores in the cluster as the degree of parallelism if the number set by a user is too large or too small | 0 |
 | common  | compiler.sortmemory                       | The memory budget (in bytes) for a sort operator instance in a partition | 33554432 (32 MB) |
 | common  | compiler.textsearchmemory                       | The memory budget (in bytes) for an inverted-index-search operator instance in a partition | 33554432 (32 MB) |
-| common  | instance.name                             | The name of this cluster instance | DEFAULT_INSTANCE |
 | common  | log.level                                 | The logging level for master and slave processes | WARNING |
 | common  | max.wait.active.cluster                   | The max pending time (in seconds) for cluster startup. After the threshold, if the cluster still is not up and running, it is considered unavailable | 60 |
 | common  | messaging.frame.count                     | Number of reusable frames for NC to NC messaging | 512 |

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/0b9177d5/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/ClusterStateManager.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/ClusterStateManager.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/ClusterStateManager.java
index 73d6705..8539fa4 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/ClusterStateManager.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/ClusterStateManager.java
@@ -462,8 +462,4 @@ public class ClusterStateManager implements IClusterStateManager {
         });
     }
 
-    public String getStoragePathPrefix() {
-        return appCtx.getNodeProperties().getStorageSubdir();
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/0b9177d5/asterixdb/asterix-server/src/main/opt/local/conf/cc.conf
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-server/src/main/opt/local/conf/cc.conf b/asterixdb/asterix-server/src/main/opt/local/conf/cc.conf
index cc2d9bd..6fc0579 100644
--- a/asterixdb/asterix-server/src/main/opt/local/conf/cc.conf
+++ b/asterixdb/asterix-server/src/main/opt/local/conf/cc.conf
@@ -30,7 +30,6 @@ nc.api.port=19005
 ${NC_BLUE_EXTRA}
 
 [nc]
-storage.subdir=storage
 address=127.0.0.1
 command=${NC_COMMAND}
 

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/0b9177d5/asterixdb/asterix-server/src/test/resources/NCServiceExecutionIT/cc.conf
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-server/src/test/resources/NCServiceExecutionIT/cc.conf b/asterixdb/asterix-server/src/test/resources/NCServiceExecutionIT/cc.conf
index 4658f1b..f3dcd63 100644
--- a/asterixdb/asterix-server/src/test/resources/NCServiceExecutionIT/cc.conf
+++ b/asterixdb/asterix-server/src/test/resources/NCServiceExecutionIT/cc.conf
@@ -37,7 +37,6 @@ address=127.0.0.1
 command=asterixnc
 app.class=org.apache.asterix.hyracks.bootstrap.NCApplication
 jvm.args=-Xmx4g -Dnode.Resolver="org.apache.asterix.external.util.IdentitiyResolverFactory"
-storage.subdir=test_storage
 storage.memorycomponent.globalbudget = 1073741824
 
 [cc]

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/0b9177d5/asterixdb/asterix-server/src/test/resources/NcLifecycleIT/cc.conf
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-server/src/test/resources/NcLifecycleIT/cc.conf b/asterixdb/asterix-server/src/test/resources/NcLifecycleIT/cc.conf
index e34cf9e..dc80e56 100644
--- a/asterixdb/asterix-server/src/test/resources/NcLifecycleIT/cc.conf
+++ b/asterixdb/asterix-server/src/test/resources/NcLifecycleIT/cc.conf
@@ -36,7 +36,6 @@ address=127.0.0.1
 command=asterixnc
 app.class=org.apache.asterix.hyracks.bootstrap.NCApplication
 jvm.args=-Xmx4096m -Dnode.Resolver="org.apache.asterix.external.util.IdentitiyResolverFactory"
-storage.subdir=test_storage
 storage.memorycomponent.globalbudget = 1073741824
 
 [cc]

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/0b9177d5/asterixdb/asterix-server/src/test/resources/ReplicationIT/cc.conf
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-server/src/test/resources/ReplicationIT/cc.conf b/asterixdb/asterix-server/src/test/resources/ReplicationIT/cc.conf
index b36d41c..19e951f 100644
--- a/asterixdb/asterix-server/src/test/resources/ReplicationIT/cc.conf
+++ b/asterixdb/asterix-server/src/test/resources/ReplicationIT/cc.conf
@@ -37,7 +37,6 @@ address=127.0.0.1
 command=asterixnc
 app.class=org.apache.asterix.hyracks.bootstrap.NCApplication
 jvm.args=-Xmx4096m -Dnode.Resolver="org.apache.asterix.external.util.IdentitiyResolverFactory"
-storage.subdir=test_storage
 storage.memorycomponent.globalbudget = 1073741824
 
 [cc]


[40/43] asterixdb git commit: [NO ISSUE] Fix ClassCastExceptions in MXHelper

Posted by im...@apache.org.
[NO ISSUE] Fix ClassCastExceptions in MXHelper

Change-Id: Ibf79fe10447f0f7e93c421c9b10b6f4cb84a6a60
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2669
Sonar-Qube: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Murtadha Hubail <mh...@apache.org>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>


Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/076b3ef7
Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/076b3ef7
Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/076b3ef7

Branch: refs/heads/release-0.9.4-pre-rc
Commit: 076b3ef71be5b5bb79ae6806f48bc4b14da92b16
Parents: 265919e
Author: Michael Blow <mb...@apache.org>
Authored: Tue May 29 14:31:50 2018 -0400
Committer: Michael Blow <mb...@apache.org>
Committed: Tue May 29 13:27:31 2018 -0700

----------------------------------------------------------------------
 .../src/main/java/org/apache/hyracks/util/MXHelper.java      | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/076b3ef7/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/MXHelper.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/MXHelper.java b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/MXHelper.java
index 2b65106..ce20d37 100644
--- a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/MXHelper.java
+++ b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/MXHelper.java
@@ -64,24 +64,24 @@ public class MXHelper {
         return getOpenFileDescriptorCount != null;
     }
 
-    public static Integer getCurrentOpenFileCount() {
+    public static long getCurrentOpenFileCount() {
         if (getOpenFileDescriptorCount == null) {
             return -1;
         }
         try {
-            return (Integer) getOpenFileDescriptorCount.invoke(osMXBean);
+            return (long) getOpenFileDescriptorCount.invoke(osMXBean);
         } catch (Throwable e) { // NOSONAR
             LOGGER.log(Level.WARN, "Failure invoking getOpenFileDescriptorCount", e);
             return -1;
         }
     }
 
-    public static Integer getMaxOpenFileCount() {
+    public static long getMaxOpenFileCount() {
         if (getMaxFileDescriptorCount == null) {
             return -1;
         }
         try {
-            return (Integer) getMaxFileDescriptorCount.invoke(osMXBean);
+            return (long) getMaxFileDescriptorCount.invoke(osMXBean);
         } catch (Throwable e) { // NOSONAR
             LOGGER.log(Level.WARN, "Failure invoking getMaxFileDescriptorCount", e);
             return -1;


[37/43] asterixdb git commit: [ASTERIXDB-2318] Build dashboard in mvn

Posted by im...@apache.org.
[ASTERIXDB-2318] Build dashboard in mvn

This patch makes the build of the dashboard run along
with everything else instead of having the production
package checked in as source. The license is also taken
from ng and integrated with the rest of the licenses
instead of being static.

Change-Id: Iccea033d426f5d205658d1c11867f8aaab4d24ca
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2652
Sonar-Qube: Jenkins <je...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Michael Blow <mb...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/3ae6ef05
Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/3ae6ef05
Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/3ae6ef05

Branch: refs/heads/release-0.9.4-pre-rc
Commit: 3ae6ef0595ad27758a7fdae436e0b2be1e0676db
Parents: ab8297e
Author: Ian Maxon <im...@apache.org>
Authored: Thu May 24 18:32:47 2018 -0700
Committer: Ian Maxon <im...@apache.org>
Committed: Fri May 25 10:50:06 2018 -0700

----------------------------------------------------------------------
 asterixdb/LICENSE                               | 727 -------------------
 asterixdb/asterix-dashboard/pom.xml             | 174 +++++
 .../main/resources/dashboard/.angular-cli.json  |  69 --
 .../src/main/resources/dashboard/.editorconfig  |  25 -
 .../src/main/resources/dashboard/.gitignore     |  47 --
 .../src/main/resources/dashboard/README.md      |  47 --
 .../resources/dashboard/e2e/app.e2e-spec.ts     |  27 -
 .../src/main/resources/dashboard/e2e/app.po.ts  |  24 -
 .../resources/dashboard/e2e/tsconfig.e2e.json   |  27 -
 .../src/main/resources/dashboard/karma.conf.js  |  47 --
 .../src/main/resources/dashboard/package.json   |  60 --
 .../main/resources/dashboard/protractor.conf.js |  41 --
 .../main/resources/dashboard/proxy.config.js    |  23 -
 .../dashboard/src/app/app-config.service.ts     |  75 --
 .../dashboard/src/app/app.component.html        |  15 -
 .../dashboard/src/app/app.component.scss        |  14 -
 .../dashboard/src/app/app.component.ts          |  31 -
 .../resources/dashboard/src/app/app.module.ts   | 121 ---
 .../src/app/dashboard/appbar.component.html     |  45 --
 .../src/app/dashboard/appbar.component.scss     |  62 --
 .../src/app/dashboard/appbar.component.ts       |  25 -
 .../src/app/dashboard/apptab.component.html     |  23 -
 .../src/app/dashboard/apptab.component.scss     |  26 -
 .../src/app/dashboard/apptab.component.ts       |  25 -
 .../metadata/codemirror-metadata.component.scss |  27 -
 .../metadata/codemirror-metadata.component.ts   | 244 -------
 .../dataset-create-dialog.component.html        |  14 -
 .../dataset-create-dialog.component.scss        |  18 -
 .../dataset-drop-dialog.component.html          |  26 -
 .../dataset-drop-dialog.component.scss          |  18 -
 .../datasets-collection/datasets.component.html | 112 ---
 .../datasets-collection/datasets.component.scss | 415 -----------
 .../datasets-collection/datasets.component.ts   | 231 ------
 .../datatype-create-dialog.component.html       |  14 -
 .../datatype-create-dialog.component.scss       |  18 -
 .../datatype-drop-dialog.component.html         |  26 -
 .../datatype-drop-dialog.component.scss         |  18 -
 .../datatypes.component.html                    |  70 --
 .../datatypes.component.scss                    | 267 -------
 .../datatypes-collection/datatypes.component.ts | 220 ------
 .../dataverses-create-dialog.component.html     |  27 -
 .../dataverses-create-dialog.component.scss     |  18 -
 .../dataverses-drop-dialog.component.html       |  26 -
 .../dataverses-drop-dialog.component.scss       |  18 -
 .../dataverses.component.html                   |  77 --
 .../dataverses.component.scss                   | 259 -------
 .../dataverses.component.ts                     | 234 ------
 .../index-create-dialog.component.html          |  14 -
 .../index-create-dialog.component.scss          |  18 -
 .../index-drop-dialog.component.html            |  26 -
 .../index-drop-dialog.component.scss            |  18 -
 .../indexes-collection/indexes.component.html   |  94 ---
 .../indexes-collection/indexes.component.scss   | 398 ----------
 .../indexes-collection/indexes.component.ts     | 230 ------
 .../metadata/input-metadata.component.html      |  31 -
 .../metadata/input-metadata.component.scss      |  78 --
 .../metadata/input-metadata.component.ts        | 111 ---
 .../metadata/metadata-container.component.html  |  36 -
 .../metadata/metadata-container.component.scss  |  56 --
 .../metadata/metadata-container.component.ts    |  41 --
 .../dashboard/query/codemirror.component.scss   |  23 -
 .../app/dashboard/query/codemirror.component.ts | 237 ------
 .../app/dashboard/query/input.component.html    |  28 -
 .../app/dashboard/query/input.component.scss    |  82 ---
 .../src/app/dashboard/query/input.component.ts  |  90 ---
 .../app/dashboard/query/metadata.component.html |  44 --
 .../app/dashboard/query/metadata.component.scss |  97 ---
 .../app/dashboard/query/metadata.component.ts   | 209 ------
 .../src/app/dashboard/query/ouput.component.ts  | 278 -------
 .../app/dashboard/query/output.component.html   |  68 --
 .../app/dashboard/query/output.component.scss   | 169 -----
 .../query/query-container.component.html        |  24 -
 .../query/query-container.component.scss        |  82 ---
 .../query/query-container.component.ts          |  74 --
 .../src/main/resources/dashboard/src/app/db.ts  |  23 -
 .../dashboard/src/app/material.module.ts        | 105 ---
 .../src/app/shared/actions/app.actions.ts       |  33 -
 .../src/app/shared/actions/dataset.actions.ts   | 130 ----
 .../src/app/shared/actions/datatype.actions.ts  | 122 ----
 .../src/app/shared/actions/dataverse.actions.ts | 119 ---
 .../src/app/shared/actions/index.actions.ts     | 119 ---
 .../src/app/shared/actions/metadata.actions.ts  |  46 --
 .../src/app/shared/actions/query.actions.ts     |  71 --
 .../src/app/shared/effects/dataset.effects.ts   |  65 --
 .../src/app/shared/effects/datatype.effects.ts  |  63 --
 .../src/app/shared/effects/dataverse.effects.ts |  63 --
 .../src/app/shared/effects/index.effects.ts     |  63 --
 .../src/app/shared/effects/metadata.effects.ts  |  41 --
 .../src/app/shared/effects/query.effects.ts     |  53 --
 .../src/app/shared/models/asterixDB.model.ts    | 112 ---
 .../dashboard/src/app/shared/pipes/keys.pipe.ts |  25 -
 .../app/shared/pipes/objectArrayType.pipe.ts    |  23 -
 .../src/app/shared/pipes/objectType.pipe.ts     |  21 -
 .../src/app/shared/reducers/app.reducer.ts      |  73 --
 .../src/app/shared/reducers/dataset.reducer.ts  | 177 -----
 .../src/app/shared/reducers/datatype.reducer.ts | 167 -----
 .../app/shared/reducers/dataverse.reducer.ts    | 171 -----
 .../src/app/shared/reducers/index.reducer.ts    | 167 -----
 .../dashboard/src/app/shared/reducers/index.ts  |  49 --
 .../src/app/shared/reducers/metadata.reducer.ts |  56 --
 .../shared/reducers/query-metadata.reducer.ts   |  96 ---
 .../src/app/shared/reducers/query.reducer.ts    |  97 ---
 .../src/app/shared/services/app-core.service.ts |  38 -
 .../shared/services/async-metadata.service.ts   | 120 ---
 .../app/shared/services/async-query.service.ts  | 190 -----
 .../dashboard/src/assets/asterixdb_tm.png       | Bin 93615 -> 0 bytes
 .../src/environments/environment.prod.ts        |  16 -
 .../dashboard/src/environments/environment.ts   |  21 -
 .../main/resources/dashboard/src/favicon.ico    | Bin 1150 -> 0 bytes
 .../src/main/resources/dashboard/src/index.html |  30 -
 .../src/main/resources/dashboard/src/main.scss  |  29 -
 .../src/main/resources/dashboard/src/main.ts    |  26 -
 .../main/resources/dashboard/src/polyfills.ts   |  76 --
 .../dashboard/src/styles/_constants.scss        |  21 -
 .../dashboard/src/styles/_general.scss          |  32 -
 .../src/main/resources/dashboard/src/test.ts    |  46 --
 .../resources/dashboard/src/tsconfig.app.json   |  26 -
 .../resources/dashboard/src/tsconfig.spec.json  |  33 -
 .../main/resources/dashboard/src/typings.d.ts   |   5 -
 .../dashboard/static/3rdpartylicenses.txt       | 222 ------
 .../dashboard/static/assets/asterixdb_tm.png    | Bin 93615 -> 0 bytes
 .../static/color.c7a33805ffda0d32bd2a.png       | Bin 10355 -> 0 bytes
 .../main/resources/dashboard/static/favicon.ico | Bin 1150 -> 0 bytes
 .../main/resources/dashboard/static/index.html  |  13 -
 .../inline.66bd6b83f86cf773a001.bundle.js       |   1 -
 .../static/line.567f57385ea3dde2c9ae.gif        | Bin 13112 -> 0 bytes
 .../static/main.37b7b7cad656490b195a.bundle.js  |   1 -
 .../polyfills.32ca5670d6503e090789.bundle.js    |   1 -
 ...-v15-latin-regular.16e1d930cf13fb7a9563.woff | Bin 18520 -> 0 bytes
 ...o-v15-latin-regular.38861cba61c66739c145.ttf | Bin 32652 -> 0 bytes
 ...o-v15-latin-regular.3d3a53586bd78d1069ae.svg | 308 --------
 ...v15-latin-regular.7e367be02cd17a96d513.woff2 | Bin 14584 -> 0 bytes
 ...o-v15-latin-regular.9f916e330c478bbfa2a0.eot | Bin 16227 -> 0 bytes
 .../scripts.da68998bdd77aff4e764.bundle.js      |   6 -
 .../styles.9f50282210bba5318775.bundle.css      |   1 -
 .../src/main/resources/dashboard/tsconfig.json  |  32 -
 .../src/main/resources/dashboard/tslint.json    | 154 ----
 .../resources/licenses/3rdpartylicenses.txt     | 373 ++++++++++
 .../www.apache.org_licenses_LICENSE-2.0.txt     | 202 ++++++
 .../resources/licenses/dashboard-license.ftl    |  36 +
 .../src/node/.angular-cli.json                  |  69 ++
 .../asterix-dashboard/src/node/.editorconfig    |  25 +
 asterixdb/asterix-dashboard/src/node/.gitignore |  48 ++
 asterixdb/asterix-dashboard/src/node/README.md  |  47 ++
 .../src/node/e2e/app.e2e-spec.ts                |  27 +
 .../asterix-dashboard/src/node/e2e/app.po.ts    |  24 +
 .../src/node/e2e/tsconfig.e2e.json              |  27 +
 .../asterix-dashboard/src/node/karma.conf.js    |  47 ++
 .../asterix-dashboard/src/node/package.json     |  62 ++
 .../src/node/protractor.conf.js                 |  41 ++
 .../asterix-dashboard/src/node/proxy.config.js  |  23 +
 .../src/node/src/app/app-config.service.ts      |  75 ++
 .../src/node/src/app/app.component.html         |  15 +
 .../src/node/src/app/app.component.scss         |  14 +
 .../src/node/src/app/app.component.ts           |  31 +
 .../src/node/src/app/app.module.ts              | 121 +++
 .../src/app/dashboard/appbar.component.html     |  45 ++
 .../src/app/dashboard/appbar.component.scss     |  62 ++
 .../node/src/app/dashboard/appbar.component.ts  |  25 +
 .../src/app/dashboard/apptab.component.html     |  23 +
 .../src/app/dashboard/apptab.component.scss     |  26 +
 .../node/src/app/dashboard/apptab.component.ts  |  25 +
 .../metadata/codemirror-metadata.component.scss |  27 +
 .../metadata/codemirror-metadata.component.ts   | 244 +++++++
 .../dataset-create-dialog.component.html        |  14 +
 .../dataset-create-dialog.component.scss        |  18 +
 .../dataset-drop-dialog.component.html          |  26 +
 .../dataset-drop-dialog.component.scss          |  18 +
 .../datasets-collection/datasets.component.html | 112 +++
 .../datasets-collection/datasets.component.scss | 415 +++++++++++
 .../datasets-collection/datasets.component.ts   | 231 ++++++
 .../datatype-create-dialog.component.html       |  14 +
 .../datatype-create-dialog.component.scss       |  18 +
 .../datatype-drop-dialog.component.html         |  26 +
 .../datatype-drop-dialog.component.scss         |  18 +
 .../datatypes.component.html                    |  70 ++
 .../datatypes.component.scss                    | 267 +++++++
 .../datatypes-collection/datatypes.component.ts | 220 ++++++
 .../dataverses-create-dialog.component.html     |  27 +
 .../dataverses-create-dialog.component.scss     |  18 +
 .../dataverses-drop-dialog.component.html       |  26 +
 .../dataverses-drop-dialog.component.scss       |  18 +
 .../dataverses.component.html                   |  77 ++
 .../dataverses.component.scss                   | 259 +++++++
 .../dataverses.component.ts                     | 234 ++++++
 .../index-create-dialog.component.html          |  14 +
 .../index-create-dialog.component.scss          |  18 +
 .../index-drop-dialog.component.html            |  26 +
 .../index-drop-dialog.component.scss            |  18 +
 .../indexes-collection/indexes.component.html   |  94 +++
 .../indexes-collection/indexes.component.scss   | 398 ++++++++++
 .../indexes-collection/indexes.component.ts     | 230 ++++++
 .../metadata/input-metadata.component.html      |  31 +
 .../metadata/input-metadata.component.scss      |  78 ++
 .../metadata/input-metadata.component.ts        | 111 +++
 .../metadata/metadata-container.component.html  |  36 +
 .../metadata/metadata-container.component.scss  |  56 ++
 .../metadata/metadata-container.component.ts    |  41 ++
 .../dashboard/query/codemirror.component.scss   |  23 +
 .../app/dashboard/query/codemirror.component.ts | 237 ++++++
 .../app/dashboard/query/input.component.html    |  28 +
 .../app/dashboard/query/input.component.scss    |  82 +++
 .../src/app/dashboard/query/input.component.ts  |  90 +++
 .../app/dashboard/query/metadata.component.html |  44 ++
 .../app/dashboard/query/metadata.component.scss |  97 +++
 .../app/dashboard/query/metadata.component.ts   | 209 ++++++
 .../src/app/dashboard/query/ouput.component.ts  | 278 +++++++
 .../app/dashboard/query/output.component.html   |  68 ++
 .../app/dashboard/query/output.component.scss   | 169 +++++
 .../query/query-container.component.html        |  24 +
 .../query/query-container.component.scss        |  82 +++
 .../query/query-container.component.ts          |  74 ++
 .../asterix-dashboard/src/node/src/app/db.ts    |  23 +
 .../src/node/src/app/material.module.ts         | 105 +++
 .../node/src/app/shared/actions/app.actions.ts  |  33 +
 .../src/app/shared/actions/dataset.actions.ts   | 130 ++++
 .../src/app/shared/actions/datatype.actions.ts  | 122 ++++
 .../src/app/shared/actions/dataverse.actions.ts | 119 +++
 .../src/app/shared/actions/index.actions.ts     | 119 +++
 .../src/app/shared/actions/metadata.actions.ts  |  46 ++
 .../src/app/shared/actions/query.actions.ts     |  71 ++
 .../src/app/shared/effects/dataset.effects.ts   |  65 ++
 .../src/app/shared/effects/datatype.effects.ts  |  63 ++
 .../src/app/shared/effects/dataverse.effects.ts |  63 ++
 .../src/app/shared/effects/index.effects.ts     |  63 ++
 .../src/app/shared/effects/metadata.effects.ts  |  41 ++
 .../src/app/shared/effects/query.effects.ts     |  53 ++
 .../src/app/shared/models/asterixDB.model.ts    | 112 +++
 .../src/node/src/app/shared/pipes/keys.pipe.ts  |  25 +
 .../app/shared/pipes/objectArrayType.pipe.ts    |  23 +
 .../src/app/shared/pipes/objectType.pipe.ts     |  21 +
 .../node/src/app/shared/reducers/app.reducer.ts |  73 ++
 .../src/app/shared/reducers/dataset.reducer.ts  | 177 +++++
 .../src/app/shared/reducers/datatype.reducer.ts | 167 +++++
 .../app/shared/reducers/dataverse.reducer.ts    | 171 +++++
 .../src/app/shared/reducers/index.reducer.ts    | 167 +++++
 .../src/node/src/app/shared/reducers/index.ts   |  49 ++
 .../src/app/shared/reducers/metadata.reducer.ts |  56 ++
 .../shared/reducers/query-metadata.reducer.ts   |  96 +++
 .../src/app/shared/reducers/query.reducer.ts    |  97 +++
 .../src/app/shared/services/app-core.service.ts |  38 +
 .../shared/services/async-metadata.service.ts   | 120 +++
 .../app/shared/services/async-query.service.ts  | 190 +++++
 .../src/node/src/assets/asterixdb_tm.png        | Bin 0 -> 93615 bytes
 .../node/src/environments/environment.prod.ts   |  16 +
 .../src/node/src/environments/environment.ts    |  21 +
 .../asterix-dashboard/src/node/src/favicon.ico  | Bin 0 -> 1150 bytes
 .../asterix-dashboard/src/node/src/index.html   |  30 +
 .../asterix-dashboard/src/node/src/main.scss    |  29 +
 .../asterix-dashboard/src/node/src/main.ts      |  26 +
 .../asterix-dashboard/src/node/src/polyfills.ts |  76 ++
 .../src/node/src/styles/_constants.scss         |  21 +
 .../src/node/src/styles/_general.scss           |  32 +
 .../asterix-dashboard/src/node/src/test.ts      |  46 ++
 .../src/node/src/tsconfig.app.json              |  26 +
 .../src/node/src/tsconfig.spec.json             |  33 +
 .../asterix-dashboard/src/node/src/typings.d.ts |   5 +
 .../asterix-dashboard/src/node/tsconfig.json    |  32 +
 .../asterix-dashboard/src/node/tslint.json      | 154 ++++
 asterixdb/asterix-server/pom.xml                |  32 +-
 asterixdb/pom.xml                               |   1 +
 .../licenses/templates/3rdpartylicenses.txt     | 373 ++++++++++
 .../main/licenses/templates/asterix-license.ftl |  12 +
 .../main/licenses/templates/source_licenses.ftl | 695 ------------------
 264 files changed, 10402 insertions(+), 11173 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/LICENSE
----------------------------------------------------------------------
diff --git a/asterixdb/LICENSE b/asterixdb/LICENSE
index 7c968b8..7d7f90a 100644
--- a/asterixdb/LICENSE
+++ b/asterixdb/LICENSE
@@ -311,733 +311,6 @@
    Source files in asterix-hivecompat are derived from portions of Apache Hive
    Query Language v0.13.0 (org.apache.hive:hive-exec).
 ---
-   Portions of the File Saver portions of the AsterixDB Dashboard
-       located at:
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/output.component.ts,
-       and
-         asterix-dashboard/src/main/resources/dashboard/static
-
-   are available under The MIT license :
----
-   The MIT License
-
-   Copyright © 2016 Eli Grey.
-
-   Permission is hereby granted, free of charge, to any person obtaining a copy of
-   this software and associated documentation files (the "Software"), to deal in
-   the Software without restriction, including without limitation the rights to
-   use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-   the Software, and to permit persons to whom the Software is furnished to do so,
-   subject to the following conditions:
-
-   The above copyright notice and this permission notice shall be included in all
-   copies or substantial portions of the Software.
-
-   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-   FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-   COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-   IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
----
-   Portions of the ReactiveX/rxjs
-       located at:
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/,
-         asterix-dashboard/src/main/resources/dashboard/src/app/,
-       and
-         asterix-dashboard/src/main/resources/dashboard/static
-
-   are available under Apache License 2.0:
----
-                                  Apache License
-                            Version 2.0, January 2004
-                         http://www.apache.org/licenses/
-
-    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-    1. Definitions.
-
-       "License" shall mean the terms and conditions for use, reproduction,
-       and distribution as defined by Sections 1 through 9 of this document.
-
-       "Licensor" shall mean the copyright owner or entity authorized by
-       the copyright owner that is granting the License.
-
-       "Legal Entity" shall mean the union of the acting entity and all
-       other entities that control, are controlled by, or are under common
-       control with that entity. For the purposes of this definition,
-       "control" means (i) the power, direct or indirect, to cause the
-       direction or management of such entity, whether by contract or
-       otherwise, or (ii) ownership of fifty percent (50%) or more of the
-       outstanding shares, or (iii) beneficial ownership of such entity.
-
-       "You" (or "Your") shall mean an individual or Legal Entity
-       exercising permissions granted by this License.
-
-       "Source" form shall mean the preferred form for making modifications,
-       including but not limited to software source code, documentation
-       source, and configuration files.
-
-       "Object" form shall mean any form resulting from mechanical
-       transformation or translation of a Source form, including but
-       not limited to compiled object code, generated documentation,
-       and conversions to other media types.
-
-       "Work" shall mean the work of authorship, whether in Source or
-       Object form, made available under the License, as indicated by a
-       copyright notice that is included in or attached to the work
-       (an example is provided in the Appendix below).
-
-       "Derivative Works" shall mean any work, whether in Source or Object
-       form, that is based on (or derived from) the Work and for which the
-       editorial revisions, annotations, elaborations, or other modifications
-       represent, as a whole, an original work of authorship. For the purposes
-       of this License, Derivative Works shall not include works that remain
-       separable from, or merely link (or bind by name) to the interfaces of,
-       the Work and Derivative Works thereof.
-
-       "Contribution" shall mean any work of authorship, including
-       the original version of the Work and any modifications or additions
-       to that Work or Derivative Works thereof, that is intentionally
-       submitted to Licensor for inclusion in the Work by the copyright owner
-       or by an individual or Legal Entity authorized to submit on behalf of
-       the copyright owner. For the purposes of this definition, "submitted"
-       means any form of electronic, verbal, or written communication sent
-       to the Licensor or its representatives, including but not limited to
-       communication on electronic mailing lists, source code control systems,
-       and issue tracking systems that are managed by, or on behalf of, the
-       Licensor for the purpose of discussing and improving the Work, but
-       excluding communication that is conspicuously marked or otherwise
-       designated in writing by the copyright owner as "Not a Contribution."
-
-       "Contributor" shall mean Licensor and any individual or Legal Entity
-       on behalf of whom a Contribution has been received by Licensor and
-       subsequently incorporated within the Work.
-
-    2. Grant of Copyright License. Subject to the terms and conditions of
-       this License, each Contributor hereby grants to You a perpetual,
-       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-       copyright license to reproduce, prepare Derivative Works of,
-       publicly display, publicly perform, sublicense, and distribute the
-       Work and such Derivative Works in Source or Object form.
-
-    3. Grant of Patent License. Subject to the terms and conditions of
-       this License, each Contributor hereby grants to You a perpetual,
-       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-       (except as stated in this section) patent license to make, have made,
-       use, offer to sell, sell, import, and otherwise transfer the Work,
-       where such license applies only to those patent claims licensable
-       by such Contributor that are necessarily infringed by their
-       Contribution(s) alone or by combination of their Contribution(s)
-       with the Work to which such Contribution(s) was submitted. If You
-       institute patent litigation against any entity (including a
-       cross-claim or counterclaim in a lawsuit) alleging that the Work
-       or a Contribution incorporated within the Work constitutes direct
-       or contributory patent infringement, then any patent licenses
-       granted to You under this License for that Work shall terminate
-       as of the date such litigation is filed.
-
-    4. Redistribution. You may reproduce and distribute copies of the
-       Work or Derivative Works thereof in any medium, with or without
-       modifications, and in Source or Object form, provided that You
-       meet the following conditions:
-
-       (a) You must give any other recipients of the Work or
-           Derivative Works a copy of this License; and
-
-       (b) You must cause any modified files to carry prominent notices
-           stating that You changed the files; and
-
-       (c) You must retain, in the Source form of any Derivative Works
-           that You distribute, all copyright, patent, trademark, and
-           attribution notices from the Source form of the Work,
-           excluding those notices that do not pertain to any part of
-           the Derivative Works; and
-
-       (d) If the Work includes a "NOTICE" text file as part of its
-           distribution, then any Derivative Works that You distribute must
-           include a readable copy of the attribution notices contained
-           within such NOTICE file, excluding those notices that do not
-           pertain to any part of the Derivative Works, in at least one
-           of the following places: within a NOTICE text file distributed
-           as part of the Derivative Works; within the Source form or
-           documentation, if provided along with the Derivative Works; or,
-           within a display generated by the Derivative Works, if and
-           wherever such third-party notices normally appear. The contents
-           of the NOTICE file are for informational purposes only and
-           do not modify the License. You may add Your own attribution
-           notices within Derivative Works that You distribute, alongside
-           or as an addendum to the NOTICE text from the Work, provided
-           that such additional attribution notices cannot be construed
-           as modifying the License.
-
-       You may add Your own copyright statement to Your modifications and
-       may provide additional or different license terms and conditions
-       for use, reproduction, or distribution of Your modifications, or
-       for any such Derivative Works as a whole, provided Your use,
-       reproduction, and distribution of the Work otherwise complies with
-       the conditions stated in this License.
-
-    5. Submission of Contributions. Unless You explicitly state otherwise,
-       any Contribution intentionally submitted for inclusion in the Work
-       by You to the Licensor shall be under the terms and conditions of
-       this License, without any additional terms or conditions.
-       Notwithstanding the above, nothing herein shall supersede or modify
-       the terms of any separate license agreement you may have executed
-       with Licensor regarding such Contributions.
-
-    6. Trademarks. This License does not grant permission to use the trade
-       names, trademarks, service marks, or product names of the Licensor,
-       except as required for reasonable and customary use in describing the
-       origin of the Work and reproducing the content of the NOTICE file.
-
-    7. Disclaimer of Warranty. Unless required by applicable law or
-       agreed to in writing, Licensor provides the Work (and each
-       Contributor provides its Contributions) on an "AS IS" BASIS,
-       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-       implied, including, without limitation, any warranties or conditions
-       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-       PARTICULAR PURPOSE. You are solely responsible for determining the
-       appropriateness of using or redistributing the Work and assume any
-       risks associated with Your exercise of permissions under this License.
-
-    8. Limitation of Liability. In no event and under no legal theory,
-       whether in tort (including negligence), contract, or otherwise,
-       unless required by applicable law (such as deliberate and grossly
-       negligent acts) or agreed to in writing, shall any Contributor be
-       liable to You for damages, including any direct, indirect, special,
-       incidental, or consequential damages of any character arising as a
-       result of this License or out of the use or inability to use the
-       Work (including but not limited to damages for loss of goodwill,
-       work stoppage, computer failure or malfunction, or any and all
-       other commercial damages or losses), even if such Contributor
-       has been advised of the possibility of such damages.
-
-    9. Accepting Warranty or Additional Liability. While redistributing
-       the Work or Derivative Works thereof, You may choose to offer,
-       and charge a fee for, acceptance of support, warranty, indemnity,
-       or other liability obligations and/or rights consistent with this
-       License. However, in accepting such obligations, You may act only
-       on Your own behalf and on Your sole responsibility, not on behalf
-       of any other Contributor, and only if You agree to indemnify,
-       defend, and hold each Contributor harmless for any liability
-       incurred by, or claims asserted against, such Contributor by reason
-       of your accepting any such warranty or additional liability.
-
-    END OF TERMS AND CONDITIONS
-
-    APPENDIX: How to apply the Apache License to your work.
-
-       To apply the Apache License to your work, attach the following
-       boilerplate notice, with the fields enclosed by brackets "[]"
-       replaced with your own identifying information. (Don't include
-       the brackets!)  The text should be enclosed in the appropriate
-       comment syntax for the file format. We also recommend that a
-       file or class name and description of purpose be included on the
-       same "printed page" as the copyright notice for easier
-       identification within third-party archives.
-
-    Copyright (c) 2015-2018 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-   limitations under the License.
----
-   Portions of the PrimeNG components of the AsterixDB dashboard
-       located at:
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/output.component.ts,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/output.component.html,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/output.component.scss,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.ts,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.html,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.scss,
-       and
-         asterix-dashboard/src/main/resources/dashboard/static
-
-   are available under The MIT License:
----
-   The MIT License (MIT)
-
-   Copyright (c) 2016-2017 PrimeTek
-
-   Permission is hereby granted, free of charge, to any person obtaining a copy of
-   this software and associated documentation files (the "Software"), to deal in
-   the Software without restriction, including without limitation the rights to
-   use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-   the Software, and to permit persons to whom the Software is furnished to do so,
-   subject to the following conditions:
-
-   The above copyright notice and this permission notice shall be included in all
-   copies or substantial portions of the Software.
-
-   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-   FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-   COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-   IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
----
-   Portions of the NGRX portions of the AsterixDB dashboard
-       located at:
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/,
-         asterix-dashboard/src/main/resources/dashboard/src/app/,
-         asterix-dashboard/src/main/resources/dashboard/static/main.37b7b7cad656490b195a.bundle.js,
-         asterix-dashboard/src/main/resources/dashboard/static/styles.9f50282210bba5318775.bundle,
-         asterix-dashboard/src/main/resources/dashboard/static/scripts.da68998bdd77aff4e764.bundle.js,
-         asterix-dashboard/src/main/resources/dashboard/static/polyfills.32ca5670d6503e090789.bundle.js,
-         asterix-dashboard/src/main/resources/dashboard/static/inline.66bd6b83f86cf773a001.bundle.js,
-       and
-         asterix-dashboard/src/main/resources/dashboard/static/index.html
-
-   are available under The MIT License:
----
-   The MIT License (MIT)
-
-   Copyright (c) 2017 Brandon Roberts, Mike Ryan, Victor Savkin, Rob Wormald
-
-   Permission is hereby granted, free of charge, to any person obtaining a copy
-   of this software and associated documentation files (the "Software"), to deal
-   in the Software without restriction, including without limitation the rights
-   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-   copies of the Software, and to permit persons to whom the Software is
-   furnished to do so, subject to the following conditions:
-
-   The above copyright notice and this permission notice shall be included in all
-   copies or substantial portions of the Software.
-
-   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-   SOFTWARE.
----
-   Portions of the Codemirror portions of the AsterixDB dashboard
-       located at:
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/input.component.ts,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/input.component.html,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/input.component.scss,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/codemirror.component.ts,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/codemirror.component.scss,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.ts,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.html,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.scss,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/codemirror-metadata.component.ts,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/codemirror-metadata.component.scss,
-       and
-         asterix-dashboard/src/main/resources/dashboard/static
-
-   are available under The MIT License:
----
-   Copyright (C) 2017 by Marijn Haverbeke <ma...@gmail.com> and others
-
-   Permission is hereby granted, free of charge, to any person obtaining a copy
-   of this software and associated documentation files (the "Software"), to deal
-   in the Software without restriction, including without limitation the rights
-   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-   copies of the Software, and to permit persons to whom the Software is
-   furnished to do so, subject to the following conditions:
-
-   The above copyright notice and this permission notice shall be included in
-   all copies or substantial portions of the Software.
-
-   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-   THE SOFTWARE.
----
-   Portions of the AngularJS portions of the AsterixDB dashboard
-       located at:
-         asterix-dashboard/src/main/resources/dashboard/src/,
-       and
-         asterix-dashboard/src/main/resources/dashboard/static
-
-   are available under The MIT License:
----
-   The MIT License
-
-   Copyright (c) 2014-2017 Google, Inc. http://angular.io
-
-   Permission is hereby granted, free of charge, to any person obtaining a copy
-   of this software and associated documentation files (the "Software"), to deal
-   in the Software without restriction, including without limitation the rights
-   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-   copies of the Software, and to permit persons to whom the Software is
-   furnished to do so, subject to the following conditions:
-
-   The above copyright notice and this permission notice shall be included in
-   all copies or substantial portions of the Software.
-
-   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-   THE SOFTWARE.
----
-   Portions of the Angular Material and HammerJS portions of the AsterixDB dashboard
-       located at:
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/,
-         asterix-dashboard/src/main/resources/dashboard/src/app/material.module.ts,
-         asterix-dashboard/src/main/resources/dashboard/src/main.ts,
-       and
-         asterix-dashboard/src/main/resources/dashboard/static
-
-   are available under The MIT License:
----
-   Copyright (c) 2017 Google LLC.
-
-   Permission is hereby granted, free of charge, to any person obtaining a copy
-   of this software and associated documentation files (the "Software"), to deal
-   in the Software without restriction, including without limitation the rights
-   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-   copies of the Software, and to permit persons to whom the Software is
-   furnished to do so, subject to the following conditions:
-
-   The above copyright notice and this permission notice shall be included in
-   all copies or substantial portions of the Software.
-
-   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-   THE SOFTWARE.
----
-   Portions of the CoreJS portions of the AsterixDB dashboard
-       located at:
-         asterix-dashboard/src/main/resources/dashboard/src/,
-       and
-         asterix-dashboard/src/main/resources/dashboard/static
-
-   are available under The MIT License:
----
-   Copyright (c) 2014-2017 Denis Pushkarev
-
-   Permission is hereby granted, free of charge, to any person obtaining a copy
-   of this software and associated documentation files (the "Software"), to deal
-   in the Software without restriction, including without limitation the rights
-   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-   copies of the Software, and to permit persons to whom the Software is
-   furnished to do so, subject to the following conditions:
-
-   The above copyright notice and this permission notice shall be included in
-   all copies or substantial portions of the Software.
-
-   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-   THE SOFTWARE.
----
-   Portions of the Roboto Font portions of the AsterixDB dashboard
-       located at:
-         asterix-dashboard/src/main/resources/dashboard/src/index.html,
-       and
-         asterix-dashboard/src/main/resources/dashboard/static
-
-   are available under Apache License 2.0:
----
-                                    Apache License
-                              Version 2.0, January 2004
-                           http://www.apache.org/licenses/
-
-      TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-      1. Definitions.
-
-         "License" shall mean the terms and conditions for use, reproduction,
-         and distribution as defined by Sections 1 through 9 of this document.
-
-         "Licensor" shall mean the copyright owner or entity authorized by
-         the copyright owner that is granting the License.
-
-         "Legal Entity" shall mean the union of the acting entity and all
-         other entities that control, are controlled by, or are under common
-         control with that entity. For the purposes of this definition,
-         "control" means (i) the power, direct or indirect, to cause the
-         direction or management of such entity, whether by contract or
-         otherwise, or (ii) ownership of fifty percent (50%) or more of the
-         outstanding shares, or (iii) beneficial ownership of such entity.
-
-         "You" (or "Your") shall mean an individual or Legal Entity
-         exercising permissions granted by this License.
-
-         "Source" form shall mean the preferred form for making modifications,
-         including but not limited to software source code, documentation
-         source, and configuration files.
-
-         "Object" form shall mean any form resulting from mechanical
-         transformation or translation of a Source form, including but
-         not limited to compiled object code, generated documentation,
-         and conversions to other media types.
-
-         "Work" shall mean the work of authorship, whether in Source or
-         Object form, made available under the License, as indicated by a
-         copyright notice that is included in or attached to the work
-         (an example is provided in the Appendix below).
-
-         "Derivative Works" shall mean any work, whether in Source or Object
-         form, that is based on (or derived from) the Work and for which the
-         editorial revisions, annotations, elaborations, or other modifications
-         represent, as a whole, an original work of authorship. For the purposes
-         of this License, Derivative Works shall not include works that remain
-         separable from, or merely link (or bind by name) to the interfaces of,
-         the Work and Derivative Works thereof.
-
-         "Contribution" shall mean any work of authorship, including
-         the original version of the Work and any modifications or additions
-         to that Work or Derivative Works thereof, that is intentionally
-         submitted to Licensor for inclusion in the Work by the copyright owner
-         or by an individual or Legal Entity authorized to submit on behalf of
-         the copyright owner. For the purposes of this definition, "submitted"
-         means any form of electronic, verbal, or written communication sent
-         to the Licensor or its representatives, including but not limited to
-         communication on electronic mailing lists, source code control systems,
-         and issue tracking systems that are managed by, or on behalf of, the
-         Licensor for the purpose of discussing and improving the Work, but
-         excluding communication that is conspicuously marked or otherwise
-         designated in writing by the copyright owner as "Not a Contribution."
-
-         "Contributor" shall mean Licensor and any individual or Legal Entity
-         on behalf of whom a Contribution has been received by Licensor and
-         subsequently incorporated within the Work.
-
-      2. Grant of Copyright License. Subject to the terms and conditions of
-         this License, each Contributor hereby grants to You a perpetual,
-         worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-         copyright license to reproduce, prepare Derivative Works of,
-         publicly display, publicly perform, sublicense, and distribute the
-         Work and such Derivative Works in Source or Object form.
-
-      3. Grant of Patent License. Subject to the terms and conditions of
-         this License, each Contributor hereby grants to You a perpetual,
-         worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-         (except as stated in this section) patent license to make, have made,
-         use, offer to sell, sell, import, and otherwise transfer the Work,
-         where such license applies only to those patent claims licensable
-         by such Contributor that are necessarily infringed by their
-         Contribution(s) alone or by combination of their Contribution(s)
-         with the Work to which such Contribution(s) was submitted. If You
-         institute patent litigation against any entity (including a
-         cross-claim or counterclaim in a lawsuit) alleging that the Work
-         or a Contribution incorporated within the Work constitutes direct
-         or contributory patent infringement, then any patent licenses
-         granted to You under this License for that Work shall terminate
-         as of the date such litigation is filed.
-
-      4. Redistribution. You may reproduce and distribute copies of the
-         Work or Derivative Works thereof in any medium, with or without
-         modifications, and in Source or Object form, provided that You
-         meet the following conditions:
-
-         (a) You must give any other recipients of the Work or
-             Derivative Works a copy of this License; and
-
-         (b) You must cause any modified files to carry prominent notices
-             stating that You changed the files; and
-
-         (c) You must retain, in the Source form of any Derivative Works
-             that You distribute, all copyright, patent, trademark, and
-             attribution notices from the Source form of the Work,
-             excluding those notices that do not pertain to any part of
-             the Derivative Works; and
-
-         (d) If the Work includes a "NOTICE" text file as part of its
-             distribution, then any Derivative Works that You distribute must
-             include a readable copy of the attribution notices contained
-             within such NOTICE file, excluding those notices that do not
-             pertain to any part of the Derivative Works, in at least one
-             of the following places: within a NOTICE text file distributed
-             as part of the Derivative Works; within the Source form or
-             documentation, if provided along with the Derivative Works; or,
-             within a display generated by the Derivative Works, if and
-             wherever such third-party notices normally appear. The contents
-             of the NOTICE file are for informational purposes only and
-             do not modify the License. You may add Your own attribution
-             notices within Derivative Works that You distribute, alongside
-             or as an addendum to the NOTICE text from the Work, provided
-             that such additional attribution notices cannot be construed
-             as modifying the License.
-
-         You may add Your own copyright statement to Your modifications and
-         may provide additional or different license terms and conditions
-         for use, reproduction, or distribution of Your modifications, or
-         for any such Derivative Works as a whole, provided Your use,
-         reproduction, and distribution of the Work otherwise complies with
-         the conditions stated in this License.
-
-      5. Submission of Contributions. Unless You explicitly state otherwise,
-         any Contribution intentionally submitted for inclusion in the Work
-         by You to the Licensor shall be under the terms and conditions of
-         this License, without any additional terms or conditions.
-         Notwithstanding the above, nothing herein shall supersede or modify
-         the terms of any separate license agreement you may have executed
-         with Licensor regarding such Contributions.
-
-      6. Trademarks. This License does not grant permission to use the trade
-         names, trademarks, service marks, or product names of the Licensor,
-         except as required for reasonable and customary use in describing the
-         origin of the Work and reproducing the content of the NOTICE file.
-
-      7. Disclaimer of Warranty. Unless required by applicable law or
-         agreed to in writing, Licensor provides the Work (and each
-         Contributor provides its Contributions) on an "AS IS" BASIS,
-         WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-         implied, including, without limitation, any warranties or conditions
-         of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-         PARTICULAR PURPOSE. You are solely responsible for determining the
-         appropriateness of using or redistributing the Work and assume any
-         risks associated with Your exercise of permissions under this License.
-
-      8. Limitation of Liability. In no event and under no legal theory,
-         whether in tort (including negligence), contract, or otherwise,
-         unless required by applicable law (such as deliberate and grossly
-         negligent acts) or agreed to in writing, shall any Contributor be
-         liable to You for damages, including any direct, indirect, special,
-         incidental, or consequential damages of any character arising as a
-         result of this License or out of the use or inability to use the
-         Work (including but not limited to damages for loss of goodwill,
-         work stoppage, computer failure or malfunction, or any and all
-         other commercial damages or losses), even if such Contributor
-         has been advised of the possibility of such damages.
-
-      9. Accepting Warranty or Additional Liability. While redistributing
-         the Work or Derivative Works thereof, You may choose to offer,
-         and charge a fee for, acceptance of support, warranty, indemnity,
-         or other liability obligations and/or rights consistent with this
-         License. However, in accepting such obligations, You may act only
-         on Your own behalf and on Your sole responsibility, not on behalf
-         of any other Contributor, and only if You agree to indemnify,
-         defend, and hold each Contributor harmless for any liability
-         incurred by, or claims asserted against, such Contributor by reason
-         of your accepting any such warranty or additional liability.
-
-      END OF TERMS AND CONDITIONS
-
-      APPENDIX: How to apply the Apache License to your work.
-
-         To apply the Apache License to your work, attach the following
-         boilerplate notice, with the fields enclosed by brackets "[]"
-         replaced with your own identifying information. (Don't include
-         the brackets!)  The text should be enclosed in the appropriate
-         comment syntax for the file format. We also recommend that a
-         file or class name and description of purpose be included on the
-         same "printed page" as the copyright notice for easier
-         identification within third-party archives.
-
-      Copyright [yyyy] [name of copyright owner]
-
-      Licensed under the Apache License, Version 2.0 (the "License");
-      you may not use this file except in compliance with the License.
-      You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-      Unless required by applicable law or agreed to in writing, software
-      distributed under the License is distributed on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-      See the License for the specific language governing permissions and
-   limitations under the License.
----
-
-   Portions of the Font Awesome portions of the AsterixDB dashboard
-       located at:
-         asterix-dashboard/src/main/resources/dashboard/src/index.html,
-       and
-         asterix-dashboard/src/main/resources/dashboard/static/index.html
-
-   are available under The MIT License:
----
-   http://fontawesome.io/license/ Applies to all CSS and LESS files in the
-   following directories if exist: font-awesome/css/, font-awesome/less/, and
-   font-awesome/scss/.  and downloaded from CDN network services and loaded in
-   index.html License: MIT License URL:
-   http://opensource.org/licenses/mit-license.html
----
-   Portions of the webpack portions of the AsterixDB dashboard
-       located at:
-       and
-         asterix-dashboard/src/main/resources/dashboard/
-
-   are available under The MIT License:
----
-   Copyright JS Foundation and other contributors
-
-   Permission is hereby granted, free of charge, to any person obtaining
-   a copy of this software and associated documentation files (the
-   'Software'), to deal in the Software without restriction, including
-   without limitation the rights to use, copy, modify, merge, publish,
-   distribute, sublicense, and/or sell copies of the Software, and to
-   permit persons to whom the Software is furnished to do so, subject to
-   the following conditions:
-
-   The above copyright notice and this permission notice shall be
-   included in all copies or substantial portions of the Software.
-
-   THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-   IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-   CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-   TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-   SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
----
-   Portions of the zonejs portions of the AsterixDB dashboard
-       located at:
-         asterix-dashboard/src/main/resources/dashboard/src/,
-       and
-         asterix-dashboard/src/main/resources/dashboard/static
-
-   are available under The MIT License:
----
-   Copyright (c) 2016 Google, Inc.
-
-   Permission is hereby granted, free of charge, to any person obtaining a copy
-   of this software and associated documentation files (the "Software"), to deal
-   in the Software without restriction, including without limitation the rights
-   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-   copies of the Software, and to permit persons to whom the Software is
-   furnished to do so, subject to the following conditions:
-
-   The above copyright notice and this permission notice shall be included in
-   all copies or substantial portions of the Software.
-
-   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-   THE SOFTWARE.
----
    Portions of the AsterixDB API examples
        located at:
          asterix-examples/src/main/resources/admaql101-demo/bottle.py,

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/pom.xml
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/pom.xml b/asterixdb/asterix-dashboard/pom.xml
index 7e49934..b4ad088 100644
--- a/asterixdb/asterix-dashboard/pom.xml
+++ b/asterixdb/asterix-dashboard/pom.xml
@@ -29,6 +29,7 @@
 
   <properties>
     <root.dir>${basedir}/..</root.dir>
+    <node.path>${user.home}/.node</node.path>
   </properties>
 
   <dependencies>
@@ -75,11 +76,184 @@
               <excludes combine.children="append">
                 <exclude>src/main/resources/dashboard/static/*
                 </exclude>
+                <exclude>src/main/resources/licenses/*
+                </exclude>
+                <exclude>src/node/**
+                </exclude>
               </excludes>
             </configuration>
           </execution>
         </executions>
       </plugin>
+      <plugin>
+        <groupId>com.github.eirslett</groupId>
+        <artifactId>frontend-maven-plugin</artifactId>
+        <configuration>
+          <nodeVersion>v8.11.2</nodeVersion>
+          <npmVersion>6.0.1</npmVersion>
+          <workingDirectory>target/dashboard</workingDirectory>
+          <installDirectory>target/dashboard</installDirectory>
+        </configuration>
+        <executions>
+          <execution>
+            <id>install node and yarn</id>
+            <goals>
+              <goal>install-node-and-npm</goal>
+            </goals>
+            <phase>generate-resources</phase>
+          </execution>
+          <execution>
+            <id>npm install</id>
+            <phase>process-resources</phase>
+            <goals>
+              <goal>npm</goal>
+            </goals>
+            <configuration>
+              <arguments>install --no-optional</arguments>
+            </configuration>
+          </execution>
+          <execution>
+            <id>npm run-script mavenbuild</id>
+            <phase>compile</phase>
+            <goals>
+              <goal>npm</goal>
+            </goals>
+            <configuration>
+              <arguments>run-script mavenbuild</arguments>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <artifactId>maven-resources-plugin</artifactId>
+        <version>2.7</version>
+        <executions>
+          <execution>
+            <id>copy-resource-one</id>
+            <phase>prepare-package</phase>
+            <goals>
+              <goal>copy-resources</goal>
+            </goals>
+            <configuration>
+              <outputDirectory>
+                ${basedir}/src/main/resources/licenses
+              </outputDirectory>
+              <resources>
+                <resource>
+                  <directory>${basedir}/target/dashboard/static/
+                  </directory>
+                  <includes>
+                    <include>3rdpartylicenses.txt</include>
+                  </includes>
+                </resource>
+              </resources>
+            </configuration>
+          </execution>
+          <execution>
+            <id>copy-license</id>
+            <phase>compile</phase>
+            <goals>
+              <goal>copy-resources</goal>
+            </goals>
+            <configuration>
+              <outputDirectory>
+                ${basedir}/src/main/resources/META-INF/
+              </outputDirectory>
+              <resources>
+                <resource>
+                  <directory>
+                    ${basedir}/target/generated-sources/
+                  </directory>
+                  <includes>
+                    <include>LICENSE</include>
+                  </includes>
+                </resource>
+              </resources>
+            </configuration>
+          </execution>
+          <execution>
+            <id>copy-static</id>
+            <phase>prepare-package</phase>
+            <goals>
+              <goal>copy-resources</goal>
+            </goals>
+            <configuration>
+              <outputDirectory>
+                ${basedir}/target/classes/dashboard/static
+              </outputDirectory>
+              <resources>
+                <resource>
+                  <directory>${basedir}/target/node/static/
+                  </directory>
+                </resource>
+              </resources>
+            </configuration>
+          </execution>
+          <execution>
+            <id>copy-node</id>
+            <phase>validate</phase>
+            <goals>
+              <goal>copy-resources</goal>
+            </goals>
+            <configuration>
+              <outputDirectory>
+                ${basedir}/target/dashboard
+              </outputDirectory>
+              <resources>
+                <resource>
+                  <directory>${basedir}/src/node
+                  </directory>
+                </resource>
+              </resources>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+        <version>3.1.0</version>
+        <configuration>
+          <includes>
+            <include>**/dashboard/**</include>
+            <include>**/*.class</include>
+            <include>**/META-INF/*</include>
+          </includes>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.hyracks</groupId>
+        <artifactId>license-automation-plugin</artifactId>
+        <executions>
+          <execution>
+            <phase>prepare-package</phase>
+            <goals>
+              <goal>generate</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <templateRootDir>${basedir}/src/main/resources/licenses
+          </templateRootDir>
+          <generatedFiles>
+            <generatedFile>
+              <template>dashboard-license.ftl</template>
+              <outputFile>LICENSE</outputFile>
+            </generatedFile>
+          </generatedFiles>
+          <location>repo/</location>
+          <timeoutSecs>10</timeoutSecs>
+          <downloadDir>
+            ${project.build.directory}/generated-resources/license
+          </downloadDir>
+          <excludedScopes>
+            <excludedScope>test</excludedScope>
+          </excludedScopes>
+          <licenseDirectory>
+            ${basedir}/src/main/resources/licenses/content
+          </licenseDirectory>
+        </configuration>
+      </plugin>
     </plugins>
   </build>
 </project>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/.angular-cli.json
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/.angular-cli.json b/asterixdb/asterix-dashboard/src/main/resources/dashboard/.angular-cli.json
deleted file mode 100755
index 7e41979..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/.angular-cli.json
+++ /dev/null
@@ -1,69 +0,0 @@
-{
-  "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
-  "project": {
-    "name": "asterixdb-web-console"
-  },
-  "apps": [
-    {
-      "root": "src",
-      "outDir": "static",
-      "assets": [
-        "assets",
-        "favicon.ico"
-      ],
-      "index": "index.html",
-      "main": "main.ts",
-      "polyfills": "polyfills.ts",
-      "test": "test.ts",
-      "tsconfig": "tsconfig.app.json",
-      "testTsconfig": "tsconfig.spec.json",
-      "prefix": "app",
-      "styles": [
-        "main.scss",
-        "../node_modules/codemirror/lib/codemirror.css",
-        "../node_modules/codemirror/theme/monokai.css",
-        "../node_modules/primeng/resources/themes/omega/theme.css",
-        "../node_modules/primeng/resources/primeng.min.css"
-      ],
-      "scripts": [
-        "../node_modules/codemirror/lib/codemirror.js"
-      ],
-      "environmentSource": "environments/environment.ts",
-      "environments": {
-        "dev": "environments/environment.ts",
-        "prod": "environments/environment.prod.ts"
-      }
-    }
-  ],
-  "e2e": {
-    "protractor": {
-      "config": "./protractor.conf.js"
-    }
-  },
-  "lint": [
-    {
-      "project": "src/tsconfig.app.json",
-      "exclude": "**/node_modules/**"
-    },
-    {
-      "project": "src/tsconfig.spec.json",
-      "exclude": "**/node_modules/**"
-    },
-    {
-      "project": "e2e/tsconfig.e2e.json",
-      "exclude": "**/node_modules/**"
-    }
-  ],
-  "test": {
-    "karma": {
-      "config": "./karma.conf.js"
-    }
-  },
-  "defaults": {
-    "styleExt": "css",
-    "class": {
-      "spec": false
-    },
-    "component": {}
-  }
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/.editorconfig
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/.editorconfig b/asterixdb/asterix-dashboard/src/main/resources/dashboard/.editorconfig
deleted file mode 100755
index ba060b8..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/.editorconfig
+++ /dev/null
@@ -1,25 +0,0 @@
-# Editor configuration, see http://editorconfig.org
-#/*
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
-
-#    http://www.apache.org/licenses/LICENSE-2.0
-
-#Unless required by applicable law or agreed to in writing, software
-#Distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-root = true
-
-[*]
-charset = utf-8
-indent_style = space
-indent_size = 2
-insert_final_newline = true
-trim_trailing_whitespace = true
-
-[*.md]
-max_line_length = off
-trim_trailing_whitespace = false

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/.gitignore
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/.gitignore b/asterixdb/asterix-dashboard/src/main/resources/dashboard/.gitignore
deleted file mode 100755
index fc1e2ce..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/.gitignore
+++ /dev/null
@@ -1,47 +0,0 @@
-# See http://help.github.com/ignore-files/ for more about ignoring files.
-
-# compiled output
-/tmp
-/out-tsc
-
-# dependencies
-/node_modules
-/documents
-# /static
-/dist
-
-# IDEs and editors
-/.idea
-.project
-.classpath
-.c9/
-*.launch
-.settings/
-*.sublime-workspace
-
-# IDE - VSCode
-.vscode/*
-!.vscode/settings.json
-!.vscode/tasks.json
-!.vscode/launch.json
-!.vscode/extensions.json
-
-# misc
-/.sass-cache
-/connect.lock
-/coverage
-/libpeerconnection.log
-npm-debug.log
-testem.log
-/typings
-
-# e2e
-/e2e/*.js
-/e2e/*.map
-
-# System Files
-.DS_Store
-Thumbs.db
-
-# Others
-package-lock.json

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/README.md
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/README.md b/asterixdb/asterix-dashboard/src/main/resources/dashboard/README.md
deleted file mode 100755
index 14f16fc..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/README.md
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-# AsterixDB Web Administration Console
-
-AsterixDB Administration Console is an Angular 5 HTML/CSS/Typescript web application using predictable state containers, immutable data updates with Redux/NGRx frameworks, observable patterns, and standard Open Sourced UI widgets for data, metadata manipulation and visualization through SQL++ AsterixDB Query language.
-
-The main goal is create a baseline solution with unopinionated UI/UX design and SW architecture with two differentiated isolated, indepent minimal coupled levels between the UI components and application core or internal core, easily extensible and scalable by the AsterixDB community.
-
-## Development
-
-This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 1.4.9.
-
-## Installation
-
-Install node and npm, any of the latest versions will do.
-
-Run `npm install` to download all the dependency packages an recreate the node_modules directory.
-
-## Development server
-
-The development version uses the webpack proxy to avoid CORS problems in Angular see:  
-
-`https://daveceddia.com/access-control-allow-origin-cors-errors-in-angular`. 
-
-Please check `proxy.config.js` to see how it's configured.
-
-Run `ng serve` or `npm start` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files.
-
-A technical document describing the internals and architecture exist, here:
-
-`https://github.com/EmilioMobile/asterixdb-dashboard/blob/master/documents/AsterixDB%20Architecture%20v1.0.pdf?raw=true`
-
-A brief user guide document describing how to use it, here:
-
-`https://github.com/EmilioMobile/asterixdb-dashboard/blob/master/documents/AsterixDB%20User%20Guide%20v1.0.pptx?raw=true`

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/e2e/app.e2e-spec.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/e2e/app.e2e-spec.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/e2e/app.e2e-spec.ts
deleted file mode 100755
index e75aa02..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/e2e/app.e2e-spec.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { AppPage } from './app.po';
-
-describe('asterixdb-dashboard', () => {
-  let page: AppPage;
-
-  beforeEach(() => {
-    page = new AppPage();
-  });
-
-  it('should display welcome message', () => {
-    page.navigateTo();
-    expect(page.getParagraphText()).toEqual('Welcome to AsterixDB Dashboard!');
-  });
-});

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/e2e/app.po.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/e2e/app.po.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/e2e/app.po.ts
deleted file mode 100755
index 37d3de9..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/e2e/app.po.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { browser, by, element } from 'protractor';
-
-export class AppPage {
-  navigateTo() {
-    return browser.get('/');
-  }
-
-  getParagraphText() {
-    return element(by.css('app-root h1')).getText();
-  }
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/e2e/tsconfig.e2e.json
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/e2e/tsconfig.e2e.json b/asterixdb/asterix-dashboard/src/main/resources/dashboard/e2e/tsconfig.e2e.json
deleted file mode 100755
index 41b7fc0..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/e2e/tsconfig.e2e.json
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-{
-  "extends": "../tsconfig.json",
-  "compilerOptions": {
-    "outDir": "../out-tsc/e2e",
-    "baseUrl": "./",
-    "module": "commonjs",
-    "target": "es5",
-    "types": [
-      "jasmine",
-      "jasminewd2",
-      "node"
-    ]
-  }
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/karma.conf.js
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/karma.conf.js b/asterixdb/asterix-dashboard/src/main/resources/dashboard/karma.conf.js
deleted file mode 100755
index c9da2c5..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/karma.conf.js
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// Karma configuration file, see link for more information
-// https://karma-runner.github.io/1.0/config/configuration-file.html
-
-module.exports = function (config) {
-  config.set({
-    basePath: '',
-    frameworks: ['jasmine', '@angular/cli'],
-    plugins: [
-      require('karma-jasmine'),
-      require('karma-chrome-launcher'),
-      require('karma-jasmine-html-reporter'),
-      require('karma-coverage-istanbul-reporter'),
-      require('@angular/cli/plugins/karma')
-    ],
-    client:{
-      clearContext: false // leave Jasmine Spec Runner output visible in browser
-    },
-    coverageIstanbulReporter: {
-      reports: [ 'html', 'lcovonly' ],
-      fixWebpackSourcePaths: true
-    },
-    angularCli: {
-      environment: 'dev'
-    },
-    reporters: ['progress', 'kjhtml'],
-    port: 9876,
-    colors: true,
-    logLevel: config.LOG_INFO,
-    autoWatch: true,
-    browsers: ['Chrome'],
-    singleRun: false
-  });
-};

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/package.json
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/package.json b/asterixdb/asterix-dashboard/src/main/resources/dashboard/package.json
deleted file mode 100755
index 3073159..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/package.json
+++ /dev/null
@@ -1,60 +0,0 @@
-{
-  "name": "asterixdb-web-console",
-  "version": "1.0.0",
-  "license": "Apache License, Version 2.0",
-  "scripts": {
-    "ng": "ng",
-    "start": "ng serve --proxy-config proxy.config.js --host 0.0.0.0",
-    "build": "ng build",
-    "test": "ng test",
-    "lint": "ng lint",
-    "e2e": "ng e2e"
-  },
-  "private": true,
-  "dependencies": {
-    "@angular/animations": "^5.0.3",
-    "@angular/cdk": "^5.0.0-rc.2",
-    "@angular/common": "^5.0.3",
-    "@angular/compiler": "^5.0.3",
-    "@angular/core": "^5.0.3",
-    "@angular/forms": "^5.0.3",
-    "@angular/http": "^5.0.3",
-    "@angular/material": "^5.0.0-rc.2",
-    "@angular/platform-browser": "^5.0.3",
-    "@angular/platform-browser-dynamic": "^5.0.3",
-    "@angular/router": "^5.0.3",
-    "@ngrx/db": "^2.0.2",
-    "@ngrx/effects": "^4.1.0",
-    "@ngrx/entity": "^4.1.0",
-    "@ngrx/store": "^4.1.0",
-    "@ngrx/store-devtools": "^4.0.0",
-    "codemirror": "^5.31.0",
-    "core-js": "^2.4.1",
-    "file-saver": "^1.3.3",
-    "hammerjs": "^2.0.8",
-    "primeng": "^4.3.0",
-    "rxjs": "^5.5.2",
-    "zone.js": "^0.8.18"
-  },
-  "devDependencies": {
-    "@angular/cli": "1.5.4",
-    "@angular/compiler-cli": "^5.0.3",
-    "@angular/language-service": "^5.0.0",
-    "@types/file-saver": "^1.3.0",
-    "@types/jasmine": "~2.5.53",
-    "@types/jasminewd2": "~2.0.2",
-    "@types/node": "~6.0.60",
-    "jasmine-core": "~2.6.2",
-    "jasmine-spec-reporter": "~4.1.0",
-    "karma": "~1.7.0",
-    "karma-chrome-launcher": "~2.1.1",
-    "karma-cli": "~1.0.1",
-    "karma-coverage-istanbul-reporter": "^1.2.1",
-    "karma-jasmine": "~1.1.0",
-    "karma-jasmine-html-reporter": "^0.2.2",
-    "protractor": "~5.1.2",
-    "ts-node": "^3.2.2",
-    "tslint": "^5.7.0",
-    "typescript": "^2.4.2"
-  }
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/protractor.conf.js
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/protractor.conf.js b/asterixdb/asterix-dashboard/src/main/resources/dashboard/protractor.conf.js
deleted file mode 100755
index ac4c723..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/protractor.conf.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-// Protractor configuration file, see link for more information
-// https://github.com/angular/protractor/blob/master/lib/config.ts
-
-const { SpecReporter } = require('jasmine-spec-reporter');
-
-exports.config = {
-  allScriptsTimeout: 11000,
-  specs: [
-    './e2e/**/*.e2e-spec.ts'
-  ],
-  capabilities: {
-    'browserName': 'chrome'
-  },
-  directConnect: true,
-  baseUrl: 'http://localhost:4200/',
-  framework: 'jasmine',
-  jasmineNodeOpts: {
-    showColors: true,
-    defaultTimeoutInterval: 30000,
-    print: function() {}
-  },
-  onPrepare() {
-    require('ts-node').register({
-      project: 'e2e/tsconfig.e2e.json'
-    });
-    jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
-  }
-};

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/proxy.config.js
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/proxy.config.js b/asterixdb/asterix-dashboard/src/main/resources/dashboard/proxy.config.js
deleted file mode 100755
index 58752c3..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/proxy.config.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-const PROXY_CONFIG = {
-    "/query-service/*": {
-        "target": "http://localhost:19002",
-        "secure": false,
-        logLevel: "debug",
-        pathRewrite: function (path) { return path.replace('/query-service', '/query/service')}
-    }
-}
-
-module.exports = PROXY_CONFIG;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/app-config.service.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/app-config.service.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/app-config.service.ts
deleted file mode 100755
index 87a0c2b..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/app-config.service.ts
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Injectable } from '@angular/core';
-import { Observable } from 'rxjs/Observable';
-import {
-  Http,
-  Headers,
-  RequestOptions
-}                     from '@angular/http';
-
-@Injectable()
-export class ConfigService {
-
-  private config: Object
-  private env: Object
-
-  constructor(private http: Http) {}
-
-  /**
-   * Loads the environment config file first. Reads the environment variable from the file
-   * and based on that loads the appropriate configuration file - development or production
-   */
-  load() {
-    return new Promise((resolve, reject) => {
-      let headers = new Headers({ 'Accept': 'application/json', 'Content-Type': 'application/json', 'DataType': 'application/json' });
-      let options = new RequestOptions({ headers: headers });
-
-      this.http.get('/config/env.json')
-      .map(res => res.json())
-      .subscribe((env_data) => {
-        this.env = env_data;
-
-        this.http.get('/config/' + env_data.env + '.json')
-          .map(res => res.json())
-          .catch((error: any) => {
-            return Observable.throw(error.json().error || 'Server error');
-          })
-          .subscribe((data) => {
-            this.config = data;
-            resolve(true);
-          });
-      });
-
-    });
-  }
-
-  /**
-   * Returns environment variable based on given key
-   *
-   * @param key
-   */
-  getEnv(key: any) {
-    return this.env[key];
-  }
-
-  /**
-   * Returns configuration value based on given key
-   *
-   * @param key
-   */
-  get(key: any) {
-    return this.config[key];
-  }
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/app.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/app.component.html b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/app.component.html
deleted file mode 100755
index 58481be..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/app.component.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!--/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/-->
-<awc-bar></awc-bar>
-<awc-tab></awc-tab>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/app.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/app.component.scss b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/app.component.scss
deleted file mode 100755
index b01fcf5..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/app.component.scss
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-// Place holder for future expansion
\ No newline at end of file


[43/43] asterixdb git commit: [NO ISSUE] Dashboard build fixes

Posted by im...@apache.org.
[NO ISSUE] Dashboard build fixes

- Stop use of ~/.npm
- Assure asterix-dashboard jar contains proper resources
- Update node/npm versions to fix OSX build issues

Change-Id: I1c055aa81e79612361e9e685e5bea69cfb9c4c2b
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2672
Reviewed-by: Michael Blow <mb...@apache.org>
Sonar-Qube: Jenkins <je...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>


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

Branch: refs/heads/release-0.9.4-pre-rc
Commit: b1767b1577b3a794e7d2740c28d0fae955cd0efc
Parents: 10cd136
Author: Michael Blow <mb...@apache.org>
Authored: Thu May 31 14:32:34 2018 -0400
Committer: Ian Maxon <im...@apache.org>
Committed: Thu May 31 14:41:41 2018 -0700

----------------------------------------------------------------------
 asterixdb/asterix-dashboard/pom.xml             |  90 +----
 .../http/server/QueryWebInterfaceServlet.java   |   2 +-
 .../www.apache.org_licenses_LICENSE-2.0.txt     | 202 ++++++++++
 .../src/main/licenses/dashboard-license.ftl     |  36 ++
 .../resources/licenses/3rdpartylicenses.txt     | 373 -------------------
 .../www.apache.org_licenses_LICENSE-2.0.txt     | 202 ----------
 .../resources/licenses/dashboard-license.ftl    |  36 --
 .../asterix-dashboard/src/node/package.json     |   2 +-
 .../src/app/dashboard/appbar.component.html     |   2 +-
 9 files changed, 255 insertions(+), 690 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/b1767b15/asterixdb/asterix-dashboard/pom.xml
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/pom.xml b/asterixdb/asterix-dashboard/pom.xml
index b4ad088..de9e38e 100644
--- a/asterixdb/asterix-dashboard/pom.xml
+++ b/asterixdb/asterix-dashboard/pom.xml
@@ -29,7 +29,6 @@
 
   <properties>
     <root.dir>${basedir}/..</root.dir>
-    <node.path>${user.home}/.node</node.path>
   </properties>
 
   <dependencies>
@@ -74,12 +73,8 @@
                     implementation="org.apache.rat.analysis.license.MITLicense"/>
               </licenses>
               <excludes combine.children="append">
-                <exclude>src/main/resources/dashboard/static/*
-                </exclude>
-                <exclude>src/main/resources/licenses/*
-                </exclude>
-                <exclude>src/node/**
-                </exclude>
+                <exclude>src/main/resources/dashboard/static/*</exclude>
+                <exclude>src/node/**</exclude>
               </excludes>
             </configuration>
           </execution>
@@ -88,9 +83,10 @@
       <plugin>
         <groupId>com.github.eirslett</groupId>
         <artifactId>frontend-maven-plugin</artifactId>
+        <version>1.6</version>
         <configuration>
-          <nodeVersion>v8.11.2</nodeVersion>
-          <npmVersion>6.0.1</npmVersion>
+          <nodeVersion>v10.3.0</nodeVersion>
+          <npmVersion>6.1.0</npmVersion>
           <workingDirectory>target/dashboard</workingDirectory>
           <installDirectory>target/dashboard</installDirectory>
         </configuration>
@@ -109,7 +105,7 @@
               <goal>npm</goal>
             </goals>
             <configuration>
-              <arguments>install --no-optional</arguments>
+              <arguments>install --cache ${settings.localRepository}/.npm-cache --no-optional</arguments>
             </configuration>
           </execution>
           <execution>
@@ -126,64 +122,20 @@
       </plugin>
       <plugin>
         <artifactId>maven-resources-plugin</artifactId>
-        <version>2.7</version>
         <executions>
           <execution>
-            <id>copy-resource-one</id>
-            <phase>prepare-package</phase>
-            <goals>
-              <goal>copy-resources</goal>
-            </goals>
-            <configuration>
-              <outputDirectory>
-                ${basedir}/src/main/resources/licenses
-              </outputDirectory>
-              <resources>
-                <resource>
-                  <directory>${basedir}/target/dashboard/static/
-                  </directory>
-                  <includes>
-                    <include>3rdpartylicenses.txt</include>
-                  </includes>
-                </resource>
-              </resources>
-            </configuration>
-          </execution>
-          <execution>
-            <id>copy-license</id>
-            <phase>compile</phase>
-            <goals>
-              <goal>copy-resources</goal>
-            </goals>
-            <configuration>
-              <outputDirectory>
-                ${basedir}/src/main/resources/META-INF/
-              </outputDirectory>
-              <resources>
-                <resource>
-                  <directory>
-                    ${basedir}/target/generated-sources/
-                  </directory>
-                  <includes>
-                    <include>LICENSE</include>
-                  </includes>
-                </resource>
-              </resources>
-            </configuration>
-          </execution>
-          <execution>
             <id>copy-static</id>
-            <phase>prepare-package</phase>
+            <phase>process-classes</phase>
             <goals>
               <goal>copy-resources</goal>
             </goals>
             <configuration>
               <outputDirectory>
-                ${basedir}/target/classes/dashboard/static
+                ${basedir}/target/classes/dashboard/
               </outputDirectory>
               <resources>
                 <resource>
-                  <directory>${basedir}/target/node/static/
+                  <directory>${basedir}/target/dashboard/static/
                   </directory>
                 </resource>
               </resources>
@@ -210,34 +162,22 @@
         </executions>
       </plugin>
       <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <version>3.1.0</version>
-        <configuration>
-          <includes>
-            <include>**/dashboard/**</include>
-            <include>**/*.class</include>
-            <include>**/META-INF/*</include>
-          </includes>
-        </configuration>
-      </plugin>
-      <plugin>
         <groupId>org.apache.hyracks</groupId>
         <artifactId>license-automation-plugin</artifactId>
         <executions>
           <execution>
-            <phase>prepare-package</phase>
+            <phase>compile</phase>
             <goals>
               <goal>generate</goal>
             </goals>
           </execution>
         </executions>
         <configuration>
-          <templateRootDir>${basedir}/src/main/resources/licenses
-          </templateRootDir>
+          <templateRootDir>${basedir}</templateRootDir>
+          <outputDir>${project.build.directory}/classes/META-INF</outputDir>
           <generatedFiles>
             <generatedFile>
-              <template>dashboard-license.ftl</template>
+              <template>src/main/licenses/dashboard-license.ftl</template>
               <outputFile>LICENSE</outputFile>
             </generatedFile>
           </generatedFiles>
@@ -249,9 +189,7 @@
           <excludedScopes>
             <excludedScope>test</excludedScope>
           </excludedScopes>
-          <licenseDirectory>
-            ${basedir}/src/main/resources/licenses/content
-          </licenseDirectory>
+          <licenseDirectory>${basedir}/src/main/licenses/content</licenseDirectory>
         </configuration>
       </plugin>
     </plugins>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/b1767b15/asterixdb/asterix-dashboard/src/main/java/org/apache/asterix/api/http/server/QueryWebInterfaceServlet.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/java/org/apache/asterix/api/http/server/QueryWebInterfaceServlet.java b/asterixdb/asterix-dashboard/src/main/java/org/apache/asterix/api/http/server/QueryWebInterfaceServlet.java
index 91b22e9..900e72b 100644
--- a/asterixdb/asterix-dashboard/src/main/java/org/apache/asterix/api/http/server/QueryWebInterfaceServlet.java
+++ b/asterixdb/asterix-dashboard/src/main/java/org/apache/asterix/api/http/server/QueryWebInterfaceServlet.java
@@ -51,7 +51,7 @@ public class QueryWebInterfaceServlet extends StaticResourceServlet {
         if ("/".equals(requestURI)) {
             HttpUtil.setContentType(response, HttpUtil.ContentType.TEXT_HTML);
             // Dashboard Administration Console
-            deliverResource("/dashboard/static/index.html", response);
+            deliverResource("/dashboard/index.html", response);
         } else {
             deliverResource(requestURI, response);
         }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/b1767b15/asterixdb/asterix-dashboard/src/main/licenses/content/www.apache.org_licenses_LICENSE-2.0.txt
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/licenses/content/www.apache.org_licenses_LICENSE-2.0.txt b/asterixdb/asterix-dashboard/src/main/licenses/content/www.apache.org_licenses_LICENSE-2.0.txt
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/main/licenses/content/www.apache.org_licenses_LICENSE-2.0.txt
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/b1767b15/asterixdb/asterix-dashboard/src/main/licenses/dashboard-license.ftl
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/licenses/dashboard-license.ftl b/asterixdb/asterix-dashboard/src/main/licenses/dashboard-license.ftl
new file mode 100644
index 0000000..508ca0a
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/main/licenses/dashboard-license.ftl
@@ -0,0 +1,36 @@
+<#--
+ ! Licensed to the Apache Software Foundation (ASF) under one
+ ! or more contributor license agreements.  See the NOTICE file
+ ! distributed with this work for additional information
+ ! regarding copyright ownership.  The ASF licenses this file
+ ! to you under the Apache License, Version 2.0 (the
+ ! "License"); you may not use this file except in compliance
+ ! with the License.  You may obtain a copy of the License at
+ !
+ !   http://www.apache.org/licenses/LICENSE-2.0
+ !
+ ! Unless required by applicable law or agreed to in writing,
+ ! software distributed under the License is distributed on an
+ ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ! KIND, either express or implied.  See the License for the
+ ! specific language governing permissions and limitations
+ ! under the License.
+-->
+<@indent spaces=3>
+<#list licenses as license>
+  <#if license.url == "http://www.apache.org/licenses/LICENSE-2.0.txt">
+${license.content}
+    <#break>
+  </#if>
+</#list>
+</...@indent>
+
+===
+   ASTERIXDB Dashboard JS COMPONENTS:
+
+    includes a number of packed subcomponents under
+    dashboard/static/ with separate copyright
+    notices and license terms. Your use of these subcomponents is subject
+    to the terms and condition of the following licenses.
+===
+<#include "/target/dashboard/static/3rdpartylicenses.txt">

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/b1767b15/asterixdb/asterix-dashboard/src/main/resources/licenses/3rdpartylicenses.txt
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/licenses/3rdpartylicenses.txt b/asterixdb/asterix-dashboard/src/main/resources/licenses/3rdpartylicenses.txt
deleted file mode 100644
index d552159..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/licenses/3rdpartylicenses.txt
+++ /dev/null
@@ -1,373 +0,0 @@
-core-js@2.5.7
-MIT
-Copyright (c) 2014-2018 Denis Pushkarev
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-primeng@4.3.0
-MIT
-The MIT License (MIT)
-
-Copyright (c) 2016-2017 PrimeTek
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-@angular/forms@5.2.11
-MIT
-MIT
-
-@ngrx/store@4.1.1
-MIT
-The MIT License (MIT)
-
-Copyright (c) 2017 Brandon Roberts, Mike Ryan, Victor Savkin, Rob Wormald
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-@angular/core@5.2.11
-MIT
-MIT
-
-webpack@3.8.1
-MIT
-Copyright JS Foundation and other contributors
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-'Software'), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-@angular/platform-browser@5.2.11
-MIT
-MIT
-
-zone.js@0.8.26
-MIT
-The MIT License
-
-Copyright (c) 2016-2018 Google, Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-@angular/router@5.2.11
-MIT
-MIT
-
-@angular/common@5.2.11
-MIT
-MIT
-
-file-saver@1.3.8
-MIT
-The MIT License
-
-Copyright © 2016 [Eli Grey][1].
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-  [1]: http://eligrey.com
-
-@types/file-saver@1.3.0
-MIT
-MIT License
-
-    Copyright (c) Microsoft Corporation. All rights reserved.
-
-    Permission is hereby granted, free of charge, to any person obtaining a copy
-    of this software and associated documentation files (the "Software"), to deal
-    in the Software without restriction, including without limitation the rights
-    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-    copies of the Software, and to permit persons to whom the Software is
-    furnished to do so, subject to the following conditions:
-
-    The above copyright notice and this permission notice shall be included in all
-    copies or substantial portions of the Software.
-
-    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-    SOFTWARE
-
-css-loader@0.28.11
-MIT
-Copyright JS Foundation and other contributors
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-'Software'), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-@angular/cdk@5.2.5
-MIT
-The MIT License
-
-Copyright (c) 2018 Google LLC.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-@angular/material@5.2.5
-MIT
-The MIT License
-
-Copyright (c) 2018 Google LLC.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-@ngrx/effects@4.1.1
-MIT
-The MIT License (MIT)
-
-Copyright (c) 2017 Brandon Roberts, Mike Ryan, Victor Savkin, Rob Wormald
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-@ngrx/db@2.1.0
-MIT
-The MIT License (MIT)
-
-Copyright (c) 2015 ngrx
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-@ngrx/store-devtools@4.1.1
-MIT
-The MIT License (MIT)
-
-Copyright (c) 2017 Brandon Roberts, Mike Ryan, Victor Savkin, Rob Wormald
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-codemirror@5.38.0
-MIT
-MIT License
-
-Copyright (C) 2017 by Marijn Haverbeke <ma...@gmail.com> and others
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-@angular/animations@5.2.11
-MIT
-MIT
-
-hammerjs@2.0.8
-MIT
-The MIT License (MIT)
-
-Copyright (C) 2011-2014 by Jorik Tangelder (Eight Media)
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-@angular/platform-browser-dynamic@5.2.11
-MIT
-MIT
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/b1767b15/asterixdb/asterix-dashboard/src/main/resources/licenses/content/www.apache.org_licenses_LICENSE-2.0.txt
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/licenses/content/www.apache.org_licenses_LICENSE-2.0.txt b/asterixdb/asterix-dashboard/src/main/resources/licenses/content/www.apache.org_licenses_LICENSE-2.0.txt
deleted file mode 100644
index d645695..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/licenses/content/www.apache.org_licenses_LICENSE-2.0.txt
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/b1767b15/asterixdb/asterix-dashboard/src/main/resources/licenses/dashboard-license.ftl
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/licenses/dashboard-license.ftl b/asterixdb/asterix-dashboard/src/main/resources/licenses/dashboard-license.ftl
deleted file mode 100644
index 50049dd..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/licenses/dashboard-license.ftl
+++ /dev/null
@@ -1,36 +0,0 @@
-<#--
- ! Licensed to the Apache Software Foundation (ASF) under one
- ! or more contributor license agreements.  See the NOTICE file
- ! distributed with this work for additional information
- ! regarding copyright ownership.  The ASF licenses this file
- ! to you under the Apache License, Version 2.0 (the
- ! "License"); you may not use this file except in compliance
- ! with the License.  You may obtain a copy of the License at
- !
- !   http://www.apache.org/licenses/LICENSE-2.0
- !
- ! Unless required by applicable law or agreed to in writing,
- ! software distributed under the License is distributed on an
- ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ! KIND, either express or implied.  See the License for the
- ! specific language governing permissions and limitations
- ! under the License.
--->
-<@indent spaces=3>
-<#list licenses as license>
-  <#if license.url == "http://www.apache.org/licenses/LICENSE-2.0.txt">
-${license.content}
-    <#break>
-  </#if>
-</#list>
-</...@indent>
-
-===
-   ASTERIXDB Dashboard JS COMPONENTS:
-
-    includes a number of packed subcomponents under
-    dashboard/static/ with separate copyright
-    notices and license terms. Your use of these subcomponents is subject
-    to the terms and condition of the following licenses.
-===
-<#include "3rdpartylicenses.txt">

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/b1767b15/asterixdb/asterix-dashboard/src/node/package.json
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/package.json b/asterixdb/asterix-dashboard/src/node/package.json
index 9aa8a0d..051f182 100755
--- a/asterixdb/asterix-dashboard/src/node/package.json
+++ b/asterixdb/asterix-dashboard/src/node/package.json
@@ -6,7 +6,7 @@
     "ng": "ng",
     "start": "ng serve --proxy-config proxy.config.js --host 0.0.0.0",
     "build": "ng build --prod",
-    "mavenbuild": "node node_modules/.bin/ng build --prod -op static/",
+    "mavenbuild": "node node_modules/.bin/ng build --prod -op static/ -d dashboard/",
     "test": "ng test",
     "lint": "ng lint",
     "e2e": "ng e2e"

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/b1767b15/asterixdb/asterix-dashboard/src/node/src/app/dashboard/appbar.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/appbar.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/appbar.component.html
index 62cf771..3662c54 100755
--- a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/appbar.component.html
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/appbar.component.html
@@ -15,7 +15,7 @@ limitations under the License.
     <nav class="awc-navbar-header">
       <a mat-button class="awc-button" routerLink="/" aria-label="AsterixDB Web Console">
       <img class="awc-asterixDB-logo"
-            src="assets/asterixdb_tm.png"
+            src="dashboard/assets/asterixdb_tm.png"
             alt="AsterixDB">
             <span>Administration Console</span>
       </a>


[08/43] asterixdb git commit: [NO ISSUE][LIC] Add ability to fail and/or generate file on license warning

Posted by im...@apache.org.
[NO ISSUE][LIC] Add ability to fail and/or generate file on license warning

Change-Id: I236832b6bcf362b0faebe9baeff154c01e53495b
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2598
Reviewed-by: Michael Blow <mb...@apache.org>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Contrib: Jenkins <je...@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Murtadha Hubail <mh...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/7de451f8
Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/7de451f8
Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/7de451f8

Branch: refs/heads/release-0.9.4-pre-rc
Commit: 7de451f889af70ab1c2506e0b4e65f221affed35
Parents: d8959ee
Author: Michael Blow <mb...@apache.org>
Authored: Sat Apr 14 19:43:48 2018 -0400
Committer: Michael Blow <mb...@apache.org>
Committed: Sat Apr 14 21:15:35 2018 -0700

----------------------------------------------------------------------
 .../maven/license/DownloadLicensesMojo.java     |   2 +-
 .../hyracks/maven/license/GenerateFileMojo.java |  16 +--
 .../hyracks/maven/license/LicenseMojo.java      | 104 ++++++++++++++++++-
 3 files changed, 113 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/7de451f8/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/DownloadLicensesMojo.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/DownloadLicensesMojo.java b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/DownloadLicensesMojo.java
index 1b2961f..293c08c 100644
--- a/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/DownloadLicensesMojo.java
+++ b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/DownloadLicensesMojo.java
@@ -63,7 +63,7 @@ public class DownloadLicensesMojo extends LicenseMojo {
                 String fileName = entry.getLicense().getContentFile(false);
                 doDownload(timeoutMillis, i, url, fileName);
             });
-        } catch (IOException | ProjectBuildingException e) {
+        } catch (ProjectBuildingException e) {
             throw new MojoExecutionException("Unexpected exception: " + e, e);
         }
     }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/7de451f8/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/GenerateFileMojo.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/GenerateFileMojo.java b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/GenerateFileMojo.java
index 22646c5..f61dadf 100644
--- a/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/GenerateFileMojo.java
+++ b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/GenerateFileMojo.java
@@ -121,6 +121,10 @@ public class GenerateFileMojo extends LicenseMojo {
             persistLicenseMap();
             buildNoticeProjectMap();
             generateFiles();
+            if (seenWarning && failOnWarning) {
+                throw new MojoFailureException(
+                        "'failOnWarning' enabled and warning(s) (or error(s)) occurred during execution; see output");
+            }
         } catch (IOException | TemplateException | ProjectBuildingException e) {
             throw new MojoExecutionException("Unexpected exception: " + e, e);
         }
@@ -327,8 +331,9 @@ public class GenerateFileMojo extends LicenseMojo {
                 UnaryOperator.identity());
     }
 
-    private void resolveArtifactFiles(final String name, ProjectFlag ignoreFlag, ProjectFlag alternateFilenameFlag,
-            Predicate<JarEntry> filter, BiConsumer<Project, String> consumer, UnaryOperator<String> contentTransformer)
+    private void resolveArtifactFiles(final String name, final ProjectFlag ignoreFlag,
+            final ProjectFlag alternateFilenameFlag, final Predicate<JarEntry> filter,
+            final BiConsumer<Project, String> consumer, final UnaryOperator<String> contentTransformer)
             throws MojoExecutionException, IOException {
         for (Project p : getProjects()) {
             File artifactFile = new File(p.getArtifactPath());
@@ -339,11 +344,10 @@ public class GenerateFileMojo extends LicenseMojo {
                 continue;
             }
             String alternateFilename = (String) getProjectFlag(p.gav(), alternateFilenameFlag);
-            if (alternateFilename != null) {
-                filter = entry -> entry.getName().equals(alternateFilename);
-            }
+            Predicate<JarEntry> finalFilter =
+                    alternateFilename != null ? entry -> entry.getName().equals(alternateFilename) : filter;
             try (JarFile jarFile = new JarFile(artifactFile)) {
-                SortedMap<String, JarEntry> matches = gatherMatchingEntries(jarFile, filter);
+                SortedMap<String, JarEntry> matches = gatherMatchingEntries(jarFile, finalFilter);
                 if (matches.isEmpty()) {
                     warnUnlessFlag(p, ignoreFlag, "No " + name + " file found for " + p.gav());
                 } else {

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/7de451f8/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseMojo.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseMojo.java b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseMojo.java
index 4466d20..55987da 100644
--- a/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseMojo.java
+++ b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseMojo.java
@@ -22,6 +22,7 @@ import static org.apache.hyracks.maven.license.LicenseUtil.toGav;
 import static org.apache.hyracks.maven.license.ProjectFlag.IGNORE_LICENSE_OVERRIDE;
 
 import java.io.File;
+import java.io.IOException;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
@@ -37,6 +38,7 @@ import java.util.TreeSet;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
+import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.mutable.MutableBoolean;
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.Pair;
@@ -50,6 +52,7 @@ import org.apache.maven.model.License;
 import org.apache.maven.model.Model;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.logging.Log;
 import org.apache.maven.plugins.annotations.Component;
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.project.MavenProject;
@@ -59,7 +62,6 @@ import org.apache.maven.project.inheritance.ModelInheritanceAssembler;
 
 public abstract class LicenseMojo extends AbstractMojo {
 
-    private static final String VERIFIED_VERSIONS_PROP = "license-automation-plugin.verifiedVersions";
     @Parameter
     protected List<Override> overrides = new ArrayList<>();
 
@@ -105,6 +107,12 @@ public abstract class LicenseMojo extends AbstractMojo {
     @Parameter(required = true)
     protected File licenseDirectory;
 
+    @Parameter
+    protected File warningTouchFile;
+
+    @Parameter
+    protected boolean failOnWarning;
+
     private Map<String, MavenProject> projectCache = new HashMap<>();
 
     private Map<String, Model> supplementModels;
@@ -115,17 +123,109 @@ public abstract class LicenseMojo extends AbstractMojo {
     Map<String, LicensedProjects> licenseMap = new TreeMap<>();
     private Map<Pair<String, ProjectFlag>, Object> projectFlags = new HashMap<>();
 
+    protected boolean seenWarning;
+
     protected Map<String, LicensedProjects> getLicenseMap() {
         return licenseMap;
     }
 
-    protected void init() throws MojoExecutionException, MalformedURLException, ProjectBuildingException {
+    protected void init() throws MojoExecutionException {
+        if (warningTouchFile != null) {
+            warningTouchFile.getParentFile().mkdirs();
+        }
+        interceptLogs();
         excludedScopes.add("system");
         excludePatterns = compileExcludePatterns();
         supplementModels = SupplementalModelHelper.loadSupplements(getLog(), models);
         buildUrlLicenseMap();
     }
 
+    private void interceptLogs() {
+        final Log originalLog = getLog();
+        setLog(new Log() {
+            public boolean isDebugEnabled() {
+                return originalLog.isDebugEnabled();
+            }
+
+            public void debug(CharSequence charSequence) {
+                originalLog.debug(charSequence);
+            }
+
+            public void debug(CharSequence charSequence, Throwable throwable) {
+                originalLog.debug(charSequence, throwable);
+            }
+
+            public void debug(Throwable throwable) {
+                originalLog.debug(throwable);
+            }
+
+            public boolean isInfoEnabled() {
+                return originalLog.isInfoEnabled();
+            }
+
+            public void info(CharSequence charSequence) {
+                originalLog.info(charSequence);
+            }
+
+            public void info(CharSequence charSequence, Throwable throwable) {
+                originalLog.info(charSequence, throwable);
+            }
+
+            public void info(Throwable throwable) {
+                originalLog.info(throwable);
+            }
+
+            public boolean isWarnEnabled() {
+                return originalLog.isWarnEnabled();
+            }
+
+            public void warn(CharSequence charSequence) {
+                seenWarning();
+                originalLog.warn(charSequence);
+            }
+
+            public void warn(CharSequence charSequence, Throwable throwable) {
+                seenWarning();
+                originalLog.warn(charSequence, throwable);
+            }
+
+            public void warn(Throwable throwable) {
+                seenWarning();
+                originalLog.warn(throwable);
+            }
+
+            public boolean isErrorEnabled() {
+                return originalLog.isErrorEnabled();
+            }
+
+            public void error(CharSequence charSequence) {
+                seenWarning();
+                originalLog.error(charSequence);
+            }
+
+            public void error(CharSequence charSequence, Throwable throwable) {
+                seenWarning();
+                originalLog.error(charSequence, throwable);
+            }
+
+            public void error(Throwable throwable) {
+                seenWarning();
+                originalLog.error(throwable);
+            }
+
+            private void seenWarning() {
+                seenWarning = true;
+                if (warningTouchFile != null) {
+                    try {
+                        FileUtils.touch(warningTouchFile);
+                    } catch (IOException e) {
+                        originalLog.error("unable to touch " + warningTouchFile, e);
+                    }
+                }
+            }
+        });
+    }
+
     protected void addDependenciesToLicenseMap() throws ProjectBuildingException {
         Map<MavenProject, List<Pair<String, String>>> dependencyLicenseMap = gatherDependencies();
         dependencyLicenseMap.forEach((depProject, value) -> {


[25/43] asterixdb git commit: [ASTERIXDB-2318] Build dashboard in mvn

Posted by im...@apache.org.
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/indexes.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/indexes.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/indexes.component.scss
new file mode 100755
index 0000000..15b364a
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/indexes.component.scss
@@ -0,0 +1,398 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+$indexes-spacing-unit: 8px;
+
+.container {
+  display: flex;
+	flex-flow: row;
+	padding: 0;
+  margin: 0;
+}
+
+.master {
+  width: 60%;
+}
+
+.detail {
+  width: 40%;
+}
+
+.indexes-card {
+	display: flex;
+	flex-flow: column;
+  padding: 0;
+  margin:0 auto;
+  margin-top: ($indexes-spacing-unit * 2);
+  min-height: 450px;
+  max-height: 450px;
+  //min-width: 98%; //(100vw / 2);
+  //max-width: 98%; // (100vw / 2);
+  width: 95%; // 98%;
+  overflow: hidden;
+}
+
+.indexes-details-card {
+	display: flex;
+	flex-flow: column;
+  padding: 0;
+  margin:0 auto;
+  margin: ($indexes-spacing-unit * 2);
+  min-height: 716px;
+  max-height: 716px;
+  //min-width: 95%; //(100vw / 2);
+  //max-width: 95%; // (100vw / 2);
+  overflow: hidden;
+}
+
+.icon {
+	padding: 0 14px 0 0;
+	margin: 0;
+}
+
+.spacer {
+  flex: 1 1 auto;
+}
+
+.indexes-selector {
+	min-height: 42px;
+	max-height: 42px;
+	justify-content: center;
+	//align-items: center;
+	font-size: 0.80rem;
+  font-weight: 500;
+  background-color: white;
+	border: 1px solid rgba(54, 147, 209, 0.87);
+}
+
+.indexes-content {
+  position:relative;
+  top: 0;
+  left: 0;
+  margin: 0px;
+  padding: 0px;
+  overflow: auto;
+}
+
+.indexes-table {
+  margin: $indexes-spacing-unit !important;
+  height: 330px;
+  overflow: auto;
+}
+
+.spacer {
+  flex: 1 1 auto;
+}
+
+//.indexes-toolbar {
+//	display: block;
+//  min-height: 56px;
+//	height: 56px;
+	//width: 250px;
+//  font-size: 12px;
+//  white-space: nowrap;
+//  overflow: hidden;
+//  text-overflow: ellipsis;
+//	letter-spacing: 1px;
+//	font-weight: 400;
+//	background: rgba(0,0,1, .80);
+//}
+
+.example-header {
+  min-height: 64px;
+  display: flex;
+  align-items: center;
+  padding-left: 24px;
+  font-size: 20px;
+}
+
+.mat-table {
+  overflow: auto;
+}
+
+.customWidthClass{
+   flex: 0 0 75px;
+}
+
+.mat-column-DataverseName {
+  text-align: left;
+}
+
+.mat-header-cell.mat-column-DataverseName {
+  text-align: left;
+}
+
+.mat-cell.mat-column-DataverseName {
+  text-align: left;
+}
+
+.header-dataversename-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 150px;
+}
+
+.indexes-dataversename-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 150px;
+}
+
+.header-datasetname-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 150px;
+}
+
+.indexes-datasetname-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 150px;
+}
+
+.header-indexname-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 150px;
+}
+
+.indexes-indexname-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 150px;
+}
+
+.header-indexestructure-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: center;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 150px;
+}
+
+.indexes-indexstructure-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: center;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 150px;
+}
+
+.header-isprimary-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: center;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 150px;
+}
+
+.indexes-isprimary-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: center;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 150px;
+}
+
+.header-timestamp-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 150px;
+}
+
+.indexes-timestamp-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 150px;
+}
+
+.header-groupname-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 150px;
+}
+
+.indexes-groupname-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 150px;
+}
+
+.header-timestamp-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 250px;
+}
+
+.indexes-timestamp-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 250px;
+}
+
+.example-header {
+  min-height: 56px;
+  max-height: 56px;
+  display: flex;
+  align-items: center;
+  padding: 8px 24px 0;
+  font-size: 20px;
+  justify-content: space-between;
+  border-bottom: 1px solid transparent;
+}
+
+.mat-form-field {
+  font-size: 14px;
+  flex-grow: 1;
+  margin-top: 8px;
+}
+
+.example-no-results {
+  display: flex;
+  justify-content: center;
+  padding: 24px;
+  font-size: 12px;
+  font-style: italic;
+}
+
+.actions {
+  display: flex;
+  border-top: 1px solid rgba(0, 0, 0, 0.1);
+  color: rgba(54, 147, 209, 0.87);
+  padding: $indexes-spacing-unit;
+  margin: 0;
+}
+
+.error-message {
+  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
+  color: rgba(209, 54, 54, 0.87);
+  padding-top: 10px;  
+  padding-left: 20px;
+  text-overflow: ellipsis;
+}
+
+.output {
+  padding-left: ($indexes-spacing-unit * 2);
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/indexes.component.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/indexes.component.ts b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/indexes.component.ts
new file mode 100755
index 0000000..2913470
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/indexes.component.ts
@@ -0,0 +1,230 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Component, Inject, Input } from '@angular/core';
+import { Index } from '../../../shared/models/asterixDB.model'
+import { Store } from '@ngrx/store';
+import { Observable } from 'rxjs/Observable';
+import * as indexActions from '../../../shared/actions/index.actions'
+import { ElementRef, ViewChild} from '@angular/core';
+import {DataSource} from '@angular/cdk/collections';
+import {BehaviorSubject} from 'rxjs/BehaviorSubject';
+import 'rxjs/add/operator/startWith';
+import 'rxjs/add/observable/merge';
+import 'rxjs/add/operator/map';
+import 'rxjs/add/operator/debounceTime';
+import 'rxjs/add/operator/distinctUntilChanged';
+import 'rxjs/add/observable/fromEvent';
+import { Subscription } from "rxjs/Rx";
+import { State } from '../../../shared/reducers/index.reducer';
+import { MatPaginator } from '@angular/material';
+import { SelectionModel } from '@angular/cdk/collections';
+import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';
+
+/**
+ * Root component
+ * Defines our application's layout
+ */
+@Component({
+  selector: 'awc-indexes',
+  templateUrl: 'indexes.component.html',
+  styleUrls: ['indexes.component.scss']
+})
+
+export class IndexCollection {
+  displayedColumns = "['dataverseName', 'datasetName', 'indexName', 'indexStructure', 'isPrimary', 'timestamp', 'pendingOp']"
+  /*
+  dataverseName: string;
+  datasetName: string;
+  indexName: string;
+  indexStructure: string;
+  searchKey: string[];
+  isPrimary: boolean;
+  timestamp: string;
+  pendingOp: string;
+  */
+  indexName: string;
+  dataSource: IndexDataSource | null;
+  loaded$: Observable<any>;
+  @Input('message') errorMessage: string = ""
+  
+  idxName = "";
+
+  constructor(private store: Store<any>, public dialog: MatDialog) {
+    this.loaded$ = this.store.select('index');
+    // Watching the name of the latest create index
+    this.store.select(s => s.index.createIndexName).subscribe((data: any) => {
+      this.idxName = data;
+    })
+
+    // Watching the name of the latest drop index
+    this.store.select(s => s.index.dropIndexName).subscribe((data: any) => {
+      this.idxName = data;
+    })
+
+    // Watching for the if there is a change in the collection
+		this.store.select(s => s.index.createIndexSuccess).subscribe((data: any) => {
+      if (data === true) {
+        this.getIndexes();
+        this.errorMessage = "SUCCEED: CREATE INDEX " + this.idxName;
+      }  
+    })
+
+    // Watching for the if there is a error in a create index operation 
+		this.store.select(s => s.index.createIndexError).subscribe((data: any) => {
+      if (data.errors) {
+        this.errorMessage = "ERROR: " + data.errors[0].msg;
+      }  
+    })
+
+    // Watching for the success message in a drop index operation 
+    this.store.select(s => s.index.dropIndexSuccess).subscribe((data: any) => {
+      if (data === true) {
+        this.getIndexes();
+        this.errorMessage = "SUCCEED: DROP INDEX " + this.idxName;
+      }  
+    })
+
+    // Watching for the if there is a error in a drop index operation 
+		this.store.select(s => s.index.dropIndexError).subscribe((data: any) => {
+      if (data.errors) {
+        this.errorMessage = "ERROR: " + data.errors[0].msg;
+      }  
+    })
+  }
+
+  getIndexes() {
+    // Triggers the effect to refresg the indexes
+    this.store.dispatch(new indexActions.SelectIndexes('-'));
+  }
+
+  ngOnInit() {
+    // Assign the datasource for the table 
+    this.dataSource = new IndexDataSource(this.store);
+  }  
+
+  /* 
+  * opens the create index dialog
+  */
+  openCreateIndexDialog(): void {
+    let dialogRef = this.dialog.open(DialogCreateIndex, {
+      width: '420px',
+      data: { name: this.indexName }
+    });
+
+    dialogRef.afterClosed().subscribe(result => {
+      this.indexName = result;
+    });
+  }
+
+
+   /* 
+  * opens the drop index dialog
+  */
+  openDropIndexDialog(): void {
+    let dialogRef = this.dialog.open(DialogDropIndex, {
+      width: '420px',
+      data: { name: this.indexName }
+    });
+
+    dialogRef.afterClosed().subscribe(result => {
+      this.indexName = result;
+    });
+  }
+
+  /* 
+  * Clean up the error message on the screen
+  */
+  onClick(): void {
+    this.errorMessage = "";
+  }
+
+   /* Showing all the index metadata information */
+   output: any;
+   
+   highlight(row){
+     this.output = JSON.stringify(row, null, 2);
+   }
+
+  @ViewChild('querymetadata') inputQuery;
+
+  /* Cleans up error message */
+  cleanUp() {
+    this.errorMessage = ""; 
+    // Cascading   
+    this.inputQuery.cleanUp(); 
+  }
+}
+
+@Component({
+  selector: 'index-create-dialog',
+  templateUrl: 'index-create-dialog.component.html',
+  styleUrls: ['index-create-dialog.component.scss']
+})
+
+export class DialogCreateIndex {
+  constructor(  private store: Store<any>,
+                public dialogCreateIdxRef: MatDialogRef<DialogCreateIndex>,
+                @Inject(MAT_DIALOG_DATA) public data: any) { }
+
+  onClick(): void {
+    this.store.dispatch(new indexActions.CreateIndex(this.data.indexName));
+    this.dialogCreateIdxRef.close();
+  }
+
+  onNoClick(): void {
+    this.dialogCreateIdxRef.close();
+  }
+}
+
+@Component({
+  selector: 'index-drop-dialog',
+  templateUrl: 'index-drop-dialog.component.html',
+  styleUrls: ['index-drop-dialog.component.scss']
+})
+
+export class DialogDropIndex {
+  constructor(  private store: Store<any>,
+                public dialogDropIdxRef: MatDialogRef<DialogDropIndex>,
+                @Inject(MAT_DIALOG_DATA) public data: any) { }
+
+  onClick(): void {
+    console.log(this.data.indexName)
+    this.store.dispatch(new indexActions.DropIndex(this.data.indexName));
+    this.dialogDropIdxRef.close();
+  }
+
+  onNoClick(): void {
+    this.dialogDropIdxRef.close();
+  }
+}
+
+export class IndexDataSource extends DataSource<any> {
+  private indexes$: Observable<any>
+
+  constructor(private store: Store<any>) {
+    super();
+    this.indexes$ = this.store.select(s => s.index.indexes.results);
+  }
+
+  /** Connect function called by the table to retrieve one stream containing the data to render. */
+  connect(): Observable<Index[]> {
+      const displayDataChanges = [
+        this.indexes$,
+      ];
+
+    return this.indexes$;
+  }
+
+  disconnect() {}
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/input-metadata.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/input-metadata.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/input-metadata.component.html
new file mode 100755
index 0000000..939ab06
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/input-metadata.component.html
@@ -0,0 +1,31 @@
+<!--/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/ -->
+<mat-card class="input-card" (click)="onClick()">
+    <mat-toolbar color="primary" class="input-selector">
+            <mat-icon class="toolbar-icon">menu</mat-icon>
+            <span>INPUT: SQL++</span>	
+            <span class="spacer"></span>
+    </mat-toolbar>
+    <mat-card-content class="content-area">
+        <div class="codemirror-container">
+           <codemirror-metadata class="code" [(ngModel)]="queryMetadataString" [config]="codemirrorMetadataConfig">
+            </codemirror-metadata>  
+        </div>
+    </mat-card-content>
+    <mat-card-actions class="actions">
+        <button mat-button class="query-button" (click)="executeQuery()">RUN</button>
+        <span class="error-message">{{errorMessage}}</span>
+        <span class="spacer"></span>
+    </mat-card-actions>
+</mat-card>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/input-metadata.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/input-metadata.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/input-metadata.component.scss
new file mode 100755
index 0000000..b98080c
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/input-metadata.component.scss
@@ -0,0 +1,78 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+$query-spacing-unit: 8px;
+
+.input-card {
+	display: flex;
+	flex-flow: column;
+	padding: 0;
+	margin: 0 auto;
+	margin-top: $query-spacing-unit;
+	height: 250px;
+	width: 95%;
+	overflow: hidden;
+}
+  
+.toolbar-icon {
+	padding: 0 14px 0 0;	
+	margin: 0;
+}
+
+.spacer {
+	flex: 1 1 auto;
+}
+  
+.input-selector {
+	max-height: 42px;
+	min-height: 42px;
+	justify-content: center;
+	//align-items: center;
+	font-size: 0.80rem;
+	font-weight: 500;
+	background-color: white;
+	border: 1px solid rgba(54, 147, 209, 0.87);
+}
+
+.content-area {
+	position: relative;
+	color: hsla(0,0%,0%,.87);
+	height: 120px;
+	padding: 0;
+	margin: $query-spacing-unit * 2;
+	overflow: none;
+}
+
+.codemirror-container {
+	width: 100%;
+	height: 100%;
+	padding: 0;
+	margin: 0;
+	font-size: 14px;
+	line-height: 1.8;
+}
+
+.actions {
+	border-top: 1px solid rgba(0, 0, 0, 0.1);
+	color: rgba(54, 147, 209, 0.87);
+	padding: $query-spacing-unit;
+	margin: 0;
+}
+
+.error-message {
+	border-bottom: 1px solid rgba(0, 0, 0, 0.1);
+	color: rgba(209, 54, 54, 0.87);
+	padding-top: 10px;  
+	padding-left: 20px;
+	text-overflow: ellipsis;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/input-metadata.component.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/input-metadata.component.ts b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/input-metadata.component.ts
new file mode 100755
index 0000000..06b9375
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/input-metadata.component.ts
@@ -0,0 +1,111 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Component, ViewChild, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';
+import { Observable } from 'rxjs/Observable';
+import { Store } from '@ngrx/store';
+import * as sqlQueryActions from '../../shared/actions/query.actions'
+import * as dataverseActions from '../../shared/actions/dataverse.actions'
+import * as datasetActions from '../../shared/actions/dataset.actions'
+import * as datatypeActions from '../../shared/actions/datatype.actions'
+import * as indexActions from '../../shared/actions/index.actions'
+
+
+import * as CodeMirror from 'codemirror';
+
+/*
+ * Query metadata component
+ * has editor (codemirror) for writing some query
+ */
+@Component({
+	moduleId: module.id,
+	selector: 'awc-query-metadata',
+	templateUrl:'input-metadata.component.html',
+	styleUrls: ['input-metadata.component.scss'],
+})
+
+export class InputQueryMetadataComponent {
+	private dataverses$: Observable<any>;
+	private datatypes$: Observable<any>;
+	private datasets$: Observable<any>;
+	private indexes$: Observable<any>;
+	dataverses = [];
+	datatypes = [];
+	datasets = [];
+	indexes = [];
+	queryMetadataString: string = "";
+	loaded$: Observable<any>;
+	errorMessage: string = "";
+
+  /**
+  * Initialize codemirror
+  */
+  codemirrorMetadataConfig = 	{ 	mode: "asterix",
+    //lineNumbers: true,
+    lineWrapping: true,
+    showCursorWhenSelecting: true,
+    autofocus: true
+  };
+
+	constructor(private store: Store<any>, private changeDetector: ChangeDetectorRef) {
+		this.store.select("sqlMetadataQuery").subscribe((data: any) => {
+			if (data.success === false){
+				if (data.sqlQueryMetadataError.errors){
+					this.errorMessage = "ERROR: " + data.sqlQueryMetadataError.errors[0].msg
+					this.changeDetector.detectChanges();
+				}
+			} else {
+				this.errorMessage = "SUCCEED";
+
+				// Refresh the tables automatically
+				let stringQuery = data.sqlQueryMetadataString;
+				stringQuery = stringQuery.toUpperCase();
+
+				if (stringQuery.includes("CREATE DATAVERSE") || stringQuery.includes("DROP DATAVERSE") ){
+    				this.store.dispatch(new dataverseActions.SelectDataverses('-'));
+				}
+				else if (stringQuery.includes("CREATE DATASET") || stringQuery.includes("DROP DATASET")){
+    				this.store.dispatch(new datasetActions.SelectDatasets('-'));
+				}
+				else if (stringQuery.includes("CREATE TYPE") || stringQuery.includes("DROP TYPE")){
+    				this.store.dispatch(new datatypeActions.SelectDatatypes('-'));
+				}
+				else if (stringQuery.includes("CREATE INDEX") || stringQuery.includes("DROP INDEX")){
+    				this.store.dispatch(new indexActions.SelectIndexes('-'));
+				}
+
+				this.changeDetector.detectChanges();
+			}
+
+		})
+	}
+
+	getQueryResults(queryMetadataString: string) {
+    	this.store.dispatch(new sqlQueryActions.ExecuteMetadataQuery(queryMetadataString));
+	  }
+
+	executeQuery() {
+		this.getQueryResults(this.queryMetadataString.replace(/\n/g, " "));
+		// Component View Refresh
+
+	}
+
+	onClick() {
+		this.errorMessage = "";
+	}
+
+	/* Cleans up error message */
+	cleanUp() {
+		this.errorMessage = "";
+	}
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/metadata-container.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/metadata-container.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/metadata-container.component.html
new file mode 100755
index 0000000..a2f3a73
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/metadata-container.component.html
@@ -0,0 +1,36 @@
+<!--/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/ -->
+<mat-tab-group class="metadata-menu" (selectedTabChange)="tabChange()">
+    <mat-tab label="DATAVERSES" class="submenu">
+        <div class="dataverses">
+            <awc-dataverses #dataverses [message]="message" class="dataverses"></awc-dataverses>
+        </div>
+    </mat-tab>
+    <mat-tab label="DATASETS">
+        <div class="datasets">
+            <awc-datasets #datasets [message]="message" class="datasets"></awc-datasets>
+        </div>  
+    </mat-tab>
+    <mat-tab label="DATATYPES">
+        <div class="datatypes">
+            <awc-datatypes #datatypes [message]="message" class="datatypes"></awc-datatypes>
+        </div>
+    </mat-tab>
+    <mat-tab label="INDEXES" class="indexes">
+        <div class="indexes">
+            <awc-indexes #indexes [message]="message" class="indexes"></awc-indexes>
+        </div>
+    </mat-tab>
+</mat-tab-group>
+

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/metadata-container.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/metadata-container.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/metadata-container.component.scss
new file mode 100755
index 0000000..3857d74
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/metadata-container.component.scss
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+ .dataverses {
+    margin: 0;
+    min-height: 750px;
+    max-height: 750px;
+    width: 100%;
+    overflow: hidden;
+ }
+
+.datasets {
+    margin: 0;
+    min-height: 750px;
+    max-height: 750px;
+    width: 100%;
+    overflow: hidden;
+}
+
+.datatypes {
+    margin: 0;
+    min-height: 750px;
+    max-height: 750px;
+    width: 100%;
+    overflow: hidden;
+}
+
+.indexes {
+    margin: 0;
+    min-height: 750px;
+    max-height: 750px;
+    width: 100%;
+    overflow: hidden;
+}
+
+.metadata-menu {    
+    /deep/ .mat-tab-label {
+        font-size: 0.80rem !important;
+        font-weight: 500  !important;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/metadata-container.component.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/metadata-container.component.ts b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/metadata-container.component.ts
new file mode 100755
index 0000000..c8382cf
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/metadata-container.component.ts
@@ -0,0 +1,41 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Component, ViewChild } from '@angular/core';
+
+@Component({
+	moduleId: module.id,
+	selector: 'awc-metadata-container',
+	templateUrl: 'metadata-container.component.html',
+	styleUrls: ['metadata-container.component.scss']
+})
+
+export class MetadataContainerComponent {
+
+	@ViewChild('dataverses') dataverses ;
+	@ViewChild('datasets') datasets ;
+	@ViewChild('datatypes') datatypes ;
+	@ViewChild('indexes') indexes ;
+	message = "";
+
+	constructor() {}
+
+	tabChange() {
+		this.indexes.cleanUp();
+		this.datasets.cleanUp();
+		this.datatypes.cleanUp();
+		this.dataverses.cleanUp();
+	}
+
+	
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/codemirror.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/codemirror.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/codemirror.component.scss
new file mode 100755
index 0000000..ba795c2
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/codemirror.component.scss
@@ -0,0 +1,23 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+/* -- Place holder for future expansion --> */
+code {
+	width: 100%;
+	height: 100%;
+	padding: 10%;
+    margin: 0; 
+    overflow-wrap: break-word;
+    word-break: break-all;
+    background-color: pink;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/codemirror.component.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/codemirror.component.ts b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/codemirror.component.ts
new file mode 100755
index 0000000..91b711d
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/codemirror.component.ts
@@ -0,0 +1,237 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+/**
+ * Integrating codemirror (using ng2-codemirror) with our application
+ *
+ * component from "https://runkit.com/npm/ng2-codemirror"
+ *                "https://www.npmjs.com/package/ng2-codemirror"
+ * copy component from /src/codemirror.component.ts
+ * and modified for custom mode (asterix aql, sql++ code hilighting)
+ *
+ * therefore, actually we don't need to "npm install ng2-codemirror"
+ *
+ * Because on the outside of this component,
+ * It was hard to access the codemirror instance that 'ng-codemirror' use
+ * So, we copied the component in our application and modified it
+ *
+ * 'codemirror.js(^5.23.0)' is included in the 'index.html'
+ * And in this component(codemirror.component.ts)
+ * add statement like "declare var CodeMirror: any;"
+ *
+ * I don't know whether this is right way
+ *
+ * ref 1) usage : https://embed.plnkr.co/8e9gxss9u10VeFrv29Zt/
+ * ref 2) custom mode : http://jsfiddle.net/TcqAf/99/
+ * ref 3) integrating : http://stackoverflow.com/questions/37092142/integrating-codemirror-with-angular2-typescript
+ * ref 3) integrating :  https://medium.com/@s_eschweiler/using-external-libraries-with-angular-2-87e06db8e5d1#.8ok74uvwg
+ */
+ import {
+   Component,
+   Input,
+   Output,
+   ElementRef,
+   ViewChild,
+   EventEmitter,
+   forwardRef,
+   AfterViewInit,
+   OnDestroy
+ } from '@angular/core';
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
+ import * as CodeMirror from 'codemirror';
+
+/**
+ * CodeMirror component
+ * Usage :
+ * <codemirror [(ngModel)]="data" [config]="{...}"></codemirror>
+ */
+@Component({
+  moduleId: module.id,
+  selector: 'codemirror',
+  providers: [
+    {
+      provide: NG_VALUE_ACCESSOR,
+      useExisting: forwardRef(() => CodemirrorComponent),
+      multi: true
+    }
+  ],
+  styleUrls: ['codemirror.component.scss'],
+  template: `<textarea class="code" #host></textarea>`,//,
+})
+
+export class CodemirrorComponent implements AfterViewInit, OnDestroy {
+  @Input() config;
+  @Output() change = new EventEmitter();
+  @Output() focus = new EventEmitter();
+  @Output() blur = new EventEmitter();
+  @Output() instance = null;
+  @ViewChild('host') host;
+  _value = '';
+
+  /**
+   * Constructor
+   */
+  constructor(){
+		/**
+		 * Custom mode for AsterixDB
+		 */
+		CodeMirror.defineMode("asterix", function(){
+		  var KEYWORD_MATCH = [
+				// AQL
+				"drop", "dataverse", "dataset",
+				"if", "exists", "create",
+				"use", "type", "as", "closed",
+				"primary", "key",  "hints", "cardinality",
+				"index", "on", "btree", "rtree", "keyword",
+				"for", "in", "Metadata", "Dataset",
+				"return", "Index", "load", "using", "localfs", "path", "format",
+				// Query (not perfect)
+				"from", "in", "with", "group", "by", "select",
+				"let", "where", "order", "asc", "desc", "limit",
+				"keeping", "offset", "distinct", "or", "and",
+				// Built in functions (TODO)
+				// Built in functions (TODO)
+				// Built in functions (TODO)
+				// Asterix Data Model
+				// Primitive type
+				"boolean",
+				"tinyint", "smallint", "integer", "bigint",
+				"float", "double",
+				"string",
+				"binary", "hex", "base64",
+				"point", "line", "rectangle", "circle", "polygon",
+				"date", "time", "datetime", "duration", "interval", "uuid",
+				// Incomplete information type
+				"null", "missing",
+				// Derived type
+				// object {}, array [], multiset {{}}
+				// SQL++
+				"DROP", "DATAVERSE", "IF", "EXISTS", "CREATE", "USE", "TYPE", "AS", "DATASET", "PRIMARY", "KEY",
+				"INDEX", "SELECT", "VALUE", "INSERT", "INTO", "FROM", "WHERE", "AND", "SOME", "IN", "SATISFIES", "IS", "UNKNOWN", "NOT", "EVERY",
+				"GROUP", "BY", "ORDER", "DESC", "LIMIT", "OR", "SET", "DELETE", "LOAD", "USING",
+			];
+
+			//"(", ")","{{", "}}", "[", "]",	"{", "}",  ";", ",", ":","?", "=",
+      var VAR_MATCH = /[$][a-zA-Z]+(\d*)/;
+			var DOT_MATCH = /[.](\S)*/;
+			var DOUBLE_QUOTE_MATCH = /["].*["]/;
+			var SINGLE_QUOTE_MATCH = /['].*[']/;
+			var BREAK_POINT = /(\s)/;
+
+			return {
+				startState: function() {return {inString: false};},
+				token: function(stream, state) {
+					if (state.newLine == undefined)state.newLine = true;
+
+					//match variable reference
+					if (stream.match(VAR_MATCH)) {
+						return "variable";
+					}
+
+					if (stream.match(DOT_MATCH)) {
+						return "dot-variable";
+					}
+
+					//string variable match
+					if (stream.match(DOUBLE_QUOTE_MATCH)) {
+						return "string";
+					}
+					if (stream.match(SINGLE_QUOTE_MATCH)) {
+						return "string";
+					}
+
+					//keyword match
+					for (var i in KEYWORD_MATCH){
+						if (state.newLine && stream.match(KEYWORD_MATCH[i])){
+								return "keyword";
+						 }
+					}
+
+					if (stream.peek() === " " || stream.peek() === null){
+						state.newLine = true;
+					}else{
+						state.newLine = false;
+					}
+					stream.next();
+					return null;
+				}
+			};
+		});
+	}
+
+  get value() { return this._value; };
+
+  @Input() set value(v) {
+    if (v !== this._value) {
+      this._value = v;
+      this.onChange(v);
+    }
+  }
+
+  /**
+   * On component destroy
+   */
+  ngOnDestroy() {}
+
+  /**
+   * On component view init
+   */
+  ngAfterViewInit() {
+    this.config = this.config || {};
+    this.codemirrorInit(this.config);
+  }
+
+  /**
+   * Initialize codemirror
+   */
+  codemirrorInit(config){
+    this.instance = CodeMirror.fromTextArea(this.host.nativeElement, config);
+    this.instance.setValue(this._value);
+    this.instance.setSize(null, 90);
+    this.instance.on('change', () => {
+      this.updateValue(this.instance.getValue());
+    });
+
+    this.instance.on('focus', () => {
+      this.focus.emit();
+    });
+
+    this.instance.on('blur', () => {
+      this.blur.emit();
+    });
+  }
+
+  /**
+   * Value update process
+   */
+  updateValue(value){
+    this.value = value;
+    this.onTouched();
+    this.change.emit(value);
+  }
+
+  /**
+   * Implements ControlValueAccessor
+   */
+  writeValue(value){
+    this._value = value || '';
+    if (this.instance) {
+      this.instance.setValue(this._value);
+    }
+  }
+
+  onChange(_) {}
+  onTouched() {}
+  registerOnChange(fn){this.onChange = fn;}
+  registerOnTouched(fn){this.onTouched = fn;}
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/input.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/input.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/input.component.html
new file mode 100755
index 0000000..2eec6b7
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/input.component.html
@@ -0,0 +1,28 @@
+<!--/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/ -->
+<mat-card class="input-card">
+	 <mat-toolbar color="primary" class="input-selector">
+			<mat-icon class="toolbar-icon">menu</mat-icon>
+			<span>INPUT: SQL++</span>	
+			<span class="spacer"></span>
+	</mat-toolbar>
+	<mat-card-content class="content-area">
+		<div class="codemirror-container">
+			<codemirror class="code" #host [(ngModel)]="queryString" [config]="codemirrorConfig"></codemirror>
+		</div>
+	</mat-card-content>
+	<mat-card-actions class="actions">
+		<button mat-button class="query-button" (click)="onClick()">RUN</button>
+	</mat-card-actions>
+</mat-card>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/input.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/input.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/input.component.scss
new file mode 100755
index 0000000..437ff58
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/input.component.scss
@@ -0,0 +1,82 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+$query-spacing-unit: 5px;
+
+.input-card {
+	display: flex;
+	flex-flow: column;
+	padding: 0;
+	margin: ($query-spacing-unit * 2);
+	height: 200px;
+	width: 100%;
+	min-height: 150px; 
+
+	//background-color: orange;
+}
+  
+.toolbar-icon {
+	padding: 0 14px 0 0;	
+	margin: 0;
+}
+
+.spacer {
+	flex: 1 1 auto;
+}
+  
+.input-selector {
+	max-height: 42px;
+	min-height: 42px;
+	justify-content: center;
+	//align-items: center;
+	font-size: 0.80rem;
+	font-weight: 500;
+	background-color: white;
+	border: 1px solid rgba(54, 147, 209, 0.87);
+}
+
+.content-area {
+	//position: relative;
+	color: hsla(0,0%,0%,.87);
+	//height: 102px;
+	padding: 0;
+	margin: 0;
+	overflow: none;
+  }
+
+.codemirror-container {
+	width: 95%;
+	height: 98%;
+	padding: 0; // ($query-spacing-unit * 2);
+	margin: 0 auto;
+	font-size: 14px;
+	//letter-spacing: 3px;
+	line-height: 1.8;
+	background-color: red;
+}
+
+//.code {
+//	width: 100%;
+//	height: 100%;
+//	padding: 0;
+//	margin: 0; 
+//	overflow-wrap: break-word;
+//	word-break: break-all;
+//}
+
+.actions {
+	border-top: 1px solid rgba(0, 0, 0, 0.1);
+	color: rgba(54, 147, 209, 0.87);
+	padding-left: $query-spacing-unit;
+	margin: 0;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/input.component.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/input.component.ts b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/input.component.ts
new file mode 100755
index 0000000..9be9bd9
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/input.component.ts
@@ -0,0 +1,90 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Component, ViewChild } from '@angular/core';
+import { Observable } from 'rxjs/Observable';
+import { Store } from '@ngrx/store';
+import * as sqlQueryActions from '../../shared/actions/query.actions'
+import * as CodeMirror from 'codemirror';
+
+/*
+ * query component
+ * has editor (codemirror) for writing some query
+ */
+@Component({
+	moduleId: module.id,
+	selector: 'awc-query',
+	templateUrl:'input.component.html',
+	styleUrls: ['input.component.scss']
+})
+
+export class InputQueryComponent {
+	private guideSelectedDataset$: Observable<any>;		
+	private dataverses$: Observable<any>;	
+	private datatypes$: Observable<any>;
+	private datasets$: Observable<any>;	
+	private indexes$: Observable<any>;	
+	dataverses = [];
+	datatypes = [];
+	datasets = [];
+	indexes = [];
+	datasetName = "";
+	dataverseName = "";
+	queryString: string = ""
+	
+	/* Codemirror configuration
+	*/
+	codemirrorConfig = 	{ 	mode: "asterix",
+							lineWrapping: true,
+							showCursorWhenSelecting: true,
+							autofocus: true
+						}	;
+
+	loaded$: Observable<any>
+
+	constructor(private store: Store<any>) {
+		// Watching for guide selected or clicked dataset
+		this.guideSelectedDataset$ = this.store.select(s => s.dataset.guideSelectsDataset);
+		this.guideSelectedDataset$.subscribe((data: any) => {
+			if (data) {
+				this.datasetName = data;
+				for (let i = 0; i < this.datasets.length; i++) {
+					if ( this.datasets[i]['DatasetName'] === this.datasetName ) {
+						this.dataverseName = this.datasets[i]['DataverseName'];
+					}
+				}
+				this.queryString = "USE " + this.dataverseName + "; SELECT * FROM " + this.datasetName;
+			}
+		});
+
+		// Watching for Datatypes
+		this.dataverses$ = this.store.select(s => s.dataverse.dataverses.results);
+		this.dataverses$.subscribe((data: any[]) => {
+			this.dataverses = data;
+		});
+
+		// Watching for Datasets
+		this.datasets$ = this.store.select(s => s.dataset.datasets.results);
+		this.datasets$.subscribe((data: any[]) => {
+			this.datasets = data;
+		});
+	}
+
+	getQueryResults(queryString: string) {
+    	this.store.dispatch(new sqlQueryActions.ExecuteQuery(queryString));
+  	}
+
+	onClick() {
+		this.getQueryResults(this.queryString.replace(/\n/g, " "));
+	}
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/metadata.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/metadata.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/metadata.component.html
new file mode 100755
index 0000000..4641426
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/metadata.component.html
@@ -0,0 +1,44 @@
+<!--/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/ -->
+<mat-card class="metadata-card">
+  <mat-toolbar color="primary" class="metadata-selector">
+    <mat-icon class="example-icon">menu</mat-icon>
+    <span>METADATA GUIDE</span>
+    <span class="spacer"></span>
+  </mat-toolbar>
+    <div class="metadata-content-area">
+    <div class="metadata-tree">
+      <div class="metadata-all">
+          <p-tree [style]="{'width':'100%', 'border': 'none', 'font-family': 'Roboto Mono', 'font-size': '0.80rem',
+          'font-weight': '500'}" selectionMode="single" [value]="nodesAll" (onNodeSelect)="nodeSelectAll($event)"></p-tree>
+      </div>
+      <div class="metadata-datasets">
+          <p-tree [style]="{'width':'100%', 'border': 'none', 'font-family': 'Roboto Mono', 'font-size': '0.80rem',
+          'font-weight': '500'}" selectionMode="single" [value]="nodesDatasets" (onNodeSelect)="nodeSelectDataset($event)"></p-tree>
+      </div>
+      <div class="metadata-datatypes">
+          <p-tree [style]="{'width':'100%', 'border': 'none', 'font-family': 'Roboto Mono', 'font-size': '0.80rem',
+          'font-weight': '500'}" selectionMode="single" [value]="nodesDatatypes"></p-tree>
+      </div>
+      <div class="metadata-index">
+          <p-tree [style]="{'width':'100%', 'border': 'none', 'font-family': 'Roboto Mono', 'font-size': '0.80rem',
+          'font-weight': '500'}" selectionMode="single" [value]="nodesIndexes"></p-tree>
+      </div>
+
+    </div>
+  </div>
+  <!--<mat-card-actions class="actions">
+     <button mat-button class="refresh-button" (click)="menuRefresh()">COLLAPSE</button>
+  </mat-card-actions> -->
+</mat-card>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/metadata.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/metadata.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/metadata.component.scss
new file mode 100755
index 0000000..4ee2339
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/metadata.component.scss
@@ -0,0 +1,97 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+$metadata-spacing-unit: 5px;
+
+.metadata-card {
+	display: flex;
+	flex-flow: column;
+	padding: 0;
+	margin: 0 auto; //($metadata-spacing-unit * 2);
+	margin-top: ($metadata-spacing-unit * 2);
+	margin-bottom: ($metadata-spacing-unit * 2);
+	min-height: 150px;
+	box-shadow: none !important;
+	width: 92%;
+	overflow: hidden;
+}
+
+.example-icon {
+	padding: 0 14px 0 0;
+	margin: 0;
+}
+
+.spacer {
+  flex: 1 1 auto;
+}
+
+.metadata-selector {
+	min-height: 42px;
+	max-height: 42px;
+	justify-content: center;
+	//align-items: center;
+	font-size: 0.80rem;
+	font-weight: 500;
+	background-color: white;
+	border: 1px solid rgba(54, 147, 209, 0.87);
+}
+
+.metadata-content-area {
+	padding: ($metadata-spacing-unit * 2);
+	margin: 0;
+}
+
+.metadata-tree {
+	min-height: 30px;
+	font-size: 0.80rem;
+	font-weight: 500;
+}
+
+.metadata-datasets {
+	margin-top: ($metadata-spacing-unit * 2);
+	margin-bottom: ($metadata-spacing-unit * 2);
+}
+
+.metadata-datatypes {
+	margin-top: ($metadata-spacing-unit * 2);
+	margin-bottom: ($metadata-spacing-unit * 2);
+}
+
+.metadata-dataindexes {
+	margin-top: ($metadata-spacing-unit * 2);
+	margin-bottom: ($metadata-spacing-unit * 2);
+}
+
+
+.metadata-tree.ui-tree {
+	//width: 260px !important;
+	font-size: 0.80rem;
+	font-weight: 500;
+	border: none !important;
+	background-color: red;
+}
+
+.refresh-button {
+	float: left;
+	margin-top: $metadata-spacing-unit;
+}
+
+.actions {
+	border-top: 1px solid rgba(0, 0, 0, 0.1);
+	color: rgba(54, 147, 209, 0.87);
+	padding: $metadata-spacing-unit;
+	margin: 0;
+}
+
+
+

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/metadata.component.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/metadata.component.ts b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/metadata.component.ts
new file mode 100755
index 0000000..e60c9de
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/metadata.component.ts
@@ -0,0 +1,209 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Component, OnInit, ChangeDetectorRef } from '@angular/core';
+import { Router } from '@angular/router';
+import { Dataverse } from '../../shared/models/asterixDB.model';
+import { Store } from '@ngrx/store';
+import { Observable } from 'rxjs/Observable';
+import * as dataverseActions from '../../shared/actions/dataverse.actions';
+import * as datasetActions from '../../shared/actions/dataset.actions';
+import * as datatypesActions from '../../shared/actions/datatype.actions';
+import * as indexesActions from '../../shared/actions/index.actions';
+import * as metadataActions from '../../shared/actions/metadata.actions';
+import * as datasetsActions from '../../shared/actions/dataset.actions';
+import { ElementRef, ViewChild} from '@angular/core';
+import {DataSource} from '@angular/cdk/collections';
+import {BehaviorSubject} from 'rxjs/BehaviorSubject';
+import 'rxjs/add/operator/startWith';
+import 'rxjs/add/observable/merge';
+import 'rxjs/add/operator/map';
+import 'rxjs/add/operator/debounceTime';
+import 'rxjs/add/operator/distinctUntilChanged';
+import 'rxjs/add/observable/fromEvent';
+import { Subscription } from 'rxjs/Rx';
+import * as fromRoot from '../../shared/reducers/dataverse.reducer';
+import { State } from '../../shared/reducers/dataverse.reducer';
+import { TreeModule, TreeNode} from 'primeng/primeng';
+
+
+/**
+ * query component
+ * has editor (codemirror) for writing some query
+ */
+@Component({
+	moduleId: module.id,
+	selector: 'awc-metadata',
+	templateUrl: 'metadata.component.html',
+	styleUrls: ['metadata.component.scss']
+})
+
+export class MetadataComponent implements OnInit {
+	nodesAll = [];
+	nodesDatasets = [];
+	nodesDatatypes = [];
+	nodesIndexes = [];
+
+	constructor(private store: Store<any>, private changeDetector: ChangeDetectorRef) {}
+
+	ngOnInit(): void {
+
+		// Watching for the metadata tree
+		this.store.select(s => s.metadata.tree).subscribe((data: any[]) => {
+			
+			this.nodesAll = [];
+			this.nodesDatasets = [];
+			this.nodesDatatypes = [];
+			this.nodesIndexes = [];
+			const indexesMenu = [];
+			const datatypesMenu = [];
+			const datasetsMenu = [];
+			const dataversesRoot = { label: '', children: []};
+			dataversesRoot.label = 'DATAVERSES';
+			dataversesRoot.children = [];
+
+			for (let i = 0; i < data.length; i++) {
+
+				// Don't want to show metadata system datasets, datatypes or indexes
+			// if (data[i]['DataverseName'] && data[i]['DataverseName'] !== "Metadata" )
+			//	{
+					// Counting dataverses to align the menu identifiers
+			    	const dataverse = { label: '', children: [] }; 
+					dataverse.label = data[i]['DataverseName'];
+					dataversesRoot.children.push(dataverse);
+
+					// Adding the datasets to correspondent dataverse
+					if (data[i]['Datasets'].length) {
+						const datasetRoot = { label: '', children: [] }; 
+						datasetRoot.label = 'DATASETS';
+						dataverse.children.push(datasetRoot);
+						for (let j = 0; j < data[i]['Datasets'].length; j++) {
+							const dataset = { label: '', children: [] }; 
+							dataset.label = data[i]['Datasets'][j]['DatasetName'];
+
+							//
+							// Adding the datatype to correspondent dataset
+							//
+							if (data[i]['Datasets'][j]['Datatype']) {
+								const datatypeRoot = { label: '', children: [] };
+								datatypeRoot.label = 'Datatype: ' + data[i]['Datasets'][j]['Datatype']['DatatypeName'];
+								//
+								// Looking for the datatype fields
+								//
+								if (data[i]['Datasets'][j]['Datatype']['Derived']) {
+									if (data[i]['Datasets'][j]['Datatype']['Derived']['Record']) { 
+										const datatypeFieldsRoot = { label: '', leaf: true, expanded: true, children: [] };
+										datatypeFieldsRoot.label = 'FIELDS';
+										for (let k = 0; k < data[i]['Datasets'][j]['Datatype']['Derived']['Record']['Fields'].length; k++) {
+											const datatypeField = { label: '', children: [] }; 
+											datatypeField.label = data[i]['Datasets'][j]['Datatype']['Derived']['Record']['Fields'][k]['FieldName'] + ": " + data[i]['Datasets'][j]['Datatype']['Derived']['Record']['Fields'][k]['FieldType'];
+											datatypeFieldsRoot.children.push(datatypeField);
+										}
+										datatypeRoot.children.push(datatypeFieldsRoot);
+
+									}
+								}
+								dataset.children.push(datatypeRoot);
+
+								datatypeRoot.label = data[i]['Datasets'][j]['Datatype']['DatatypeName'];
+								datatypesMenu.push(datatypeRoot);
+							}
+
+							//
+							// Adding the indexes to correspondent dataset
+							//
+							if (data[i]['Datasets'][j]['Indexes'].length) {
+								const indexRoot = { label: '', children: [] }; 
+								indexRoot.label = 'INDEXES';
+								
+								for (let k = 0; k < data[i]['Datasets'][j]['Indexes'].length; k++) {
+									const indexChild = { label: '', children: [] }; 
+									indexChild.label = data[i]['Datasets'][j]['Indexes'][k]['IndexName'];
+
+									// is Primary
+									const indexIsPrimaryRoot = { label: '', children: [] };
+									indexIsPrimaryRoot.label = 'isPrimary' + ': ' + data[i]['Datasets'][j]['Indexes'][k]['IsPrimary'];
+									indexChild.children.push(indexIsPrimaryRoot);
+								
+									// SearchKey
+									if (data[i]['Datasets'][j]['Indexes'][k]['SearchKey']) {
+										const indexSearchKeyRoot = { label: '', children: [] };
+										indexSearchKeyRoot.label = 'SEARCH KEY';
+										for (let l = 0; l < data[i]['Datasets'][j]['Indexes'][k]['SearchKey'].length; l++) {
+											const indexsearchKeyField = { label: '', children: [] };
+											indexsearchKeyField.label = data[i]['Datasets'][j]['Indexes'][k]['SearchKey'][l]
+											indexSearchKeyRoot.children.push(indexsearchKeyField);
+										}
+
+										indexChild.children.push(indexSearchKeyRoot);
+										indexesMenu.push(indexChild);
+									}
+
+									indexRoot.children.push(indexChild);
+								}
+
+								dataset.children.push(indexRoot);
+								datasetRoot.children.push(dataset);
+								datasetsMenu.push(dataset);
+							}
+						}
+					}
+			//	}
+			}
+			
+			this.nodesAll.push(dataversesRoot);
+
+			/*
+			* Making the rest of the stand alone submenus
+			*/
+
+			// Adding the DATASET stand alone submenu
+			const datasetMenuRoot = { label: '', children: [] };
+			datasetMenuRoot.label = 'DATASETS';
+			datasetMenuRoot.children = datasetsMenu;
+			this.nodesDatasets.push(datasetMenuRoot);
+
+			// Adding the DATATYPES stand alone submenu
+			const datatypeMenuRoot = { label: '', children: [] };
+			datatypeMenuRoot.label = 'DATATYPES';
+			datatypeMenuRoot.children = datatypesMenu;
+			this.nodesDatatypes.push(datatypeMenuRoot);
+
+			// Adding the DATATYPE stand alone submenu
+			const indexesMenuRoot = { label: '', children: [] };
+			indexesMenuRoot.label = 'INDEXES';
+			indexesMenuRoot.children = indexesMenu;
+			this.nodesIndexes.push(indexesMenuRoot);
+
+			// Component View Refresh
+			this.changeDetector.detectChanges();
+		});
+	}
+
+	/*
+	* UI helpers to select dataverses from the guide menu
+	*/
+	nodeSelectAll(event) {
+		if (event.node.parent && event.node.parent.label === 'DATASETS') {
+			const datasetName = event.node.label.replace(/-;-/g);
+			this.store.dispatch(new datasetsActions.GuideSelectDatasets(datasetName));
+		}
+	}
+	
+	nodeSelectDataset(event) {
+		if (event.node.parent && event.node.parent.label === 'DATASETS') {
+			const datasetName = event.node.label.replace(/-;-/g);
+			this.store.dispatch(new datasetsActions.GuideSelectDatasets(datasetName));
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/ouput.component.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/ouput.component.ts b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/ouput.component.ts
new file mode 100755
index 0000000..fcfc235
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/ouput.component.ts
@@ -0,0 +1,278 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Component, OnInit, ViewChild,  AfterViewInit, ChangeDetectorRef, Pipe, PipeTransform } from '@angular/core';
+import { Observable } from 'rxjs/Observable';
+import { Store } from '@ngrx/store';
+import * as sqlQueryActions from '../../shared/actions/query.actions'
+import { saveAs } from 'file-saver';
+import { DomSanitizer } from '@angular/platform-browser';
+import {TreeModule,TreeNode} from 'primeng/primeng';
+
+/**
+ * query component
+ * has editor (codemirror) for writing some query
+ */
+
+@Pipe({ name: 'safeHtml'})
+export class SafeHtmlPipe implements PipeTransform  {
+  constructor(private sanitized: DomSanitizer) {}
+  transform(value) {
+    return this.sanitized.bypassSecurityTrustHtml(value);
+  }
+}
+
+@Component({
+	moduleId: module.id,
+	selector: 'awc-results',
+	templateUrl:'output.component.html',
+	styleUrls: ['output.component.scss']
+})
+
+
+export class QueryOutputComponent implements OnInit {
+	queryMessage: string;
+	treeData = [];
+	flattenData = [];
+	dataColumns = [];
+	query_message: string;
+	execution_time: number;
+	loaded$: Observable<any>
+	data: any[];
+	loading: Boolean;
+	jsonOutput = "";
+	selectedOutputView = "NONE";
+	outputQueryString = "";
+	toogleExpand = "EXPAND TREE"
+	
+	/* Codemirror configuration */
+	codemirrorConfig = 	{ 	mode: "asterix",
+		lineWrapping: true,
+		showCursorWhenSelecting: true
+	};
+
+	generateTreeMenu(node, rootMenu): any {
+
+		// Check in case the root object is not defined properly
+		if (rootMenu === undefined) {
+			rootMenu = { label: '', children: []};
+		}
+
+		let nodeArray = [];
+		
+		// Going through all the keys in a node looking for objects or array of key values
+		// and create a sub menu if is an object.
+		Object.keys(node).map((k) => {		
+
+			if (typeof node[k] === 'object') {
+				let nodeObject = { label: '', children: []};
+				nodeObject = { label: '', children: []};
+				nodeObject.label = k;
+				// if this is an object then a new node is created and
+				// recursive call to find and fill with the nested elements
+				let newNodeObject = this.generateTreeMenu(node[k], nodeObject);
+
+				// if this is the first node, then will become the root.
+				if (rootMenu.children) {
+					rootMenu.children.push(newNodeObject)
+				} else {
+					rootMenu = newNodeObject
+				}
+			}
+			else {
+				// Array of key values converted into a unique string with a : separator 
+				let nodeKeyValue = { label: '', children: []};
+				nodeKeyValue.label = k + " : " + node[k]
+				nodeArray.push(nodeKeyValue);
+			}
+		})
+
+		// The array will be added as value to a parent key.
+		if (nodeArray.length > 0) {
+			rootMenu.children = nodeArray.concat(rootMenu.children)
+		}
+		
+		return rootMenu 
+	}
+
+	constructor(private store: Store<any>, private changeDetector: ChangeDetectorRef) {
+		this.loaded$ = this.store.select(s => s.sqlQuery.loaded);
+		this.store.select("sqlQuery").subscribe((data: any) => {
+			// Set the output toolbar query string and default view settings
+			if (data.loaded) {
+				this.selectedOutputView = "TABLE";
+				this.loading = true;
+				this.data = data.sqlQueryResult.results;
+				this.treeData = [];
+				let stringQuery = data.sqlQueryString;
+	
+				// Preparing the toolbar 
+				if (stringQuery.length > 150) {
+					this.outputQueryString = ": " + stringQuery.slice(0, 150) + " (..)"
+				} else {
+					this.outputQueryString = ": " + stringQuery;
+				}
+
+				// Processing the results 
+				if (data.sqlQueryResult.results && data.sqlQueryResult.results.length > 0 && this.data[0]) {
+
+					/* Removing the root object, disabled for the time being 
+					var resultKeyList = Object.keys(this.data[0]);
+					var resultKey: string = resultKeyList[0]; 
+					*/
+
+					for (let i = 0; i < this.data.length; i++) {
+
+						/* Removing the root object, disabled for the time being 
+						if (this.data[i][resultKey] instanceof Object) {	
+							this.data[i] = this.data[i][resultKey];
+						}*/	
+
+						let nodeContent = { label:"[" + i + "]" , children: []};
+						this.treeData.push(this.generateTreeMenu(this.data[i], nodeContent))
+					}
+
+					this.loading = false;
+				} 
+	
+				// JSON OUTPUT
+				// Making into a JSON String for JSON String Output
+				this.jsonOutput = JSON.stringify(data.sqlQueryResult.results, null, 2)
+				
+				// TABLE OUTPUT
+				if (this.data && this.data.length > 0) {
+
+					this.collapseAll();
+					// Normalize the data ( removing the first key if is an object )
+					// TODO: Move it into a recursive function.
+					this.dataColumns = [];
+
+					var resultKeyList = Object.keys(this.data[0]);
+					var resultKey: string = resultKeyList[0]; 
+					if (this.data[0][resultKey] instanceof Object) {	
+						// is a SQL++ Query Results 
+						var nestedKeyList = Object.keys(this.data[0][resultKey]);
+						for (let i = 0; i < nestedKeyList.length; i++) {
+							if (typeof this.data[0][resultKey][nestedKeyList[i]] === 'object') {
+								// Creating a key to display a nested type
+								this.dataColumns.push({field: 'nestedString' + i, header: nestedKeyList[i]})
+								 				
+							} else {
+								this.dataColumns.push({field: nestedKeyList[i], header: nestedKeyList[i] })
+							}
+							
+						}
+					}
+					else { // is a SQL++ Metadata Results and there is an Array
+						for (let i = 0; i < resultKeyList.length; i++) {
+							this.dataColumns.push({field: resultKeyList[i], header: resultKeyList[i] })
+						}
+					}
+
+					// Now prepare the data ( SQL++ Query, Metatada Queries no need to change anything ).
+					// TODO: Move it into a recursive function.
+					if (this.data[0][resultKey] instanceof Object) {	
+						// is a SQL++ Query Results 
+						for (let i = 0; i < this.data.length; i++) {
+
+							// // is a SQL++ Query Results 
+							var nestedKeyList = Object.keys(this.data[i][resultKey]);
+							for (let k = 0; k < nestedKeyList.length; k++) {
+								if ( typeof this.data[i][resultKey][nestedKeyList[k]] === 'object' ){
+										// Creating a display value to for a nested type JSON.stringify(jsObj, 
+										var nestedObjectStr = JSON.stringify(this.data[i][resultKey][nestedKeyList[k]], null, '\n');
+										var nestedKey = 'nestedString' + k;
+										this.data[i][resultKey][nestedKey] = nestedObjectStr; 				
+								} 
+							}
+
+							this.data[i] = this.data[i][resultKey];
+						}	
+					}
+				}
+			}
+      	});
+	}
+
+	/* 
+	* Subscribing to store values
+	*/
+	ngOnInit(): void {
+		this.loaded$ = this.store.select('sqlQuery');
+		this.store.select("sqlQuery").subscribe((data: any) => {
+			if (data.sqlQueryError.errors){
+				this.queryMessage = data.sqlQueryError.errors[0].msg
+			}else{
+				this.queryMessage = ""
+			}
+		})
+	}
+
+	/* 
+	* Changes view mode [ TABLE, TREE, JSON VIEW ]
+	*/
+	onSelect(value: any) {
+		this.selectedOutputView = value;		
+	}
+
+	/* 
+	* Export to CSV 
+	*/
+    exportToCSV(){
+		var blob = new Blob([this.jsonOutput], {type: "text/csv;charset=utf-8"});
+		saveAs(blob, "Asterix-results.csv");
+	}
+	
+	/*
+	*  Export to plain text
+	*/
+    exportToText(){
+		var exportOutput = this.jsonOutput;
+		var blob = new Blob([exportOutput], {type: "text/plain;charset=utf-8"});
+		saveAs(blob, "Asterix-results.txt");
+	}
+	
+	/*
+	*  Expand/Collapse Tree
+	*/
+    expandTree(){
+		if (this.toogleExpand === "EXPAND TREE"){
+			this.expandAll();
+		} else {
+			this.collapseAll();
+		}
+	}
+	
+	expandAll(){
+		this.toogleExpand = "TREE COLLAPSE";
+        this.treeData.forEach( node => {
+            this.expandRecursive(node, true);
+        } );
+    }
+
+    collapseAll(){
+		this.toogleExpand = "EXPAND TREE";
+        this.treeData.forEach( node => {
+            this.expandRecursive(node, false);
+        } );
+    }
+    
+    private expandRecursive(node:TreeNode, isExpand:boolean){
+        node.expanded = isExpand;
+        if(node.children){
+            node.children.forEach( childNode => {
+                this.expandRecursive(childNode, isExpand);
+            } );
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/output.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/output.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/output.component.html
new file mode 100755
index 0000000..f7c4b43
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/output.component.html
@@ -0,0 +1,68 @@
+<!--/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/ -->
+<mat-card class="sql-results-card">
+	<mat-toolbar color="primary" class="results-selector">
+		<mat-icon class="toolbar-icon">menu</mat-icon>
+	    <span class="output-query-string">OUTPUT{{outputQueryString}}</span>
+		<span class="spacer"></span>
+	</mat-toolbar>
+  	<mat-card-content class="content-area">
+		<div *ngIf="loaded$ | async as ld">
+			<div *ngIf="selectedOutputView=='TABLE'">				
+				<p-dataTable [style]="{'width':'100%', 'overflow':'hidden'}" id='review-table' [responsive]="true" [hidden]="loading" [value]="data" [rows]="20" [paginator]="true" [pageLinks]="3" [rowsPerPageOptions]="[5,10,20, 30, 40, 50]" >
+					<p-column [style]="{'text-align':'left',
+					'text-overflow': 'ellipsis', 'word-wrap': 'break-word', 'word-break': 'break-all'}"
+					
+					[footerStyle]="{'color':'blue'}" [headerStyleClass]="datatable-header" *ngFor="let node of dataColumns;" [field]="node.field" 
+					[header]="node.header" [sortable]="true">
+					</p-column>
+				</p-dataTable>
+			</div>
+		</div>
+		<div *ngIf="loaded$ | async as ld">	
+			<div *ngIf="ld.sqlQueryError.metrics" class="queryErrorMessage">
+				<span>ERROR:</span>
+				<span>{{queryMessage}}</span>
+			</div>	
+			 <div [hidden]="selectedOutputView!='TREE'" class="data-viewer-container">
+				<button mat-button class="button-expand" (click)="expandTree()">{{toogleExpand}}</button>
+				<p-tree [style]="{'width':'100%', 'border': 'none', 'font-family': 'Roboto Mono', 'font-size': '0.80rem',
+					'font-weight': '500'}" [value]="treeData"></p-tree>
+			</div>
+			<div *ngIf="loaded$ | async as ld">	
+				<div *ngIf="selectedOutputView=='JSON'" class="data-viewer-container">
+					<button mat-button class="button-export" (click)="exportToText()">EXPORT</button>
+					<pre class="json-output">{{jsonOutput}}</pre>
+				</div>
+			</div>
+		</div>
+	</mat-card-content>
+	<mat-card-actions class="actions">
+		<div *ngIf="loaded$ | async as ld">
+			<span *ngIf="ld.sqlQueryResult.metrics" class="metrics">
+				<span class="span-results">SUCCESS:</span>
+				<span class="span-results">Count: {{ld.sqlQueryResult.metrics.resultCount}}</span>
+				<span class="span-results">Size: {{ld.sqlQueryResult.metrics.resultSize}}</span>
+				<span class="span-results">Elapsed time: {{ld.sqlQueryResult.metrics.elapsedTime}}</span>
+				<span class="span-results">Execution time: {{ld.sqlQueryResult.metrics.executionTime}}</span>
+				<span class="spacer"></span>
+				<mat-button-toggle-group #group="matButtonToggleGroup" class="output-group" value={{selectedOutput}} (change)="onSelect(group.value)">
+					<mat-button-toggle mat-button  value="TABLE">TABLE</mat-button-toggle>
+					<mat-button-toggle mat-button  value="TREE">TREE</mat-button-toggle>
+					<mat-button-toggle mat-button  value="JSON">JSON</mat-button-toggle>
+				</mat-button-toggle-group>
+			</span>
+		</div>
+	</mat-card-actions>
+</mat-card>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/output.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/output.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/output.component.scss
new file mode 100755
index 0000000..099ca87
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/output.component.scss
@@ -0,0 +1,169 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+$results-spacing-unit: 5px;
+
+.sql-results-card {
+  display: flex;
+	flex-flow: column;
+  padding: 0;
+  height: 600px;
+  width: 100%; // 1350px;
+	margin: ($results-spacing-unit * 2);
+	min-height: 150px; 
+}
+
+.toolbar-icon {
+  padding: 0 14px 0 0;
+  margin: 0;
+}
+
+.spacer {
+  flex: 1 1 auto;
+}
+
+.results-selector {
+	max-height: 42px;
+  min-height: 42px;
+  justify-content: center;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+  font-size: 0.80rem;
+  font-weight: 500;
+  background-color: white;
+  border: 1px solid rgba(54, 147, 209, 0.87);
+  overflow-wrap: break-word;
+	word-break: break-all;
+}
+
+.content-area {
+  position: relative;
+  color: hsla(0,0%,0%,.87);
+  height: 500px;
+  padding: 0;
+  margin: 0;
+  overflow: auto;
+  font-size: 0.80rem;
+  font-weight: 500;
+  font-family: "Roboto", monospace;
+}
+
+.root-closed {
+  list-style-type:none;
+}
+
+.root-open {
+  list-style-type:none;
+}
+
+.leaf-list-open {
+  list-style-type:none;
+  // padding-top: ($results-spacing-unit) * 2;
+  padding-left: 25px;
+  color: red;
+}
+
+.leaf-list-open.div
+//.leaf-list-open.ul
+.leaf-list-open.li {
+  margin-left: ($results-spacing-unit * 10) !important;
+  color: green;
+}
+
+.leaf {
+  color: blue;
+}
+
+.leaf-list-closed {
+  list-style-type:none;
+  display: none;
+}
+
+ul > .root-closed::before {
+  content:'+'
+}
+
+ul > .root-open::before {
+  content:'-'
+}
+
+.queryErrorMessage {
+  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
+  color: rgba(209, 54, 54, 0.87);
+  padding: $results-spacing-unit;
+  padding-left: ($results-spacing-unit * 2);
+}
+
+.metrics {
+  display: flex;
+  color: rgba(54, 147, 209, 0.87);
+  font-size: 0.80rem;
+  font-weight: 500;
+}
+
+.span-results {
+  padding-top: ($results-spacing-unit * 2);
+  padding-left: ($results-spacing-unit * 2);
+}
+
+.actions {
+  border-top: 1px solid rgba(0, 0, 0, 0.1);
+  color: rgba(54, 147, 209, 0.87);
+  margin: 0;
+}
+
+//someID\:review-table
+th {
+  text-align: left !important;
+}
+
+.datatable-header {
+  color: red !important;
+  background-color: blue;
+}
+
+.data-viewer-container {
+  padding: ($results-spacing-unit * 4);
+  padding-bottom: ($results-spacing-unit * 8);
+  height: 100%;
+  overflow: hidden;
+}
+
+.output-group {
+  margin-right: ($results-spacing-unit * 4);
+}
+
+.menu-export {
+  font-size: 0.80rem !important;
+  font-weight: 500 !important;
+}
+
+.button-export {
+  margin-right: ($results-spacing-unit * 4);
+  color: rgba(54, 147, 209, 0.87);
+}
+
+.button-expand {
+  margin-right: ($results-spacing-unit * 4);
+  color: rgba(54, 147, 209, 0.87);
+}
+
+.ui-datatable-data> tr> td {
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  max-width: 150px;
+  color: red;
+}
+

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/query-container.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/query-container.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/query-container.component.html
new file mode 100755
index 0000000..6dd3ef3
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/query-container.component.html
@@ -0,0 +1,24 @@
+<!--/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/ -->
+
+<div class="query-container">
+  <div class="metadata">   
+    <awc-metadata class="metadata-card"></awc-metadata>
+  </div>
+  <div class="vertical">
+    <awc-query class="query-card"></awc-query>
+    <awc-results class="output-card"></awc-results>
+  </div>
+</div> 
+

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/query-container.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/query-container.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/query-container.component.scss
new file mode 100755
index 0000000..d6b530b
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/query-container.component.scss
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+ .query-container {
+    display: flex;
+    flex-direction: row;
+    //background-color: red;
+    width: 100%; 
+    margin:0;
+    padding:0;
+    overflow: hidden;
+ }
+
+.metadata {
+    display: flex;
+    flex-direction: row;
+    width: 20%;
+   // background-color: rgb(0, 255, 42);
+    margin:0;
+    padding: 0;
+   // padding-right: 10px;
+    border-right: 1px solid hsla(0,0%,0%,.20);
+}
+
+.vertical {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    width: 80%;
+    overflow: hidden;
+    margin:0;
+    padding: 1px0;
+   // background-color: rgb(38, 0, 255);
+}
+
+.metadata-card {
+    display: flex;
+    flex-direction: row;
+    justify-content: center;     
+    width: 100%;
+    overflow: hidden;
+    margin:0;
+    padding: 0;
+   // background-color: green;
+}
+
+.query-card {
+    display: flex;
+    flex-direction: row;
+    justify-content: center;     
+    width: 100%;
+    overflow: hidden;
+    margin:0;
+    padding: 0;
+    //background-color: green;
+}
+
+.output-card {
+    display: flex;
+    flex-direction: row;
+    justify-content: center;     
+    width: 100%;
+    overflow: hidden;
+    margin:0;
+    padding: 0;
+    //background-color: yellow;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/query-container.component.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/query-container.component.ts b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/query-container.component.ts
new file mode 100755
index 0000000..776e184
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/query-container.component.ts
@@ -0,0 +1,74 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Component, OnInit } from '@angular/core';
+import { Router } from '@angular/router';
+import { Dataverse } from '../../shared/models/asterixDB.model'
+import { Store } from '@ngrx/store';
+import { Observable } from 'rxjs/Observable';
+import * as dataverseActions from '../../shared/actions/dataverse.actions'
+import * as datasetActions from '../../shared/actions/dataset.actions'
+import * as datatypesActions from '../../shared/actions/datatype.actions'
+import * as indexesActions from '../../shared/actions/index.actions'
+import * as metadataActions from '../../shared/actions/metadata.actions'
+import { ElementRef, ViewChild} from '@angular/core';
+import {DataSource} from '@angular/cdk/collections';
+import {BehaviorSubject} from 'rxjs/BehaviorSubject';
+import 'rxjs/add/operator/startWith';
+import 'rxjs/add/observable/merge';
+import 'rxjs/add/operator/map';
+import 'rxjs/add/operator/debounceTime';
+import 'rxjs/add/operator/distinctUntilChanged';
+import 'rxjs/add/observable/fromEvent';
+import { Subscription } from "rxjs/Rx";
+import * as fromRoot from '../../shared/reducers/dataverse.reducer';
+import { State } from '../../shared/reducers/dataverse.reducer';
+import * as sqlQueryActions from '../../shared/actions/query.actions'
+/*
+ * query component
+ * has editor (codemirror) for writing some query
+ */
+@Component({
+	moduleId: module.id,
+	selector: 'awc-query-container',
+	templateUrl:'query-container.component.html',
+	styleUrls: ['query-container.component.scss']
+})
+
+export class QueryContainerComponent {
+	nodes = []
+	constructor(private store: Store<any>) {
+
+		this.store.select(s => s.metadata.tree).subscribe((data: any[]) => {
+			this.nodes = []
+			for (let i = 0; i < data.length; i++) {
+				if (data[i]['DataverseName']) {
+				    let node = { id: 0, name:"", children:[] };
+				    node.id = i;
+				    node.name = data[i]['DataverseName'];
+						for (let j = 0; j < data[i]['Datasets'].length; j++) {
+							let children = { id: 0, name:"", children:[] };
+							children.id = j
+							children.name = data[i]['Datasets'][j]['DatasetName'];
+							node.children.push(children)
+						}
+						this.nodes.push(node)
+				}
+			}
+		});
+	}
+
+	treeCalc() {
+		this.store.dispatch(new metadataActions.UpdateMetadataTree());
+	}
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/db.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/db.ts b/asterixdb/asterix-dashboard/src/node/src/app/db.ts
new file mode 100755
index 0000000..8f51b00
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/db.ts
@@ -0,0 +1,23 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { DBSchema } from '@ngrx/db';
+
+/*
+* Persistent storage capability to the dashboard in case is needed.
+*/
+export const schema: DBSchema = {
+  version: 1,
+  name: 'asterixDB_app',
+  stores: {},
+};


[17/43] asterixdb git commit: [NO ISSUE] SQL++ doc updates

Posted by im...@apache.org.
[NO ISSUE] SQL++ doc updates

Change-Id: I3cdb400893609c578b6467586bcc2d15f2106996
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2631
Sonar-Qube: Jenkins <je...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Contrib: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Till Westmann <ti...@apache.org>
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>


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

Branch: refs/heads/release-0.9.4-pre-rc
Commit: c0769682f2565e7c1d4b45b547f603c0fafe4fa8
Parents: e29ecfb
Author: Till Westmann <ti...@apache.org>
Authored: Fri May 4 22:24:46 2018 -0700
Committer: Till Westmann <ti...@apache.org>
Committed: Sat May 5 00:11:42 2018 -0700

----------------------------------------------------------------------
 .../src/main/markdown/sqlpp/2_expr.md           |  4 ++--
 .../src/main/markdown/sqlpp/3_query.md          | 21 ++++++++++----------
 .../src/main/markdown/sqlpp/4_error.md          |  9 ++++-----
 3 files changed, 17 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/c0769682/asterixdb/asterix-doc/src/main/markdown/sqlpp/2_expr.md
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-doc/src/main/markdown/sqlpp/2_expr.md b/asterixdb/asterix-doc/src/main/markdown/sqlpp/2_expr.md
index 93e2f5d..5f407ca 100644
--- a/asterixdb/asterix-doc/src/main/markdown/sqlpp/2_expr.md
+++ b/asterixdb/asterix-doc/src/main/markdown/sqlpp/2_expr.md
@@ -312,7 +312,7 @@ Different from standard SQL, double quotes play the same role as single quotes a
 ### <a id="Variable_references">Variable References</a>
 
     VariableReference     ::= <IDENTIFIER>|<DelimitedIdentifier>
-    <IDENTIFIER>          ::= <LETTER> (<LETTER> | <DIGIT> | "_" | "$")*
+    <IDENTIFIER>          ::= (<LETTER> | "_") (<LETTER> | <DIGIT> | "_" | "$")*
     <LETTER>              ::= ["A" - "Z", "a" - "z"]
     DelimitedIdentifier   ::= "`" (<EscapeQuot>
                                     | <EscapeBslash>
@@ -328,7 +328,7 @@ Different from standard SQL, double quotes play the same role as single quotes a
 A variable in SQL++ can be bound to any legal data model value. A variable reference refers to the value to which an in-scope variable is
 bound. (E.g., a variable binding may originate from one of the `FROM`, `WITH` or `LET` clauses of a `SELECT` statement or from an
 input parameter in the context of a function body.) Backticks, for example, \`id\`, are used for delimited identifiers. Delimiting is needed when
-a variable's desired name clashes with a SQL++ keyword or includes characters not allowed in regular identifiers.
+a variable's desired name clashes with a SQL++ keyword or includes characters not allowed in regular identifiers. More information on exactly how variable references are resolved can be found in the appendix section on Variable Resolution.
 
 ##### Examples
 

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/c0769682/asterixdb/asterix-doc/src/main/markdown/sqlpp/3_query.md
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-doc/src/main/markdown/sqlpp/3_query.md b/asterixdb/asterix-doc/src/main/markdown/sqlpp/3_query.md
index 56103e5..996bb9e 100644
--- a/asterixdb/asterix-doc/src/main/markdown/sqlpp/3_query.md
+++ b/asterixdb/asterix-doc/src/main/markdown/sqlpp/3_query.md
@@ -46,7 +46,7 @@ The following shows the (rich) grammar for the `SELECT` statement in SQL++.
                            ( ( JoinType )? ( JoinClause | UnnestClause ) )*
 
     JoinClause         ::= <JOIN> Expression (( <AS> )? Variable)? <ON> Expression
-    UnnestClause       ::= ( <UNNEST> | <CORRELATE> | <FLATTEN> ) Expression
+    UnnestClause       ::= ( <UNNEST> ) Expression
                            ( <AS> )? Variable ( <AT> Variable )?
     JoinType           ::= ( <INNER> | <LEFT> ( <OUTER> )? )
 
@@ -60,8 +60,8 @@ The following shows the (rich) grammar for the `SELECT` statement in SQL++.
     GroupbyClause      ::= <GROUP> <BY> Expression ( ( (<AS>)? Variable )?
                            ( "," Expression ( (<AS>)? Variable )? )* )
                            ( <GROUP> <AS> Variable
-                             ("(" Variable <AS> VariableReference
-                             ("," Variable <AS> VariableReference )* ")")?
+                             ("(" VariableReference <AS> Identifier
+                             ("," VariableReference <AS> Identifier )* ")")?
                            )?
     HavingClause       ::= <HAVING> Expression
 
@@ -446,7 +446,7 @@ This query outputs:
 In the result, `$1` is the generated name for `substr(user.name, 1)`, while `alias` is the generated name for `user.alias`.
 
 ### <a id="Abbreviated_field_access_expressions">Abbreviated Field Access Expressions</a>
-As in standard SQL, SQL++ field access expressions can be abbreviated (not recommended) when there is no ambiguity. In the next example, the variable `user` is the only possible variable reference for fields `id`, `name` and `alias` and thus could be omitted in the query.
+As in standard SQL, SQL++ field access expressions can be abbreviated (not recommended!) when there is no ambiguity. In the next example, the variable `user` is the only possible variable reference for fields `id`, `name` and `alias` and thus could be omitted in the query. More information on abbbreviated field access can be found in the appendix section on Variable Resolution.
 
 ##### Example
 
@@ -659,6 +659,8 @@ Returns:
     Error: "Syntax error: Need an alias for the enclosed expression:\n(select element GleambookMessages\n    from GleambookMessages as GleambookMessages\n    where (GleambookMessages.authorId = GleambookUsers.id)\n )",
         "query_from_user": "use TinySocial;\n\nSELECT GleambookUsers.name, GleambookMessages.message\n    FROM GleambookUsers,\n      (\n        SELECT VALUE GleambookMessages\n        FROM GleambookMessages\n        WHERE GleambookMessages.authorId = GleambookUsers.id\n      );"
 
+More information on implicit binding variables can be found in the appendix section on Variable Resolution.
+
 ## <a id="Join_clauses">JOIN Clauses</a>
 The join clause in SQL++ supports both inner joins and left outer joins from standard SQL.
 
@@ -724,7 +726,7 @@ The SQL++ `GROUP BY` clause generalizes standard SQL's grouping and aggregation
 In a `GROUP BY` clause, in addition to the binding variable(s) defined for the grouping key(s), SQL++ allows a user to define a *group variable* by using the clause's `GROUP AS` extension to denote the resulting group.
 After grouping, then, the query's in-scope variables include the grouping key's binding variables as well as this group variable which will be bound to one collection value for each group. This per-group collection (i.e., multiset) value will be a set of nested objects in which each field of the object is the result of a renamed variable defined in parentheses following the group variable's name. The `GROUP AS` syntax is as follows:
 
-    <GROUP> <AS> Variable ("(" Variable <AS> VariableReference ("," Variable <AS> VariableReference )* ")")?
+    <GROUP> <AS> Variable ("(" VariableReference <AS> Identifier ("," VariableReference <AS> Identifier )* ")")?
 
 ##### Example
 
@@ -1228,6 +1230,7 @@ Note that if the condition expression evaluates to `NULL` or `MISSING` the input
 The `ORDER BY` clause is used to globally sort data in either ascending order (i.e., `ASC`) or descending order (i.e., `DESC`).
 During ordering, `MISSING` and `NULL` are treated as being smaller than any other value if they are encountered
 in the ordering key(s). `MISSING` is treated as smaller than `NULL` if both occur in the data being sorted.
+The ordering of values of a given type is consistent with its type's <= ordering; the ordering of values across types is implementation-defined but stable.
 The following example returns all `GleambookUsers` in descending order by their number of friends.
 
 ##### Example
@@ -1613,27 +1616,25 @@ The following matrix is a quick "SQL-92 compatibility cheat sheet" for SQL++.
 | Feature |  SQL++ | SQL-92 |  Why different?  |
 |----------|--------|-------|------------------|
 | SELECT * | Returns nested objects | Returns flattened concatenated objects | Nested collections are 1st class citizens |
-| SELECT list | order not preserved | order preserved | Fields in a JSON object is not ordered |
+| SELECT list | order not preserved | order preserved | Fields in a JSON object are not ordered |
 | Subquery | Returns a collection  | The returned collection is cast into a scalar value if the subquery appears in a SELECT list or on one side of a comparison or as input to a function | Nested collections are 1st class citizens |
-| LEFT OUTER JOIN |  Fills in `MISSING`(s) for non-matches  |   Fills in `NULL`(s) for non-matches    | "Absence" is more appropriate than "unknown" here.  |
+| LEFT OUTER JOIN |  Fills in `MISSING`(s) for non-matches  |   Fills in `NULL`(s) for non-matches    | "Absence" is more appropriate than "unknown" here  |
 | UNION ALL       | Allows heterogeneous inputs and output | Input streams must be UNION-compatible and output field names are drawn from the first input stream | Heterogenity and nested collections are common |
 | IN constant_expr | The constant expression has to be an array or multiset, i.e., [..,..,...] | The constant collection can be represented as comma-separated items in a paren pair | Nested collections are 1st class citizens |
 | String literal | Double quotes or single quotes | Single quotes only | Double quoted strings are pervasive |
 | Delimited identifiers | Backticks | Double quotes | Double quoted strings are pervasive |
 
-The following SQL-92 features are not implemented yet. However, SQL++ does not conflict those features:
+The following SQL-92 features are not implemented yet. However, SQL++ does not conflict with these features:
 
   * CROSS JOIN, NATURAL JOIN, UNION JOIN
   * RIGHT and FULL OUTER JOIN
   * INTERSECT, EXCEPT, UNION with set semantics
   * CAST expression
-  * NULLIF expression
   * COALESCE expression
   * ALL and SOME predicates for linking to subqueries
   * UNIQUE predicate (tests a collection for duplicates)
   * MATCH predicate (tests for referential integrity)
   * Row and Table constructors
-  * DISTINCT aggregates
   * Preserved order for expressions in a SELECT list
 
 

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/c0769682/asterixdb/asterix-doc/src/main/markdown/sqlpp/4_error.md
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-doc/src/main/markdown/sqlpp/4_error.md b/asterixdb/asterix-doc/src/main/markdown/sqlpp/4_error.md
index e043fc2..e5cea1d 100644
--- a/asterixdb/asterix-doc/src/main/markdown/sqlpp/4_error.md
+++ b/asterixdb/asterix-doc/src/main/markdown/sqlpp/4_error.md
@@ -56,7 +56,7 @@ we will get a syntax error as follows:
 
 
 ## <a id="Identifier_resolution_errors">Identifier Resolution Errors</a>
-Referring an undefined identifier can cause an error if the identifier
+Referring to an undefined identifier can cause an error if the identifier
 cannot be successfully resolved as a valid field access.
 
 ##### Example
@@ -64,7 +64,7 @@ cannot be successfully resolved as a valid field access.
     SELECT *
     FROM GleambookUser user;
 
-Assume we have a typo in "GleambookUser" which misses the ending "s",
+If we have a typo as above in "GleambookUsers" that misses the dataset name's ending "s",
 we will get an identifier resolution error as follows:
 
     Error: Cannot find dataset GleambookUser in dataverse Default nor an alias with name GleambookUser!
@@ -74,8 +74,7 @@ we will get an identifier resolution error as follows:
     SELECT name, message
     FROM GleambookUsers u JOIN GleambookMessages m ON m.authorId = u.id;
 
-If the compiler cannot figure out all possible fields in
-`GleambookUsers` and `GleambookMessages`,
+If the compiler cannot figure out how to resolve an unqualified field name, which will occur if there is more than one variable in scope (e.g., `GleambookUsers u` and `GleambookMessages m` as above),
 we will get an identifier resolution error as follows:
 
     Error: Cannot resolve ambiguous alias reference for undefined identifier name
@@ -94,7 +93,7 @@ it processes does not satisfy the type requirement.
 Since function `abs` can only process numeric input values,
 we will get a type error as follows:
 
-    Error: Arithmetic operations are not implemented for string
+    Error: Type mismatch: function abs expects its 1st input parameter to be type tinyint, smallint, integer, bigint, float or double, but the actual input type is string
 
 
 ## <a id="Resource_errors">Resource Errors</a>


[42/43] asterixdb git commit: [NO ISSUE][STO] Only delete allocated components

Posted by im...@apache.org.
[NO ISSUE][STO] Only delete allocated components

Change-Id: I372127a0dec21148efa1a94cf6c976818963d761
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2671
Sonar-Qube: Jenkins <je...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: abdullah alamoudi <ba...@gmail.com>
Reviewed-by: Murtadha Hubail <mh...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/10cd136f
Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/10cd136f
Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/10cd136f

Branch: refs/heads/release-0.9.4-pre-rc
Commit: 10cd136fe6ae102bb5cdce41f57b9f4503a329e8
Parents: 683c06d
Author: Abdullah Alamoudi <ba...@gmail.com>
Authored: Wed May 30 03:00:22 2018 +0300
Committer: abdullah alamoudi <ba...@gmail.com>
Committed: Wed May 30 18:32:56 2018 -0700

----------------------------------------------------------------------
 .../storage/am/lsm/common/impls/LSMHarness.java | 28 +++++++++++++-------
 1 file changed, 18 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/10cd136f/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java
index 59f48d4..644508e 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java
@@ -829,19 +829,24 @@ public class LSMHarness implements ILSMHarness {
             throws HyracksDataException {
         BlockingIOOperationCallbackWrapper ioCallback =
                 new BlockingIOOperationCallbackWrapper(lsmIndex.getIOOperationCallback());
-        boolean deleteMemoryComponent;
+        boolean deleteMemoryComponent = false;
         synchronized (opTracker) {
             waitForFlushesAndMerges();
             ensureNoFailedFlush();
-            // We always start with the memory component
-            ILSMMemoryComponent memComponent = lsmIndex.getCurrentMemoryComponent();
-            deleteMemoryComponent = predicate.test(memComponent);
-            if (deleteMemoryComponent) {
-                // schedule a delete for flushed component
-                ctx.reset();
-                ctx.setOperation(IndexOperation.DELETE_MEMORY_COMPONENT);
-                // ScheduleFlush is actually a try operation
-                scheduleFlush(ctx, ioCallback);
+            if (lsmIndex.isMemoryComponentsAllocated()) {
+                // We always start with the memory component
+                ILSMMemoryComponent memComponent = lsmIndex.getCurrentMemoryComponent();
+                deleteMemoryComponent = predicate.test(memComponent);
+                if (deleteMemoryComponent) {
+                    // schedule a delete for flushed component
+                    ctx.reset();
+                    ctx.setOperation(IndexOperation.DELETE_MEMORY_COMPONENT);
+                    // ScheduleFlush is actually a try operation
+                    scheduleFlush(ctx, ioCallback);
+                } else {
+                    // shouldn't try to delete disk components while memory component is still there
+                    return;
+                }
             }
         }
         // Here, we are releasing the opTracker to allow other operations:
@@ -862,6 +867,9 @@ public class LSMHarness implements ILSMHarness {
             for (ILSMDiskComponent component : diskComponents) {
                 if (predicate.test(component)) {
                     ctx.getComponentsToBeMerged().add(component);
+                } else {
+                    // can't delete components while newer ones are still there
+                    break;
                 }
             }
             if (ctx.getComponentsToBeMerged().isEmpty()) {


[12/43] asterixdb git commit: [NO ISSUE][NET] Networking Fixes

Posted by im...@apache.org.
[NO ISSUE][NET] Networking Fixes

- user model changes: no
- storage format changes: no
- interface changes: no

Details:
- Ensure received partitions requests after job failure
  are aborted to prevent leaked network channels.
- Do not send channel close after channel write error
  since the contract is to close the channel when remote
  errors are received.
- Only remove closed outgoing connections to establish
  new connections since incoming connections need to be
  reestablished by the remote destination.
- Do not perform further operations on failed multiplexed
  connections to avoid CanceledKeyException.
- Add test case for received partition requests after
  job failure.

Change-Id: Idc45f47fdf0419bf75d461e16f028237a5143de7
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2613
Reviewed-by: Michael Blow <mb...@apache.org>
Sonar-Qube: Jenkins <je...@fulliautomatix.ics.uci.edu>
Tested-by: Michael Blow <mb...@apache.org>
Contrib: Jenkins <je...@fulliautomatix.ics.uci.edu>


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

Branch: refs/heads/release-0.9.4-pre-rc
Commit: ba5322099c4559d41ec5530099d0d994aaadb339
Parents: 62b1791
Author: Murtadha Hubail <mh...@apache.org>
Authored: Mon Apr 23 22:28:18 2018 +0300
Committer: Murtadha Hubail <mh...@apache.org>
Committed: Mon Apr 23 12:56:06 2018 -0700

----------------------------------------------------------------------
 .../asterix/runtime/PartitionManagerTest.java   |  87 +++++++++++++++
 .../comm/channels/NetworkOutputChannel.java     |  10 +-
 .../hyracks-control/hyracks-control-nc/pom.xml  |   4 +
 .../control/nc/NodeControllerService.java       |   1 +
 .../hyracks/control/nc/net/NetworkManager.java  |   8 +-
 .../control/nc/partitions/PartitionManager.java | 107 +++++++++++++------
 .../control/nc/work/CleanupJobletWork.java      |  22 +---
 .../muxdemux/AbstractChannelWriteInterface.java |   5 +-
 .../muxdemux/MultiplexedConnection.java         |  52 +++++----
 .../net/protocols/muxdemux/MuxDemux.java        |   4 +-
 .../net/protocols/tcp/TCPConnection.java        |  15 ++-
 .../hyracks/net/protocols/tcp/TCPEndpoint.java  |   8 +-
 12 files changed, 231 insertions(+), 92 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ba532209/asterixdb/asterix-app/src/test/java/org/apache/asterix/runtime/PartitionManagerTest.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/runtime/PartitionManagerTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/runtime/PartitionManagerTest.java
new file mode 100644
index 0000000..25ab530
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/runtime/PartitionManagerTest.java
@@ -0,0 +1,87 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.runtime;
+
+import java.net.InetSocketAddress;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.apache.asterix.api.common.AsterixHyracksIntegrationUtil;
+import org.apache.asterix.common.config.GlobalConfig;
+import org.apache.hyracks.api.comm.FixedSizeFrame;
+import org.apache.hyracks.api.comm.NetworkAddress;
+import org.apache.hyracks.api.context.IHyracksCommonContext;
+import org.apache.hyracks.api.dataflow.ConnectorDescriptorId;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.job.JobId;
+import org.apache.hyracks.api.job.JobStatus;
+import org.apache.hyracks.api.partitions.PartitionId;
+import org.apache.hyracks.comm.channels.NetworkInputChannel;
+import org.apache.hyracks.control.nc.NodeControllerService;
+import org.apache.hyracks.dataflow.std.collectors.InputChannelFrameReader;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+public class PartitionManagerTest {
+
+    protected static final String TEST_CONFIG_FILE_NAME = "src/main/resources/cc.conf";
+    private static final AsterixHyracksIntegrationUtil integrationUtil = new AsterixHyracksIntegrationUtil();
+
+    @Before
+    public void setUp() throws Exception {
+        System.setProperty(GlobalConfig.CONFIG_FILE_PROPERTY, TEST_CONFIG_FILE_NAME);
+        integrationUtil.init(true, TEST_CONFIG_FILE_NAME);
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        integrationUtil.deinit(true);
+    }
+
+    @Test
+    public void failedJobPartitionRequestTest() throws Exception {
+        final NodeControllerService nc1 = integrationUtil.ncs[0];
+        final NodeControllerService nc2 = integrationUtil.ncs[1];
+        final JobId failedJob = new JobId(-1);
+        nc2.getPartitionManager().jobCompleted(failedJob, JobStatus.FAILURE);
+        final NetworkAddress localNetworkAddress = nc2.getNetworkManager().getPublicNetworkAddress();
+        final InetSocketAddress nc2Address =
+                new InetSocketAddress(localNetworkAddress.getAddress(), localNetworkAddress.getPort());
+        PartitionId id = new PartitionId(failedJob, new ConnectorDescriptorId(1), 0, 1);
+        NetworkInputChannel inputChannel = new NetworkInputChannel(nc1.getNetworkManager(), nc2Address, id, 1);
+        InputChannelFrameReader frameReader = new InputChannelFrameReader(inputChannel);
+        inputChannel.registerMonitor(frameReader);
+        AtomicBoolean failed = new AtomicBoolean(false);
+        Thread reader = new Thread(() -> {
+            try {
+                failed.set(!frameReader.nextFrame(new FixedSizeFrame()));
+            } catch (HyracksDataException e) {
+                e.printStackTrace();
+            }
+        });
+        reader.start();
+        final IHyracksCommonContext context = Mockito.mock(IHyracksCommonContext.class);
+        Mockito.when(context.getInitialFrameSize()).thenReturn(2000);
+        inputChannel.open(context);
+        reader.join(5000);
+        Assert.assertTrue(failed.get());
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ba532209/hyracks-fullstack/hyracks/hyracks-comm/src/main/java/org/apache/hyracks/comm/channels/NetworkOutputChannel.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-comm/src/main/java/org/apache/hyracks/comm/channels/NetworkOutputChannel.java b/hyracks-fullstack/hyracks/hyracks-comm/src/main/java/org/apache/hyracks/comm/channels/NetworkOutputChannel.java
index 126d9a4..3016a7a 100644
--- a/hyracks-fullstack/hyracks/hyracks-comm/src/main/java/org/apache/hyracks/comm/channels/NetworkOutputChannel.java
+++ b/hyracks-fullstack/hyracks/hyracks-comm/src/main/java/org/apache/hyracks/comm/channels/NetworkOutputChannel.java
@@ -25,6 +25,7 @@ import java.util.Deque;
 import org.apache.hyracks.api.comm.IBufferAcceptor;
 import org.apache.hyracks.api.comm.IFrameWriter;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.net.protocols.muxdemux.AbstractChannelWriteInterface;
 import org.apache.hyracks.net.protocols.muxdemux.ChannelControlBlock;
 
 public class NetworkOutputChannel implements IFrameWriter {
@@ -43,7 +44,7 @@ public class NetworkOutputChannel implements IFrameWriter {
     public NetworkOutputChannel(ChannelControlBlock ccb, int nBuffers) {
         this.ccb = ccb;
         this.nBuffers = nBuffers;
-        emptyStack = new ArrayDeque<ByteBuffer>(nBuffers);
+        emptyStack = new ArrayDeque<>(nBuffers);
         ccb.getWriteInterface().setEmptyBufferAcceptor(new WriteEmptyBufferAcceptor());
     }
 
@@ -58,7 +59,7 @@ public class NetworkOutputChannel implements IFrameWriter {
 
     @Override
     public void nextFrame(ByteBuffer buffer) throws HyracksDataException {
-        ByteBuffer destBuffer = null;
+        ByteBuffer destBuffer;
         while (buffer.hasRemaining()) {
             synchronized (this) {
                 while (true) {
@@ -76,6 +77,7 @@ public class NetworkOutputChannel implements IFrameWriter {
                     try {
                         wait();
                     } catch (InterruptedException e) {
+                        Thread.currentThread().interrupt();
                         throw HyracksDataException.create(e);
                     }
                 }
@@ -94,7 +96,7 @@ public class NetworkOutputChannel implements IFrameWriter {
 
     @Override
     public void fail() throws HyracksDataException {
-        ccb.getWriteInterface().getFullBufferAcceptor().error(1);
+        ccb.getWriteInterface().getFullBufferAcceptor().error(AbstractChannelWriteInterface.REMOTE_WRITE_ERROR_CODE);
     }
 
     @Override
@@ -103,7 +105,7 @@ public class NetworkOutputChannel implements IFrameWriter {
     }
 
     public void abort() {
-        ccb.getWriteInterface().getFullBufferAcceptor().error(1);
+        ccb.getWriteInterface().getFullBufferAcceptor().error(AbstractChannelWriteInterface.REMOTE_WRITE_ERROR_CODE);
         synchronized (NetworkOutputChannel.this) {
             aborted = true;
             NetworkOutputChannel.this.notifyAll();

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ba532209/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/pom.xml
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/pom.xml b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/pom.xml
index d7ed47d..c962029 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/pom.xml
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/pom.xml
@@ -87,5 +87,9 @@
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-api</artifactId>
     </dependency>
+    <dependency>
+      <groupId>com.google.guava</groupId>
+      <artifactId>guava</artifactId>
+    </dependency>
   </dependencies>
 </project>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ba532209/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NodeControllerService.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NodeControllerService.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NodeControllerService.java
index 76b5c8c..6a7d645 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NodeControllerService.java
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NodeControllerService.java
@@ -665,6 +665,7 @@ public class NodeControllerService implements IControllerService {
     }
 
     public void notifyTasksCompleted(CcId ccId) throws Exception {
+        partitionManager.jobsCompleted(ccId);
         application.onRegisterNode(ccId);
     }
 

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ba532209/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/net/NetworkManager.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/net/NetworkManager.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/net/NetworkManager.java
index f3276a4..cfe0991 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/net/NetworkManager.java
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/net/NetworkManager.java
@@ -27,7 +27,6 @@ import org.apache.hyracks.api.comm.IChannelInterfaceFactory;
 import org.apache.hyracks.api.comm.ICloseableBufferAcceptor;
 import org.apache.hyracks.api.comm.NetworkAddress;
 import org.apache.hyracks.api.dataflow.ConnectorDescriptorId;
-import org.apache.hyracks.api.exceptions.HyracksException;
 import org.apache.hyracks.api.exceptions.NetException;
 import org.apache.hyracks.api.job.JobId;
 import org.apache.hyracks.api.partitions.PartitionId;
@@ -129,12 +128,7 @@ public class NetworkManager implements IChannelConnectionFactory {
                 LOGGER.debug("Received initial partition request: " + pid + " on channel: " + ccb);
             }
             noc = new NetworkOutputChannel(ccb, nBuffers);
-            try {
-                partitionManager.registerPartitionRequest(pid, noc);
-            } catch (HyracksException e) {
-                e.printStackTrace();
-                noc.abort();
-            }
+            partitionManager.registerPartitionRequest(pid, noc);
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ba532209/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/partitions/PartitionManager.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/partitions/PartitionManager.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/partitions/PartitionManager.java
index 9ee4a9e..d023ce9 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/partitions/PartitionManager.java
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/partitions/PartitionManager.java
@@ -19,20 +19,22 @@
 package org.apache.hyracks.control.nc.partitions;
 
 import java.util.ArrayList;
-import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.TimeUnit;
 
 import org.apache.hyracks.api.control.CcId;
 import org.apache.hyracks.api.dataflow.TaskAttemptId;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
-import org.apache.hyracks.api.exceptions.HyracksException;
 import org.apache.hyracks.api.io.IWorkspaceFileFactory;
 import org.apache.hyracks.api.job.JobId;
+import org.apache.hyracks.api.job.JobStatus;
 import org.apache.hyracks.api.partitions.IPartition;
 import org.apache.hyracks.api.partitions.PartitionId;
+import org.apache.hyracks.api.resources.IDeallocatable;
 import org.apache.hyracks.comm.channels.NetworkOutputChannel;
 import org.apache.hyracks.control.common.job.PartitionDescriptor;
 import org.apache.hyracks.control.common.job.PartitionState;
@@ -40,6 +42,9 @@ import org.apache.hyracks.control.nc.NodeControllerService;
 import org.apache.hyracks.control.nc.io.WorkspaceFileFactory;
 import org.apache.hyracks.control.nc.resources.DefaultDeallocatableRegistry;
 
+import com.google.common.cache.Cache;
+import com.google.common.cache.CacheBuilder;
+
 public class PartitionManager {
 
     private final NodeControllerService ncs;
@@ -52,11 +57,14 @@ public class PartitionManager {
 
     private final Map<PartitionId, NetworkOutputChannel> partitionRequests = new HashMap<>();
 
+    private final Cache<JobId, JobId> failedJobsCache;
+
     public PartitionManager(NodeControllerService ncs) {
         this.ncs = ncs;
         this.availablePartitionMap = new HashMap<>();
         this.deallocatableRegistry = new DefaultDeallocatableRegistry();
         this.fileFactory = new WorkspaceFileFactory(deallocatableRegistry, ncs.getIoManager());
+        failedJobsCache = CacheBuilder.newBuilder().expireAfterWrite(1, TimeUnit.MINUTES).build();
     }
 
     public synchronized void registerPartition(PartitionId pid, CcId ccId, TaskAttemptId taId, IPartition partition,
@@ -95,37 +103,20 @@ public class PartitionManager {
         return availablePartitionMap.get(pid).get(0);
     }
 
-    public synchronized void unregisterPartitions(JobId jobId, Collection<IPartition> unregisteredPartitions) {
-        for (Iterator<Map.Entry<PartitionId, List<IPartition>>> i = availablePartitionMap.entrySet().iterator(); i
-                .hasNext();) {
-            Map.Entry<PartitionId, List<IPartition>> e = i.next();
-            PartitionId pid = e.getKey();
-            if (jobId.equals(pid.getJobId())) {
-                for (IPartition p : e.getValue()) {
-                    unregisteredPartitions.add(p);
-                }
-                i.remove();
-            }
+    public synchronized void registerPartitionRequest(PartitionId partitionId, NetworkOutputChannel writer) {
+        if (failedJobsCache.getIfPresent(partitionId.getJobId()) != null) {
+            writer.abort();
         }
-    }
-
-    public synchronized void registerPartitionRequest(PartitionId partitionId, NetworkOutputChannel writer)
-            throws HyracksException {
-        try {
-            List<IPartition> pList = availablePartitionMap.get(partitionId);
-            if (pList != null && !pList.isEmpty()) {
-                IPartition partition = pList.get(0);
-                writer.setFrameSize(partition.getTaskContext().getInitialFrameSize());
-                partition.writeTo(writer);
-                if (!partition.isReusable()) {
-                    availablePartitionMap.remove(partitionId);
-                }
-            } else {
-                //throw new HyracksException("Request for unknown partition " + partitionId);
-                partitionRequests.put(partitionId, writer);
+        List<IPartition> pList = availablePartitionMap.get(partitionId);
+        if (pList != null && !pList.isEmpty()) {
+            IPartition partition = pList.get(0);
+            writer.setFrameSize(partition.getTaskContext().getInitialFrameSize());
+            partition.writeTo(writer);
+            if (!partition.isReusable()) {
+                availablePartitionMap.remove(partitionId);
             }
-        } catch (Exception e) {
-            throw HyracksDataException.create(e);
+        } else {
+            partitionRequests.put(partitionId, writer);
         }
     }
 
@@ -137,7 +128,25 @@ public class PartitionManager {
         deallocatableRegistry.close();
     }
 
-    public void updatePartitionState(CcId ccId, PartitionId pid, TaskAttemptId taId, IPartition partition,
+    public synchronized void jobCompleted(JobId jobId, JobStatus status) {
+        if (status == JobStatus.FAILURE) {
+            failedJobsCache.put(jobId, jobId);
+        }
+        final List<IPartition> jobPartitions = unregisterPartitions(jobId);
+        final List<NetworkOutputChannel> pendingRequests = removePendingRequests(jobId, status);
+        if (!jobPartitions.isEmpty() || !pendingRequests.isEmpty()) {
+            ncs.getExecutor().execute(() -> {
+                jobPartitions.forEach(IDeallocatable::deallocate);
+                pendingRequests.forEach(NetworkOutputChannel::abort);
+            });
+        }
+    }
+
+    public synchronized void jobsCompleted(CcId ccId) {
+        failedJobsCache.asMap().keySet().removeIf(jobId -> jobId.getCcId().equals(ccId));
+    }
+
+    private void updatePartitionState(CcId ccId, PartitionId pid, TaskAttemptId taId, IPartition partition,
             PartitionState state) throws HyracksDataException {
         PartitionDescriptor desc = new PartitionDescriptor(pid, ncs.getId(), taId, partition.isReusable());
         desc.setState(state);
@@ -147,4 +156,36 @@ public class PartitionManager {
             throw HyracksDataException.create(e);
         }
     }
-}
+
+    private List<IPartition> unregisterPartitions(JobId jobId) {
+        final List<IPartition> unregisteredPartitions = new ArrayList<>();
+        for (Iterator<Map.Entry<PartitionId, List<IPartition>>> i = availablePartitionMap.entrySet().iterator(); i
+                .hasNext();) {
+            Map.Entry<PartitionId, List<IPartition>> entry = i.next();
+            PartitionId pid = entry.getKey();
+            if (jobId.equals(pid.getJobId())) {
+                unregisteredPartitions.addAll(entry.getValue());
+                i.remove();
+            }
+        }
+        return unregisteredPartitions;
+    }
+
+    private List<NetworkOutputChannel> removePendingRequests(JobId jobId, JobStatus status) {
+        if (status != JobStatus.FAILURE) {
+            return Collections.emptyList();
+        }
+        final List<NetworkOutputChannel> pendingRequests = new ArrayList<>();
+        final Iterator<Map.Entry<PartitionId, NetworkOutputChannel>> requestsIterator =
+                partitionRequests.entrySet().iterator();
+        while (requestsIterator.hasNext()) {
+            final Map.Entry<PartitionId, NetworkOutputChannel> entry = requestsIterator.next();
+            final PartitionId partitionId = entry.getKey();
+            if (partitionId.getJobId().equals(jobId)) {
+                pendingRequests.add(entry.getValue());
+                requestsIterator.remove();
+            }
+        }
+        return pendingRequests;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ba532209/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/work/CleanupJobletWork.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/work/CleanupJobletWork.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/work/CleanupJobletWork.java
index d38cd5e..c5a9d73 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/work/CleanupJobletWork.java
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/work/CleanupJobletWork.java
@@ -18,17 +18,13 @@
  */
 package org.apache.hyracks.control.nc.work;
 
-import java.util.ArrayList;
-import java.util.List;
 import java.util.Map;
 
 import org.apache.hyracks.api.job.JobId;
 import org.apache.hyracks.api.job.JobStatus;
-import org.apache.hyracks.api.partitions.IPartition;
 import org.apache.hyracks.control.common.work.AbstractWork;
 import org.apache.hyracks.control.nc.Joblet;
 import org.apache.hyracks.control.nc.NodeControllerService;
-import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
@@ -53,23 +49,7 @@ public class CleanupJobletWork extends AbstractWork {
             LOGGER.info("Cleaning up after job: " + jobId);
         }
         ncs.removeJobParameterByteStore(jobId);
-        final List<IPartition> unregisteredPartitions = new ArrayList<IPartition>();
-        ncs.getPartitionManager().unregisterPartitions(jobId, unregisteredPartitions);
-        ncs.getExecutor().execute(new Runnable() {
-            @Override
-            public void run() {
-                for (IPartition p : unregisteredPartitions) {
-                    try {
-                        // Put deallocate in a try block to make sure that every IPartition is de-allocated.
-                        p.deallocate();
-                    } catch (Exception e) {
-                        if (LOGGER.isWarnEnabled()) {
-                            LOGGER.log(Level.WARN, e.getMessage(), e);
-                        }
-                    }
-                }
-            }
-        });
+        ncs.getPartitionManager().jobCompleted(jobId, status);;
         Map<JobId, Joblet> jobletMap = ncs.getJobletMap();
         Joblet joblet = jobletMap.remove(jobId);
         if (joblet != null) {

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ba532209/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/AbstractChannelWriteInterface.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/AbstractChannelWriteInterface.java b/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/AbstractChannelWriteInterface.java
index 0b548f6..28c1a71 100644
--- a/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/AbstractChannelWriteInterface.java
+++ b/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/AbstractChannelWriteInterface.java
@@ -31,6 +31,7 @@ import org.apache.logging.log4j.Logger;
 
 public abstract class AbstractChannelWriteInterface implements IChannelWriteInterface {
 
+    public static final int REMOTE_WRITE_ERROR_CODE = 1;
     private static final Logger LOGGER = LogManager.getLogger();
     protected final IChannelControlBlock ccb;
     protected final Queue<ByteBuffer> wiFullQueue;
@@ -135,7 +136,9 @@ public abstract class AbstractChannelWriteInterface implements IChannelWriteInte
                     return;
                 }
                 eos = true;
-                adjustChannelWritability();
+                if (ecode != REMOTE_WRITE_ERROR_CODE) {
+                    adjustChannelWritability();
+                }
             }
         }
 

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ba532209/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/MultiplexedConnection.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/MultiplexedConnection.java b/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/MultiplexedConnection.java
index 286320b..a7fa49e 100644
--- a/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/MultiplexedConnection.java
+++ b/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/MultiplexedConnection.java
@@ -31,6 +31,7 @@ import org.apache.hyracks.api.comm.MuxDemuxCommand;
 import org.apache.hyracks.api.exceptions.NetException;
 import org.apache.hyracks.net.protocols.tcp.ITCPConnectionEventListener;
 import org.apache.hyracks.net.protocols.tcp.TCPConnection;
+import org.apache.hyracks.util.annotations.ThreadSafetyGuaranteedBy;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
@@ -67,28 +68,7 @@ public class MultiplexedConnection implements ITCPConnectionEventListener {
 
     MultiplexedConnection(MuxDemux muxDemux) {
         this.muxDemux = muxDemux;
-        pendingWriteEventsCounter = new IEventCounter() {
-            private int counter;
-
-            @Override
-            public synchronized void increment() {
-                ++counter;
-                if (counter == 1) {
-                    tcpConnection.enable(SelectionKey.OP_WRITE);
-                }
-            }
-
-            @Override
-            public synchronized void decrement() {
-                --counter;
-                if (counter == 0) {
-                    tcpConnection.disable(SelectionKey.OP_WRITE);
-                }
-                if (counter < 0) {
-                    throw new IllegalStateException();
-                }
-            }
-        };
+        pendingWriteEventsCounter = new EventCounter();
         cSet = new ChannelSet(this, pendingWriteEventsCounter);
         readerState = new ReaderState();
         writerState = new WriterState();
@@ -429,4 +409,32 @@ public class MultiplexedConnection implements ITCPConnectionEventListener {
     public IChannelInterfaceFactory getChannelInterfaceFactory() {
         return muxDemux.getChannelInterfaceFactory();
     }
+
+    @ThreadSafetyGuaranteedBy("MultiplexedConnection.this")
+    private class EventCounter implements IEventCounter {
+        private int counter;
+
+        @Override
+        public synchronized void increment() {
+            if (!connectionFailure) {
+                ++counter;
+                if (counter == 1) {
+                    tcpConnection.enable(SelectionKey.OP_WRITE);
+                }
+            }
+        }
+
+        @Override
+        public synchronized void decrement() {
+            if (!connectionFailure) {
+                --counter;
+                if (counter == 0) {
+                    tcpConnection.disable(SelectionKey.OP_WRITE);
+                }
+                if (counter < 0) {
+                    throw new IllegalStateException();
+                }
+            }
+        }
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ba532209/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/MuxDemux.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/MuxDemux.java b/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/MuxDemux.java
index c12909c..c58cb86 100644
--- a/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/MuxDemux.java
+++ b/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/MuxDemux.java
@@ -111,7 +111,9 @@ public class MuxDemux {
             @Override
             public void connectionClosed(TCPConnection connection) {
                 synchronized (MuxDemux.this) {
-                    connectionMap.remove(connection.getRemoteAddress());
+                    if (connection.getType() == TCPConnection.ConnectionType.OUTGOING) {
+                        connectionMap.remove(connection.getRemoteAddress());
+                    }
                 }
             }
         }, nThreads);

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ba532209/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/tcp/TCPConnection.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/tcp/TCPConnection.java b/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/tcp/TCPConnection.java
index b0e2eed..ff4627a 100644
--- a/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/tcp/TCPConnection.java
+++ b/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/tcp/TCPConnection.java
@@ -29,6 +29,11 @@ import org.apache.logging.log4j.Logger;
 
 public class TCPConnection {
 
+    public enum ConnectionType {
+        INCOMING,
+        OUTGOING
+    }
+
     private static final Logger LOGGER = LogManager.getLogger();
 
     private final TCPEndpoint endpoint;
@@ -43,11 +48,15 @@ public class TCPConnection {
 
     private Object attachment;
 
-    public TCPConnection(TCPEndpoint endpoint, SocketChannel channel, SelectionKey key, Selector selector) {
+    private ConnectionType type;
+
+    public TCPConnection(TCPEndpoint endpoint, SocketChannel channel, SelectionKey key, Selector selector,
+            ConnectionType type) {
         this.endpoint = endpoint;
         this.channel = channel;
         this.key = key;
         this.selector = selector;
+        this.type = type;
         remoteAddress = (InetSocketAddress) channel.socket().getRemoteSocketAddress();
     }
 
@@ -102,6 +111,10 @@ public class TCPConnection {
         }
     }
 
+    public ConnectionType getType() {
+        return type;
+    }
+
     @Override
     public String toString() {
         return "TCPConnection[Remote Address: " + remoteAddress + " Local Address: " + endpoint.getLocalAddress() + "]";

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ba532209/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/tcp/TCPEndpoint.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/tcp/TCPEndpoint.java b/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/tcp/TCPEndpoint.java
index affa59e..05e2175 100644
--- a/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/tcp/TCPEndpoint.java
+++ b/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/tcp/TCPEndpoint.java
@@ -18,6 +18,8 @@
  */
 package org.apache.hyracks.net.protocols.tcp;
 
+import static org.apache.hyracks.net.protocols.tcp.TCPConnection.ConnectionType;
+
 import java.io.IOException;
 import java.net.InetSocketAddress;
 import java.net.ServerSocket;
@@ -160,7 +162,8 @@ public class TCPEndpoint {
                         for (SocketChannel channel : workingIncomingConnections) {
                             register(channel);
                             SelectionKey sKey = channel.register(selector, 0);
-                            TCPConnection connection = new TCPConnection(TCPEndpoint.this, channel, sKey, selector);
+                            TCPConnection connection = new TCPConnection(TCPEndpoint.this, channel, sKey, selector,
+                                    ConnectionType.INCOMING);
                             sKey.attach(connection);
                             synchronized (connectionListener) {
                                 connectionListener.acceptedConnection(connection);
@@ -220,7 +223,8 @@ public class TCPEndpoint {
         }
 
         private void createConnection(SelectionKey key, SocketChannel channel) {
-            TCPConnection connection = new TCPConnection(TCPEndpoint.this, channel, key, selector);
+            TCPConnection connection =
+                    new TCPConnection(TCPEndpoint.this, channel, key, selector, ConnectionType.OUTGOING);
             key.attach(connection);
             key.interestOps(0);
             synchronized (connectionListener) {


[35/43] asterixdb git commit: [ASTERIXDB-2318] Build dashboard in mvn

Posted by im...@apache.org.
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses.component.html b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses.component.html
deleted file mode 100755
index 4099704..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses.component.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<!--/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/ -->
-<div class="container" (click)="onClick()">
-  <div class="master">
-    <mat-card class="dataverses-card">
-      <mat-toolbar color="primary" class="dataverses-selector">
-          <mat-icon class="icon">menu</mat-icon>
-          <span>DATAVERSES - METADATA</span>
-          <span class="spacer"></span>
-      </mat-toolbar>
-      <mat-card-content class="dataverses-content">
-        <mat-table #table [dataSource]="dataSource" class="dataverses-table" *ngIf="loaded$ | async as ld">
-            <!-- Dataverse Name Column -->
-            <ng-container matColumnDef="DataverseName">
-              <mat-header-cell *matHeaderCellDef class="header-name-cell">Dataverse Name</mat-header-cell>
-              <mat-cell *matCellDef="let element" class="dataverse-name-cell">{{element.DataverseName}}</mat-cell>
-            </ng-container>
-
-            <!-- Data Format Column -->
-            <ng-container matColumnDef="DataFormat">
-              <mat-header-cell *matHeaderCellDef class="header-dataformat-cell">Data Format</mat-header-cell>
-              <mat-cell *matCellDef="let element" class="dataverse-dataformat-cell">{{element.DataFormat}}</mat-cell>
-            </ng-container>
-
-            <!-- Pending Ops -->
-            <ng-container matColumnDef="PendingOp">
-              <mat-header-cell *matHeaderCellDef class="header-pendingop-cell">Pending Ops</mat-header-cell>
-              <mat-cell *matCellDef="let element" class="dataverse-pendingop-cell">{{element.PendingOp}}</mat-cell>
-            </ng-container>
-
-            <!-- Timestamp Column -->
-            <ng-container matColumnDef="Timestamp">
-              <mat-header-cell *matHeaderCellDef class="header-timestamp-cell">Timestamp</mat-header-cell>
-              <mat-cell *matCellDef="let element" class="dataverse-timestamp-cell">{{element.Timestamp}}</mat-cell>
-            </ng-container>
-
-            <mat-header-row *matHeaderRowDef="['DataverseName',  'DataFormat', 'Timestamp']"></mat-header-row>
-            <mat-row *matRowDef="let row; columns: ['DataverseName', 'DataFormat', 'Timestamp'];"
-              [ngClass]="{'highlight': selectedRowIndex == row.id}"
-              (click)="highlight(row)">
-            </mat-row>
-        </mat-table>
-      </mat-card-content>
-      <mat-card-actions class="actions">
-          <button class="refresh-button" mat-button (click)="openCreateDataverseDialog()">CREATE</button>
-          <button class="refresh-button" mat-button (click)="openDropDataverseDialog()">DROP</button>
-          <span class="error-message">{{errorMessage}}</span>
-          <span class="spacer"></span>
-          <button class="refresh-button" mat-button (click)="getDataverse()">REFRESH</button>
-      </mat-card-actions>
-    </mat-card>
-  <awc-query-metadata #querymetadata class="query"></awc-query-metadata>  
-  </div>
-  <div class="detail">
-      <mat-card class="dataverses-details-card">
-          <mat-toolbar color="primary" class="dataverses-selector">
-              <mat-icon class="icon">menu</mat-icon>
-              <span>DATAVERSE - METADATA - DETAILS</span>
-              <span class="spacer"></span>
-          </mat-toolbar>
-          <mat-card-content class="dataverses-content output">
-            <span><pre>{{output}}</pre></span>
-          </mat-card-content>
-        </mat-card>
-  </div>
-</div>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses.component.scss b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses.component.scss
deleted file mode 100755
index 2821766..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses.component.scss
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-$dataverses-spacing-unit: 8px;
-
-.container {
-  display: flex;
-	flex-flow: row;
-	padding: 0;
-  margin: 0;
-}
-
-.master {
-  width: 60%;
-}
-
-.detail {
-  width: 40%;
-}
-
-.dataverses-card {
-  display: flex;
-	flex-flow: column;
-  padding: 0;
-  margin:0 auto;
-  margin-top: ($dataverses-spacing-unit * 2);
-  min-height: 450px;
-  max-height: 450px;
-  //min-width: 98%; //(100vw / 2);
-  //max-width: 98%; // (100vw / 2);
-  width: 95%; // 98%;
-  overflow: hidden;
-}
-
-.dataverses-details-card {
-	display: flex;
-	flex-flow: column;
-  padding: 0;
-  margin:0 auto;
-  margin: ($dataverses-spacing-unit * 2);
-  min-height: 716px;
-  max-height: 716px;
-  //min-width: 95%; //(100vw / 2);
-  //max-width: 95%; // (100vw / 2);
-  overflow: hidden;
-}
-
-.icon {
-	padding: 0 14px 0 0;
-	margin: 0;
-}
-
-.spacer {
-  flex: 1 1 auto;
-}
-
-.dataverses-selector {
-	min-height: 42px;
-	max-height: 42px;
-	justify-content: center;
-	font-size: 0.80rem;
-  font-weight: 500;
-  background-color: white;
-	border: 1px solid rgba(54, 147, 209, 0.87);
-}
-
-//.metadata-content-area {
-//	padding: ($dataverses-spacing-unit * 2);
-//	margin: 0;
-//	overflow: auto;
-//}
-
-
-.dataverses-content {
-  position:relative;
-  top: 0;
-  left: 0;
-  margin: 0px;
-  padding: 0px;
-  overflow: auto;
-}
-
-.dataverses-table {
-  margin: $dataverses-spacing-unit !important;
-  height: 330px;
-  overflow: auto;
-}
-
-.spacer {
-  flex: 1 1 auto;
-}
-
-.example-header {
-  min-height: 64px;
-  display: flex;
-  align-items: center;
-  padding-left: 24px;
-  font-size: 20px;
-}
-
-.mat-table {
-  overflow: auto;
-}
-
-.customWidthClass{
-   flex: 0 0 75px;
-}
-
-.mat-column-DataverseName {
-  text-align: left;
-}
-
-.mat-header-cell.mat-column-DataverseName {
-  text-align: left;
-}
-
-.mat-cell.mat-column-DataverseName {
-  text-align: left;
-}
-
-.header-name-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $dataverses-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($dataverses-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  flex: 0 0 150px;
-  text-transform: uppercase;
-}
-
-.header-dataformat-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $dataverses-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($dataverses-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  flex: 0 0 400px;
-  text-transform: uppercase;
-}
-
-.header-timestamp-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $dataverses-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($dataverses-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  flex: 0 0 250px;
-  text-transform: uppercase;
-}
-
-.dataverse-name-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $dataverses-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($dataverses-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  flex: 0 0 150px;
-}
-
-.dataverse-dataformat-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $dataverses-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($dataverses-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  flex: 0 0 400px;
-}
-
-.dataverse-timestamp-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $dataverses-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($dataverses-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  flex: 0 0 250px;
-}
-
-.example-header {
-  min-height: 56px;
-  max-height: 56px;
-  display: flex;
-  align-items: center;
-  padding: 8px 24px 0;
-  font-size: 20px;
-  justify-content: space-between;
-  border-bottom: 1px solid transparent;
-}
-
-.mat-form-field {
-  font-size: 14px;
-  flex-grow: 1;
-  margin-top: 8px;
-}
-
-.example-no-results {
-  display: flex;
-  justify-content: center;
-  padding: 24px;
-  font-size: 12px;
-  font-style: italic;
-}
-
-.actions {
-  display: flex;
-  border-top: 1px solid rgba(0, 0, 0, 0.1);
-  color: rgba(54, 147, 209, 0.87);
-  padding: $dataverses-spacing-unit;
-  margin: 0;
-}
-
-.error-message {
-  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
-  color: rgba(209, 54, 54, 0.87);
-  padding-top: 10px;  
-  padding-left: 20px;
-  text-overflow: ellipsis;
-}
-
-.highlight{
-  background: #42A948; /* green */
-}
-
-.output {
-  padding-left: ($dataverses-spacing-unit * 2);
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses.component.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses.component.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses.component.ts
deleted file mode 100755
index 981f029..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses.component.ts
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Component, ChangeDetectionStrategy, Inject, OnInit, AfterViewChecked, AfterViewInit, Input} from '@angular/core';
-import { Dataverse } from '../../../shared/models/asterixDB.model'
-import { Store } from '@ngrx/store';
-import { Observable } from 'rxjs/Observable';
-import * as dataverseActions from '../../../shared/actions/dataverse.actions'
-import { ElementRef, ViewChild} from '@angular/core';
-import { DataSource } from '@angular/cdk/collections';
-import { BehaviorSubject } from 'rxjs/BehaviorSubject';
-import 'rxjs/add/operator/startWith';
-import 'rxjs/add/observable/merge';
-import 'rxjs/add/operator/map';
-import 'rxjs/add/operator/debounceTime';
-import 'rxjs/add/operator/distinctUntilChanged';
-import 'rxjs/add/observable/fromEvent';
-import { Subscription } from "rxjs/Rx";
-import * as fromRoot from '../../../shared/reducers/dataverse.reducer';
-import { State } from '../../../shared/reducers/dataverse.reducer';
-import { MatPaginator } from '@angular/material';
-import { SelectionModel } from '@angular/cdk/collections';
-import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';
-
-@Component({
-  selector: 'awc-dataverses',
-  templateUrl: 'dataverses.component.html',
-  styleUrls: ['dataverses.component.scss'],
-})
-
-export class DataverseCollection implements OnInit, AfterViewChecked, AfterViewInit {
-  dataverseName: string;
-  displayedColumns = ['DataverseName', 'Dataformat', 'Timestamp', 'PendingOp'];
-  dataSource: DataversesDataSource | null;
-  loaded$: Observable<any>;
-  selection = new SelectionModel<string>(true, []);
-  @Input('message') errorMessage: string = ""
-  dvName = "";
-
-  constructor(private store: Store<any>, public dialog: MatDialog) {
-    this.loaded$ = this.store.select('dataverse');
-    
-    // Watching the name of the latest created dataset
-    this.store.select(s => s.dataverse.createDataverseName).subscribe((data: any) => {
-      this.dvName = data;
-    })
-
-    // Watching for the success message in a drop dataset operation 
-    this.store.select(s => s.dataverse.dropDataverseName).subscribe((data: any) => {
-      this.dvName = data;
-    })
-
-    // Watching for the if there is a change in the collection
-		this.store.select(s => s.dataverse.createDataverseSuccess).subscribe((data: any) => {
-      if (data === true) {
-        this.getDataverse();
-        this.errorMessage = "SUCCEED: CREATED DATAVERSE " + this.dvName + " ";
-      }  
-    })
-
-    // Watching for the if there is a error in a create dataverse operation 
-		this.store.select(s => s.dataverse.createDataverseError).subscribe((data: any) => {
-      if (data.errors) {
-        this.errorMessage = "ERROR: " + data.errors[0].msg;
-      }  
-    })
-
-    // Watching for the if there is a change in the collection
-		this.store.select(s => s.dataverse.dropDataverseSuccess).subscribe((data: any) => {
-      if (data === true) {
-        this.getDataverse();
-        this.errorMessage = "SUCCEED: DROP DATAVERSE " + this.dvName;
-      }  
-    })
-
-    // Watching for the if there is a error in a drop dataverse operation 
-		this.store.select(s => s.dataverse.dropDataverseError).subscribe((data: any) => {
-      if (data.errors) {
-        this.errorMessage = "ERROR: " + data.errors[0].msg;
-      }  
-    })
-  }
-
-  getDataverse() {
-    // Triggers the effect to refresg the dataverse
-    this.store.dispatch(new dataverseActions.SelectDataverses('-'));
-  }
-
-  ngOnInit() {
-    // Assign the datasource for the table 
-    this.dataSource = new DataversesDataSource(this.store);
-  }
-
-  ngAfterViewChecked() {}
-
-  ngAfterViewInit() {}
-
-
-  /* 
-  * opens the create dataverse dialog
-  */
-  openCreateDataverseDialog(): void {
-    let dialogRef = this.dialog.open(DialogCreateDataverse, {
-      width: '420px',
-      data: { name: this.dataverseName }
-    });
-
-    dialogRef.afterClosed().subscribe(result => {
-      //reference code
-      //this.dvName = result;
-    });
-  }
-
-  /* 
-  * opens the drop dataverse dialog
-  */
-  openDropDataverseDialog(): void {
-    let dialogRef = this.dialog.open(DialogDropDataverse, {
-      width: '420px',
-      data: { name: this.dataverseName }
-    });
-
-    dialogRef.afterClosed().subscribe(result => {
-      this.dataverseName = result;
-    });
-  }
-
-   /* 
-  * Clean up the error message on the screen
-  */
-  onClick(): void {
-    this.errorMessage = "";
-  }
-
-  selectedRowIndex: number = -1;
-
-  /* Showing all the datatype metadata information */
-  output: any;
-  
-  highlight(row){
-    this.output = JSON.stringify(row, null, 2);
-  }
-
-  @ViewChild('querymetadata') inputQuery;
-
-  /* Cleans up error message */
-  cleanUp() {
-    this.errorMessage = "";   
-    // Cascading   
-    this.inputQuery.cleanUp();  
-  }
-}
-
-@Component({
-  selector: 'dataverse-create-dialog',
-  templateUrl: 'dataverses-create-dialog.component.html',
-  styleUrls: ['dataverses-create-dialog.component.scss']
-})
-
-export class DialogCreateDataverse {
-  constructor(  private store: Store<any>,
-                public dialogCreateDvRef: MatDialogRef<DialogCreateDataverse>,
-                @Inject(MAT_DIALOG_DATA) public data: any) { }
-
-  onClick(): void {
-    this.store.dispatch(new dataverseActions.CreateDataverse(this.data.dataverseName));
-    this.dialogCreateDvRef.close(this.data.dataverseName);
-  }
-
-  onNoClick(): void {
-    this.dialogCreateDvRef.close();
-  }
-}
-
-@Component({
-  selector: 'dataverse-drop-dialog',
-  templateUrl: 'dataverses-drop-dialog.component.html',
-  styleUrls: ['dataverses-drop-dialog.component.scss']
-})
-
-export class DialogDropDataverse {
-  constructor(  private store: Store<any>,
-                public dialogDropDvRef: MatDialogRef<DialogDropDataverse>,
-                @Inject(MAT_DIALOG_DATA) public data: any) { }
-
-  onClick(): void {
-    this.store.dispatch(new dataverseActions.DropDataverse(this.data.dataverseName));
-    this.dialogDropDvRef.close(this.data.dataverseName);
-  }
-
-  onNoClick(): void {
-    this.dialogDropDvRef.close();
-  }
-}
-
-/**
- * Data source to provide what data should be rendered in the table. Note that the data source
- * can retrieve its data in any way. In this case, the data source is provided a reference
- * to a common data base, ExampleDatabase. It is not the data source's responsibility to manage
- * the underlying data. Instead, it only needs to take the data and send the table exactly what
- * should be rendered.
- */
- export class DataversesDataSource extends DataSource<any> {
-    dataverse$: Observable<any>
-    _filterChange = new BehaviorSubject('');
-    get filter(): string { return this._filterChange.value; }
-    set filter(filter: string) { this._filterChange.next(filter); }
-
-    constructor(private store: Store<any>) {
-      super();
-      this.dataverse$ = this.store.select(s => s.dataverse.dataverses.results);
-    }
-
-    /** Connect function called by the table to retrieve one stream containing the data to render. */
-    connect(): Observable<Dataverse[]> {
-        const displayDataChanges = [
-          this.dataverse$,
-        ];
-
-      return this.dataverse$;
-    }
-
-    disconnect() {}
-  }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-create-dialog.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-create-dialog.component.html b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-create-dialog.component.html
deleted file mode 100755
index aca06fd..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-create-dialog.component.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/-->
-<!-- Place holder for future expansion -->
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-create-dialog.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-create-dialog.component.scss b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-create-dialog.component.scss
deleted file mode 100755
index 039dcf1..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-create-dialog.component.scss
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-.index-dialog {    
-    font-family: "Roboto Mono", monospace;
-    font-size: 0.80rem;
-    font-weight: 500;
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-drop-dialog.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-drop-dialog.component.html b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-drop-dialog.component.html
deleted file mode 100755
index 5e675d8..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-drop-dialog.component.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!--/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/-->
-<div class="index-dialog">
-    <p mat-dialog-title>DROP INDEX</p>
-    <mat-dialog-content>
-        <p>PLEASE GIVE THE DATAVERSENAME.INDEXNAME OF THE INDEX TO DROP</p>
-    </mat-dialog-content>
-        <mat-form-field>
-            <input matInput tabindex="0" [(ngModel)]="data.indexName">
-        </mat-form-field>
-    <mat-dialog-actions>
-        <button mat-button (click)="onClick()" tabindex="1">DROP</button>
-        <button mat-button (click)="onNoClick()" tabindex="2">CANCEL</button>
-    </mat-dialog-actions>
-</div>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-drop-dialog.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-drop-dialog.component.scss b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-drop-dialog.component.scss
deleted file mode 100755
index 039dcf1..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-drop-dialog.component.scss
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-.index-dialog {    
-    font-family: "Roboto Mono", monospace;
-    font-size: 0.80rem;
-    font-weight: 500;
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/indexes.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/indexes.component.html b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/indexes.component.html
deleted file mode 100755
index c63b254..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/indexes.component.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<!--/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/ -->
-<div class="container"  (click)="onClick()">
-  <div class="master">
-    <mat-card class="indexes-card" *ngIf="loaded$ | async as ld">
-      <mat-toolbar color="primary" class="indexes-selector">
-          <mat-icon class="icon">menu</mat-icon>
-          <span>INDEXES - METADATA</span>
-          <span class="spacer"></span>
-      </mat-toolbar>
-      <mat-card-content class="indexes-content">
-        <mat-table #table [dataSource]="dataSource" class="indexes-table">
-            <!-- Dataverse Name -->
-            <ng-container matColumnDef="DataverseName">
-              <mat-header-cell *matHeaderCellDef class="header-dataversename-cell"> Dataverse Name </mat-header-cell>
-              <mat-cell *matCellDef="let element" class="indexes-dataversename-cell"> {{element.DataverseName}} </mat-cell>
-            </ng-container>
-
-            <!-- Dataset Name -->
-            <ng-container matColumnDef="DatasetName">
-              <mat-header-cell *matHeaderCellDef class="header-datasetname-cell"> Dataset Name </mat-header-cell>
-              <mat-cell *matCellDef="let element" class="indexes-datasetname-cell"> {{element.DatasetName}} </mat-cell>
-            </ng-container>
-
-            <!-- Index Name -->
-            <ng-container matColumnDef="IndexName">
-              <mat-header-cell *matHeaderCellDef class="header-indexname-cell"> Index Name </mat-header-cell>
-              <mat-cell *matCellDef="let element" class="indexes-indexname-cell"> {{element.IndexName}} </mat-cell>
-            </ng-container>
-
-            <!-- Index Structure -->
-            <ng-container matColumnDef="IndexStructure">
-              <mat-header-cell *matHeaderCellDef class="header-indexestructure-cell"> Index Structure </mat-header-cell>
-              <mat-cell *matCellDef="let element" class="indexes-indexstructure-cell"> {{element.IndexStructure}} </mat-cell>
-            </ng-container>
-
-            <!-- IsPrimary  -->
-            <ng-container matColumnDef="IsPrimary">
-              <mat-header-cell *matHeaderCellDef class="header-isprimary-cell"> Is Primary </mat-header-cell>
-              <mat-cell *matCellDef="let element" class="indexes-isprimary-cell"> {{element.IsPrimary}} </mat-cell>
-            </ng-container>
-
-            <!-- Timestamp Column -->
-            <ng-container matColumnDef="Timestamp">
-              <mat-header-cell *matHeaderCellDef class="header-timestamp-cell"> Timestamp </mat-header-cell>
-              <mat-cell *matCellDef="let element" class="indexes-timestamp-cell"> {{element.Timestamp}} </mat-cell>
-            </ng-container>
-
-            <!-- Pending Op Column -->
-            <ng-container matColumnDef="PendingOp">
-              <mat-header-cell *matHeaderCellDef class="header-pendingop-cell"> PendingOp </mat-header-cell>
-              <mat-cell *matCellDef="let element" class="indexes-dataverse-cell"> {{element.PendingOp}} </mat-cell>
-            </ng-container>
-
-            <mat-header-row *matHeaderRowDef="['IndexName', 'DatasetName', 'DataverseName', 'IndexStructure', 'IsPrimary', 'Timestamp']"></mat-header-row>
-            <mat-row *matRowDef="let row; columns: ['IndexName', 'DatasetName', 'DataverseName', 'IndexStructure', 'IsPrimary', 'Timestamp'];"
-              [ngClass]="{'highlight': selectedRowIndex == row.id}"
-              (click)="highlight(row)">
-            </mat-row>
-        </mat-table>
-      </mat-card-content>
-      <mat-card-actions class="actions">
-          <button class="refresh-button" mat-button (click)="openDropIndexDialog()">DROP</button>
-          <span class="error-message">{{errorMessage}}</span>
-          <span class="spacer"></span>
-          <button class="refresh-button" mat-button (click)="getIndexes()">REFRESH</button>
-      </mat-card-actions>
-    </mat-card>
-    <awc-query-metadata #querymetadata class="query"></awc-query-metadata>  
-  </div>
-  <div class="detail">
-      <mat-card class="indexes-details-card">
-          <mat-toolbar color="primary" class="indexes-selector">
-              <mat-icon class="icon">menu</mat-icon>
-              <span>INDEX - METADATA - DETAILS</span>
-              <span class="spacer"></span>
-          </mat-toolbar>
-          <mat-card-content class="indexes-content output">
-            <span><pre>{{output}}</pre></span>
-          </mat-card-content>
-        </mat-card>
-  </div>
-</div>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/indexes.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/indexes.component.scss b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/indexes.component.scss
deleted file mode 100755
index 15b364a..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/indexes.component.scss
+++ /dev/null
@@ -1,398 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-$indexes-spacing-unit: 8px;
-
-.container {
-  display: flex;
-	flex-flow: row;
-	padding: 0;
-  margin: 0;
-}
-
-.master {
-  width: 60%;
-}
-
-.detail {
-  width: 40%;
-}
-
-.indexes-card {
-	display: flex;
-	flex-flow: column;
-  padding: 0;
-  margin:0 auto;
-  margin-top: ($indexes-spacing-unit * 2);
-  min-height: 450px;
-  max-height: 450px;
-  //min-width: 98%; //(100vw / 2);
-  //max-width: 98%; // (100vw / 2);
-  width: 95%; // 98%;
-  overflow: hidden;
-}
-
-.indexes-details-card {
-	display: flex;
-	flex-flow: column;
-  padding: 0;
-  margin:0 auto;
-  margin: ($indexes-spacing-unit * 2);
-  min-height: 716px;
-  max-height: 716px;
-  //min-width: 95%; //(100vw / 2);
-  //max-width: 95%; // (100vw / 2);
-  overflow: hidden;
-}
-
-.icon {
-	padding: 0 14px 0 0;
-	margin: 0;
-}
-
-.spacer {
-  flex: 1 1 auto;
-}
-
-.indexes-selector {
-	min-height: 42px;
-	max-height: 42px;
-	justify-content: center;
-	//align-items: center;
-	font-size: 0.80rem;
-  font-weight: 500;
-  background-color: white;
-	border: 1px solid rgba(54, 147, 209, 0.87);
-}
-
-.indexes-content {
-  position:relative;
-  top: 0;
-  left: 0;
-  margin: 0px;
-  padding: 0px;
-  overflow: auto;
-}
-
-.indexes-table {
-  margin: $indexes-spacing-unit !important;
-  height: 330px;
-  overflow: auto;
-}
-
-.spacer {
-  flex: 1 1 auto;
-}
-
-//.indexes-toolbar {
-//	display: block;
-//  min-height: 56px;
-//	height: 56px;
-	//width: 250px;
-//  font-size: 12px;
-//  white-space: nowrap;
-//  overflow: hidden;
-//  text-overflow: ellipsis;
-//	letter-spacing: 1px;
-//	font-weight: 400;
-//	background: rgba(0,0,1, .80);
-//}
-
-.example-header {
-  min-height: 64px;
-  display: flex;
-  align-items: center;
-  padding-left: 24px;
-  font-size: 20px;
-}
-
-.mat-table {
-  overflow: auto;
-}
-
-.customWidthClass{
-   flex: 0 0 75px;
-}
-
-.mat-column-DataverseName {
-  text-align: left;
-}
-
-.mat-header-cell.mat-column-DataverseName {
-  text-align: left;
-}
-
-.mat-cell.mat-column-DataverseName {
-  text-align: left;
-}
-
-.header-dataversename-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $indexes-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($indexes-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  text-transform: uppercase;
-  flex: 0 0 150px;
-}
-
-.indexes-dataversename-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $indexes-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($indexes-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  flex: 0 0 150px;
-}
-
-.header-datasetname-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $indexes-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($indexes-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  text-transform: uppercase;
-  flex: 0 0 150px;
-}
-
-.indexes-datasetname-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $indexes-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($indexes-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  flex: 0 0 150px;
-}
-
-.header-indexname-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $indexes-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($indexes-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  text-transform: uppercase;
-  flex: 0 0 150px;
-}
-
-.indexes-indexname-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $indexes-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($indexes-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  flex: 0 0 150px;
-}
-
-.header-indexestructure-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $indexes-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($indexes-spacing-unit * 2);
-  text-align: center;
-  color: hsla(0,0%,0%,.87);
-  text-transform: uppercase;
-  flex: 0 0 150px;
-}
-
-.indexes-indexstructure-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $indexes-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($indexes-spacing-unit * 2);
-  text-align: center;
-  color: hsla(0,0%,0%,.87);
-  flex: 0 0 150px;
-}
-
-.header-isprimary-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $indexes-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($indexes-spacing-unit * 2);
-  text-align: center;
-  color: hsla(0,0%,0%,.87);
-  text-transform: uppercase;
-  flex: 0 0 150px;
-}
-
-.indexes-isprimary-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $indexes-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($indexes-spacing-unit * 2);
-  text-align: center;
-  color: hsla(0,0%,0%,.87);
-  flex: 0 0 150px;
-}
-
-.header-timestamp-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $indexes-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($indexes-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  text-transform: uppercase;
-  flex: 0 0 150px;
-}
-
-.indexes-timestamp-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $indexes-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($indexes-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  flex: 0 0 150px;
-}
-
-.header-groupname-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $indexes-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($indexes-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  text-transform: uppercase;
-  flex: 0 0 150px;
-}
-
-.indexes-groupname-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $indexes-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($indexes-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  flex: 0 0 150px;
-}
-
-.header-timestamp-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $indexes-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($indexes-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  text-transform: uppercase;
-  flex: 0 0 250px;
-}
-
-.indexes-timestamp-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $indexes-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($indexes-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  flex: 0 0 250px;
-}
-
-.example-header {
-  min-height: 56px;
-  max-height: 56px;
-  display: flex;
-  align-items: center;
-  padding: 8px 24px 0;
-  font-size: 20px;
-  justify-content: space-between;
-  border-bottom: 1px solid transparent;
-}
-
-.mat-form-field {
-  font-size: 14px;
-  flex-grow: 1;
-  margin-top: 8px;
-}
-
-.example-no-results {
-  display: flex;
-  justify-content: center;
-  padding: 24px;
-  font-size: 12px;
-  font-style: italic;
-}
-
-.actions {
-  display: flex;
-  border-top: 1px solid rgba(0, 0, 0, 0.1);
-  color: rgba(54, 147, 209, 0.87);
-  padding: $indexes-spacing-unit;
-  margin: 0;
-}
-
-.error-message {
-  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
-  color: rgba(209, 54, 54, 0.87);
-  padding-top: 10px;  
-  padding-left: 20px;
-  text-overflow: ellipsis;
-}
-
-.output {
-  padding-left: ($indexes-spacing-unit * 2);
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/indexes.component.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/indexes.component.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/indexes.component.ts
deleted file mode 100755
index 2913470..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/indexes.component.ts
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Component, Inject, Input } from '@angular/core';
-import { Index } from '../../../shared/models/asterixDB.model'
-import { Store } from '@ngrx/store';
-import { Observable } from 'rxjs/Observable';
-import * as indexActions from '../../../shared/actions/index.actions'
-import { ElementRef, ViewChild} from '@angular/core';
-import {DataSource} from '@angular/cdk/collections';
-import {BehaviorSubject} from 'rxjs/BehaviorSubject';
-import 'rxjs/add/operator/startWith';
-import 'rxjs/add/observable/merge';
-import 'rxjs/add/operator/map';
-import 'rxjs/add/operator/debounceTime';
-import 'rxjs/add/operator/distinctUntilChanged';
-import 'rxjs/add/observable/fromEvent';
-import { Subscription } from "rxjs/Rx";
-import { State } from '../../../shared/reducers/index.reducer';
-import { MatPaginator } from '@angular/material';
-import { SelectionModel } from '@angular/cdk/collections';
-import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';
-
-/**
- * Root component
- * Defines our application's layout
- */
-@Component({
-  selector: 'awc-indexes',
-  templateUrl: 'indexes.component.html',
-  styleUrls: ['indexes.component.scss']
-})
-
-export class IndexCollection {
-  displayedColumns = "['dataverseName', 'datasetName', 'indexName', 'indexStructure', 'isPrimary', 'timestamp', 'pendingOp']"
-  /*
-  dataverseName: string;
-  datasetName: string;
-  indexName: string;
-  indexStructure: string;
-  searchKey: string[];
-  isPrimary: boolean;
-  timestamp: string;
-  pendingOp: string;
-  */
-  indexName: string;
-  dataSource: IndexDataSource | null;
-  loaded$: Observable<any>;
-  @Input('message') errorMessage: string = ""
-  
-  idxName = "";
-
-  constructor(private store: Store<any>, public dialog: MatDialog) {
-    this.loaded$ = this.store.select('index');
-    // Watching the name of the latest create index
-    this.store.select(s => s.index.createIndexName).subscribe((data: any) => {
-      this.idxName = data;
-    })
-
-    // Watching the name of the latest drop index
-    this.store.select(s => s.index.dropIndexName).subscribe((data: any) => {
-      this.idxName = data;
-    })
-
-    // Watching for the if there is a change in the collection
-		this.store.select(s => s.index.createIndexSuccess).subscribe((data: any) => {
-      if (data === true) {
-        this.getIndexes();
-        this.errorMessage = "SUCCEED: CREATE INDEX " + this.idxName;
-      }  
-    })
-
-    // Watching for the if there is a error in a create index operation 
-		this.store.select(s => s.index.createIndexError).subscribe((data: any) => {
-      if (data.errors) {
-        this.errorMessage = "ERROR: " + data.errors[0].msg;
-      }  
-    })
-
-    // Watching for the success message in a drop index operation 
-    this.store.select(s => s.index.dropIndexSuccess).subscribe((data: any) => {
-      if (data === true) {
-        this.getIndexes();
-        this.errorMessage = "SUCCEED: DROP INDEX " + this.idxName;
-      }  
-    })
-
-    // Watching for the if there is a error in a drop index operation 
-		this.store.select(s => s.index.dropIndexError).subscribe((data: any) => {
-      if (data.errors) {
-        this.errorMessage = "ERROR: " + data.errors[0].msg;
-      }  
-    })
-  }
-
-  getIndexes() {
-    // Triggers the effect to refresg the indexes
-    this.store.dispatch(new indexActions.SelectIndexes('-'));
-  }
-
-  ngOnInit() {
-    // Assign the datasource for the table 
-    this.dataSource = new IndexDataSource(this.store);
-  }  
-
-  /* 
-  * opens the create index dialog
-  */
-  openCreateIndexDialog(): void {
-    let dialogRef = this.dialog.open(DialogCreateIndex, {
-      width: '420px',
-      data: { name: this.indexName }
-    });
-
-    dialogRef.afterClosed().subscribe(result => {
-      this.indexName = result;
-    });
-  }
-
-
-   /* 
-  * opens the drop index dialog
-  */
-  openDropIndexDialog(): void {
-    let dialogRef = this.dialog.open(DialogDropIndex, {
-      width: '420px',
-      data: { name: this.indexName }
-    });
-
-    dialogRef.afterClosed().subscribe(result => {
-      this.indexName = result;
-    });
-  }
-
-  /* 
-  * Clean up the error message on the screen
-  */
-  onClick(): void {
-    this.errorMessage = "";
-  }
-
-   /* Showing all the index metadata information */
-   output: any;
-   
-   highlight(row){
-     this.output = JSON.stringify(row, null, 2);
-   }
-
-  @ViewChild('querymetadata') inputQuery;
-
-  /* Cleans up error message */
-  cleanUp() {
-    this.errorMessage = ""; 
-    // Cascading   
-    this.inputQuery.cleanUp(); 
-  }
-}
-
-@Component({
-  selector: 'index-create-dialog',
-  templateUrl: 'index-create-dialog.component.html',
-  styleUrls: ['index-create-dialog.component.scss']
-})
-
-export class DialogCreateIndex {
-  constructor(  private store: Store<any>,
-                public dialogCreateIdxRef: MatDialogRef<DialogCreateIndex>,
-                @Inject(MAT_DIALOG_DATA) public data: any) { }
-
-  onClick(): void {
-    this.store.dispatch(new indexActions.CreateIndex(this.data.indexName));
-    this.dialogCreateIdxRef.close();
-  }
-
-  onNoClick(): void {
-    this.dialogCreateIdxRef.close();
-  }
-}
-
-@Component({
-  selector: 'index-drop-dialog',
-  templateUrl: 'index-drop-dialog.component.html',
-  styleUrls: ['index-drop-dialog.component.scss']
-})
-
-export class DialogDropIndex {
-  constructor(  private store: Store<any>,
-                public dialogDropIdxRef: MatDialogRef<DialogDropIndex>,
-                @Inject(MAT_DIALOG_DATA) public data: any) { }
-
-  onClick(): void {
-    console.log(this.data.indexName)
-    this.store.dispatch(new indexActions.DropIndex(this.data.indexName));
-    this.dialogDropIdxRef.close();
-  }
-
-  onNoClick(): void {
-    this.dialogDropIdxRef.close();
-  }
-}
-
-export class IndexDataSource extends DataSource<any> {
-  private indexes$: Observable<any>
-
-  constructor(private store: Store<any>) {
-    super();
-    this.indexes$ = this.store.select(s => s.index.indexes.results);
-  }
-
-  /** Connect function called by the table to retrieve one stream containing the data to render. */
-  connect(): Observable<Index[]> {
-      const displayDataChanges = [
-        this.indexes$,
-      ];
-
-    return this.indexes$;
-  }
-
-  disconnect() {}
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.html b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.html
deleted file mode 100755
index 939ab06..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!--/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/ -->
-<mat-card class="input-card" (click)="onClick()">
-    <mat-toolbar color="primary" class="input-selector">
-            <mat-icon class="toolbar-icon">menu</mat-icon>
-            <span>INPUT: SQL++</span>	
-            <span class="spacer"></span>
-    </mat-toolbar>
-    <mat-card-content class="content-area">
-        <div class="codemirror-container">
-           <codemirror-metadata class="code" [(ngModel)]="queryMetadataString" [config]="codemirrorMetadataConfig">
-            </codemirror-metadata>  
-        </div>
-    </mat-card-content>
-    <mat-card-actions class="actions">
-        <button mat-button class="query-button" (click)="executeQuery()">RUN</button>
-        <span class="error-message">{{errorMessage}}</span>
-        <span class="spacer"></span>
-    </mat-card-actions>
-</mat-card>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.scss b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.scss
deleted file mode 100755
index b98080c..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.scss
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-$query-spacing-unit: 8px;
-
-.input-card {
-	display: flex;
-	flex-flow: column;
-	padding: 0;
-	margin: 0 auto;
-	margin-top: $query-spacing-unit;
-	height: 250px;
-	width: 95%;
-	overflow: hidden;
-}
-  
-.toolbar-icon {
-	padding: 0 14px 0 0;	
-	margin: 0;
-}
-
-.spacer {
-	flex: 1 1 auto;
-}
-  
-.input-selector {
-	max-height: 42px;
-	min-height: 42px;
-	justify-content: center;
-	//align-items: center;
-	font-size: 0.80rem;
-	font-weight: 500;
-	background-color: white;
-	border: 1px solid rgba(54, 147, 209, 0.87);
-}
-
-.content-area {
-	position: relative;
-	color: hsla(0,0%,0%,.87);
-	height: 120px;
-	padding: 0;
-	margin: $query-spacing-unit * 2;
-	overflow: none;
-}
-
-.codemirror-container {
-	width: 100%;
-	height: 100%;
-	padding: 0;
-	margin: 0;
-	font-size: 14px;
-	line-height: 1.8;
-}
-
-.actions {
-	border-top: 1px solid rgba(0, 0, 0, 0.1);
-	color: rgba(54, 147, 209, 0.87);
-	padding: $query-spacing-unit;
-	margin: 0;
-}
-
-.error-message {
-	border-bottom: 1px solid rgba(0, 0, 0, 0.1);
-	color: rgba(209, 54, 54, 0.87);
-	padding-top: 10px;  
-	padding-left: 20px;
-	text-overflow: ellipsis;
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.ts
deleted file mode 100755
index 06b9375..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.ts
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Component, ViewChild, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';
-import { Observable } from 'rxjs/Observable';
-import { Store } from '@ngrx/store';
-import * as sqlQueryActions from '../../shared/actions/query.actions'
-import * as dataverseActions from '../../shared/actions/dataverse.actions'
-import * as datasetActions from '../../shared/actions/dataset.actions'
-import * as datatypeActions from '../../shared/actions/datatype.actions'
-import * as indexActions from '../../shared/actions/index.actions'
-
-
-import * as CodeMirror from 'codemirror';
-
-/*
- * Query metadata component
- * has editor (codemirror) for writing some query
- */
-@Component({
-	moduleId: module.id,
-	selector: 'awc-query-metadata',
-	templateUrl:'input-metadata.component.html',
-	styleUrls: ['input-metadata.component.scss'],
-})
-
-export class InputQueryMetadataComponent {
-	private dataverses$: Observable<any>;
-	private datatypes$: Observable<any>;
-	private datasets$: Observable<any>;
-	private indexes$: Observable<any>;
-	dataverses = [];
-	datatypes = [];
-	datasets = [];
-	indexes = [];
-	queryMetadataString: string = "";
-	loaded$: Observable<any>;
-	errorMessage: string = "";
-
-  /**
-  * Initialize codemirror
-  */
-  codemirrorMetadataConfig = 	{ 	mode: "asterix",
-    //lineNumbers: true,
-    lineWrapping: true,
-    showCursorWhenSelecting: true,
-    autofocus: true
-  };
-
-	constructor(private store: Store<any>, private changeDetector: ChangeDetectorRef) {
-		this.store.select("sqlMetadataQuery").subscribe((data: any) => {
-			if (data.success === false){
-				if (data.sqlQueryMetadataError.errors){
-					this.errorMessage = "ERROR: " + data.sqlQueryMetadataError.errors[0].msg
-					this.changeDetector.detectChanges();
-				}
-			} else {
-				this.errorMessage = "SUCCEED";
-
-				// Refresh the tables automatically
-				let stringQuery = data.sqlQueryMetadataString;
-				stringQuery = stringQuery.toUpperCase();
-
-				if (stringQuery.includes("CREATE DATAVERSE") || stringQuery.includes("DROP DATAVERSE") ){
-    				this.store.dispatch(new dataverseActions.SelectDataverses('-'));
-				}
-				else if (stringQuery.includes("CREATE DATASET") || stringQuery.includes("DROP DATASET")){
-    				this.store.dispatch(new datasetActions.SelectDatasets('-'));
-				}
-				else if (stringQuery.includes("CREATE TYPE") || stringQuery.includes("DROP TYPE")){
-    				this.store.dispatch(new datatypeActions.SelectDatatypes('-'));
-				}
-				else if (stringQuery.includes("CREATE INDEX") || stringQuery.includes("DROP INDEX")){
-    				this.store.dispatch(new indexActions.SelectIndexes('-'));
-				}
-
-				this.changeDetector.detectChanges();
-			}
-
-		})
-	}
-
-	getQueryResults(queryMetadataString: string) {
-    	this.store.dispatch(new sqlQueryActions.ExecuteMetadataQuery(queryMetadataString));
-	  }
-
-	executeQuery() {
-		this.getQueryResults(this.queryMetadataString.replace(/\n/g, " "));
-		// Component View Refresh
-
-	}
-
-	onClick() {
-		this.errorMessage = "";
-	}
-
-	/* Cleans up error message */
-	cleanUp() {
-		this.errorMessage = "";
-	}
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/metadata-container.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/metadata-container.component.html b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/metadata-container.component.html
deleted file mode 100755
index a2f3a73..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/metadata-container.component.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!--/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/ -->
-<mat-tab-group class="metadata-menu" (selectedTabChange)="tabChange()">
-    <mat-tab label="DATAVERSES" class="submenu">
-        <div class="dataverses">
-            <awc-dataverses #dataverses [message]="message" class="dataverses"></awc-dataverses>
-        </div>
-    </mat-tab>
-    <mat-tab label="DATASETS">
-        <div class="datasets">
-            <awc-datasets #datasets [message]="message" class="datasets"></awc-datasets>
-        </div>  
-    </mat-tab>
-    <mat-tab label="DATATYPES">
-        <div class="datatypes">
-            <awc-datatypes #datatypes [message]="message" class="datatypes"></awc-datatypes>
-        </div>
-    </mat-tab>
-    <mat-tab label="INDEXES" class="indexes">
-        <div class="indexes">
-            <awc-indexes #indexes [message]="message" class="indexes"></awc-indexes>
-        </div>
-    </mat-tab>
-</mat-tab-group>
-

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/metadata-container.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/metadata-container.component.scss b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/metadata-container.component.scss
deleted file mode 100755
index 3857d74..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/metadata-container.component.scss
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
- .dataverses {
-    margin: 0;
-    min-height: 750px;
-    max-height: 750px;
-    width: 100%;
-    overflow: hidden;
- }
-
-.datasets {
-    margin: 0;
-    min-height: 750px;
-    max-height: 750px;
-    width: 100%;
-    overflow: hidden;
-}
-
-.datatypes {
-    margin: 0;
-    min-height: 750px;
-    max-height: 750px;
-    width: 100%;
-    overflow: hidden;
-}
-
-.indexes {
-    margin: 0;
-    min-height: 750px;
-    max-height: 750px;
-    width: 100%;
-    overflow: hidden;
-}
-
-.metadata-menu {    
-    /deep/ .mat-tab-label {
-        font-size: 0.80rem !important;
-        font-weight: 500  !important;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/metadata-container.component.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/metadata-container.component.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/metadata-container.component.ts
deleted file mode 100755
index c8382cf..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/metadata-container.component.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Component, ViewChild } from '@angular/core';
-
-@Component({
-	moduleId: module.id,
-	selector: 'awc-metadata-container',
-	templateUrl: 'metadata-container.component.html',
-	styleUrls: ['metadata-container.component.scss']
-})
-
-export class MetadataContainerComponent {
-
-	@ViewChild('dataverses') dataverses ;
-	@ViewChild('datasets') datasets ;
-	@ViewChild('datatypes') datatypes ;
-	@ViewChild('indexes') indexes ;
-	message = "";
-
-	constructor() {}
-
-	tabChange() {
-		this.indexes.cleanUp();
-		this.datasets.cleanUp();
-		this.datatypes.cleanUp();
-		this.dataverses.cleanUp();
-	}
-
-	
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/codemirror.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/codemirror.component.scss b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/codemirror.component.scss
deleted file mode 100755
index ba795c2..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/codemirror.component.scss
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-/* -- Place holder for future expansion --> */
-code {
-	width: 100%;
-	height: 100%;
-	padding: 10%;
-    margin: 0; 
-    overflow-wrap: break-word;
-    word-break: break-all;
-    background-color: pink;
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/codemirror.component.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/codemirror.component.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/codemirror.component.ts
deleted file mode 100755
index 91b711d..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/codemirror.component.ts
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-/**
- * Integrating codemirror (using ng2-codemirror) with our application
- *
- * component from "https://runkit.com/npm/ng2-codemirror"
- *                "https://www.npmjs.com/package/ng2-codemirror"
- * copy component from /src/codemirror.component.ts
- * and modified for custom mode (asterix aql, sql++ code hilighting)
- *
- * therefore, actually we don't need to "npm install ng2-codemirror"
- *
- * Because on the outside of this component,
- * It was hard to access the codemirror instance that 'ng-codemirror' use
- * So, we copied the component in our application and modified it
- *
- * 'codemirror.js(^5.23.0)' is included in the 'index.html'
- * And in this component(codemirror.component.ts)
- * add statement like "declare var CodeMirror: any;"
- *
- * I don't know whether this is right way
- *
- * ref 1) usage : https://embed.plnkr.co/8e9gxss9u10VeFrv29Zt/
- * ref 2) custom mode : http://jsfiddle.net/TcqAf/99/
- * ref 3) integrating : http://stackoverflow.com/questions/37092142/integrating-codemirror-with-angular2-typescript
- * ref 3) integrating :  https://medium.com/@s_eschweiler/using-external-libraries-with-angular-2-87e06db8e5d1#.8ok74uvwg
- */
- import {
-   Component,
-   Input,
-   Output,
-   ElementRef,
-   ViewChild,
-   EventEmitter,
-   forwardRef,
-   AfterViewInit,
-   OnDestroy
- } from '@angular/core';
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
- import * as CodeMirror from 'codemirror';
-
-/**
- * CodeMirror component
- * Usage :
- * <codemirror [(ngModel)]="data" [config]="{...}"></codemirror>
- */
-@Component({
-  moduleId: module.id,
-  selector: 'codemirror',
-  providers: [
-    {
-      provide: NG_VALUE_ACCESSOR,
-      useExisting: forwardRef(() => CodemirrorComponent),
-      multi: true
-    }
-  ],
-  styleUrls: ['codemirror.component.scss'],
-  template: `<textarea class="code" #host></textarea>`,//,
-})
-
-export class CodemirrorComponent implements AfterViewInit, OnDestroy {
-  @Input() config;
-  @Output() change = new EventEmitter();
-  @Output() focus = new EventEmitter();
-  @Output() blur = new EventEmitter();
-  @Output() instance = null;
-  @ViewChild('host') host;
-  _value = '';
-
-  /**
-   * Constructor
-   */
-  constructor(){
-		/**
-		 * Custom mode for AsterixDB
-		 */
-		CodeMirror.defineMode("asterix", function(){
-		  var KEYWORD_MATCH = [
-				// AQL
-				"drop", "dataverse", "dataset",
-				"if", "exists", "create",
-				"use", "type", "as", "closed",
-				"primary", "key",  "hints", "cardinality",
-				"index", "on", "btree", "rtree", "keyword",
-				"for", "in", "Metadata", "Dataset",
-				"return", "Index", "load", "using", "localfs", "path", "format",
-				// Query (not perfect)
-				"from", "in", "with", "group", "by", "select",
-				"let", "where", "order", "asc", "desc", "limit",
-				"keeping", "offset", "distinct", "or", "and",
-				// Built in functions (TODO)
-				// Built in functions (TODO)
-				// Built in functions (TODO)
-				// Asterix Data Model
-				// Primitive type
-				"boolean",
-				"tinyint", "smallint", "integer", "bigint",
-				"float", "double",
-				"string",
-				"binary", "hex", "base64",
-				"point", "line", "rectangle", "circle", "polygon",
-				"date", "time", "datetime", "duration", "interval", "uuid",
-				// Incomplete information type
-				"null", "missing",
-				// Derived type
-				// object {}, array [], multiset {{}}
-				// SQL++
-				"DROP", "DATAVERSE", "IF", "EXISTS", "CREATE", "USE", "TYPE", "AS", "DATASET", "PRIMARY", "KEY",
-				"INDEX", "SELECT", "VALUE", "INSERT", "INTO", "FROM", "WHERE", "AND", "SOME", "IN", "SATISFIES", "IS", "UNKNOWN", "NOT", "EVERY",
-				"GROUP", "BY", "ORDER", "DESC", "LIMIT", "OR", "SET", "DELETE", "LOAD", "USING",
-			];
-
-			//"(", ")","{{", "}}", "[", "]",	"{", "}",  ";", ",", ":","?", "=",
-      var VAR_MATCH = /[$][a-zA-Z]+(\d*)/;
-			var DOT_MATCH = /[.](\S)*/;
-			var DOUBLE_QUOTE_MATCH = /["].*["]/;
-			var SINGLE_QUOTE_MATCH = /['].*[']/;
-			var BREAK_POINT = /(\s)/;
-
-			return {
-				startState: function() {return {inString: false};},
-				token: function(stream, state) {
-					if (state.newLine == undefined)state.newLine = true;
-
-					//match variable reference
-					if (stream.match(VAR_MATCH)) {
-						return "variable";
-					}
-
-					if (stream.match(DOT_MATCH)) {
-						return "dot-variable";
-					}
-
-					//string variable match
-					if (stream.match(DOUBLE_QUOTE_MATCH)) {
-						return "string";
-					}
-					if (stream.match(SINGLE_QUOTE_MATCH)) {
-						return "string";
-					}
-
-					//keyword match
-					for (var i in KEYWORD_MATCH){
-						if (state.newLine && stream.match(KEYWORD_MATCH[i])){
-								return "keyword";
-						 }
-					}
-
-					if (stream.peek() === " " || stream.peek() === null){
-						state.newLine = true;
-					}else{
-						state.newLine = false;
-					}
-					stream.next();
-					return null;
-				}
-			};
-		});
-	}
-
-  get value() { return this._value; };
-
-  @Input() set value(v) {
-    if (v !== this._value) {
-      this._value = v;
-      this.onChange(v);
-    }
-  }
-
-  /**
-   * On component destroy
-   */
-  ngOnDestroy() {}
-
-  /**
-   * On component view init
-   */
-  ngAfterViewInit() {
-    this.config = this.config || {};
-    this.codemirrorInit(this.config);
-  }
-
-  /**
-   * Initialize codemirror
-   */
-  codemirrorInit(config){
-    this.instance = CodeMirror.fromTextArea(this.host.nativeElement, config);
-    this.instance.setValue(this._value);
-    this.instance.setSize(null, 90);
-    this.instance.on('change', () => {
-      this.updateValue(this.instance.getValue());
-    });
-
-    this.instance.on('focus', () => {
-      this.focus.emit();
-    });
-
-    this.instance.on('blur', () => {
-      this.blur.emit();
-    });
-  }
-
-  /**
-   * Value update process
-   */
-  updateValue(value){
-    this.value = value;
-    this.onTouched();
-    this.change.emit(value);
-  }
-
-  /**
-   * Implements ControlValueAccessor
-   */
-  writeValue(value){
-    this._value = value || '';
-    if (this.instance) {
-      this.instance.setValue(this._value);
-    }
-  }
-
-  onChange(_) {}
-  onTouched() {}
-  registerOnChange(fn){this.onChange = fn;}
-  registerOnTouched(fn){this.onTouched = fn;}
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/input.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/input.component.html b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/input.component.html
deleted file mode 100755
index 2eec6b7..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/input.component.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!--/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/ -->
-<mat-card class="input-card">
-	 <mat-toolbar color="primary" class="input-selector">
-			<mat-icon class="toolbar-icon">menu</mat-icon>
-			<span>INPUT: SQL++</span>	
-			<span class="spacer"></span>
-	</mat-toolbar>
-	<mat-card-content class="content-area">
-		<div class="codemirror-container">
-			<codemirror class="code" #host [(ngModel)]="queryString" [config]="codemirrorConfig"></codemirror>
-		</div>
-	</mat-card-content>
-	<mat-card-actions class="actions">
-		<button mat-button class="query-button" (click)="onClick()">RUN</button>
-	</mat-card-actions>
-</mat-card>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/input.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/input.component.scss b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/input.component.scss
deleted file mode 100755
index 437ff58..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/input.component.scss
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-$query-spacing-unit: 5px;
-
-.input-card {
-	display: flex;
-	flex-flow: column;
-	padding: 0;
-	margin: ($query-spacing-unit * 2);
-	height: 200px;
-	width: 100%;
-	min-height: 150px; 
-
-	//background-color: orange;
-}
-  
-.toolbar-icon {
-	padding: 0 14px 0 0;	
-	margin: 0;
-}
-
-.spacer {
-	flex: 1 1 auto;
-}
-  
-.input-selector {
-	max-height: 42px;
-	min-height: 42px;
-	justify-content: center;
-	//align-items: center;
-	font-size: 0.80rem;
-	font-weight: 500;
-	background-color: white;
-	border: 1px solid rgba(54, 147, 209, 0.87);
-}
-
-.content-area {
-	//position: relative;
-	color: hsla(0,0%,0%,.87);
-	//height: 102px;
-	padding: 0;
-	margin: 0;
-	overflow: none;
-  }
-
-.codemirror-container {
-	width: 95%;
-	height: 98%;
-	padding: 0; // ($query-spacing-unit * 2);
-	margin: 0 auto;
-	font-size: 14px;
-	//letter-spacing: 3px;
-	line-height: 1.8;
-	background-color: red;
-}
-
-//.code {
-//	width: 100%;
-//	height: 100%;
-//	padding: 0;
-//	margin: 0; 
-//	overflow-wrap: break-word;
-//	word-break: break-all;
-//}
-
-.actions {
-	border-top: 1px solid rgba(0, 0, 0, 0.1);
-	color: rgba(54, 147, 209, 0.87);
-	padding-left: $query-spacing-unit;
-	margin: 0;
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/input.component.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/input.component.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/input.component.ts
deleted file mode 100755
index 9be9bd9..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/input.component.ts
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Component, ViewChild } from '@angular/core';
-import { Observable } from 'rxjs/Observable';
-import { Store } from '@ngrx/store';
-import * as sqlQueryActions from '../../shared/actions/query.actions'
-import * as CodeMirror from 'codemirror';
-
-/*
- * query component
- * has editor (codemirror) for writing some query
- */
-@Component({
-	moduleId: module.id,
-	selector: 'awc-query',
-	templateUrl:'input.component.html',
-	styleUrls: ['input.component.scss']
-})
-
-export class InputQueryComponent {
-	private guideSelectedDataset$: Observable<any>;		
-	private dataverses$: Observable<any>;	
-	private datatypes$: Observable<any>;
-	private datasets$: Observable<any>;	
-	private indexes$: Observable<any>;	
-	dataverses = [];
-	datatypes = [];
-	datasets = [];
-	indexes = [];
-	datasetName = "";
-	dataverseName = "";
-	queryString: string = ""
-	
-	/* Codemirror configuration
-	*/
-	codemirrorConfig = 	{ 	mode: "asterix",
-							lineWrapping: true,
-							showCursorWhenSelecting: true,
-							autofocus: true
-						}	;
-
-	loaded$: Observable<any>
-
-	constructor(private store: Store<any>) {
-		// Watching for guide selected or clicked dataset
-		this.guideSelectedDataset$ = this.store.select(s => s.dataset.guideSelectsDataset);
-		this.guideSelectedDataset$.subscribe((data: any) => {
-			if (data) {
-				this.datasetName = data;
-				for (let i = 0; i < this.datasets.length; i++) {
-					if ( this.datasets[i]['DatasetName'] === this.datasetName ) {
-						this.dataverseName = this.datasets[i]['DataverseName'];
-					}
-				}
-				this.queryString = "USE " + this.dataverseName + "; SELECT * FROM " + this.datasetName;
-			}
-		});
-
-		// Watching for Datatypes
-		this.dataverses$ = this.store.select(s => s.dataverse.dataverses.results);
-		this.dataverses$.subscribe((data: any[]) => {
-			this.dataverses = data;
-		});
-
-		// Watching for Datasets
-		this.datasets$ = this.store.select(s => s.dataset.datasets.results);
-		this.datasets$.subscribe((data: any[]) => {
-			this.datasets = data;
-		});
-	}
-
-	getQueryResults(queryString: string) {
-    	this.store.dispatch(new sqlQueryActions.ExecuteQuery(queryString));
-  	}
-
-	onClick() {
-		this.getQueryResults(this.queryString.replace(/\n/g, " "));
-	}
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.html b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.html
deleted file mode 100755
index 4641426..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.html
+++ /dev/null
@@ -1,44 +0,0 @@
-<!--/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/ -->
-<mat-card class="metadata-card">
-  <mat-toolbar color="primary" class="metadata-selector">
-    <mat-icon class="example-icon">menu</mat-icon>
-    <span>METADATA GUIDE</span>
-    <span class="spacer"></span>
-  </mat-toolbar>
-    <div class="metadata-content-area">
-    <div class="metadata-tree">
-      <div class="metadata-all">
-          <p-tree [style]="{'width':'100%', 'border': 'none', 'font-family': 'Roboto Mono', 'font-size': '0.80rem',
-          'font-weight': '500'}" selectionMode="single" [value]="nodesAll" (onNodeSelect)="nodeSelectAll($event)"></p-tree>
-      </div>
-      <div class="metadata-datasets">
-          <p-tree [style]="{'width':'100%', 'border': 'none', 'font-family': 'Roboto Mono', 'font-size': '0.80rem',
-          'font-weight': '500'}" selectionMode="single" [value]="nodesDatasets" (onNodeSelect)="nodeSelectDataset($event)"></p-tree>
-      </div>
-      <div class="metadata-datatypes">
-          <p-tree [style]="{'width':'100%', 'border': 'none', 'font-family': 'Roboto Mono', 'font-size': '0.80rem',
-          'font-weight': '500'}" selectionMode="single" [value]="nodesDatatypes"></p-tree>
-      </div>
-      <div class="metadata-index">
-          <p-tree [style]="{'width':'100%', 'border': 'none', 'font-family': 'Roboto Mono', 'font-size': '0.80rem',
-          'font-weight': '500'}" selectionMode="single" [value]="nodesIndexes"></p-tree>
-      </div>
-
-    </div>
-  </div>
-  <!--<mat-card-actions class="actions">
-     <button mat-button class="refresh-button" (click)="menuRefresh()">COLLAPSE</button>
-  </mat-card-actions> -->
-</mat-card>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.scss b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.scss
deleted file mode 100755
index 4ee2339..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.scss
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-$metadata-spacing-unit: 5px;
-
-.metadata-card {
-	display: flex;
-	flex-flow: column;
-	padding: 0;
-	margin: 0 auto; //($metadata-spacing-unit * 2);
-	margin-top: ($metadata-spacing-unit * 2);
-	margin-bottom: ($metadata-spacing-unit * 2);
-	min-height: 150px;
-	box-shadow: none !important;
-	width: 92%;
-	overflow: hidden;
-}
-
-.example-icon {
-	padding: 0 14px 0 0;
-	margin: 0;
-}
-
-.spacer {
-  flex: 1 1 auto;
-}
-
-.metadata-selector {
-	min-height: 42px;
-	max-height: 42px;
-	justify-content: center;
-	//align-items: center;
-	font-size: 0.80rem;
-	font-weight: 500;
-	background-color: white;
-	border: 1px solid rgba(54, 147, 209, 0.87);
-}
-
-.metadata-content-area {
-	padding: ($metadata-spacing-unit * 2);
-	margin: 0;
-}
-
-.metadata-tree {
-	min-height: 30px;
-	font-size: 0.80rem;
-	font-weight: 500;
-}
-
-.metadata-datasets {
-	margin-top: ($metadata-spacing-unit * 2);
-	margin-bottom: ($metadata-spacing-unit * 2);
-}
-
-.metadata-datatypes {
-	margin-top: ($metadata-spacing-unit * 2);
-	margin-bottom: ($metadata-spacing-unit * 2);
-}
-
-.metadata-dataindexes {
-	margin-top: ($metadata-spacing-unit * 2);
-	margin-bottom: ($metadata-spacing-unit * 2);
-}
-
-
-.metadata-tree.ui-tree {
-	//width: 260px !important;
-	font-size: 0.80rem;
-	font-weight: 500;
-	border: none !important;
-	background-color: red;
-}
-
-.refresh-button {
-	float: left;
-	margin-top: $metadata-spacing-unit;
-}
-
-.actions {
-	border-top: 1px solid rgba(0, 0, 0, 0.1);
-	color: rgba(54, 147, 209, 0.87);
-	padding: $metadata-spacing-unit;
-	margin: 0;
-}
-
-
-


[38/43] asterixdb git commit: [NO ISSUE] Load asterix-dashboard via service provider

Posted by im...@apache.org.
[NO ISSUE] Load asterix-dashboard via service provider

Change-Id: I0a5005cb8cfedf7ce2f59e76636f9dd21a0cc151
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2664
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Till Westmann <ti...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/0a7c5661
Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/0a7c5661
Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/0a7c5661

Branch: refs/heads/release-0.9.4-pre-rc
Commit: 0a7c5661d369b89a139517201def6a02d6774b91
Parents: 3ae6ef0
Author: Michael Blow <mb...@apache.org>
Authored: Mon May 28 09:26:52 2018 -0400
Committer: Michael Blow <mb...@apache.org>
Committed: Tue May 29 09:05:09 2018 -0700

----------------------------------------------------------------------
 asterixdb/asterix-app/pom.xml                   |  5 ----
 .../hyracks/bootstrap/CCApplication.java        |  7 +++--
 .../api/http/IQueryWebServerRegistrant.java     | 22 ++++++++++++++
 .../asterix/api/http/IServletRegistrant.java    | 26 ++++++++++++++++
 .../api/http/QueryWebServerRegistrant.java      | 22 ++++++++++++++
 .../http/server/QueryWebInterfaceServlet.java   |  2 +-
 .../QueryWebInterfaceServletRegistrant.java     | 31 ++++++++++++++++++++
 ...e.asterix.api.http.IQueryWebServerRegistrant | 19 ++++++++++++
 asterixdb/asterix-server/pom.xml                |  6 ++++
 9 files changed, 132 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/0a7c5661/asterixdb/asterix-app/pom.xml
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/pom.xml b/asterixdb/asterix-app/pom.xml
index 020bc6c..f06b6d2 100644
--- a/asterixdb/asterix-app/pom.xml
+++ b/asterixdb/asterix-app/pom.xml
@@ -387,11 +387,6 @@
     </dependency>
     <dependency>
       <groupId>org.apache.asterix</groupId>
-      <artifactId>asterix-dashboard</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.asterix</groupId>
       <artifactId>asterix-common</artifactId>
       <version>${project.version}</version>
       <type>test-jar</type>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/0a7c5661/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java
index 699892e..7224526 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java
@@ -29,8 +29,10 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.ServiceLoader;
 import java.util.concurrent.ConcurrentMap;
 
+import org.apache.asterix.api.http.IQueryWebServerRegistrant;
 import org.apache.asterix.api.http.ctx.StatementExecutorContext;
 import org.apache.asterix.api.http.server.ActiveStatsApiServlet;
 import org.apache.asterix.api.http.server.ApiServlet;
@@ -46,7 +48,6 @@ import org.apache.asterix.api.http.server.QueryCancellationServlet;
 import org.apache.asterix.api.http.server.QueryResultApiServlet;
 import org.apache.asterix.api.http.server.QueryServiceServlet;
 import org.apache.asterix.api.http.server.QueryStatusApiServlet;
-import org.apache.asterix.api.http.server.QueryWebInterfaceServlet;
 import org.apache.asterix.api.http.server.RebalanceApiServlet;
 import org.apache.asterix.api.http.server.ServletConstants;
 import org.apache.asterix.api.http.server.ShutdownApiServlet;
@@ -272,7 +273,9 @@ public class CCApplication extends BaseCCApplication {
         HttpServer queryWebServer = new HttpServer(webManager.getBosses(), webManager.getWorkers(),
                 externalProperties.getQueryWebInterfacePort());
         queryWebServer.setAttribute(HYRACKS_CONNECTION_ATTR, hcc);
-        queryWebServer.addServlet(new QueryWebInterfaceServlet(appCtx, queryWebServer.ctx(), new String[] { "/*" }));
+        ServiceLoader.load(IQueryWebServerRegistrant.class).iterator()
+                .forEachRemaining(c -> c.register(appCtx, queryWebServer));
+
         return queryWebServer;
     }
 

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/0a7c5661/asterixdb/asterix-common/src/main/java/org/apache/asterix/api/http/IQueryWebServerRegistrant.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/api/http/IQueryWebServerRegistrant.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/api/http/IQueryWebServerRegistrant.java
new file mode 100644
index 0000000..c05396a
--- /dev/null
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/api/http/IQueryWebServerRegistrant.java
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.api.http;
+
+public interface IQueryWebServerRegistrant extends IServletRegistrant {
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/0a7c5661/asterixdb/asterix-common/src/main/java/org/apache/asterix/api/http/IServletRegistrant.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/api/http/IServletRegistrant.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/api/http/IServletRegistrant.java
new file mode 100644
index 0000000..f6f2b3e
--- /dev/null
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/api/http/IServletRegistrant.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.api.http;
+
+import org.apache.asterix.common.dataflow.ICcApplicationContext;
+import org.apache.hyracks.http.server.HttpServer;
+
+public interface IServletRegistrant {
+    void register(ICcApplicationContext appCtx, HttpServer webServer);
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/0a7c5661/asterixdb/asterix-common/src/main/java/org/apache/asterix/api/http/QueryWebServerRegistrant.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/api/http/QueryWebServerRegistrant.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/api/http/QueryWebServerRegistrant.java
new file mode 100644
index 0000000..a33d6ce
--- /dev/null
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/api/http/QueryWebServerRegistrant.java
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.api.http;
+
+public interface QueryWebServerRegistrant extends IServletRegistrant {
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/0a7c5661/asterixdb/asterix-dashboard/src/main/java/org/apache/asterix/api/http/server/QueryWebInterfaceServlet.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/java/org/apache/asterix/api/http/server/QueryWebInterfaceServlet.java b/asterixdb/asterix-dashboard/src/main/java/org/apache/asterix/api/http/server/QueryWebInterfaceServlet.java
index 598d802..91b22e9 100644
--- a/asterixdb/asterix-dashboard/src/main/java/org/apache/asterix/api/http/server/QueryWebInterfaceServlet.java
+++ b/asterixdb/asterix-dashboard/src/main/java/org/apache/asterix/api/http/server/QueryWebInterfaceServlet.java
@@ -40,7 +40,7 @@ public class QueryWebInterfaceServlet extends StaticResourceServlet {
     private static final Logger LOGGER = LogManager.getLogger();
     private ICcApplicationContext appCtx;
 
-    public QueryWebInterfaceServlet(ICcApplicationContext appCtx, ConcurrentMap<String, Object> ctx, String[] paths) {
+    QueryWebInterfaceServlet(ICcApplicationContext appCtx, ConcurrentMap<String, Object> ctx, String... paths) {
         super(ctx, paths);
         this.appCtx = appCtx;
     }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/0a7c5661/asterixdb/asterix-dashboard/src/main/java/org/apache/asterix/api/http/server/QueryWebInterfaceServletRegistrant.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/java/org/apache/asterix/api/http/server/QueryWebInterfaceServletRegistrant.java b/asterixdb/asterix-dashboard/src/main/java/org/apache/asterix/api/http/server/QueryWebInterfaceServletRegistrant.java
new file mode 100644
index 0000000..5cc462e
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/main/java/org/apache/asterix/api/http/server/QueryWebInterfaceServletRegistrant.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.api.http.server;
+
+import org.apache.asterix.api.http.IQueryWebServerRegistrant;
+import org.apache.asterix.common.dataflow.ICcApplicationContext;
+import org.apache.hyracks.http.server.HttpServer;
+
+public class QueryWebInterfaceServletRegistrant implements IQueryWebServerRegistrant {
+
+    @Override
+    public void register(ICcApplicationContext appCtx, HttpServer webServer) {
+        webServer.addServlet(new QueryWebInterfaceServlet(appCtx, webServer.ctx(), "/*"));
+    }
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/0a7c5661/asterixdb/asterix-dashboard/src/main/resources/META-INF/services/org.apache.asterix.api.http.IQueryWebServerRegistrant
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/META-INF/services/org.apache.asterix.api.http.IQueryWebServerRegistrant b/asterixdb/asterix-dashboard/src/main/resources/META-INF/services/org.apache.asterix.api.http.IQueryWebServerRegistrant
new file mode 100644
index 0000000..7d23f78
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/main/resources/META-INF/services/org.apache.asterix.api.http.IQueryWebServerRegistrant
@@ -0,0 +1,19 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+org.apache.asterix.api.http.server.QueryWebInterfaceServletRegistrant
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/0a7c5661/asterixdb/asterix-server/pom.xml
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-server/pom.xml b/asterixdb/asterix-server/pom.xml
index d014d2b..71bd35e 100644
--- a/asterixdb/asterix-server/pom.xml
+++ b/asterixdb/asterix-server/pom.xml
@@ -402,6 +402,7 @@
             <usedDependency>org.apache.asterix:asterix-external-data</usedDependency>
             <usedDependency>org.codehaus.mojo.appassembler:appassembler-booter</usedDependency>
             <usedDependency>org.apache.asterix:asterix-fuzzyjoin</usedDependency>
+            <usedDependency>org.apache.asterix:asterix-dashboard</usedDependency>
           </usedDependencies>
         </configuration>
       </plugin>
@@ -655,5 +656,10 @@
       <artifactId>hyracks-test-support</artifactId>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.apache.asterix</groupId>
+      <artifactId>asterix-dashboard</artifactId>
+      <version>${project.version}</version>
+    </dependency>
   </dependencies>
 </project>


[36/43] asterixdb git commit: [ASTERIXDB-2318] Build dashboard in mvn

Posted by im...@apache.org.
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/app.component.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/app.component.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/app.component.ts
deleted file mode 100755
index a913109..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/app.component.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Component } from '@angular/core';
-import { AppCoreService } from './shared/services/app-core.service'
-
-/*
- * Root component
- * Defines AsterixDB Dashboard application's layout
- */
-@Component({
-  selector: 'awc-root',
-  templateUrl: './app.component.html',
-  styleUrls: ['./app.component.scss']
-})
-export class AppComponent {
-  title = 'Asterix DB Web Console';
-
-  constructor(private appCoreService: AppCoreService) {
-  }
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/app.module.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/app.module.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/app.module.ts
deleted file mode 100755
index 11c8602..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/app.module.ts
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { BrowserModule } from '@angular/platform-browser';
-import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
-import { HttpClientModule } from '@angular/common/http';
-import { EffectsModule } from '@ngrx/effects';
-import { DataverseEffects } from './shared/effects/dataverse.effects';
-import { DatasetEffects } from './shared/effects/dataset.effects';
-import { DatatypeEffects } from './shared/effects/datatype.effects';
-import { IndexEffects } from './shared/effects/index.effects';
-import { SQLQueryEffects } from './shared/effects/query.effects';
-import { MetadataEffects } from './shared/effects/metadata.effects';
-import { AppComponent } from './app.component';
-import { AppBarComponent }  from './dashboard/appbar.component';
-import { DataverseCollection } from './dashboard/metadata/dataverses-collection/dataverses.component';
-import { DatasetCollection } from './dashboard/metadata/datasets-collection/datasets.component';
-import { DatatypeCollection } from './dashboard/metadata/datatypes-collection/datatypes.component';
-import { CodemirrorComponent } from './dashboard/query/codemirror.component';
-import { CodemirrorMetadataComponent } from './dashboard/metadata/codemirror-metadata.component';
-import { IndexCollection } from './dashboard/metadata/indexes-collection/indexes.component';
-import { MetadataContainerComponent }  from './dashboard/metadata/metadata-container.component';
-import { MetadataComponent }  from './dashboard/query/metadata.component';
-import { QueryContainerComponent }  from './dashboard/query/query-container.component';
-import { InputQueryComponent }  from './dashboard/query/input.component';
-import { InputQueryMetadataComponent }  from './dashboard/metadata/input-metadata.component';
-import { QueryOutputComponent, SafeHtmlPipe }  from './dashboard/query/ouput.component';
-import { AppTabComponent }  from './dashboard/apptab.component';
-import { KeysPipe } from './shared/pipes/keys.pipe';
-import { ObjectTypePipe } from './shared/pipes/objectType.pipe';
-import { ObjectArrayTypePipe } from './shared/pipes/objectArrayType.pipe';
-import { reducers } from './shared/reducers';
-import { SQLService } from './shared/services/async-query.service'
-import { AppCoreService } from './shared/services/app-core.service'
-import { MetadataService } from './shared/services/async-metadata.service'
-import { DBModule } from '@ngrx/db';
-import { FormsModule } from '@angular/forms';
-import { MaterialModule } from './material.module';
-import { NgModule } from '@angular/core';
-import { StoreModule,  } from '@ngrx/store';
-import { StoreDevtoolsModule } from '@ngrx/store-devtools';
-import { schema } from './db';
-import { DataTableModule, SharedModule } from 'primeng/primeng';
-import { TreeModule, TreeNode} from 'primeng/primeng';
-import { DialogCreateDataverse, DialogDropDataverse } from './dashboard/metadata/dataverses-collection/dataverses.component';
-import { DialogCreateDataset, DialogDropDataset } from './dashboard/metadata/datasets-collection/datasets.component';
-import { DialogCreateDatatype, DialogDropDatatype } from './dashboard/metadata/datatypes-collection/datatypes.component';
-import { DialogCreateIndex, DialogDropIndex } from './dashboard/metadata/indexes-collection/indexes.component';
-
-
-
-@NgModule({
-  declarations: [
-    AppComponent,
-    AppBarComponent,
-    InputQueryComponent,
-    InputQueryMetadataComponent,
-		QueryOutputComponent,
-    CodemirrorComponent,
-    CodemirrorMetadataComponent,
-		DataverseCollection,
-		DatasetCollection,
-		DatatypeCollection,
-		IndexCollection,
-    KeysPipe,
-		MetadataContainerComponent,
-    MetadataComponent,
-    QueryContainerComponent,
-		AppTabComponent,
-		ObjectTypePipe,
-    ObjectArrayTypePipe,
-    DialogCreateDataverse,
-    DialogDropDataverse,
-    DialogCreateDataset,
-    DialogDropDataset,
-    DialogCreateDatatype,
-    DialogDropDatatype,
-    DialogCreateIndex,
-    DialogDropIndex,
-    SafeHtmlPipe
-  ],
-  imports: [
-    TreeModule,
-    DataTableModule,
-    SharedModule,
-    FormsModule,
-    BrowserModule,
-		BrowserAnimationsModule,
-		DBModule.provideDB(schema),
-		EffectsModule.forRoot([MetadataEffects, DataverseEffects, DatasetEffects, DatatypeEffects, IndexEffects, SQLQueryEffects]),
-    HttpClientModule,
-    MaterialModule,
-		StoreModule.forRoot(reducers),
-		StoreDevtoolsModule.instrument({
-			maxAge: 10
-		})
-  ],
-  entryComponents: [
-    DialogCreateDataverse, 
-    DialogDropDataverse, 
-    DialogCreateDataset, 
-    DialogDropDataset , 
-    DialogCreateDatatype, 
-    DialogDropDatatype,
-    DialogCreateIndex, 
-    DialogDropIndex 
-  ],
-  providers: [AppCoreService, SQLService, MetadataService],
-  bootstrap: [AppComponent]
-})
-export class AppModule { }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/appbar.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/appbar.component.html b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/appbar.component.html
deleted file mode 100755
index 62cf771..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/appbar.component.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!--/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/ -->
-<header class="awc-navbar">
-    <nav class="awc-navbar-header">
-      <a mat-button class="awc-button" routerLink="/" aria-label="AsterixDB Web Console">
-      <img class="awc-asterixDB-logo"
-            src="assets/asterixdb_tm.png"
-            alt="AsterixDB">
-            <span>Administration Console</span>
-      </a>
-      <div class="flex-spacer"></div>
-      <a mat-button class="awc-button awc-navbar-hide-small" href="https://asterixDB.apache.org"
-         aria-label="WEBSITE">
-        WEBSITE
-      </a>
-      <a mat-button class="awc-button awc-navbar-hide-small" href="https://issues.apache.org/jira/browse/ASTERIXDB"
-         aria-label="FILE ISSUES">
-        FILE ISSUES
-      </a>
-      <a mat-button class="awc-button awc-navbar-hide-small" href="https://ci.apache.org/projects/asterixdb/index.html"
-         aria-label="DOCUMENTATION">
-        DOCUMENTATION
-      </a>
-      <a mat-button class="awc-button docs-navbar-hide-small" href="https://asterixdb.apache.org/community.html"
-         aria-label="CONTACT">
-        CONTACT
-      </a>
-
-      <a mat-button class="awc-button docs-navbar-hide-small" href="https://github.com/apache/asterixdb/"
-         aria-label="GITHUB">
-        GITHUB
-      </a>
-    </nav>
-</header>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/appbar.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/appbar.component.scss b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/appbar.component.scss
deleted file mode 100755
index 8a764e6..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/appbar.component.scss
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-.awc-navbar {
-  a {
-    //color: #f0f0f0;
-    text-decoration: none;
-  }
-
-  border-bottom: 1px solid  hsla(0,0%,0%,.10);
-  overflow: hidden;
-}
-
-.awc-navbar-header {
-  display: flex;
-  flex-wrap: wrap;
-  align-items: center;
-  padding: 8px 16px;
-
-  > .mat-button {
-    &:last-child {
-      margin-left: auto;
-    }
-  }
-}
-
-.flex-spacer {
-  flex-grow: 1;
-}
-
-.awc-asterixDB-logo {
-  height: 26px;
-  margin: 0 4px 3px 0;
-  vertical-align: middle;
-}
-
-.awc-github-logo {
-  height: 21px;
-  margin: 0 7px 2px 0;
-  vertical-align: middle;
-}
-
-.awc-navbar-link {
-  text-decoration: inherit;
-  flex: 1;
-}
-
-/*
-* Rules for when the device is detected to be a small screen.
-* Moves content two rows instead of one.
-*/
-//@media (max-width: 720px) {}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/appbar.component.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/appbar.component.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/appbar.component.ts
deleted file mode 100755
index 563ed11..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/appbar.component.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Component } from '@angular/core';
-
-@Component({
-	moduleId: module.id,
-	selector: 'awc-bar',
-  templateUrl: 'appbar.component.html',
-	styleUrls: ['appbar.component.scss']
-})
-
-export class AppBarComponent {
-	constructor() {}
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/apptab.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/apptab.component.html b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/apptab.component.html
deleted file mode 100755
index bd5c963..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/apptab.component.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!--/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/ -->
-<div class="content">
-  <mat-tab-group class="menu">
-    <mat-tab label=">_ QUERY">
-      <awc-query-container></awc-query-container>
-    </mat-tab>
-    <mat-tab label="METADATA">
-      <awc-metadata-container></awc-metadata-container>
-    </mat-tab>
-  </mat-tab-group>
-</div>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/apptab.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/apptab.component.scss b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/apptab.component.scss
deleted file mode 100755
index 4d6fb7b..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/apptab.component.scss
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-.content {
-  width:95%;
-  margin: 0 auto;
-}
-
-.menu {    
-  /deep/ .mat-tab-label {
-      font-size: 0.80rem !important;
-      font-weight: 500  !important;
-  }
-}
-
-

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/apptab.component.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/apptab.component.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/apptab.component.ts
deleted file mode 100755
index b4db7f4..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/apptab.component.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Component } from '@angular/core';
-import { Store } from '@ngrx/store';
-
-@Component({
-  selector: 'awc-tab',
-  templateUrl: 'apptab.component.html',
-  styleUrls: ['apptab.component.scss']
-})
-
-export class AppTabComponent {
-  constructor(private store: Store<any>) {};
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/codemirror-metadata.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/codemirror-metadata.component.scss b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/codemirror-metadata.component.scss
deleted file mode 100755
index 9812ecb..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/codemirror-metadata.component.scss
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-.textarea-metadata {
-    background-color: red !important;
-    border: 1px solid black !important;
-    padding: 0;
-	margin: 0;
-}
-
-codemirror-metadata {
-    border: 1px solid #eee;
-    height: auto;
-    background-color: blue !important;
-    padding: 0;
-	margin: 0;
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/codemirror-metadata.component.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/codemirror-metadata.component.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/codemirror-metadata.component.ts
deleted file mode 100755
index aed6ddf..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/codemirror-metadata.component.ts
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-/**
- * Integrating codemirror (using ng2-codemirror) with our application
- *
- * component from "https://runkit.com/npm/ng2-codemirror"
- *                "https://www.npmjs.com/package/ng2-codemirror"
- * copy component from /src/codemirror.component.ts
- * and modified for custom mode (asterix aql, sql++ code hilighting)
- *
- * therefore, actually we don't need to "npm install ng2-codemirror"
- *
- * Because on the outside of this component,
- * It was hard to access the codemirror instance that 'ng-codemirror' use
- * So, we copied the component in our application and modified it
- *
- * 'codemirror.js(^5.23.0)' is included in the 'index.html'
- * And in this component(codemirror.component.ts)
- * add statement like "declare var CodeMirror: any;"
- *
- * I don't know whether this is right way
- *
- * ref 1) usage : https://embed.plnkr.co/8e9gxss9u10VeFrv29Zt/
- * ref 2) custom mode : http://jsfiddle.net/TcqAf/99/
- * ref 3) integrating : http://stackoverflow.com/questions/37092142/integrating-codemirror-with-angular2-typescript
- * ref 3) integrating :  https://medium.com/@s_eschweiler/using-external-libraries-with-angular-2-87e06db8e5d1#.8ok74uvwg
- */
-import {
-    Component,
-    Input,
-    Output,
-    ElementRef,
-    ViewChild,
-    EventEmitter,
-    forwardRef,
-    AfterViewInit,
-    OnDestroy,
-    ChangeDetectionStrategy
-  } from '@angular/core';
-  import { NG_VALUE_ACCESSOR } from '@angular/forms';
-  import * as CodeMirrorMetadata from 'codemirror';
- 
- /**
-  * CodeMirror component
-  * Usage :
-  * <codemirror [(ngModel)]="data" [config]="{...}"></codemirror>
-  */
- @Component({
-   moduleId: module.id,
-   selector: 'codemirror-metadata',
-   providers: [
-     {
-       provide: NG_VALUE_ACCESSOR,
-       useExisting: forwardRef(() => CodemirrorMetadataComponent),
-       multi: true
-     }
-   ],
-   styleUrls: ['codemirror-metadata.component.scss'],
-   template: `<textarea class="textarea-metadata" #hostMetadata></textarea>`,//,
- })
- 
-export class CodemirrorMetadataComponent implements AfterViewInit, OnDestroy {
-  @Input() config;
-  @Output() change = new EventEmitter();
-  @Output() focus = new EventEmitter();
-  @Output() blur = new EventEmitter();
-  @Output() instance = null;
-  @ViewChild('hostMetadata') hostMetadata;
-  _value = '';
- 
-  /**
-  * Constructor
-  */
-  constructor(){
-      /**
-      * Custom mode for AsterixDB
-      */
-      CodeMirrorMetadata.defineMode("asterix", function(){
-        var KEYWORD_MATCH = [
-              // AQL
-              "drop", "dataverse", "dataset",
-              "if", "exists", "create",
-              "use", "type", "as", "closed",
-              "primary", "key",  "hints", "cardinality",
-              "index", "on", "btree", "rtree", "keyword",
-              "for", "in", "Metadata", "Dataset",
-              "return", "Index", "load", "using", "localfs", "path", "format",
-              // Query (not perfect)
-              "from", "in", "with", "group", "by", "select",
-              "let", "where", "order", "asc", "desc", "limit",
-              "keeping", "offset", "distinct", "or", "and",
-              // Built in functions (TODO)
-              // Built in functions (TODO)
-              // Built in functions (TODO)
-              // Asterix Data Model
-              // Primitive type
-              "boolean",
-              "tinyint", "smallint", "integer", "bigint",
-              "float", "double",
-              "string",
-              "binary", "hex", "base64",
-              "point", "line", "rectangle", "circle", "polygon",
-              "date", "time", "datetime", "duration", "interval", "uuid",
-              // Incomplete information type
-              "null", "missing",
-              // Derived type
-              // object {}, array [], multiset {{}}
-              // SQL++
-              "DROP", "DATAVERSE", "IF", "EXISTS", "CREATE", "USE", "TYPE", "AS", "DATASET", "PRIMARY", "KEY",
-              "INDEX", "SELECT", "VALUE", "INSERT", "INTO", "FROM", "WHERE", "AND", "SOME", "IN", "SATISFIES", "IS", "UNKNOWN", "NOT", "EVERY",
-              "GROUP", "BY", "ORDER", "DESC", "LIMIT", "OR", "SET", "DELETE", "LOAD", "USING",
-          ];
-
-          //"(", ")","{{", "}}", "[", "]",	"{", "}",  ";", ",", ":","?", "=",
-        var VAR_MATCH = /[$][a-zA-Z]+(\d*)/;
-        var DOT_MATCH = /[.](\S)*/;
-        var DOUBLE_QUOTE_MATCH = /["].*["]/;
-        var SINGLE_QUOTE_MATCH = /['].*[']/;
-        var BREAK_POINT = /(\s)/;
-
-        return {
-            startState: function() {return {inString: false};},
-            token: function(stream, state) {
-                if (state.newLine == undefined)state.newLine = true;
-
-                //match variable reference
-                if (stream.match(VAR_MATCH)) {
-                    return "variable";
-                }
-
-                if (stream.match(DOT_MATCH)) {
-                    return "dot-variable";
-                }
-
-                //string variable match
-                if (stream.match(DOUBLE_QUOTE_MATCH)) {
-                    return "string";
-                }
-                if (stream.match(SINGLE_QUOTE_MATCH)) {
-                    return "string";
-                }
-
-                //keyword match
-                for (var i in KEYWORD_MATCH){
-                    if (state.newLine && stream.match(KEYWORD_MATCH[i])){
-                            return "keyword";
-                    }
-                }
-
-                if (stream.peek() === " " || stream.peek() === null){
-                    state.newLine = true;
-                }else{
-                    state.newLine = false;
-                }
-                stream.next();
-                return null;
-            }
-        };
-      });
-   }
- 
-  get value() { return this._value; };
- 
-  @Input() set value(v) {
-    if (v !== this._value) {
-      this._value = v;
-      this.onChange(v);
-    }
-  }
-
-  /**
-  * On component destroy
-  */
-  ngOnDestroy() {}
- 
-   /**
-    * On component view init
-    */
-  ngAfterViewInit() {
-  this.config = this.config || {};
-  this.codemirrorInit(this.config); 
-  }
-
-  /**
-  * Initialize codemirror
-  */
-  codemirrorMetadataConfig = 	{ 	mode: "asterix",
-    //lineNumbers: true,
-    lineWrapping: true,
-    showCursorWhenSelecting: true,
-    autofocus: true
-  };
-
-  codemirrorInit(config){
-    this.instance = CodeMirrorMetadata.fromTextArea(this.hostMetadata.nativeElement, this.codemirrorMetadataConfig);
-    this.instance.setSize("100%" , "100px");
-    this.instance.on('change', () => {
-      this.updateValue(this.instance.getValue());
-    });
-
-    this.instance.on('focus', () => {
-      this.focus.emit();
-    });
-
-    this.instance.on('blur', () => {
-      this.blur.emit();
-    });
-  }
- 
-  /**
-  * Value update process
-  */
-  updateValue(value){
-    this.value = value;
-    this.onTouched();
-    this.change.emit(value);
-  }
- 
-  /**
-  * Implements ControlValueAccessor
-  */
-  writeValue(value){
-    this._value = value || '';
-    if (this.instance) {
-      this.instance.setValue(this._value);
-    }
-  }
- 
-  onChange(_) {}
-  onTouched() {}
-  registerOnChange(fn){this.onChange = fn;}
-  registerOnTouched(fn){this.onTouched = fn;}
-} 
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-create-dialog.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-create-dialog.component.html b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-create-dialog.component.html
deleted file mode 100755
index ef88719..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-create-dialog.component.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/-->
-<!-- Place holder for future expansion -->

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-create-dialog.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-create-dialog.component.scss b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-create-dialog.component.scss
deleted file mode 100755
index c969489..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-create-dialog.component.scss
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-.dataset-dialog {    
-    font-family: "Roboto Mono", monospace;
-    font-size: 0.80rem;
-    font-weight: 500;
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-drop-dialog.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-drop-dialog.component.html b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-drop-dialog.component.html
deleted file mode 100755
index 517006c..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-drop-dialog.component.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!--/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/-->
-<div class="dataset-dialog">
-    <p mat-dialog-title>DROP DATASET</p>
-    <mat-dialog-content>
-        <p>PLEASE GIVE THE NAME OF THE DATASET TO DROP</p>
-    </mat-dialog-content>
-        <mat-form-field>
-            <input matInput tabindex="0" [(ngModel)]="data.datasetName">
-        </mat-form-field>
-    <mat-dialog-actions>
-        <button mat-button (click)="onClick()" tabindex="1">DROP</button>
-        <button mat-button (click)="onNoClick()" tabindex="2">CANCEL</button>
-    </mat-dialog-actions>
-</div>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-drop-dialog.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-drop-dialog.component.scss b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-drop-dialog.component.scss
deleted file mode 100755
index c969489..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-drop-dialog.component.scss
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-.dataset-dialog {    
-    font-family: "Roboto Mono", monospace;
-    font-size: 0.80rem;
-    font-weight: 500;
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/datasets.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/datasets.component.html b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/datasets.component.html
deleted file mode 100755
index f556951..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/datasets.component.html
+++ /dev/null
@@ -1,112 +0,0 @@
-<!--/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/ -->
-<div class="container" (click)="onClick()">
-  <div class="master">
-      <mat-card class="datasets-card" *ngIf="loaded$ | async as ld">
-        <mat-toolbar color="primary" class="datasets-selector">
-            <mat-icon class="icon">menu</mat-icon>
-            <span>DATASETS - METADATA</span>
-            <span class="spacer"></span>
-        </mat-toolbar>
-        <mat-card-content class="datasets-content">
-            <mat-table #table [dataSource]="dataSource" class="datasets-table">
-                <!-- CompactionPolicy Column -->
-                <ng-container matColumnDef="CompactionPolicy">
-                  <mat-header-cell *matHeaderCellDef class="header-compactionpolicy-cell">Compaction Policy</mat-header-cell>
-                  <mat-cell *matCellDef="let element" class="dataset-compactionpolicy-cell"> {{element.CompactionPolicy}} </mat-cell>
-                </ng-container>
-    
-                <!-- DatasetId Column -->
-                <ng-container matColumnDef="DatasetId">
-                  <mat-header-cell *matHeaderCellDef class="header-datasetid-cell">Dataset Id</mat-header-cell>
-                  <mat-cell *matCellDef="let element" class="dataset-datasetid-cell"> {{element.DatasetId}} </mat-cell>
-                </ng-container>
-    
-                <!-- DatasetName Column -->
-                <ng-container matColumnDef="DatasetName">
-                  <mat-header-cell *matHeaderCellDef class="header-datasetname-cell">Dataset Name</mat-header-cell>
-                  <mat-cell *matCellDef="let element" class="dataset-datasetname-cell"> {{element.DatasetName}} </mat-cell>
-                </ng-container>
-    
-                <!-- DatasetType Column -->
-                <ng-container matColumnDef="DatasetType">
-                  <mat-header-cell *matHeaderCellDef class="header-datasettype-cell">Dataset Type</mat-header-cell>
-                  <mat-cell *matCellDef="let element" class="dataset-datasettype-cell"> {{element.DatasetType}} </mat-cell>
-                </ng-container>
-    
-                <!-- DatatypeDataverseName Column -->
-                <ng-container matColumnDef="DatatypeDataverseName">
-                  <mat-header-cell *matHeaderCellDef class="header-datatypedataversename-cell">Datatype Dataverse Name</mat-header-cell>
-                  <mat-cell *matCellDef="let element" class="dataset-datatypedataversename-cell"> {{element.DatatypeDataverseName}} </mat-cell>
-                </ng-container>
-    
-                <!-- DatatypeName Column -->
-                <ng-container matColumnDef="DatatypeName">
-                  <mat-header-cell *matHeaderCellDef class="header-datatypename-cell">Datatype Name</mat-header-cell>
-                  <mat-cell *matCellDef="let element" class="dataset-datatypename-cell"> {{element.DatatypeName}} </mat-cell>
-                </ng-container>
-    
-                <!-- DataverseName Column -->
-                <ng-container matColumnDef="DataverseName">
-                  <mat-header-cell *matHeaderCellDef class="header-dataversename-cell">Dataverse Name</mat-header-cell>
-                  <mat-cell *matCellDef="let element" class="dataset-dataversename-cell"> {{element.DataverseName}} </mat-cell>
-                </ng-container>
-    
-                <!-- GroupName Column -->
-                <ng-container matColumnDef="GroupName">
-                  <mat-header-cell *matHeaderCellDef class="header-groupname-cell">Group Name</mat-header-cell>
-                  <mat-cell *matCellDef="let element" class="dataset-groupname-cell"> {{element.GroupName}} </mat-cell>
-                </ng-container>
-    
-                <!-- PendingOp Column -->
-                <ng-container matColumnDef="PendingOp">
-                  <mat-header-cell *matHeaderCellDef class="header-pendingop-cell">Pending Op</mat-header-cell>
-                  <mat-cell *matCellDef="let element" class="dataset-pendingop-cell"> {{element.PendingOp}} </mat-cell>
-                </ng-container>
-    
-                <!-- DatasetType Column -->
-                <ng-container matColumnDef="Timestamp">
-                  <mat-header-cell *matHeaderCellDef class="header-timestamp-cell">Timestamp</mat-header-cell>
-                  <mat-cell *matCellDef="let element" class="dataset-timestamp-cell"> {{element.Timestamp}} </mat-cell>
-                </ng-container>
-    
-                <mat-header-row *matHeaderRowDef="['DatasetName', 'DataverseName', 'DatatypeName', 'Timestamp']"></mat-header-row>
-                <mat-row *matRowDef="let row; columns: ['DatasetName', 'DataverseName', 'DatatypeName', 'Timestamp'];"
-                  [ngClass]="{'highlight': selectedRowIndex == row.id}"
-                  (click)="highlight(row)">
-                </mat-row>
-            </mat-table>
-        </mat-card-content>
-        <mat-card-actions class="actions">
-            <button class="refresh-button" mat-button (click)="openDropDatasetDialog()">DROP</button>
-            <span class="error-message">{{errorMessage}}</span>
-            <span class="spacer"></span>
-            <button class="refresh-button" mat-button (click)="getDatasets()">REFRESH</button>
-        </mat-card-actions>
-      </mat-card>
-      <awc-query-metadata #querymetadata class="query"></awc-query-metadata>
-  </div>
-  <div class="detail">
-      <mat-card class="datasets-details-card">
-          <mat-toolbar color="primary" class="datasets-selector">
-              <mat-icon class="icon">menu</mat-icon>
-              <span>DATASET - METADATA - DETAILS</span>
-              <span class="spacer"></span>
-          </mat-toolbar>
-          <mat-card-content class="datasets-content output">
-            <span><pre>{{output}}</pre></span>
-          </mat-card-content>
-        </mat-card>
-  </div>
-</div>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/datasets.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/datasets.component.scss b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/datasets.component.scss
deleted file mode 100755
index 38a8272..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/datasets.component.scss
+++ /dev/null
@@ -1,415 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-$datasets-spacing-unit: 8px;
-
-.container {
-  display: flex;
-	flex-flow: row;
-	padding: 0;
-  margin: 0;
-}
-
-.master {
-  width: 60%;
-  overflow: hidden;
-}
-
-.detail {
-  width: 40%;
-  overflow: hidden;
-}
-
-.datasets-card {
-	display: flex;
-	flex-flow: column;
-  padding: 0;
-  margin:0 auto;
-  margin-top: ($datasets-spacing-unit * 2);
-  min-height: 450px;
-  max-height: 450px;
-  //min-width: 98%; //(100vw / 2);
-  //max-width: 98%; // (100vw / 2);
-  width: 95%; // 98%;
-  overflow: hidden;
-}
-
-.datasets-details-card {
-	display: flex;
-	flex-flow: column;
-  padding: 0;
-  margin:0 auto;
-  margin: ($datasets-spacing-unit * 2);
-  min-height: 716px;
-  max-height: 716px;
-  //min-width: 95%; //(100vw / 2);
-  //max-width: 95%; // (100vw / 2);
-  overflow: hidden;
-}
-
-.icon {
-	padding: 0 14px 0 0;
-	margin: 0;
-}
-
-.spacer {
-  flex: 1 1 auto;
-}
-
-.datasets-selector {
-	min-height: 42px;
-	max-height: 42px;
-	justify-content: center;
-	font-size: 0.80rem;
-  font-weight: 500;
-  background-color: white;
-	border: 1px solid rgba(54, 147, 209, 0.87);
-}
-
-.datasets-content {
-  position:relative;
-  top: 0;
-  left: 0;
-  margin: 0px;
-  padding: 0px;
-  overflow: auto;
-}
-
-.datasets-table {
-  margin: $datasets-spacing-unit !important;
-  height: 330px;
-  overflow: auto;
-}
-
-.spacer {
-  flex: 1 1 auto;
-}
-
-.example-header {
-  min-height: 64px;
-  display: flex;
-  align-items: center;
-  padding-left: 24px;
-  font-size: 20px;
-}
-
-.mat-table {
-  overflow: auto;
-}
-
-.customWidthClass{
-   flex: 0 0 250px;
-}
-
-.mat-column-DataverseName {
-  text-align: left;
-}
-
-.mat-header-cell.mat-column-DataverseName {
-  text-align: left;
-}
-
-.mat-cell.mat-column-DataverseName {
-  text-align: left;
-}
-
-.header-compactionpolicy-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $datasets-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($datasets-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  text-transform: uppercase;
-  flex: 0 0 250px;
-}
-
-.dataset-compactionpolicy-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $datasets-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($datasets-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  flex: 0 0 250px;
-}
-
-.header-datasetid-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $datasets-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($datasets-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  text-transform: uppercase;
-  flex: 0 0 250px;
-}
-
-.dataset-datasetid-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $datasets-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($datasets-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  flex: 0 0 250px;
-}
-
-.header-datasetname-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $datasets-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($datasets-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  text-transform: uppercase;
-  flex: 0 0 250px;
-}
-
-.dataset-datasetname-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $datasets-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($datasets-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  flex: 0 0 250px;
-}
-
-.header-datasettype-cell {
-  border: none;
-  font-size: 12px;
-  //letter-spacing: 1px;
-  line-height: $datasets-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($datasets-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  text-transform: uppercase;
-  flex: 0 0 250px;
-}
-
-.dataset-datasettype-cell {
-  border: none;
-  font-size: 12px;
-  //letter-spacing: 1px;
-  line-height: $datasets-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($datasets-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  flex: 0 0 250px;
-}
-
-.header-datatypedataversename-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $datasets-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($datasets-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  text-transform: uppercase;
-  flex: 0 0 250px;
-}
-
-.dataset-datatypedataversename-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $datasets-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($datasets-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  flex: 0 0 250px;
-}
-
-.header-datatypename-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $datasets-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($datasets-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  text-transform: uppercase;
-  flex: 0 0 250px;
-}
-
-.dataset-datatypename-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $datasets-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($datasets-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  flex: 0 0 250px;
-}
-
-.header-dataversename-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $datasets-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($datasets-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  text-transform: uppercase;
-  flex: 0 0 250px;
-}
-
-.dataset-dataversename-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $datasets-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($datasets-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  flex: 0 0 250px;
-}
-
-
-.header-groupname-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $datasets-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($datasets-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  text-transform: uppercase;
-  flex: 0 0 250px;
-}
-
-.dataset-groupname-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $datasets-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($datasets-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  flex: 0 0 250px;
-}
-
-.header-timestamp-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $datasets-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($datasets-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  text-transform: uppercase;
-  flex: 0 0 250px;
-}
-
-.dataset-timestamp-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $datasets-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($datasets-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  flex: 0 0 250px;
-}
-
-.example-header {
-  min-height: 56px;
-  max-height: 56px;
-  display: flex;
-  align-items: center;
-  padding: 8px 24px 0;
-  font-size: 20px;
-  justify-content: space-between;
-  border-bottom: 1px solid transparent;
-}
-
-.mat-form-field {
-  font-size: 14px;
-  flex-grow: 1;
-  margin-top: 8px;
-}
-
-.example-no-results {
-  display: flex;
-  justify-content: center;
-  padding: 24px;
-  font-size: 12px;
-  font-style: italic;
-}
-
-.actions {
-  display: flex;
-  border-top: 1px solid rgba(0, 0, 0, 0.1);
-  color: rgba(54, 147, 209, 0.87);
-  padding: $datasets-spacing-unit;
-  margin: 0;
-}
-
-.error-message {
-  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
-  color: rgba(209, 54, 54, 0.87);
-  padding-top: 10px;  
-  padding-left: 20px;
-  text-overflow: ellipsis;
-}
-
-.output {
-  padding-left: ($datasets-spacing-unit * 2);
-}
-
-

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/datasets.component.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/datasets.component.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/datasets.component.ts
deleted file mode 100755
index 0fe8c74..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/datasets.component.ts
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Component, ElementRef, ViewChild, Inject, Input } from '@angular/core';
-import { Dataset } from '../../../shared/models/asterixDB.model'
-import { Store } from '@ngrx/store';
-import { Observable } from 'rxjs/Observable';
-import * as datasetActions from '../../../shared/actions/dataset.actions'
-import {DataSource} from '@angular/cdk/collections';
-import {BehaviorSubject} from 'rxjs/BehaviorSubject';
-import { Subscription } from "rxjs/Rx";
-import { State } from '../../../shared/reducers/dataset.reducer';
-import 'rxjs/add/operator/startWith';
-import 'rxjs/add/observable/merge';
-import 'rxjs/add/operator/map';
-import 'rxjs/add/operator/debounceTime';
-import 'rxjs/add/operator/distinctUntilChanged';
-import 'rxjs/add/observable/fromEvent';
-import { MatPaginator } from '@angular/material';
-import { SelectionModel } from '@angular/cdk/collections';
-import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';
-
-/**
- * Root component
- * Defines our application's layout
- */
-@Component({
-  selector: 'awc-datasets',
-  templateUrl: 'datasets.component.html',
-  styleUrls: ['datasets.component.scss']
-})
-
-export class DatasetCollection {
-  displayedColumns = "['CompactionPolicy', 'DatasetId', 'DatasetName', 'DatasetType', 'DatatypeDataverseName', 'DatatypeName', 'DataverseName', 'GroupName', 'PendingOp', 'Timestamp']"
-
-/*
-  compactionPolicy: string;
-  compactionPolicyProperties: CompactionPolicyProperties[]; *
-  datasetId: string;
-  datasetName: string;
-  datasetType:string;
-  datatypeDataverseName: string;
-  datatypeName: string;
-  dataverseName: string;
-  groupName:string;
-  hints: string[]; *
-  internalDetails: InternalDetails; *
-  pendingOp: string;
-  timestamp: string; */
-  datasetName: string;  
-  dataSource: DatasetDataSource | null;
-  loaded$: Observable<any>
-  @Input('message') errorMessage: string = ""
-  dsName = "";
-
-  constructor(private store: Store<any>, public dialog: MatDialog) {
-    this.loaded$ = this.store.select('dataset');
-
-    // Watching the name of the latest create dataset
-    this.store.select(s => s.dataset.createDatasetName).subscribe((data: any) => {
-      this.dsName = data;
-    })
-
-    // Watching the name of the latest drop dataset
-    this.store.select(s => s.dataset.dropDatasetName).subscribe((data: any) => {
-      this.dsName = data;
-    })
-
-    // Watching for the if there is a change in the collection
-		this.store.select(s => s.dataset.createDatasetSuccess).subscribe((data: any) => {
-      if (data === true) {
-        this.getDatasets();
-        this.errorMessage = "SUCCEED: CREATE DATASET " + this.dsName;
-      }  
-    })
-
-    // Watching for the if there is a error in a create dataset operation 
-		this.store.select(s => s.dataset.createDatasetError).subscribe((data: any) => {
-      if (data.errors) {
-        this.errorMessage = "ERROR: " + data.errors[0].msg;
-      }  
-    })
-
-
-    // Watching for the success message in a drop dataset operation 
-    this.store.select(s => s.dataset.dropDatasetSuccess).subscribe((data: any) => {
-      if (data === true) {
-        this.getDatasets();
-        this.errorMessage = "SUCCEED: DROP DATASET " + this.dsName;
-      }  
-    })
-
-    // Watching for the if there is a error in a drop dataset operation 
-		this.store.select(s => s.dataset.dropDatasetError).subscribe((data: any) => {
-      if (data.errors) {
-        this.errorMessage = "ERROR: " + data.errors[0].msg;
-      }  
-    })
-  }
-
-  getDatasets() {
-    // Trigger the effect to refresh the dataset
-    this.store.dispatch(new datasetActions.SelectDatasets('-'));
-  }
-
-  ngOnInit() {
-    // Assign the datasource for the table 
-    this.dataSource = new DatasetDataSource(this.store);
-  }
-
-  /* 
-  * opens the create dataverse dialog
-  */
-  openCreateDatasetDialog(): void {
-    let dialogRef = this.dialog.open(DialogCreateDataset, {
-      width: '420px',
-      data: { name: this.datasetName }
-    });
-
-    dialogRef.afterClosed().subscribe(result => {
-      this.datasetName = result;
-    });
-  }
-
-  /* 
-  * opens the drop dataverse dialog
-  */
-  openDropDatasetDialog(): void {
-    let dialogRef = this.dialog.open(DialogDropDataset, {
-      width: '420px',
-      data: { name: this.datasetName }
-    });
-
-    dialogRef.afterClosed().subscribe(result => {
-      this.datasetName = result;
-    });
-  }
-
-  /* 
-  * Clean up the error message on the screen
-  */
-  onClick(): void {
-    this.errorMessage = "";
-  }
-
-  output: any;
-
-  highlight(row){
-    this.output = JSON.stringify(row, null, 2);
-  }
-
-  @ViewChild('querymetadata') inputQuery;
-  
-  /* Cleans up error message */
-  cleanUp() {
-    this.errorMessage = ""; 
-    // Cascading   
-    this.inputQuery.cleanUp(); 
-  }
-}
-
-@Component({
-  selector: 'dataset-create-dialog',
-  templateUrl: 'dataset-create-dialog.component.html',
-  styleUrls: ['dataset-create-dialog.component.scss']
-})
-
-export class DialogCreateDataset {
-  constructor(  private store: Store<any>,
-                public dialogCreateDsRef: MatDialogRef<DialogCreateDataset>,
-                @Inject(MAT_DIALOG_DATA) public data: any) { }
-
-  onClick(): void {
-    this.store.dispatch(new datasetActions.CreateDataset(this.data.datasetName));
-    this.dialogCreateDsRef.close();
-  }
-
-  onNoClick(): void {
-    this.dialogCreateDsRef.close();
-  }
-}
-
-@Component({
-  selector: 'dataset-drop-dialog',
-  templateUrl: 'dataset-drop-dialog.component.html',
-  styleUrls: ['dataset-drop-dialog.component.scss']
-})
-
-export class DialogDropDataset {
-  constructor(  private store: Store<any>,
-                public dialogDropDsRef: MatDialogRef<DialogDropDataset>,
-                @Inject(MAT_DIALOG_DATA) public data: any) { }
-
-  onClick(): void {
-    this.store.dispatch(new datasetActions.DropDataset(this.data.datasetName));
-    this.dialogDropDsRef.close();
-  }
-
-  onNoClick(): void {
-    this.dialogDropDsRef.close();
-  }
-}
-
-export class DatasetDataSource extends DataSource<any> {
-  private datasets$: Observable<any>
-  constructor(private store: Store<any>) {
-    super();
-    this.datasets$ = this.store.select(s => s.dataset.datasets.results);
-  }
-
-  /** Connect function called by the table to retrieve one stream containing the data to render. */
-  connect(): Observable<Dataset[]> {
-      const displayDataChanges = [
-        this.datasets$,
-      ];
-
-    return this.datasets$;
-  }
-
-  disconnect() {}
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-create-dialog.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-create-dialog.component.html b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-create-dialog.component.html
deleted file mode 100755
index aca06fd..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-create-dialog.component.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/-->
-<!-- Place holder for future expansion -->
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-create-dialog.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-create-dialog.component.scss b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-create-dialog.component.scss
deleted file mode 100755
index 9502a7e..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-create-dialog.component.scss
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-.datatype-dialog {    
-    font-family: "Roboto Mono", monospace;
-    font-size: 0.80rem;
-    font-weight: 500;
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-drop-dialog.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-drop-dialog.component.html b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-drop-dialog.component.html
deleted file mode 100755
index 1157261..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-drop-dialog.component.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!--/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/-->
-<div class="datatype-dialog">
-    <p mat-dialog-title>DROP DATATYPE</p>
-    <mat-dialog-content>
-        <p>PLEASE GIVE THE NAME OF THE DATATYPE TO DROP</p>
-    </mat-dialog-content>
-        <mat-form-field>
-            <input matInput tabindex="0" [(ngModel)]="data.datatypeName">
-        </mat-form-field>
-    <mat-dialog-actions>
-        <button mat-button (click)="onClick()" tabindex="1">DROP</button>
-        <button mat-button (click)="onNoClick()" tabindex="2">CANCEL</button>
-    </mat-dialog-actions>
-</div>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-drop-dialog.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-drop-dialog.component.scss b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-drop-dialog.component.scss
deleted file mode 100755
index 9502a7e..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-drop-dialog.component.scss
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-.datatype-dialog {    
-    font-family: "Roboto Mono", monospace;
-    font-size: 0.80rem;
-    font-weight: 500;
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatypes.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatypes.component.html b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatypes.component.html
deleted file mode 100755
index e580a54..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatypes.component.html
+++ /dev/null
@@ -1,70 +0,0 @@
-<!--/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/ -->
-<div class="container" (click)="onClick()">
-  <div class="master">
-   <mat-card class="datatypes-card" *ngIf="loaded$ | async as ld">
-      <mat-toolbar color="primary" class="datatypes-selector">
-          <mat-icon class="icon">menu</mat-icon>
-          <span>DATATYPES - METADATA</span>
-          <span class="spacer"></span>
-      </mat-toolbar>
-      <mat-card-content class="datatypes-content">
-        <mat-table #table [dataSource]="dataSource" class="datatypes-table" role="treegrid">
-            <!-- Datatype Name -->
-            <ng-container matColumnDef="DatatypeName">
-              <mat-header-cell *matHeaderCellDef class="header-datatypename-cell">Datatype Name</mat-header-cell>
-              <mat-cell *matCellDef="let element" class="datatypes-datatypename-cell">{{element.DatatypeName}} </mat-cell>
-            </ng-container>
-
-            <!-- Data Type Dataverse Name -->
-            <ng-container matColumnDef="DataverseName">
-              <mat-header-cell *matHeaderCellDef class="header-dataversename-cell">Dataverse Name </mat-header-cell>
-              <mat-cell *matCellDef="let element" class="datatypes-dataversename-cell">{{element.DataverseName}} </mat-cell>
-            </ng-container>
-
-            <!-- Timestamp Column -->
-            <ng-container matColumnDef="Timestamp">
-              <mat-header-cell *matHeaderCellDef class="header-timestamp-cell">Timestamp</mat-header-cell>
-              <mat-cell *matCellDef="let element" class="datatypes-timestamp-cell">{{element.Timestamp}}</mat-cell>
-            </ng-container>
-
-            <mat-header-row *matHeaderRowDef="['DatatypeName', 'DataverseName', 'Timestamp']"></mat-header-row>
-            <mat-row *matRowDef="let row; columns: ['DatatypeName', 'DataverseName', 'Timestamp'];"
-                [ngClass]="{'highlight': selectedRowIndex == row.id}"
-                (click)="highlight(row)">
-            </mat-row>
-        </mat-table>
-      </mat-card-content>
-      <mat-card-actions class="actions">
-          <button class="refresh-button" mat-button (click)="openDropDatatypeDialog()">DROP</button>
-          <span class="error-message">{{errorMessage}}</span>
-          <span class="spacer"></span>
-          <button class="refresh-button" mat-button (click)="getDatatypes()">REFRESH</button>
-      </mat-card-actions>
-    </mat-card> 
-    <awc-query-metadata #querymetadata class="query"></awc-query-metadata>
-  </div>
-  <div class="detail">
-      <mat-card class="datatypes-details-card">
-          <mat-toolbar color="primary" class="datatypes-selector">
-              <mat-icon class="icon">menu</mat-icon>
-              <span>DATATYPE - METADATA - DETAILS</span>
-              <span class="spacer"></span>
-          </mat-toolbar>
-          <mat-card-content class="datatypes-content output">
-            <span><pre>{{output}}</pre></span>
-          </mat-card-content>
-        </mat-card>
-  </div>
-</div>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatypes.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatypes.component.scss b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatypes.component.scss
deleted file mode 100755
index d4aeffc..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatypes.component.scss
+++ /dev/null
@@ -1,267 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-$datatypes-spacing-unit: 8px;
-
-.container {
-  display: flex;
-	flex-flow: row;
-	padding: 0;
-  margin: 0;
-}
-
-.master {
-  width: 60%;
-  overflow: hidden;
-}
-
-.detail {
-  width: 40%;
-  overflow: hidden;
-}
-
-.datatypes-card {
-	display: flex;
-	flex-flow: column;
-  padding: 0;
-  margin:0 auto;
-  margin-top: ($datatypes-spacing-unit * 2);
-  min-height: 450px;
-  max-height: 450px;
-  //min-width: 98%; //(100vw / 2);
-  //max-width: 98%; // (100vw / 2);
-  width: 95%; // 98%;
-  overflow: hidden;
-}
-
-.datatypes-details-card {
-	display: flex;
-	flex-flow: column;
-  padding: 0;
-  margin:0 auto;
-  margin: ($datatypes-spacing-unit * 2);
-  min-height: 716px;
-  max-height: 716px;
-  //min-width: 95%; //(100vw / 2);
-  //max-width: 95%; // (100vw / 2);
-  overflow: hidden;
-}
-
-.icon {
-	padding: 0 14px 0 0;
-	margin: 0;
-}
-
-.spacer {
-  flex: 1 1 auto;
-}
-
-.datatypes-selector {
-	min-height: 42px;
-	max-height: 42px;
-	justify-content: center;
-	//align-items: center;
-	font-size: 0.80rem;
-  font-weight: 500;
-  background-color: white;
-	border: 1px solid rgba(54, 147, 209, 0.87);
-}
-
-.datatypes-content {
-  position:relative;
-  top: 0;
-  left: 0;
-  margin: 0px;
-  padding: 0px;
-  overflow: auto;
-}
-
-.datatypes-table {
-  margin: $datatypes-spacing-unit !important;
-  height: 330px;
-  overflow: auto;
-}
-
-.spacer {
-  flex: 1 1 auto;
-}
-
-.datatypes-toolbar {
-	display: block;
-  min-height: 56px;
-	height: 56px;
-//	width: 250px;
-  font-size: 12px;
-  white-space: nowrap;
-  overflow: hidden;
-  text-overflow: ellipsis;
-	letter-spacing: 1px;
-	font-weight: 400;
-	background: rgba(0,0,1, .80);
-}
-
-.example-header {
-  min-height: 64px;
-  display: flex;
-  align-items: center;
-  padding-left: 24px;
-  font-size: 20px;
-}
-
-.mat-table {
-  overflow: auto;
-}
-
-.customWidthClass{
-   flex: 0 0 75px;
-}
-
-.mat-column-DataverseName {
-  text-align: left;
-}
-
-.mat-header-cell.mat-column-DataverseName {
-  text-align: left;
-}
-
-.mat-cell.mat-column-DataverseName {
-  text-align: left;
-}
-
-.header-datatypename-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $datatypes-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($datatypes-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  text-transform: uppercase;
-  flex: 0 0 400px;
-}
-
-.datatypes-datatypename-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $datatypes-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($datatypes-spacing-unit * 2);
-  text-align: left;
-  color: hsla(0,0%,0%,.87);
-  flex: 0 0 400px;
-}
-
-.header-dataversename-cell {
-  display: flex;
-  justify-content: center;
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $datatypes-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($datatypes-spacing-unit * 2);
-  text-align: center;
-  color: hsla(0,0%,0%,.87);
-  text-transform: uppercase;
-  flex: 0 0 250px;
-}
-
-.datatypes-dataversename-cell {
-  display: flex;
-  justify-content: center;
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $datatypes-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($datatypes-spacing-unit * 2);
-  flex: 0 0 250px;
-}
-
-.header-timestamp-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $datatypes-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($datatypes-spacing-unit * 2);
-  text-align: center;
-  color: hsla(0,0%,0%,.87);
-  text-transform: uppercase;
-  flex: 0 0 250px;
-}
-
-.datatypes-timestamp-cell {
-  border: none;
-  font-size: 12px;
-  letter-spacing: 1px;
-  line-height: $datatypes-spacing-unit * 3;
-  font-weight: 400;
-  margin: 0;
-  padding: 0 ($datatypes-spacing-unit * 2);
-  text-align: center;
-  color: hsla(0,0%,0%,.87);
-  flex: 0 0 250px;
-}
-
-.example-header {
-  min-height: 56px;
-  max-height: 56px;
-  display: flex;
-  align-items: center;
-  padding: 8px 24px 0;
-  font-size: 20px;
-  justify-content: space-between;
-  border-bottom: 1px solid transparent;
-}
-
-.mat-form-field {
-  font-size: 14px;
-  flex-grow: 1;
-  margin-top: 8px;
-}
-
-.example-no-results {
-  display: flex;
-  justify-content: center;
-  padding: 24px;
-  font-size: 12px;
-  font-style: italic;
-}
-
-.actions {
-  display: flex;
-  border-top: 1px solid rgba(0, 0, 0, 0.1);
-  color: rgba(54, 147, 209, 0.87);
-  padding: $datatypes-spacing-unit;
-  margin: 0;
-}
-
-.error-message {
-  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
-  color: rgba(209, 54, 54, 0.87);
-  padding-top: 10px;  
-  padding-left: 20px;
-  text-overflow: ellipsis;
-}
-
-.output {
-  padding-left: ($datatypes-spacing-unit * 2);
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatypes.component.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatypes.component.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatypes.component.ts
deleted file mode 100755
index 953a27e..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatypes.component.ts
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Component, ChangeDetectionStrategy, Inject, Input } from '@angular/core';
-import { Datatype } from '../../../shared/models/asterixDB.model'
-import { Store } from '@ngrx/store';
-import { Observable } from 'rxjs/Observable';
-import * as datatypeActions from '../../../shared/actions/datatype.actions'
-import { ElementRef, ViewChild} from '@angular/core';
-import {DataSource} from '@angular/cdk/collections';
-import {BehaviorSubject} from 'rxjs/BehaviorSubject';
-import 'rxjs/add/operator/startWith';
-import 'rxjs/add/observable/merge';
-import 'rxjs/add/operator/map';
-import 'rxjs/add/operator/debounceTime';
-import 'rxjs/add/operator/distinctUntilChanged';
-import 'rxjs/add/observable/fromEvent';
-import { Subscription } from "rxjs/Rx";
-import { State } from '../../../shared/reducers/datatype.reducer';
-import { MatPaginator } from '@angular/material';
-import { SelectionModel } from '@angular/cdk/collections';
-import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';
-
-@Component({
-  selector: 'awc-datatypes',
-  templateUrl: 'datatypes.component.html',
-  styleUrls: ['datatypes.component.scss']
-})
-
-export class DatatypeCollection {
-  displayedColumns = "['datatypeName', 'dataverseName', 'timeStamp']"
-  /*
-  datatypeName: string;
-  dataverseName: string;
-  derived: DatatypeDerived;
-  timeStamp: string;
-  */
-  datatypeName: string;
-  dataSource: DatatypeDataSource | null;
-  loaded$: Observable<any>;
-  @ViewChild(MatPaginator) paginator: MatPaginator;
-  @ViewChild('filter') filter: ElementRef;
-  selection = new SelectionModel<string>(true, []);
-  @Input('message') errorMessage: string = ""
-  dtName = "";
-  
-  constructor(private store: Store<any>, public dialog: MatDialog) {
-    this.loaded$ = this.store.select('datatype');
-    // Watching the name of the latest create datatype
-    this.store.select(s => s.datatype.createDatatypeName).subscribe((data: any) => {
-      this.dtName = data;
-    })
-
-    // Watching the name of the latest drop datatype
-    this.store.select(s => s.datatype.dropDatatypeName).subscribe((data: any) => {
-      this.dtName = data;
-    })
-
-    // Watching for the if there is a change in the collection
-		this.store.select(s => s.datatype.createDatatypeSuccess).subscribe((data: any) => {
-      if (data === true) {
-        this.getDatatypes();
-        this.errorMessage = "SUCCEED: CREATE DATATYPE " + this.dtName;
-      }  
-    })
-
-    // Watching for the if there is a error in a create datatype operation 
-		this.store.select(s => s.datatype.createDatatypeError).subscribe((data: any) => {
-      if (data.errors) {
-        this.errorMessage = "ERROR: " + data.errors[0].msg;
-      }  
-    })
-
-    // Watching for the success message in a drop datatype operation 
-    this.store.select(s => s.datatype.dropDatatypeSuccess).subscribe((data: any) => {
-      if (data === true) {
-        this.getDatatypes();
-        this.errorMessage = "SUCCEED: DROP DATATYPE " + this.dtName;
-      }  
-    })
-
-    // Watching for the if there is a error in a drop datatype operation 
-		this.store.select(s => s.datatype.dropDatatypeError).subscribe((data: any) => {
-      if (data.errors) {
-        this.errorMessage = "ERROR: " + data.errors[0].msg;
-      }  
-    })
-  }
-
-  getDatatypes() {
-    // Triggers the effect to refresg the datatypes
-    this.store.dispatch(new datatypeActions.SelectDatatypes('-'));
-  }
-
-  ngOnInit() {
-    // Assign the datasource for the table 
-    this.dataSource = new DatatypeDataSource(this.store);
-  }
-
-   /* 
-  * opens the create datatype dialog
-  */
-  openCreateDatatypeDialog(): void {
-    let dialogRef = this.dialog.open(DialogCreateDatatype, {
-      width: '420px',
-      data: { name: this.datatypeName }
-    });
-
-    dialogRef.afterClosed().subscribe(result => {
-      this.datatypeName = result;
-    });
-  }
-
-  /* 
-  * opens the drop datatype dialog
-  */
-  openDropDatatypeDialog(): void {
-    let dialogRef = this.dialog.open(DialogDropDatatype, {
-      width: '420px',
-      data: { name: this.datatypeName }
-    });
-
-    dialogRef.afterClosed().subscribe(result => {
-      this.datatypeName = result;
-    });
-  }
-
-  onClick(): void {
-    this.errorMessage = "";
-  }
-
-  /* Showing all the datatype metadata information */
-  output: any;
-  
-  highlight(row){
-    this.output = JSON.stringify(row, null, 2);
-  }
-
-  @ViewChild('querymetadata') inputQuery;
-
-  /* Cleans up error message */
-  cleanUp() {
-    this.errorMessage = ""; 
-    // Cascading   
-    this.inputQuery.cleanUp();    
-  }
-}
-
-@Component({
-  selector: 'datatype-create-dialog',
-  templateUrl: 'datatype-create-dialog.component.html',
-  styleUrls: ['datatype-create-dialog.component.scss']
-})
-
-export class DialogCreateDatatype {
-  constructor(  private store: Store<any>,
-                public dialogCreateDtRef: MatDialogRef<DialogCreateDatatype>,
-                @Inject(MAT_DIALOG_DATA) public data: any) { }
-
-  onClick(): void {
-    this.store.dispatch(new datatypeActions.CreateDatatype(this.data.datasetName));
-    this.dialogCreateDtRef.close();
-  }
-
-  onNoClick(): void {
-    this.dialogCreateDtRef.close();
-  }
-}
-
-@Component({
-  selector: 'datatypes-drop-dialog',
-  templateUrl: 'datatype-drop-dialog.component.html',
-  styleUrls: ['datatype-drop-dialog.component.scss']
-})
-
-export class DialogDropDatatype {
-  constructor(  private store: Store<any>,
-                public dialogDropDtRef: MatDialogRef<DialogDropDatatype>,
-                @Inject(MAT_DIALOG_DATA) public data: any) { }
-
-  onClick(): void {
-    this.store.dispatch(new datatypeActions.DropDatatype(this.data.datatypeName));
-    this.dialogDropDtRef.close();
-  }
-
-  onNoClick(): void {
-    this.dialogDropDtRef.close();
-  }
-}
-
-export class DatatypeDataSource extends DataSource<any> {
-    private datatypes$: Observable<any>
-
-    constructor(private store: Store<any>) {
-      super();
-      this.datatypes$ = this.store.select(s => s.datatype.datatypes.results);
-    }
-
-    /** Connect function called by the table to retrieve one stream containing the data to render. */
-    connect(): Observable<Datatype[]> {
-        const displayDataChanges = [
-          this.datatypes$,
-        //  this._filterChange,
-        ];
-
-      return this.datatypes$;
-    }
-
-    disconnect() {}
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-create-dialog.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-create-dialog.component.html b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-create-dialog.component.html
deleted file mode 100755
index 5159e38..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-create-dialog.component.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<!--/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/-->
-<div class="dataverse-dialog">
-    <p mat-dialog-title>CREATE DATAVERSE</p>
-    <mat-dialog-content>
-        <p>GIVE A NAME TO THE NEW DATAVERSE</p>
-    </mat-dialog-content>
-    <mat-form-field>
-        <input matInput tabindex="0" [(ngModel)]="data.dataverseName">
-    </mat-form-field>
-    </div>
-    <div mat-dialog-actions>
-    <button mat-button [mat-dialog-close]="data.dataverseName" (click)="onClick()" tabindex="1">CREATE</button>
-    <button mat-button (click)="onNoClick()" tabindex="2">CANCEL</button>
-</div>
-

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-create-dialog.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-create-dialog.component.scss b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-create-dialog.component.scss
deleted file mode 100755
index 6371068..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-create-dialog.component.scss
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-.dataverse-dialog {    
-    font-family: "Roboto Mono", monospace;
-    font-size: 0.80rem;
-    font-weight: 500;
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-drop-dialog.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-drop-dialog.component.html b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-drop-dialog.component.html
deleted file mode 100755
index b546a70..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-drop-dialog.component.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!--/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/-->
-<div class="dataverse-dialog">
-    <p mat-dialog-title>DROP DATAVERSE</p>
-    <mat-dialog-content>
-        <p>PLEASE GIVE THE NAME OF THE DATAVERSE TO DROP</p>
-    </mat-dialog-content>
-        <mat-form-field>
-            <input matInput tabindex="0" [(ngModel)]="data.dataverseName">
-        </mat-form-field>
-    <mat-dialog-actions>
-        <button mat-button (click)="onClick()" tabindex="1">DROP</button>
-        <button mat-button (click)="onNoClick()" tabindex="2">CANCEL</button>
-    </mat-dialog-actions>
-</div>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-drop-dialog.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-drop-dialog.component.scss b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-drop-dialog.component.scss
deleted file mode 100755
index 6371068..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-drop-dialog.component.scss
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-.dataverse-dialog {    
-    font-family: "Roboto Mono", monospace;
-    font-size: 0.80rem;
-    font-weight: 500;
-}
\ No newline at end of file


[21/43] asterixdb git commit: Remove old GA script from docs

Posted by im...@apache.org.
Remove old GA script from docs

Change-Id: If3cf5747553a56e3c80b6286ee395aa7a7e8afdb
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2657
Sonar-Qube: Jenkins <je...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Till Westmann <ti...@apache.org>


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

Branch: refs/heads/release-0.9.4-pre-rc
Commit: ab8297e6a8a566f351726eb9b00900ced8ba908c
Parents: 20c1806
Author: Ian Maxon <im...@apache.org>
Authored: Thu May 24 16:16:40 2018 -0700
Committer: Ian Maxon <im...@apache.org>
Committed: Fri May 25 10:05:49 2018 -0700

----------------------------------------------------------------------
 asterixdb/asterix-doc/src/site/site.xml | 9 ---------
 1 file changed, 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab8297e6/asterixdb/asterix-doc/src/site/site.xml
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-doc/src/site/site.xml b/asterixdb/asterix-doc/src/site/site.xml
index 4f782d3..90877a0 100644
--- a/asterixdb/asterix-doc/src/site/site.xml
+++ b/asterixdb/asterix-doc/src/site/site.xml
@@ -59,15 +59,6 @@
 
   <body>
     <head>
-      <![CDATA[<script>
-        (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
-        (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
-        m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
-        })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
-
-        ga('create', 'UA-41536543-1', 'uci.edu');
-        ga('send', 'pageview');
-      </script>]]>
     </head>
     <links>
       <item name="Documentation Home" href="index.html"/>


[22/43] asterixdb git commit: [ASTERIXDB-2318] Build dashboard in mvn

Posted by im...@apache.org.
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/src/main/licenses/templates/source_licenses.ftl
----------------------------------------------------------------------
diff --git a/asterixdb/src/main/licenses/templates/source_licenses.ftl b/asterixdb/src/main/licenses/templates/source_licenses.ftl
index 7970221..cc3e767 100644
--- a/asterixdb/src/main/licenses/templates/source_licenses.ftl
+++ b/asterixdb/src/main/licenses/templates/source_licenses.ftl
@@ -138,698 +138,3 @@
 Source files in asterix-hivecompat are derived from portions of Apache Hive Query Language v0.13.0 (org.apache.hive:hive-exec).
     </...@license>
 </#if>
-<#if !asterixDashboardSkip!false>
-    <#assign licenseComponent="AsterixDB Dashboard"/>
-    <#assign licenseLocation="${asterixDashboardLocation!}"/>
-    <#assign licenseFilePrefix="${asterixDashboardResourcesPrefix!}"/>
-    <@license files=[
-        "dashboard/src/app/dashboard/query/output.component.ts",
-        "dashboard/static"]
-     component="File Saver portions of the AsterixDB Dashboard"
-     licenseName="The MIT license ">
-The MIT License
-
-Copyright © 2016 Eli Grey.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-    </...@license>
-    <@license files=[
-        "dashboard/src/app/dashboard/metadata/",
-        "dashboard/src/app/dashboard/metadata/datasets-collection/",
-        "dashboard/src/app/dashboard/metadata/datatypes-collection/",
-        "dashboard/src/app/dashboard/metadata/dataverses-collection/",
-        "dashboard/src/app/dashboard/query/",
-        "dashboard/src/app/dashboard/",
-        "dashboard/src/app/",
-        "dashboard/static"]
-     component="ReactiveX/rxjs"
-     licenseName="Apache License 2.0">
-                               Apache License
-                         Version 2.0, January 2004
-                      http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
-    "License" shall mean the terms and conditions for use, reproduction,
-    and distribution as defined by Sections 1 through 9 of this document.
-
-    "Licensor" shall mean the copyright owner or entity authorized by
-    the copyright owner that is granting the License.
-
-    "Legal Entity" shall mean the union of the acting entity and all
-    other entities that control, are controlled by, or are under common
-    control with that entity. For the purposes of this definition,
-    "control" means (i) the power, direct or indirect, to cause the
-    direction or management of such entity, whether by contract or
-    otherwise, or (ii) ownership of fifty percent (50%) or more of the
-    outstanding shares, or (iii) beneficial ownership of such entity.
-
-    "You" (or "Your") shall mean an individual or Legal Entity
-    exercising permissions granted by this License.
-
-    "Source" form shall mean the preferred form for making modifications,
-    including but not limited to software source code, documentation
-    source, and configuration files.
-
-    "Object" form shall mean any form resulting from mechanical
-    transformation or translation of a Source form, including but
-    not limited to compiled object code, generated documentation,
-    and conversions to other media types.
-
-    "Work" shall mean the work of authorship, whether in Source or
-    Object form, made available under the License, as indicated by a
-    copyright notice that is included in or attached to the work
-    (an example is provided in the Appendix below).
-
-    "Derivative Works" shall mean any work, whether in Source or Object
-    form, that is based on (or derived from) the Work and for which the
-    editorial revisions, annotations, elaborations, or other modifications
-    represent, as a whole, an original work of authorship. For the purposes
-    of this License, Derivative Works shall not include works that remain
-    separable from, or merely link (or bind by name) to the interfaces of,
-    the Work and Derivative Works thereof.
-
-    "Contribution" shall mean any work of authorship, including
-    the original version of the Work and any modifications or additions
-    to that Work or Derivative Works thereof, that is intentionally
-    submitted to Licensor for inclusion in the Work by the copyright owner
-    or by an individual or Legal Entity authorized to submit on behalf of
-    the copyright owner. For the purposes of this definition, "submitted"
-    means any form of electronic, verbal, or written communication sent
-    to the Licensor or its representatives, including but not limited to
-    communication on electronic mailing lists, source code control systems,
-    and issue tracking systems that are managed by, or on behalf of, the
-    Licensor for the purpose of discussing and improving the Work, but
-    excluding communication that is conspicuously marked or otherwise
-    designated in writing by the copyright owner as "Not a Contribution."
-
-    "Contributor" shall mean Licensor and any individual or Legal Entity
-    on behalf of whom a Contribution has been received by Licensor and
-    subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
-    this License, each Contributor hereby grants to You a perpetual,
-    worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-    copyright license to reproduce, prepare Derivative Works of,
-    publicly display, publicly perform, sublicense, and distribute the
-    Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
-    this License, each Contributor hereby grants to You a perpetual,
-    worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-    (except as stated in this section) patent license to make, have made,
-    use, offer to sell, sell, import, and otherwise transfer the Work,
-    where such license applies only to those patent claims licensable
-    by such Contributor that are necessarily infringed by their
-    Contribution(s) alone or by combination of their Contribution(s)
-    with the Work to which such Contribution(s) was submitted. If You
-    institute patent litigation against any entity (including a
-    cross-claim or counterclaim in a lawsuit) alleging that the Work
-    or a Contribution incorporated within the Work constitutes direct
-    or contributory patent infringement, then any patent licenses
-    granted to You under this License for that Work shall terminate
-    as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
-    Work or Derivative Works thereof in any medium, with or without
-    modifications, and in Source or Object form, provided that You
-    meet the following conditions:
-
-    (a) You must give any other recipients of the Work or
-        Derivative Works a copy of this License; and
-
-    (b) You must cause any modified files to carry prominent notices
-        stating that You changed the files; and
-
-    (c) You must retain, in the Source form of any Derivative Works
-        that You distribute, all copyright, patent, trademark, and
-        attribution notices from the Source form of the Work,
-        excluding those notices that do not pertain to any part of
-        the Derivative Works; and
-
-    (d) If the Work includes a "NOTICE" text file as part of its
-        distribution, then any Derivative Works that You distribute must
-        include a readable copy of the attribution notices contained
-        within such NOTICE file, excluding those notices that do not
-        pertain to any part of the Derivative Works, in at least one
-        of the following places: within a NOTICE text file distributed
-        as part of the Derivative Works; within the Source form or
-        documentation, if provided along with the Derivative Works; or,
-        within a display generated by the Derivative Works, if and
-        wherever such third-party notices normally appear. The contents
-        of the NOTICE file are for informational purposes only and
-        do not modify the License. You may add Your own attribution
-        notices within Derivative Works that You distribute, alongside
-        or as an addendum to the NOTICE text from the Work, provided
-        that such additional attribution notices cannot be construed
-        as modifying the License.
-
-    You may add Your own copyright statement to Your modifications and
-    may provide additional or different license terms and conditions
-    for use, reproduction, or distribution of Your modifications, or
-    for any such Derivative Works as a whole, provided Your use,
-    reproduction, and distribution of the Work otherwise complies with
-    the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
-    any Contribution intentionally submitted for inclusion in the Work
-    by You to the Licensor shall be under the terms and conditions of
-    this License, without any additional terms or conditions.
-    Notwithstanding the above, nothing herein shall supersede or modify
-    the terms of any separate license agreement you may have executed
-    with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
-    names, trademarks, service marks, or product names of the Licensor,
-    except as required for reasonable and customary use in describing the
-    origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
-    agreed to in writing, Licensor provides the Work (and each
-    Contributor provides its Contributions) on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-    implied, including, without limitation, any warranties or conditions
-    of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-    PARTICULAR PURPOSE. You are solely responsible for determining the
-    appropriateness of using or redistributing the Work and assume any
-    risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
-    whether in tort (including negligence), contract, or otherwise,
-    unless required by applicable law (such as deliberate and grossly
-    negligent acts) or agreed to in writing, shall any Contributor be
-    liable to You for damages, including any direct, indirect, special,
-    incidental, or consequential damages of any character arising as a
-    result of this License or out of the use or inability to use the
-    Work (including but not limited to damages for loss of goodwill,
-    work stoppage, computer failure or malfunction, or any and all
-    other commercial damages or losses), even if such Contributor
-    has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
-    the Work or Derivative Works thereof, You may choose to offer,
-    and charge a fee for, acceptance of support, warranty, indemnity,
-    or other liability obligations and/or rights consistent with this
-    License. However, in accepting such obligations, You may act only
-    on Your own behalf and on Your sole responsibility, not on behalf
-    of any other Contributor, and only if You agree to indemnify,
-    defend, and hold each Contributor harmless for any liability
-    incurred by, or claims asserted against, such Contributor by reason
-    of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
-    To apply the Apache License to your work, attach the following
-    boilerplate notice, with the fields enclosed by brackets "[]"
-    replaced with your own identifying information. (Don't include
-    the brackets!)  The text should be enclosed in the appropriate
-    comment syntax for the file format. We also recommend that a
-    file or class name and description of purpose be included on the
-    same "printed page" as the copyright notice for easier
-    identification within third-party archives.
-
- Copyright (c) 2015-2018 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
-limitations under the License.
-    </...@license>
-    <@license files=[
-        "dashboard/src/app/dashboard/query/output.component.ts",
-        "dashboard/src/app/dashboard/query/output.component.html",
-        "dashboard/src/app/dashboard/query/output.component.scss",
-        "dashboard/src/app/dashboard/query/metadata.component.ts",
-        "dashboard/src/app/dashboard/query/metadata.component.html",
-        "dashboard/src/app/dashboard/query/metadata.component.scss",
-        "dashboard/static"]
-     component="PrimeNG components of the AsterixDB dashboard"
-     licenseName="The MIT License">
-The MIT License (MIT)
-
-Copyright (c) 2016-2017 PrimeTek
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-    </...@license>
-    <@license files=[
-        "dashboard/src/app/dashboard/metadata/",
-        "dashboard/src/app/dashboard/metadata/datasets-collection/",
-        "dashboard/src/app/dashboard/metadata/datatypes-collection/",
-        "dashboard/src/app/dashboard/metadata/dataverses-collection/",
-        "dashboard/src/app/dashboard/query/",
-        "dashboard/src/app/dashboard/",
-        "dashboard/src/app/dashboard/",
-        "dashboard/src/app/",
-        "dashboard/static/main.37b7b7cad656490b195a.bundle.js",
-        "dashboard/static/styles.9f50282210bba5318775.bundle",
-        "dashboard/static/scripts.da68998bdd77aff4e764.bundle.js",
-        "dashboard/static/polyfills.32ca5670d6503e090789.bundle.js",
-        "dashboard/static/inline.66bd6b83f86cf773a001.bundle.js",
-        "dashboard/static/index.html"]
-     component="NGRX portions of the AsterixDB dashboard"
-     licenseName="The MIT License">
-The MIT License (MIT)
-
-Copyright (c) 2017 Brandon Roberts, Mike Ryan, Victor Savkin, Rob Wormald
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-    </...@license>
-    <@license files=[
-        "dashboard/src/app/dashboard/query/input.component.ts",
-        "dashboard/src/app/dashboard/query/input.component.html",
-        "dashboard/src/app/dashboard/query/input.component.scss",
-        "dashboard/src/app/dashboard/query/codemirror.component.ts",
-        "dashboard/src/app/dashboard/query/codemirror.component.scss",
-        "dashboard/src/app/dashboard/metadata/input-metadata.component.ts",
-        "dashboard/src/app/dashboard/metadata/input-metadata.component.html",
-        "dashboard/src/app/dashboard/metadata/input-metadata.component.scss",
-        "dashboard/src/app/dashboard/metadata/codemirror-metadata.component.ts",
-        "dashboard/src/app/dashboard/metadata/codemirror-metadata.component.scss",
-        "dashboard/static"]
-     component="Codemirror portions of the AsterixDB dashboard"
-     licenseName="The MIT License">
-Copyright (C) 2017 by Marijn Haverbeke <ma...@gmail.com> and others
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-    </...@license>
-    <@license files=[
-        "dashboard/src/",
-        "dashboard/static"]
-     component="AngularJS portions of the AsterixDB dashboard"
-     licenseName="The MIT License">
-The MIT License
-
-Copyright (c) 2014-2017 Google, Inc. http://angular.io
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-    </...@license>
-    <@license files=[
-        "dashboard/src/app/dashboard/",
-        "dashboard/src/app/material.module.ts",
-        "dashboard/src/main.ts",
-        "dashboard/static"]
-     component="Angular Material and HammerJS portions of the AsterixDB dashboard"
-     licenseName="The MIT License">
-Copyright (c) 2017 Google LLC.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-    </...@license>
-    <@license files=[
-        "dashboard/src/",
-        "dashboard/static"]
-     component="CoreJS portions of the AsterixDB dashboard"
-     licenseName="The MIT License">
-Copyright (c) 2014-2017 Denis Pushkarev
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-    </...@license>
-    <@license files=[
-        "dashboard/src/index.html",
-        "dashboard/static"]
-    component="Roboto Font portions of the AsterixDB dashboard"
-    licenseName="Apache License 2.0">
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-limitations under the License.</...@license>
-<@license files=[
-"dashboard/src/index.html",
-"dashboard/static/index.html"]
- component="Font Awesome portions of the AsterixDB dashboard"
- licenseName="The MIT License">
-
-    http://fontawesome.io/license/ Applies to all CSS and LESS files in the
-    following directories if exist: font-awesome/css/, font-awesome/less/, and
-    font-awesome/scss/.  and downloaded from CDN network services and loaded in
-    index.html License: MIT License URL:
-    http://opensource.org/licenses/mit-license.html
-
-</...@license>
-<@license files=["dashboard/"]
- component="webpack portions of the AsterixDB dashboard"
- licenseName="The MIT License">
-Copyright JS Foundation and other contributors
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-'Software'), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-    </...@license>
-    <@license files=[
-        "dashboard/src/",
-        "dashboard/static"]
-    component="zonejs portions of the AsterixDB dashboard"
-    licenseName="The MIT License">
-Copyright (c) 2016 Google, Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-    </...@license>
-</#if>


[34/43] asterixdb git commit: [ASTERIXDB-2318] Build dashboard in mvn

Posted by im...@apache.org.
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.ts
deleted file mode 100755
index e60c9de..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.ts
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Component, OnInit, ChangeDetectorRef } from '@angular/core';
-import { Router } from '@angular/router';
-import { Dataverse } from '../../shared/models/asterixDB.model';
-import { Store } from '@ngrx/store';
-import { Observable } from 'rxjs/Observable';
-import * as dataverseActions from '../../shared/actions/dataverse.actions';
-import * as datasetActions from '../../shared/actions/dataset.actions';
-import * as datatypesActions from '../../shared/actions/datatype.actions';
-import * as indexesActions from '../../shared/actions/index.actions';
-import * as metadataActions from '../../shared/actions/metadata.actions';
-import * as datasetsActions from '../../shared/actions/dataset.actions';
-import { ElementRef, ViewChild} from '@angular/core';
-import {DataSource} from '@angular/cdk/collections';
-import {BehaviorSubject} from 'rxjs/BehaviorSubject';
-import 'rxjs/add/operator/startWith';
-import 'rxjs/add/observable/merge';
-import 'rxjs/add/operator/map';
-import 'rxjs/add/operator/debounceTime';
-import 'rxjs/add/operator/distinctUntilChanged';
-import 'rxjs/add/observable/fromEvent';
-import { Subscription } from 'rxjs/Rx';
-import * as fromRoot from '../../shared/reducers/dataverse.reducer';
-import { State } from '../../shared/reducers/dataverse.reducer';
-import { TreeModule, TreeNode} from 'primeng/primeng';
-
-
-/**
- * query component
- * has editor (codemirror) for writing some query
- */
-@Component({
-	moduleId: module.id,
-	selector: 'awc-metadata',
-	templateUrl: 'metadata.component.html',
-	styleUrls: ['metadata.component.scss']
-})
-
-export class MetadataComponent implements OnInit {
-	nodesAll = [];
-	nodesDatasets = [];
-	nodesDatatypes = [];
-	nodesIndexes = [];
-
-	constructor(private store: Store<any>, private changeDetector: ChangeDetectorRef) {}
-
-	ngOnInit(): void {
-
-		// Watching for the metadata tree
-		this.store.select(s => s.metadata.tree).subscribe((data: any[]) => {
-			
-			this.nodesAll = [];
-			this.nodesDatasets = [];
-			this.nodesDatatypes = [];
-			this.nodesIndexes = [];
-			const indexesMenu = [];
-			const datatypesMenu = [];
-			const datasetsMenu = [];
-			const dataversesRoot = { label: '', children: []};
-			dataversesRoot.label = 'DATAVERSES';
-			dataversesRoot.children = [];
-
-			for (let i = 0; i < data.length; i++) {
-
-				// Don't want to show metadata system datasets, datatypes or indexes
-			// if (data[i]['DataverseName'] && data[i]['DataverseName'] !== "Metadata" )
-			//	{
-					// Counting dataverses to align the menu identifiers
-			    	const dataverse = { label: '', children: [] }; 
-					dataverse.label = data[i]['DataverseName'];
-					dataversesRoot.children.push(dataverse);
-
-					// Adding the datasets to correspondent dataverse
-					if (data[i]['Datasets'].length) {
-						const datasetRoot = { label: '', children: [] }; 
-						datasetRoot.label = 'DATASETS';
-						dataverse.children.push(datasetRoot);
-						for (let j = 0; j < data[i]['Datasets'].length; j++) {
-							const dataset = { label: '', children: [] }; 
-							dataset.label = data[i]['Datasets'][j]['DatasetName'];
-
-							//
-							// Adding the datatype to correspondent dataset
-							//
-							if (data[i]['Datasets'][j]['Datatype']) {
-								const datatypeRoot = { label: '', children: [] };
-								datatypeRoot.label = 'Datatype: ' + data[i]['Datasets'][j]['Datatype']['DatatypeName'];
-								//
-								// Looking for the datatype fields
-								//
-								if (data[i]['Datasets'][j]['Datatype']['Derived']) {
-									if (data[i]['Datasets'][j]['Datatype']['Derived']['Record']) { 
-										const datatypeFieldsRoot = { label: '', leaf: true, expanded: true, children: [] };
-										datatypeFieldsRoot.label = 'FIELDS';
-										for (let k = 0; k < data[i]['Datasets'][j]['Datatype']['Derived']['Record']['Fields'].length; k++) {
-											const datatypeField = { label: '', children: [] }; 
-											datatypeField.label = data[i]['Datasets'][j]['Datatype']['Derived']['Record']['Fields'][k]['FieldName'] + ": " + data[i]['Datasets'][j]['Datatype']['Derived']['Record']['Fields'][k]['FieldType'];
-											datatypeFieldsRoot.children.push(datatypeField);
-										}
-										datatypeRoot.children.push(datatypeFieldsRoot);
-
-									}
-								}
-								dataset.children.push(datatypeRoot);
-
-								datatypeRoot.label = data[i]['Datasets'][j]['Datatype']['DatatypeName'];
-								datatypesMenu.push(datatypeRoot);
-							}
-
-							//
-							// Adding the indexes to correspondent dataset
-							//
-							if (data[i]['Datasets'][j]['Indexes'].length) {
-								const indexRoot = { label: '', children: [] }; 
-								indexRoot.label = 'INDEXES';
-								
-								for (let k = 0; k < data[i]['Datasets'][j]['Indexes'].length; k++) {
-									const indexChild = { label: '', children: [] }; 
-									indexChild.label = data[i]['Datasets'][j]['Indexes'][k]['IndexName'];
-
-									// is Primary
-									const indexIsPrimaryRoot = { label: '', children: [] };
-									indexIsPrimaryRoot.label = 'isPrimary' + ': ' + data[i]['Datasets'][j]['Indexes'][k]['IsPrimary'];
-									indexChild.children.push(indexIsPrimaryRoot);
-								
-									// SearchKey
-									if (data[i]['Datasets'][j]['Indexes'][k]['SearchKey']) {
-										const indexSearchKeyRoot = { label: '', children: [] };
-										indexSearchKeyRoot.label = 'SEARCH KEY';
-										for (let l = 0; l < data[i]['Datasets'][j]['Indexes'][k]['SearchKey'].length; l++) {
-											const indexsearchKeyField = { label: '', children: [] };
-											indexsearchKeyField.label = data[i]['Datasets'][j]['Indexes'][k]['SearchKey'][l]
-											indexSearchKeyRoot.children.push(indexsearchKeyField);
-										}
-
-										indexChild.children.push(indexSearchKeyRoot);
-										indexesMenu.push(indexChild);
-									}
-
-									indexRoot.children.push(indexChild);
-								}
-
-								dataset.children.push(indexRoot);
-								datasetRoot.children.push(dataset);
-								datasetsMenu.push(dataset);
-							}
-						}
-					}
-			//	}
-			}
-			
-			this.nodesAll.push(dataversesRoot);
-
-			/*
-			* Making the rest of the stand alone submenus
-			*/
-
-			// Adding the DATASET stand alone submenu
-			const datasetMenuRoot = { label: '', children: [] };
-			datasetMenuRoot.label = 'DATASETS';
-			datasetMenuRoot.children = datasetsMenu;
-			this.nodesDatasets.push(datasetMenuRoot);
-
-			// Adding the DATATYPES stand alone submenu
-			const datatypeMenuRoot = { label: '', children: [] };
-			datatypeMenuRoot.label = 'DATATYPES';
-			datatypeMenuRoot.children = datatypesMenu;
-			this.nodesDatatypes.push(datatypeMenuRoot);
-
-			// Adding the DATATYPE stand alone submenu
-			const indexesMenuRoot = { label: '', children: [] };
-			indexesMenuRoot.label = 'INDEXES';
-			indexesMenuRoot.children = indexesMenu;
-			this.nodesIndexes.push(indexesMenuRoot);
-
-			// Component View Refresh
-			this.changeDetector.detectChanges();
-		});
-	}
-
-	/*
-	* UI helpers to select dataverses from the guide menu
-	*/
-	nodeSelectAll(event) {
-		if (event.node.parent && event.node.parent.label === 'DATASETS') {
-			const datasetName = event.node.label.replace(/-;-/g);
-			this.store.dispatch(new datasetsActions.GuideSelectDatasets(datasetName));
-		}
-	}
-	
-	nodeSelectDataset(event) {
-		if (event.node.parent && event.node.parent.label === 'DATASETS') {
-			const datasetName = event.node.label.replace(/-;-/g);
-			this.store.dispatch(new datasetsActions.GuideSelectDatasets(datasetName));
-		}
-	}
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/ouput.component.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/ouput.component.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/ouput.component.ts
deleted file mode 100755
index fcfc235..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/ouput.component.ts
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Component, OnInit, ViewChild,  AfterViewInit, ChangeDetectorRef, Pipe, PipeTransform } from '@angular/core';
-import { Observable } from 'rxjs/Observable';
-import { Store } from '@ngrx/store';
-import * as sqlQueryActions from '../../shared/actions/query.actions'
-import { saveAs } from 'file-saver';
-import { DomSanitizer } from '@angular/platform-browser';
-import {TreeModule,TreeNode} from 'primeng/primeng';
-
-/**
- * query component
- * has editor (codemirror) for writing some query
- */
-
-@Pipe({ name: 'safeHtml'})
-export class SafeHtmlPipe implements PipeTransform  {
-  constructor(private sanitized: DomSanitizer) {}
-  transform(value) {
-    return this.sanitized.bypassSecurityTrustHtml(value);
-  }
-}
-
-@Component({
-	moduleId: module.id,
-	selector: 'awc-results',
-	templateUrl:'output.component.html',
-	styleUrls: ['output.component.scss']
-})
-
-
-export class QueryOutputComponent implements OnInit {
-	queryMessage: string;
-	treeData = [];
-	flattenData = [];
-	dataColumns = [];
-	query_message: string;
-	execution_time: number;
-	loaded$: Observable<any>
-	data: any[];
-	loading: Boolean;
-	jsonOutput = "";
-	selectedOutputView = "NONE";
-	outputQueryString = "";
-	toogleExpand = "EXPAND TREE"
-	
-	/* Codemirror configuration */
-	codemirrorConfig = 	{ 	mode: "asterix",
-		lineWrapping: true,
-		showCursorWhenSelecting: true
-	};
-
-	generateTreeMenu(node, rootMenu): any {
-
-		// Check in case the root object is not defined properly
-		if (rootMenu === undefined) {
-			rootMenu = { label: '', children: []};
-		}
-
-		let nodeArray = [];
-		
-		// Going through all the keys in a node looking for objects or array of key values
-		// and create a sub menu if is an object.
-		Object.keys(node).map((k) => {		
-
-			if (typeof node[k] === 'object') {
-				let nodeObject = { label: '', children: []};
-				nodeObject = { label: '', children: []};
-				nodeObject.label = k;
-				// if this is an object then a new node is created and
-				// recursive call to find and fill with the nested elements
-				let newNodeObject = this.generateTreeMenu(node[k], nodeObject);
-
-				// if this is the first node, then will become the root.
-				if (rootMenu.children) {
-					rootMenu.children.push(newNodeObject)
-				} else {
-					rootMenu = newNodeObject
-				}
-			}
-			else {
-				// Array of key values converted into a unique string with a : separator 
-				let nodeKeyValue = { label: '', children: []};
-				nodeKeyValue.label = k + " : " + node[k]
-				nodeArray.push(nodeKeyValue);
-			}
-		})
-
-		// The array will be added as value to a parent key.
-		if (nodeArray.length > 0) {
-			rootMenu.children = nodeArray.concat(rootMenu.children)
-		}
-		
-		return rootMenu 
-	}
-
-	constructor(private store: Store<any>, private changeDetector: ChangeDetectorRef) {
-		this.loaded$ = this.store.select(s => s.sqlQuery.loaded);
-		this.store.select("sqlQuery").subscribe((data: any) => {
-			// Set the output toolbar query string and default view settings
-			if (data.loaded) {
-				this.selectedOutputView = "TABLE";
-				this.loading = true;
-				this.data = data.sqlQueryResult.results;
-				this.treeData = [];
-				let stringQuery = data.sqlQueryString;
-	
-				// Preparing the toolbar 
-				if (stringQuery.length > 150) {
-					this.outputQueryString = ": " + stringQuery.slice(0, 150) + " (..)"
-				} else {
-					this.outputQueryString = ": " + stringQuery;
-				}
-
-				// Processing the results 
-				if (data.sqlQueryResult.results && data.sqlQueryResult.results.length > 0 && this.data[0]) {
-
-					/* Removing the root object, disabled for the time being 
-					var resultKeyList = Object.keys(this.data[0]);
-					var resultKey: string = resultKeyList[0]; 
-					*/
-
-					for (let i = 0; i < this.data.length; i++) {
-
-						/* Removing the root object, disabled for the time being 
-						if (this.data[i][resultKey] instanceof Object) {	
-							this.data[i] = this.data[i][resultKey];
-						}*/	
-
-						let nodeContent = { label:"[" + i + "]" , children: []};
-						this.treeData.push(this.generateTreeMenu(this.data[i], nodeContent))
-					}
-
-					this.loading = false;
-				} 
-	
-				// JSON OUTPUT
-				// Making into a JSON String for JSON String Output
-				this.jsonOutput = JSON.stringify(data.sqlQueryResult.results, null, 2)
-				
-				// TABLE OUTPUT
-				if (this.data && this.data.length > 0) {
-
-					this.collapseAll();
-					// Normalize the data ( removing the first key if is an object )
-					// TODO: Move it into a recursive function.
-					this.dataColumns = [];
-
-					var resultKeyList = Object.keys(this.data[0]);
-					var resultKey: string = resultKeyList[0]; 
-					if (this.data[0][resultKey] instanceof Object) {	
-						// is a SQL++ Query Results 
-						var nestedKeyList = Object.keys(this.data[0][resultKey]);
-						for (let i = 0; i < nestedKeyList.length; i++) {
-							if (typeof this.data[0][resultKey][nestedKeyList[i]] === 'object') {
-								// Creating a key to display a nested type
-								this.dataColumns.push({field: 'nestedString' + i, header: nestedKeyList[i]})
-								 				
-							} else {
-								this.dataColumns.push({field: nestedKeyList[i], header: nestedKeyList[i] })
-							}
-							
-						}
-					}
-					else { // is a SQL++ Metadata Results and there is an Array
-						for (let i = 0; i < resultKeyList.length; i++) {
-							this.dataColumns.push({field: resultKeyList[i], header: resultKeyList[i] })
-						}
-					}
-
-					// Now prepare the data ( SQL++ Query, Metatada Queries no need to change anything ).
-					// TODO: Move it into a recursive function.
-					if (this.data[0][resultKey] instanceof Object) {	
-						// is a SQL++ Query Results 
-						for (let i = 0; i < this.data.length; i++) {
-
-							// // is a SQL++ Query Results 
-							var nestedKeyList = Object.keys(this.data[i][resultKey]);
-							for (let k = 0; k < nestedKeyList.length; k++) {
-								if ( typeof this.data[i][resultKey][nestedKeyList[k]] === 'object' ){
-										// Creating a display value to for a nested type JSON.stringify(jsObj, 
-										var nestedObjectStr = JSON.stringify(this.data[i][resultKey][nestedKeyList[k]], null, '\n');
-										var nestedKey = 'nestedString' + k;
-										this.data[i][resultKey][nestedKey] = nestedObjectStr; 				
-								} 
-							}
-
-							this.data[i] = this.data[i][resultKey];
-						}	
-					}
-				}
-			}
-      	});
-	}
-
-	/* 
-	* Subscribing to store values
-	*/
-	ngOnInit(): void {
-		this.loaded$ = this.store.select('sqlQuery');
-		this.store.select("sqlQuery").subscribe((data: any) => {
-			if (data.sqlQueryError.errors){
-				this.queryMessage = data.sqlQueryError.errors[0].msg
-			}else{
-				this.queryMessage = ""
-			}
-		})
-	}
-
-	/* 
-	* Changes view mode [ TABLE, TREE, JSON VIEW ]
-	*/
-	onSelect(value: any) {
-		this.selectedOutputView = value;		
-	}
-
-	/* 
-	* Export to CSV 
-	*/
-    exportToCSV(){
-		var blob = new Blob([this.jsonOutput], {type: "text/csv;charset=utf-8"});
-		saveAs(blob, "Asterix-results.csv");
-	}
-	
-	/*
-	*  Export to plain text
-	*/
-    exportToText(){
-		var exportOutput = this.jsonOutput;
-		var blob = new Blob([exportOutput], {type: "text/plain;charset=utf-8"});
-		saveAs(blob, "Asterix-results.txt");
-	}
-	
-	/*
-	*  Expand/Collapse Tree
-	*/
-    expandTree(){
-		if (this.toogleExpand === "EXPAND TREE"){
-			this.expandAll();
-		} else {
-			this.collapseAll();
-		}
-	}
-	
-	expandAll(){
-		this.toogleExpand = "TREE COLLAPSE";
-        this.treeData.forEach( node => {
-            this.expandRecursive(node, true);
-        } );
-    }
-
-    collapseAll(){
-		this.toogleExpand = "EXPAND TREE";
-        this.treeData.forEach( node => {
-            this.expandRecursive(node, false);
-        } );
-    }
-    
-    private expandRecursive(node:TreeNode, isExpand:boolean){
-        node.expanded = isExpand;
-        if(node.children){
-            node.children.forEach( childNode => {
-                this.expandRecursive(childNode, isExpand);
-            } );
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/output.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/output.component.html b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/output.component.html
deleted file mode 100755
index f7c4b43..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/output.component.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<!--/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/ -->
-<mat-card class="sql-results-card">
-	<mat-toolbar color="primary" class="results-selector">
-		<mat-icon class="toolbar-icon">menu</mat-icon>
-	    <span class="output-query-string">OUTPUT{{outputQueryString}}</span>
-		<span class="spacer"></span>
-	</mat-toolbar>
-  	<mat-card-content class="content-area">
-		<div *ngIf="loaded$ | async as ld">
-			<div *ngIf="selectedOutputView=='TABLE'">				
-				<p-dataTable [style]="{'width':'100%', 'overflow':'hidden'}" id='review-table' [responsive]="true" [hidden]="loading" [value]="data" [rows]="20" [paginator]="true" [pageLinks]="3" [rowsPerPageOptions]="[5,10,20, 30, 40, 50]" >
-					<p-column [style]="{'text-align':'left',
-					'text-overflow': 'ellipsis', 'word-wrap': 'break-word', 'word-break': 'break-all'}"
-					
-					[footerStyle]="{'color':'blue'}" [headerStyleClass]="datatable-header" *ngFor="let node of dataColumns;" [field]="node.field" 
-					[header]="node.header" [sortable]="true">
-					</p-column>
-				</p-dataTable>
-			</div>
-		</div>
-		<div *ngIf="loaded$ | async as ld">	
-			<div *ngIf="ld.sqlQueryError.metrics" class="queryErrorMessage">
-				<span>ERROR:</span>
-				<span>{{queryMessage}}</span>
-			</div>	
-			 <div [hidden]="selectedOutputView!='TREE'" class="data-viewer-container">
-				<button mat-button class="button-expand" (click)="expandTree()">{{toogleExpand}}</button>
-				<p-tree [style]="{'width':'100%', 'border': 'none', 'font-family': 'Roboto Mono', 'font-size': '0.80rem',
-					'font-weight': '500'}" [value]="treeData"></p-tree>
-			</div>
-			<div *ngIf="loaded$ | async as ld">	
-				<div *ngIf="selectedOutputView=='JSON'" class="data-viewer-container">
-					<button mat-button class="button-export" (click)="exportToText()">EXPORT</button>
-					<pre class="json-output">{{jsonOutput}}</pre>
-				</div>
-			</div>
-		</div>
-	</mat-card-content>
-	<mat-card-actions class="actions">
-		<div *ngIf="loaded$ | async as ld">
-			<span *ngIf="ld.sqlQueryResult.metrics" class="metrics">
-				<span class="span-results">SUCCESS:</span>
-				<span class="span-results">Count: {{ld.sqlQueryResult.metrics.resultCount}}</span>
-				<span class="span-results">Size: {{ld.sqlQueryResult.metrics.resultSize}}</span>
-				<span class="span-results">Elapsed time: {{ld.sqlQueryResult.metrics.elapsedTime}}</span>
-				<span class="span-results">Execution time: {{ld.sqlQueryResult.metrics.executionTime}}</span>
-				<span class="spacer"></span>
-				<mat-button-toggle-group #group="matButtonToggleGroup" class="output-group" value={{selectedOutput}} (change)="onSelect(group.value)">
-					<mat-button-toggle mat-button  value="TABLE">TABLE</mat-button-toggle>
-					<mat-button-toggle mat-button  value="TREE">TREE</mat-button-toggle>
-					<mat-button-toggle mat-button  value="JSON">JSON</mat-button-toggle>
-				</mat-button-toggle-group>
-			</span>
-		</div>
-	</mat-card-actions>
-</mat-card>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/output.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/output.component.scss b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/output.component.scss
deleted file mode 100755
index 099ca87..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/output.component.scss
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-$results-spacing-unit: 5px;
-
-.sql-results-card {
-  display: flex;
-	flex-flow: column;
-  padding: 0;
-  height: 600px;
-  width: 100%; // 1350px;
-	margin: ($results-spacing-unit * 2);
-	min-height: 150px; 
-}
-
-.toolbar-icon {
-  padding: 0 14px 0 0;
-  margin: 0;
-}
-
-.spacer {
-  flex: 1 1 auto;
-}
-
-.results-selector {
-	max-height: 42px;
-  min-height: 42px;
-  justify-content: center;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-  overflow: hidden;
-  font-size: 0.80rem;
-  font-weight: 500;
-  background-color: white;
-  border: 1px solid rgba(54, 147, 209, 0.87);
-  overflow-wrap: break-word;
-	word-break: break-all;
-}
-
-.content-area {
-  position: relative;
-  color: hsla(0,0%,0%,.87);
-  height: 500px;
-  padding: 0;
-  margin: 0;
-  overflow: auto;
-  font-size: 0.80rem;
-  font-weight: 500;
-  font-family: "Roboto", monospace;
-}
-
-.root-closed {
-  list-style-type:none;
-}
-
-.root-open {
-  list-style-type:none;
-}
-
-.leaf-list-open {
-  list-style-type:none;
-  // padding-top: ($results-spacing-unit) * 2;
-  padding-left: 25px;
-  color: red;
-}
-
-.leaf-list-open.div
-//.leaf-list-open.ul
-.leaf-list-open.li {
-  margin-left: ($results-spacing-unit * 10) !important;
-  color: green;
-}
-
-.leaf {
-  color: blue;
-}
-
-.leaf-list-closed {
-  list-style-type:none;
-  display: none;
-}
-
-ul > .root-closed::before {
-  content:'+'
-}
-
-ul > .root-open::before {
-  content:'-'
-}
-
-.queryErrorMessage {
-  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
-  color: rgba(209, 54, 54, 0.87);
-  padding: $results-spacing-unit;
-  padding-left: ($results-spacing-unit * 2);
-}
-
-.metrics {
-  display: flex;
-  color: rgba(54, 147, 209, 0.87);
-  font-size: 0.80rem;
-  font-weight: 500;
-}
-
-.span-results {
-  padding-top: ($results-spacing-unit * 2);
-  padding-left: ($results-spacing-unit * 2);
-}
-
-.actions {
-  border-top: 1px solid rgba(0, 0, 0, 0.1);
-  color: rgba(54, 147, 209, 0.87);
-  margin: 0;
-}
-
-//someID\:review-table
-th {
-  text-align: left !important;
-}
-
-.datatable-header {
-  color: red !important;
-  background-color: blue;
-}
-
-.data-viewer-container {
-  padding: ($results-spacing-unit * 4);
-  padding-bottom: ($results-spacing-unit * 8);
-  height: 100%;
-  overflow: hidden;
-}
-
-.output-group {
-  margin-right: ($results-spacing-unit * 4);
-}
-
-.menu-export {
-  font-size: 0.80rem !important;
-  font-weight: 500 !important;
-}
-
-.button-export {
-  margin-right: ($results-spacing-unit * 4);
-  color: rgba(54, 147, 209, 0.87);
-}
-
-.button-expand {
-  margin-right: ($results-spacing-unit * 4);
-  color: rgba(54, 147, 209, 0.87);
-}
-
-.ui-datatable-data> tr> td {
-  white-space: nowrap;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  max-width: 150px;
-  color: red;
-}
-

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.html b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.html
deleted file mode 100755
index 6dd3ef3..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!--/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/ -->
-
-<div class="query-container">
-  <div class="metadata">   
-    <awc-metadata class="metadata-card"></awc-metadata>
-  </div>
-  <div class="vertical">
-    <awc-query class="query-card"></awc-query>
-    <awc-results class="output-card"></awc-results>
-  </div>
-</div> 
-

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.scss b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.scss
deleted file mode 100755
index d6b530b..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.scss
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
- .query-container {
-    display: flex;
-    flex-direction: row;
-    //background-color: red;
-    width: 100%; 
-    margin:0;
-    padding:0;
-    overflow: hidden;
- }
-
-.metadata {
-    display: flex;
-    flex-direction: row;
-    width: 20%;
-   // background-color: rgb(0, 255, 42);
-    margin:0;
-    padding: 0;
-   // padding-right: 10px;
-    border-right: 1px solid hsla(0,0%,0%,.20);
-}
-
-.vertical {
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-    width: 80%;
-    overflow: hidden;
-    margin:0;
-    padding: 1px0;
-   // background-color: rgb(38, 0, 255);
-}
-
-.metadata-card {
-    display: flex;
-    flex-direction: row;
-    justify-content: center;     
-    width: 100%;
-    overflow: hidden;
-    margin:0;
-    padding: 0;
-   // background-color: green;
-}
-
-.query-card {
-    display: flex;
-    flex-direction: row;
-    justify-content: center;     
-    width: 100%;
-    overflow: hidden;
-    margin:0;
-    padding: 0;
-    //background-color: green;
-}
-
-.output-card {
-    display: flex;
-    flex-direction: row;
-    justify-content: center;     
-    width: 100%;
-    overflow: hidden;
-    margin:0;
-    padding: 0;
-    //background-color: yellow;
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.ts
deleted file mode 100755
index 776e184..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.ts
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Component, OnInit } from '@angular/core';
-import { Router } from '@angular/router';
-import { Dataverse } from '../../shared/models/asterixDB.model'
-import { Store } from '@ngrx/store';
-import { Observable } from 'rxjs/Observable';
-import * as dataverseActions from '../../shared/actions/dataverse.actions'
-import * as datasetActions from '../../shared/actions/dataset.actions'
-import * as datatypesActions from '../../shared/actions/datatype.actions'
-import * as indexesActions from '../../shared/actions/index.actions'
-import * as metadataActions from '../../shared/actions/metadata.actions'
-import { ElementRef, ViewChild} from '@angular/core';
-import {DataSource} from '@angular/cdk/collections';
-import {BehaviorSubject} from 'rxjs/BehaviorSubject';
-import 'rxjs/add/operator/startWith';
-import 'rxjs/add/observable/merge';
-import 'rxjs/add/operator/map';
-import 'rxjs/add/operator/debounceTime';
-import 'rxjs/add/operator/distinctUntilChanged';
-import 'rxjs/add/observable/fromEvent';
-import { Subscription } from "rxjs/Rx";
-import * as fromRoot from '../../shared/reducers/dataverse.reducer';
-import { State } from '../../shared/reducers/dataverse.reducer';
-import * as sqlQueryActions from '../../shared/actions/query.actions'
-/*
- * query component
- * has editor (codemirror) for writing some query
- */
-@Component({
-	moduleId: module.id,
-	selector: 'awc-query-container',
-	templateUrl:'query-container.component.html',
-	styleUrls: ['query-container.component.scss']
-})
-
-export class QueryContainerComponent {
-	nodes = []
-	constructor(private store: Store<any>) {
-
-		this.store.select(s => s.metadata.tree).subscribe((data: any[]) => {
-			this.nodes = []
-			for (let i = 0; i < data.length; i++) {
-				if (data[i]['DataverseName']) {
-				    let node = { id: 0, name:"", children:[] };
-				    node.id = i;
-				    node.name = data[i]['DataverseName'];
-						for (let j = 0; j < data[i]['Datasets'].length; j++) {
-							let children = { id: 0, name:"", children:[] };
-							children.id = j
-							children.name = data[i]['Datasets'][j]['DatasetName'];
-							node.children.push(children)
-						}
-						this.nodes.push(node)
-				}
-			}
-		});
-	}
-
-	treeCalc() {
-		this.store.dispatch(new metadataActions.UpdateMetadataTree());
-	}
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/db.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/db.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/db.ts
deleted file mode 100755
index 8f51b00..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/db.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { DBSchema } from '@ngrx/db';
-
-/*
-* Persistent storage capability to the dashboard in case is needed.
-*/
-export const schema: DBSchema = {
-  version: 1,
-  name: 'asterixDB_app',
-  stores: {},
-};

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/material.module.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/material.module.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/material.module.ts
deleted file mode 100755
index 3bb67d9..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/material.module.ts
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import {NgModule} from '@angular/core';
-import {
-  MatAutocompleteModule,
-  MatButtonModule,
-  MatButtonToggleModule,
-  MatCardModule,
-  MatCheckboxModule,
-  MatChipsModule,
-  MatDatepickerModule,
-  MatDialogModule,
-  MatExpansionModule,
-  MatFormFieldModule,
-  MatGridListModule,
-  MatIconModule,
-  MatInputModule,
-  MatListModule,
-  MatMenuModule,
-  MatPaginatorModule,
-  MatProgressBarModule,
-  MatProgressSpinnerModule,
-  MatRadioModule,
-  MatSelectModule,
-  MatSidenavModule,
-  MatSliderModule,
-  MatSlideToggleModule,
-  MatSnackBarModule,
-  MatSortModule,
-  MatTableModule,
-  MatTabsModule,
-  MatToolbarModule,
-  MatTooltipModule,
-  MatStepperModule,
-} from '@angular/material';
-import {MatNativeDateModule, MatRippleModule} from '@angular/material';
-import {CdkTableModule} from '@angular/cdk/table';
-//import {CdkAccordionModule} from '@angular/cdk/accordion';
-import {A11yModule} from '@angular/cdk/a11y';
-import {BidiModule} from '@angular/cdk/bidi';
-import {OverlayModule} from '@angular/cdk/overlay';
-import {PlatformModule} from '@angular/cdk/platform';
-import {ObserversModule} from '@angular/cdk/observers';
-import {PortalModule} from '@angular/cdk/portal';
-
-/*
-* NgModule that includes all Material modules that are required to
-* serve AsterixDB Dashboard
-*/
-@NgModule({
-  exports: [
-    MatAutocompleteModule,
-    MatButtonModule,
-    MatButtonToggleModule,
-    MatCardModule,
-    MatCheckboxModule,
-    MatChipsModule,
-    MatTableModule,
-    MatDatepickerModule,
-    MatDialogModule,
-    MatExpansionModule,
-    MatFormFieldModule,
-    MatGridListModule,
-    MatIconModule,
-    MatInputModule,
-    MatListModule,
-    MatMenuModule,
-    MatPaginatorModule,
-    MatProgressBarModule,
-    MatProgressSpinnerModule,
-    MatRadioModule,
-    MatRippleModule,
-    MatSelectModule,
-    MatSidenavModule,
-    MatSlideToggleModule,
-    MatSliderModule,
-    MatSnackBarModule,
-    MatSortModule,
-    MatStepperModule,
-    MatTabsModule,
-    MatToolbarModule,
-    MatTooltipModule,
-    MatNativeDateModule,
-    CdkTableModule,
-    A11yModule,
-    BidiModule,
-  //  CdkAccordionModule,
-    ObserversModule,
-    OverlayModule,
-    PlatformModule,
-    PortalModule,
-  ]
-})
-export class MaterialModule {}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/app.actions.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/app.actions.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/app.actions.ts
deleted file mode 100755
index 29da05f..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/app.actions.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Action } from '@ngrx/store';
-import { AsterixDBQueryMessage, Dataset } from '../models/asterixDB.model';
-
-/*
-* Definition of App Actions
-*/
-export const APP_MODE_CHANGE = '[App State] App Mode Change';
-
-/*
-* Guide Select Datasets for UI Helpers
-*/
-export class ChangeMode implements Action {
-  readonly type = APP_MODE_CHANGE;
-  constructor(public payload: string) {}
-}
-
-/*
-* Exports of datasets actions
-*/
-export type All = ChangeMode;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/dataset.actions.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/dataset.actions.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/dataset.actions.ts
deleted file mode 100755
index a49e07c..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/dataset.actions.ts
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Action } from '@ngrx/store';
-import { AsterixDBQueryMessage, Dataset } from '../models/asterixDB.model';
-
-/*
-* Definition of Datasets Actions
-*/
-export const SELECT_DATASETS          = '[Dataset Collection] Select Dataset';
-export const SELECT_DATASETS_SUCCESS  = '[Dataset Collection] Select Dataset Success';
-export const SELECT_DATASETS_FAIL     = '[Dataset Collection] Select Dataset Fail';
-export const CREATE_DATASET           = '[Dataset Collection] Create Dataset';
-export const CREATE_DATASET_SUCCESS   = '[Dataset Collection] Create Dataset Success';
-export const CREATE_DATASET_FAIL      = '[Dataset Collection] Create Dataset Fail';
-export const UPDATE_DATASET           = '[Dataset Collection] Update Dataset';
-export const UPDATE_DATASET_SUCCESS   = '[Dataset Collection] Update Dataset Success';
-export const UPDATE_DATASET_FAIL      = '[Dataset Collection] Update Dataset Fail';
-export const DROP_DATASET             = '[Dataset Collection] Drop Dataset';
-export const DROP_DATASET_SUCCESS     = '[Dataset Collection] Drop Dataset Success';
-export const DROP_DATASET_FAIL        = '[Dataset Collection] Drop Dataset Fail';
-export const GUIDE_SELECT_DATASET     = '[Dataset Collection] Guide Select Dataset';
-
-
-/*
-* Guide Select Datasets for UI Helpers
-*/
-export class GuideSelectDatasets implements Action {
-  readonly type = GUIDE_SELECT_DATASET;
-  constructor(public payload: string) {}
-}
-
-/*
-* Select Datasets
-*/
-export class SelectDatasets implements Action {
-  readonly type = SELECT_DATASETS;
-  constructor(public payload: string) {}
-}
-
-export class SelectDatasetsSuccess implements Action {
-  readonly type = SELECT_DATASETS_SUCCESS;
-  constructor(public payload: AsterixDBQueryMessage[]) {}
-}
-
-export class SelectDatasetsFail implements Action {
-  readonly type = SELECT_DATASETS_FAIL;
-  constructor(public payload: AsterixDBQueryMessage[]) {}
-}
-
-/*
-* Create Dataset
-*/
-export class CreateDataset implements Action {
-  readonly type = CREATE_DATASET;
-  constructor(public payload: string) {}
-}
-
-export class CreateDatasetSuccess implements Action {
-  readonly type = CREATE_DATASET_SUCCESS;
-  constructor(public payload: Dataset[]) {}
-}
-
-export class CreateDatasetFail implements Action {
-  readonly type = CREATE_DATASET_FAIL;
-  constructor(public payload: Dataset) {}
-}
-
-/*
-* Update Dataset
-*/
-export class UpdateDataset implements Action {
-  readonly type = UPDATE_DATASET;
-  constructor(public payload: Dataset) {}
-}
-
-export class UpdateDatasetSuccess implements Action {
-  readonly type = UPDATE_DATASET_SUCCESS;
-  constructor(public payload: Dataset[]) {}
-}
-
-export class UpdateDatasetFail implements Action {
-  readonly type = UPDATE_DATASET_FAIL;
-  constructor(public payload: Dataset) {}
-}
-
-/*
-* Drop Dataset
-*/
-export class DropDataset implements Action {
-  readonly type = DROP_DATASET;
-  constructor(public payload: string) {}
-}
-
-export class DropDatasetSuccess implements Action {
-  readonly type = DROP_DATASET_SUCCESS;
-  constructor(public payload: Dataset[]) {}
-}
-
-export class DropDatasetFail implements Action {
-  readonly type = DROP_DATASET_FAIL;
-  constructor(public payload: Dataset) {}
-}
-
-/*
-* Exports of datasets actions
-*/
-export type All = SelectDatasets |
-  SelectDatasetsSuccess |
-  SelectDatasetsFail |
-  CreateDataset |
-  CreateDatasetSuccess |
-  CreateDatasetFail |
-  UpdateDataset |
-  UpdateDatasetSuccess |
-  UpdateDatasetFail |
-  DropDataset |
-  DropDatasetSuccess |
-  DropDatasetFail | 
-  GuideSelectDatasets;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/datatype.actions.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/datatype.actions.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/datatype.actions.ts
deleted file mode 100755
index 5543a7a..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/datatype.actions.ts
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Action } from '@ngrx/store';
-import { AsterixDBQueryMessage, Datatype } from '../models/asterixDB.model';
-
-/*
-* Definition of Datatypes Actions
-*/
-export const SELECT_DATATYPES         = '[Datatype Collection] Select Datatypes';
-export const SELECT_DATATYPES_SUCCESS = '[Datatype Collection] Select Datatypes Success';
-export const SELECT_DATATYPES_FAIL    = '[Datatype Collection] Select Datatypes Fail';
-export const CREATE_DATATYPE          = '[Datatype Collection] Create Datatypes';
-export const CREATE_DATATYPE_SUCCESS  = '[Datatype Collection] Create Datatypes Success';
-export const CREATE_DATATYPE_FAIL     = '[Datatype Collection] Create Datatypes Fail';
-export const UPDATE_DATATYPE          = '[Datatype Collection] Update Datatype';
-export const UPDATE_DATATYPE_SUCCESS  = '[Datatype Collection] Update Datatype Success';
-export const UPDATE_DATATYPE_FAIL     = '[Datatype Collection] Update Datatype Fail';
-export const DROP_DATATYPE            = '[Datatype Collection] Drop Datatypes';
-export const DROP_DATATYPE_SUCCESS    = '[Datatype Collection] Drop Datatypes Success';
-export const DROP_DATATYPE_FAIL       = '[Datatype Collection] Drop Datatypes Fail';
-
-/*
-* Select Datatypes
-*/
-export class SelectDatatypes implements Action {
-  readonly type = SELECT_DATATYPES;
-  constructor(public payload: string) {}
-}
-
-export class SelectDatatypesSuccess implements Action {
-  readonly type = SELECT_DATATYPES_SUCCESS;
-  constructor(public payload: AsterixDBQueryMessage[]) {}
-}
-
-export class SelectDatatypesFail implements Action {
-  readonly type = SELECT_DATATYPES_FAIL;
-  constructor(public payload: AsterixDBQueryMessage[]) {}
-}
-
-/*
-* Create Datatype
-*/
-export class CreateDatatype implements Action {
-  readonly type = CREATE_DATATYPE;
-  constructor(public payload: string) {}
-}
-
-export class CreateDatatypeSuccess implements Action {
-  readonly type = CREATE_DATATYPE_SUCCESS;
-  constructor(public payload: Datatype[]) {}
-}
-
-export class CreateDatatypeFail implements Action {
-  readonly type = CREATE_DATATYPE_FAIL;
-  constructor(public payload: Datatype) {}
-}
-
-/*
-* Update Datatype
-*/
-export class UpdateDatatype implements Action {
-  readonly type = UPDATE_DATATYPE;
-  constructor(public payload: Datatype) {}
-}
-
-export class UpdateDatatypeSuccess implements Action {
-  readonly type = UPDATE_DATATYPE_SUCCESS;
-  constructor(public payload: Datatype[]) {}
-}
-
-export class UpdateDatatypeFail implements Action {
-  readonly type = UPDATE_DATATYPE_FAIL;
-  constructor(public payload: Datatype) {}
-}
-
-/*
-* Drop Datatype
-*/
-export class DropDatatype implements Action {
-  readonly type = DROP_DATATYPE;
-
-  constructor(public payload: string) {}
-}
-
-export class DropDatatypeSuccess implements Action {
-  readonly type = DROP_DATATYPE_SUCCESS;
-
-  constructor(public payload: Datatype[]) {}
-}
-
-export class DropDatatypeFail implements Action {
-  readonly type = DROP_DATATYPE_FAIL;
-
-  constructor(public payload: Datatype) {}
-}
-
-/*
-* Exports of datastypes actions
-*/
-export type All = SelectDatatypes |
-  SelectDatatypesSuccess |
-  SelectDatatypesFail |
-  CreateDatatype |
-  CreateDatatypeSuccess |
-  CreateDatatypeFail |
-  UpdateDatatype |
-  UpdateDatatypeSuccess |
-  UpdateDatatypeFail |
-  DropDatatype |
-  DropDatatypeSuccess |
-  DropDatatypeFail;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/dataverse.actions.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/dataverse.actions.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/dataverse.actions.ts
deleted file mode 100755
index dc33c0a..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/dataverse.actions.ts
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Action } from '@ngrx/store';
-import { AsterixDBQueryMessage, Dataverse } from '../models/asterixDB.model';
-
-/*
-* Definition of Dataverses Actions
-*/
-export const SELECT_DATAVERSES          = '[Dataverse Collection] Select Dataverses';
-export const SELECT_DATAVERSES_SUCCESS  = '[Dataverse Collection] Select Dataverses Success';
-export const SELECT_DATAVERSES_FAIL     = '[Dataverse Collection] Select Dataverses Fail';
-export const CREATE_DATAVERSE           = '[Dataverse Collection] Create Dataverse';
-export const CREATE_DATAVERSE_SUCCESS   = '[Dataverse Collection] Create Dataverse Success';
-export const CREATE_DATAVERSE_FAIL      = '[Dataverse Collection] Create Dataverse Fail';
-export const UPDATE_DATAVERSE           = '[Dataverse Collection] Update Dataverse';
-export const UPDATE_DATAVERSE_SUCCESS   = '[Dataverse Collection] Update Dataverse Success';
-export const UPDATE_DATAVERSE_FAIL      = '[Dataverse Collection] Update Dataverse Fail';
-export const DROP_DATAVERSE             = '[Dataverse Collection] Drop Dataverses';
-export const DROP_DATAVERSE_SUCCESS     = '[Dataverse Collection] Drop Dataverses Success';
-export const DROP_DATAVERSE_FAIL        = '[Dataverse Collection] Drop Dataverses Fail';
-
-/*
-* Select Dataverses
-*/
-export class SelectDataverses implements Action {
-  readonly type = SELECT_DATAVERSES;
-  constructor(public payload: string) {}
-}
-
-export class SelectDataversesSuccess implements Action {
-  readonly type = SELECT_DATAVERSES_SUCCESS;
-  constructor(public payload: AsterixDBQueryMessage[]) {}
-}
-
-export class SelectDataversesFail implements Action {
-  readonly type = SELECT_DATAVERSES_FAIL;
-  constructor(public payload: AsterixDBQueryMessage[]) {}
-}
-
-/*
-* Create Dataverse
-*/
-export class CreateDataverse implements Action {
-  readonly type = CREATE_DATAVERSE;
-  constructor(public payload: string) {}
-}
-
-export class CreateDataverseSuccess implements Action {
-  readonly type = CREATE_DATAVERSE_SUCCESS;
-  constructor(public payload: Dataverse[]) {}
-}
-
-export class CreateDataverseFail implements Action {
-  readonly type = CREATE_DATAVERSE_FAIL;
-  constructor(public payload: Dataverse) {}
-}
-
-/*
-* Update Dataverse
-*/
-export class UpdateDataverse implements Action {
-  readonly type = UPDATE_DATAVERSE;
-  constructor(public payload: Dataverse) {}
-}
-
-export class UpdateDataverseSuccess implements Action {
-  readonly type = UPDATE_DATAVERSE_SUCCESS;
-  constructor(public payload: Dataverse[]) {}
-}
-
-export class UpdateDataverseFail implements Action {
-  readonly type = UPDATE_DATAVERSE_FAIL;
-  constructor(public payload: Dataverse) {}
-}
-
-/*
-* Drop Dataverse
-*/
-export class DropDataverse implements Action {
-  readonly type = DROP_DATAVERSE;
-  constructor(public payload: string) {}
-}
-
-export class DropDataverseSuccess implements Action {
-  readonly type = DROP_DATAVERSE_SUCCESS;
-  constructor(public payload: Dataverse[]) {}
-}
-
-export class DropDataverseFail implements Action {
-  readonly type = DROP_DATAVERSE_FAIL;
-  constructor(public payload: Dataverse) {}
-}
-
-/*
-* Exports of datasverses actions
-*/
-export type All = SelectDataverses |
-  SelectDataversesSuccess |
-  SelectDataversesFail |
-  CreateDataverse |
-  CreateDataverseSuccess |
-  CreateDataverseFail |
-  UpdateDataverse |
-  UpdateDataverseSuccess |
-  UpdateDataverseFail |
-  DropDataverse |
-  DropDataverseSuccess |
-  DropDataverseFail;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/index.actions.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/index.actions.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/index.actions.ts
deleted file mode 100755
index 1304644..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/index.actions.ts
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Action } from '@ngrx/store';
-import { Index } from '../models/asterixDB.model';
-
-/*
-* Definition of Index Actions
-*/
-export const SELECT_INDEXES         = '[Index Collection] Select Indexes';
-export const SELECT_INDEXES_SUCCESS = '[Index Collection] Select Indexes Success';
-export const SELECT_INDEXES_FAIL    = '[Index Collection] Select Indexes Fail';
-export const CREATE_INDEX           = '[Index Collection] Create Index';
-export const CREATE_INDEX_SUCCESS   = '[Index Collection] Create Index Success';
-export const CREATE_INDEX_FAIL      = '[Index Collection] Create Index Fail';
-export const UPDATE_INDEX           = '[Index Collection] Update Index';
-export const UPDATE_INDEX_SUCCESS   = '[Index Collection] Update Index Success';
-export const UPDATE_INDEX_FAIL      = '[Index Collection] Update Index Fail';
-export const DROP_INDEX             = '[Index Collection] Drop Indexes';
-export const DROP_INDEX_SUCCESS     = '[Index Collection] Drop Indexes Success';
-export const DROP_INDEX_FAIL        = '[Index Collection] Drop Indexes Fail';
-
-/*
-* Select Indexes
-*/
-export class SelectIndexes implements Action {
-  readonly type = SELECT_INDEXES;
-  constructor(public payload: string) {}
-}
-
-export class SelectIndexesSuccess implements Action {
-  readonly type = SELECT_INDEXES_SUCCESS;
-  constructor(public payload: Index[]) {}
-}
-
-export class SelectIndexesFail implements Action {
-  readonly type = SELECT_INDEXES_FAIL;
-  constructor(public payload: Index[]) {}
-}
-
-/*
-* Create Index
-*/
-export class CreateIndex implements Action {
-  readonly type = CREATE_INDEX;
-  constructor(public payload: string) {}
-}
-
-export class CreateIndexSuccess implements Action {
-  readonly type = CREATE_INDEX_SUCCESS;
-  constructor(public payload: Index[]) {}
-}
-
-export class CreateIndexFail implements Action {
-  readonly type = CREATE_INDEX_FAIL;
-  constructor(public payload: Index) {}
-}
-
-/*
-* Update Index
-*/
-export class UpdateIndex implements Action {
-  readonly type = UPDATE_INDEX;
-  constructor(public payload: Index) {}
-}
-
-export class UpdateIndexSuccess implements Action {
-  readonly type = UPDATE_INDEX_SUCCESS;
-  constructor(public payload: Index[]) {}
-}
-
-export class UpdateIndexFail implements Action {
-  readonly type = UPDATE_INDEX_FAIL;
-  constructor(public payload: Index) {}
-}
-
-/*
-* Remove Index
-*/
-export class DropIndex implements Action {
-  readonly type = DROP_INDEX;
-  constructor(public payload: string) {}
-}
-
-export class DropIndexSuccess implements Action {
-  readonly type = DROP_INDEX_SUCCESS;
-  constructor(public payload: Index[]) {}
-}
-
-export class DropIndexFail implements Action {
-  readonly type = DROP_INDEX_FAIL;
-  constructor(public payload: Index) {}
-}
-
-/*
-* Exports of indexes actions
-*/
-export type All = SelectIndexes |
-  SelectIndexesSuccess |
-  SelectIndexesFail |
-  CreateIndex |
-  CreateIndexSuccess |
-  CreateIndexFail |
-  UpdateIndex |
-  UpdateIndexSuccess |
-  UpdateIndexFail |
-  DropIndex |
-  DropIndexSuccess |
-  DropIndexFail;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/metadata.actions.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/metadata.actions.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/metadata.actions.ts
deleted file mode 100755
index 4a3c125..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/metadata.actions.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Action } from '@ngrx/store';
-
-/*
-* Definition of Metadata Tree Actions
-*/
-export const UPDATE_METADATA_TREE         = '[Metadata Tree Query] UPDATE Metadata tree';
-export const UPDATE_METADATA_TREE_SUCCESS = '[Metadata Tree Query] UPDATE Metadata tree Success';
-export const UPDATE_METADATA_TREE_FAIL    = '[Metadata Tree Query] UPDATE Metadata tree Fail';
-
-/*
-* Construct Metadata Tree Actions
-*/
-export class UpdateMetadataTree implements Action {
-  readonly type = UPDATE_METADATA_TREE
-  constructor() {}
-}
-
-export class UpdateMetadataTreeSuccess implements Action {
-  readonly type = UPDATE_METADATA_TREE_SUCCESS;
-  constructor(public payload: any) {}
-}
-
-export class UpdateMetadataTreeFail implements Action {
-  readonly type = UPDATE_METADATA_TREE_FAIL;
-  constructor(public payload: any) {}
-}
-
-/*
-* Exports of Metatada Tree actions
-*/
-export type All = UpdateMetadataTree |
-    UpdateMetadataTreeSuccess |
-    UpdateMetadataTreeFail;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/query.actions.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/query.actions.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/query.actions.ts
deleted file mode 100755
index 866b3e9..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/query.actions.ts
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Action } from '@ngrx/store';
-import { AsterixDBQueryMessage } from '../models/asterixDB.model';
-
-/*
-* Definition of SQL++ Actions
-*/
-export const EXECUTE_QUERY                  = '[Query] Execute SQL++ Query';
-export const EXECUTE_QUERY_SUCCESS          = '[Query] Execute SQL++ Query Success';
-export const EXECUTE_QUERY_FAIL             = '[Query] Execute SQL++ Query Fail';
-export const EXECUTE_METADATA_QUERY         = '[Query] Execute Metadata SQL++ Query';
-export const EXECUTE_METADATA_QUERY_SUCCESS = '[Query] Execute Metadata SQL++ Query Success';
-export const EXECUTE_METADATA_QUERY_FAIL     = '[Query] Execute Metadata SQL++ Query Fail';
-
-/*
-* Execute SQL++ Query
-*/
-export class ExecuteQuery implements Action {
-  readonly type = EXECUTE_QUERY;
-  constructor(public payload: string) {} // the AsterixDB Query String
-}
-
-export class ExecuteQuerySuccess implements Action {
-  readonly type = EXECUTE_QUERY_SUCCESS;
-  constructor(public payload: AsterixDBQueryMessage[]) {}
-}
-
-export class ExecuteQueryFail implements Action {
-  readonly type = EXECUTE_QUERY_FAIL;
-  constructor(public payload: AsterixDBQueryMessage[]) {}
-}
-
-/*
-* Execute Metadata SQL++ Query
-*/
-export class ExecuteMetadataQuery implements Action {
-  readonly type = EXECUTE_METADATA_QUERY;
-  constructor(public payload: string) {} // the AsterixDB Query String
-}
-
-export class ExecuteMetadataQuerySuccess implements Action {
-  readonly type = EXECUTE_METADATA_QUERY_SUCCESS;
-  constructor(public payload: AsterixDBQueryMessage[]) {}
-}
-
-export class ExecuteMetadataQueryFail implements Action {
-  readonly type = EXECUTE_METADATA_QUERY_FAIL;
-  constructor(public payload: AsterixDBQueryMessage[]) {}
-}
-
-/*
-* Exports of SQL++ actions
-*/
-export type All = ExecuteQuery |
-  ExecuteQuerySuccess |
-  ExecuteQueryFail |
-  ExecuteMetadataQuery |
-  ExecuteMetadataQuerySuccess |
-  ExecuteMetadataQueryFail;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/dataset.effects.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/dataset.effects.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/dataset.effects.ts
deleted file mode 100755
index b5624a4..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/dataset.effects.ts
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Injectable } from '@angular/core';
-import { Action } from '@ngrx/store';
-import { Effect, Actions } from '@ngrx/effects';
-import { Observable } from 'rxjs/Observable';
-import { of } from 'rxjs/observable/of';
-import * as datasetActions from '../actions/dataset.actions';
-import { SQLService } from '../services/async-query.service';
-import 'rxjs/add/operator/map';
-import 'rxjs/add/operator/switchMap';
-import 'rxjs/add/operator/catch';
-
-export type Action = datasetActions.All
-
-@Injectable()
-export class DatasetEffects {
-    constructor(private actions: Actions,
-        private sqlService: SQLService) {}
-
-    /* Effect to load a collection of all Datasets from AsterixDB
-    */
-    @Effect()
-    selectDatasets$: Observable<Action> = this.actions
-        .ofType(datasetActions.SELECT_DATASETS)
-        .switchMap(query => {
-            return this.sqlService.selectDatasets()
-            .map(dataset => new datasetActions.SelectDatasetsSuccess(dataset))
-            .catch(err => of(new datasetActions.SelectDatasetsFail(err)));
-    });
-
-    /* Effect to create a Datasets from AsterixDB
-    */
-    @Effect()
-    createDatasets$: Observable<Action> = this.actions
-        .ofType(datasetActions.CREATE_DATASET)
-        .switchMap(dataset => {
-            return this.sqlService.createDataset((dataset as any).payload)
-            .map(dataset => new datasetActions.CreateDatasetSuccess(dataset))
-            .catch(err => of(new datasetActions.CreateDatasetFail(err)));
-    });
-
-    /* Effect to drop a Datasets from AsterixDB
-    */
-    @Effect()
-    dropDatasets$: Observable<Action> = this.actions
-        .ofType(datasetActions.DROP_DATASET)
-        .switchMap(dataset => {
-            console.log((dataset as any).payload)
-            return this.sqlService.dropDataset((dataset as any).payload)
-            .map(dataset => new datasetActions.DropDatasetSuccess(dataset))
-            .catch(err => of(new datasetActions.DropDatasetFail(err)));
-    });
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/datatype.effects.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/datatype.effects.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/datatype.effects.ts
deleted file mode 100755
index 4fa187f..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/datatype.effects.ts
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Injectable } from '@angular/core';
-import { Effect, Actions } from '@ngrx/effects';
-import { Observable } from 'rxjs/Observable';
-import { of } from 'rxjs/observable/of';
-import * as datatypeActions from '../actions/datatype.actions';
-import { SQLService } from '../services/async-query.service';
-import 'rxjs/add/operator/map';
-import 'rxjs/add/operator/switchMap';
-import 'rxjs/add/operator/catch';
-
-export type Action = datatypeActions.All
-
-@Injectable()
-export class DatatypeEffects {
-  constructor(private actions: Actions,
-      private sqlService: SQLService) {}
-
-  /* Effect to load a collection of all Datatypes from AsterixDB
-  */
-  @Effect()
-  selectDatatypes$: Observable<Action> = this.actions
-    .ofType(datatypeActions.SELECT_DATATYPES)
-    .switchMap(query => {
-        return this.sqlService.selectDatatypes()
-           .map(datatype => new datatypeActions.SelectDatatypesSuccess(datatype))
-           .catch(err => of(new datatypeActions.SelectDatatypesFail(err)));
-  });
-
-  /* Effect to create a Datatype from AsterixDB
-  */
-  @Effect()
-  createDatatypes$: Observable<Action> = this.actions
-    .ofType(datatypeActions.CREATE_DATATYPE)
-    .switchMap(datatype => {
-        return this.sqlService.createDatatype((datatype as any).payload)
-           .map(datatype => new datatypeActions.CreateDatatypeSuccess(datatype))
-           .catch(err => of(new datatypeActions.CreateDatatypeFail(err)));
-  });
-
-  /* Effect to drop a Datatype from AsterixDB
-  */
-  @Effect()
-  dropDatatypes$: Observable<Action> = this.actions
-    .ofType(datatypeActions.DROP_DATATYPE)
-    .switchMap(datatype => {
-        return this.sqlService.dropDatatype((datatype as any).payload)
-           .map(datatype => new datatypeActions.DropDatatypeSuccess(datatype))
-           .catch(err => of(new datatypeActions.DropDatatypeFail(err)));
-  });
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/dataverse.effects.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/dataverse.effects.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/dataverse.effects.ts
deleted file mode 100755
index d917420..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/dataverse.effects.ts
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Injectable } from '@angular/core';
-import { Effect, Actions } from '@ngrx/effects';
-import { Observable } from 'rxjs/Observable';
-import { of } from 'rxjs/observable/of';
-import * as dataverseActions from '../actions/dataverse.actions';
-import { SQLService } from '../services/async-query.service';
-import 'rxjs/add/operator/map';
-import 'rxjs/add/operator/switchMap';
-import 'rxjs/add/operator/catch';
-
-export type Action = dataverseActions.All
-
-@Injectable()
-export class DataverseEffects {
-  constructor(private actions: Actions,
-      private sqlService: SQLService) {}
-
-  /* Effect to load a collection of all Dataverses from AsterixDB
-  */
-  @Effect()
-    selectDataverses$: Observable<Action> = this.actions
-        .ofType(dataverseActions.SELECT_DATAVERSES)
-        .switchMap(query => {
-            return this.sqlService.selectDataverses()
-            .map(dataverse => new dataverseActions.SelectDataversesSuccess(dataverse))
-            .catch(err => of(new dataverseActions.SelectDataversesFail(err)));
-    });
-
-    /* Effect to create Dataverse from AsterixDB
-    */
-    @Effect()
-    createDataverses$: Observable<Action> = this.actions
-        .ofType(dataverseActions.CREATE_DATAVERSE)
-        .switchMap(dataverseName => {
-            return this.sqlService.createDataverse((dataverseName as any).payload)
-            .map(dataverse => new dataverseActions.CreateDataverseSuccess(dataverse))
-            .catch(err => of(new dataverseActions.CreateDataverseFail(err)));
-    });
-
-    /* Effect to drop a Dataverse from AsterixDB
-    */
-    @Effect()
-    dropDataverses$: Observable<Action> = this.actions
-        .ofType(dataverseActions.DROP_DATAVERSE)
-        .switchMap(dataverseName => {
-            return this.sqlService.dropDataverse((dataverseName as any).payload)
-            .map(dataverse => new dataverseActions.DropDataverseSuccess(dataverse))
-            .catch(err => of(new dataverseActions.DropDataverseFail(err)));
-    });
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/index.effects.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/index.effects.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/index.effects.ts
deleted file mode 100755
index 8491392..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/index.effects.ts
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Injectable } from '@angular/core';
-import { Effect, Actions } from '@ngrx/effects';
-import { Observable } from 'rxjs/Observable';
-import { of } from 'rxjs/observable/of';
-import * as indexActions from '../actions/index.actions';
-import { SQLService } from '../services/async-query.service';
-import 'rxjs/add/operator/map';
-import 'rxjs/add/operator/switchMap';
-import 'rxjs/add/operator/catch';
-
-export type Action = indexActions.All
-
-@Injectable()
-export class IndexEffects {
-  constructor(private actions: Actions,
-      private sqlService: SQLService) {}
-
-  /* Effect to load a collection of all Index from AsterixDB
-  */
-  @Effect()
-  selectIndexes$: Observable<Action> = this.actions
-    .ofType(indexActions.SELECT_INDEXES)
-    .switchMap(query => {
-        return this.sqlService.selectIndexes()
-           .map(index => new indexActions.SelectIndexesSuccess(index))
-           .catch(err => of(new indexActions.SelectIndexesFail(err)));
-  });
-
-  /* Effect to create a Index
-  */
-  @Effect()
-  createIndexes$: Observable<Action> = this.actions
-    .ofType(indexActions.CREATE_INDEX)
-    .switchMap(index => {
-        return this.sqlService.createIndex((index as any).payload)
-           .map(index => new indexActions.CreateIndexSuccess(index))
-           .catch(err => of(new indexActions.CreateIndexFail(err)));
-  });
-
-  /* Effect to drop a Index
-  */
-  @Effect()
-  dropIndexes$: Observable<Action> = this.actions
-    .ofType(indexActions.DROP_INDEX)
-    .switchMap(index => {
-        return this.sqlService.dropIndex((index as any).payload)
-           .map(index => new indexActions.DropIndexSuccess(index))
-           .catch(err => of(new indexActions.DropIndexFail(err)));
-  });
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/metadata.effects.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/metadata.effects.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/metadata.effects.ts
deleted file mode 100755
index ddcdb27..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/metadata.effects.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Injectable } from '@angular/core';
-import { Action } from '@ngrx/store';
-import { Effect, Actions } from '@ngrx/effects';
-import { Observable } from 'rxjs/Observable';
-import { of } from 'rxjs/observable/of';
-import { MetadataService } from '../services/async-metadata.service';
-import * as metadataActions from '../actions/metadata.actions';
-import 'rxjs/add/operator/map';
-import 'rxjs/add/operator/switchMap';
-import 'rxjs/add/operator/catch';
-
-export type Action = metadataActions.All
-
-@Injectable()
-export class MetadataEffects {
-  constructor(private actions: Actions,
-      private metadataService: MetadataService) {}
-
-  /* Effect to update and retrieve the Metadata Tree
-  */
-  @Effect()
-  calculateDBTree$: Observable<Action> = this.actions
-    .ofType(metadataActions.UPDATE_METADATA_TREE)
-    .switchMap(() => {
-        return this.metadataService.getMetadataTree()
-          .map(tree => new metadataActions.UpdateMetadataTreeSuccess(tree))
-    });
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/query.effects.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/query.effects.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/query.effects.ts
deleted file mode 100755
index cb78255..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/query.effects.ts
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { Injectable } from '@angular/core';
-import { Action } from '@ngrx/store';
-import { Effect, Actions } from '@ngrx/effects';
-import { Observable } from 'rxjs/Observable';
-import { of } from 'rxjs/observable/of';
-import { SQLService } from '../services/async-query.service';
-import * as sqlQueryActions from '../actions/query.actions';
-import 'rxjs/add/operator/map';
-import 'rxjs/add/operator/switchMap';
-import 'rxjs/add/operator/catch';
-
-export type Action = sqlQueryActions.All
-
-@Injectable()
-export class SQLQueryEffects {
-  constructor(private actions: Actions,
-      private sqlService: SQLService) {}
-
-  /* Effect to Execute an SQL++ Query against the AsterixDB
-  */
-  @Effect()
-  executeQuery$: Observable<Action> = this.actions
-    .ofType(sqlQueryActions.EXECUTE_QUERY)
-    .switchMap(query => {
-        return this.sqlService.executeSQLQuery((query as any).payload)
-           .map(sqlQueryResult => new sqlQueryActions.ExecuteQuerySuccess(sqlQueryResult))
-           .catch(sqlQueryError => of(new sqlQueryActions.ExecuteQueryFail(sqlQueryError)));
-  });
-
-  /* Effect to Execute an SQL++ Metadata Query against the AsterixDB
-  */
-  @Effect()
-  executeMetadataQuery$: Observable<Action> = this.actions
-    .ofType(sqlQueryActions.EXECUTE_METADATA_QUERY)
-    .switchMap(query => {
-        return this.sqlService.executeSQLQuery((query as any).payload)
-           .map(sqlMetadataQueryResult => new sqlQueryActions.ExecuteMetadataQuerySuccess(sqlMetadataQueryResult))
-           .catch(sqlMetadataQueryError => of(new sqlQueryActions.ExecuteMetadataQueryFail(sqlMetadataQueryError)));
-  });
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/models/asterixDB.model.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/models/asterixDB.model.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/models/asterixDB.model.ts
deleted file mode 100755
index bbdabe2..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/models/asterixDB.model.ts
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-/*
-* Interfaces representing AsterixDB data model structures.
-*/
-
-export interface Dataverse {
-  dataFormat: string;
-  dataverseName: string;
-  pendingOp: string;
-  timeStamp: string;
-};
-
-export interface ResultsM {
-  dataFormat: string;
-  dataverseName: string;
-  pendingOp: string;
-  timeStamp: string;
-};
-
-export interface Dataset {
-  compactionPolicy: string;
-  compactionPolicyProperties: CompactionPolicyProperties[];
-  datasetId: string;
-  datasetName: string;
-  datasetType:string;
-  datatypeDataverseName: string;
-  datatypeName: string;
-  dataverseName: string;
-  groupName:string;
-  hints: string[];
-  internalDetails: InternalDetails;
-  pendingOp: string;
-  timestamp: string;
-};
-
-export interface CompactionPolicyProperties {
-  name: string;
-  value: string;
-};
-
-export interface InternalDetails {
-  autogenerated: string;
-  fileStructure: string;
-  partitioningKey: string;
-  partitioningStrategy: string;
-  primaryKey: string[];
-};
-
-// Message format coming back from AsterixDB REST API
-export interface AsterixDBQueryMessage {
-  metrics: Metrics;
-  requestId: string;
-  results: any[];
-  signature: string;
-  status: string;
-};
-
-export interface Metrics {
-  elapsedTime: string;
-  executionTime: string;
-  resultCount: string;
-  resultSize: string;
-};
-
-// Datatype Data Model comming from AsterixDB REST API
-export interface Datatype {
-  datatypeName: string;
-  dataverseName: string;
-  derived: DatatypeDerived;
-  timeStamp: string;
-};
-
-export interface DatatypeDerived {
-  isAnonymous: boolean;
-  record: DatatypeDerivedRecord;
-  tag: string;
-};
-
-export interface DatatypeDerivedRecord {
-  Fields: DatatypeDerivedRecordField[];
-  isOpen: boolean;
-};
-
-export interface DatatypeDerivedRecordField {
-  fieldName: string;
-  fieldType: "string";
-  isNullable: boolean;
-}
-
-// Index Data Model comming from AsterixDB REST API
-export interface Index {
-  dataverseName: string;
-  datasetName: string;
-  indexName: string;
-  indexStructure: string;
-  searchKey: string[];
-  isPrimary: boolean;
-  timestamp: string;
-  pendingOp: string;
-};

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/pipes/keys.pipe.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/pipes/keys.pipe.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/pipes/keys.pipe.ts
deleted file mode 100755
index 77cac5a..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/pipes/keys.pipe.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { PipeTransform, Pipe } from '@angular/core';
-
-@Pipe({name: 'keys'})
-export class KeysPipe implements PipeTransform {
-  transform(value, args:string[]) : any {
-    let keys = [];
-    for (let key in value) {
-      keys.push(key);
-    }
-    return keys;
-  }
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/pipes/objectArrayType.pipe.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/pipes/objectArrayType.pipe.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/pipes/objectArrayType.pipe.ts
deleted file mode 100755
index 220b53c..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/pipes/objectArrayType.pipe.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-// Detecting if an object is an array
-import { PipeTransform, Pipe } from '@angular/core';
-
-@Pipe({name: 'isObjectArray'})
-export class ObjectArrayTypePipe implements PipeTransform {
-  transform(value, args:string[]) : any {
-		return value && (value.constructor.toString().indexOf("Array") != -1)
-					&& value[0] && (value[0].constructor.toString().indexOf("Object") != -1);
-  }
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/pipes/objectType.pipe.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/pipes/objectType.pipe.ts b/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/pipes/objectType.pipe.ts
deleted file mode 100755
index 5b8f795..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/pipes/objectType.pipe.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-import { PipeTransform, Pipe } from '@angular/core';
-
-@Pipe({name: 'isObject'})
-export class ObjectTypePipe implements PipeTransform {
-  transform(value, args:string[]) : any {
-		return value && (value.constructor.toString().indexOf("Object") != -1);
-  }
-}


[41/43] asterixdb git commit: [NO ISSUE][COMP] Add aliases for type functions

Posted by im...@apache.org.
[NO ISSUE][COMP] Add aliases for type functions

- user model changes: yes
- storage format changes: no
- interface changes: no

Details:
- Add aliases for type functions:
  is_atom(), is_bool(), is_num(), is_str(), is_obj(),
  to_atom(), to_bool(), to_num(), to_str(), to_obj()

Change-Id: I83508d3a439cd7b707c0ce9f43d7b7482aa162f0
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2670
Sonar-Qube: Jenkins <je...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Till Westmann <ti...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/683c06d9
Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/683c06d9
Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/683c06d9

Branch: refs/heads/release-0.9.4-pre-rc
Commit: 683c06d90ef1af0d60ede1803773cdfd1df0c486
Parents: 076b3ef
Author: Dmitry Lychagin <dm...@couchbase.com>
Authored: Tue May 29 12:06:59 2018 -0700
Committer: Dmitry Lychagin <dm...@couchbase.com>
Committed: Tue May 29 15:14:48 2018 -0700

----------------------------------------------------------------------
 .../types/isatomic/isatomic.1.query.sqlpp       |  2 +-
 .../types/isboolean/isboolean.1.query.sqlpp     |  2 +-
 .../types/isnumber/isnumber.1.query.sqlpp       |  2 +-
 .../types/isobject/isobject.1.query.sqlpp       |  2 +-
 .../types/isstring/isstring.1.query.sqlpp       |  2 +-
 .../types/to_atomic/to_atomic.3.query.sqlpp     |  2 +-
 .../to_boolean_01/to_boolean_01.1.query.sqlpp   |  4 +-
 .../to_number_01/to_number_01.1.query.sqlpp     |  2 +-
 .../types/to_object/to_object.1.query.sqlpp     |  2 +-
 .../to_string_01/to_string_01.1.query.sqlpp     |  2 +-
 .../src/main/markdown/builtins/11_type.md       | 42 ++++++++++----------
 .../lang/common/util/CommonFunctionMapUtil.java | 10 +++++
 12 files changed, 42 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/683c06d9/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/isatomic/isatomic.1.query.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/isatomic/isatomic.1.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/isatomic/isatomic.1.query.sqlpp
index 4339904..57c66a5 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/isatomic/isatomic.1.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/isatomic/isatomic.1.query.sqlpp
@@ -22,7 +22,7 @@
   "b": isatomic(false),
   "c": is_atomic(null),
   "d": is_atomic(missing),
-  "e": isatom("d"),
+  "e": is_atom("d"),
   "f": isatom(4.0),
   "g": isatom(5),
   "h": isatom(["1", 2]),

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/683c06d9/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/isboolean/isboolean.1.query.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/isboolean/isboolean.1.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/isboolean/isboolean.1.query.sqlpp
index de3c64e..0c0c20e 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/isboolean/isboolean.1.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/isboolean/isboolean.1.query.sqlpp
@@ -22,7 +22,7 @@
   "b": isboolean(false),
   "c": is_boolean(null),
   "d": is_boolean(missing),
-  "e": isbool("d"),
+  "e": is_bool("d"),
   "f": isbool(4.0),
   "g": isbool(5),
   "h": isbool(["1", 2]),

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/683c06d9/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/isnumber/isnumber.1.query.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/isnumber/isnumber.1.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/isnumber/isnumber.1.query.sqlpp
index 1e153d3..2624fa7 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/isnumber/isnumber.1.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/isnumber/isnumber.1.query.sqlpp
@@ -24,7 +24,7 @@
   "d": is_number(missing),
   "e": is_number("d"),
   "f": isnumber(4.0),
-  "g": isnum(5),
+  "g": is_num(5),
   "h": isnum(["1", 2]),
   "i": isnum({"a":1})
 };

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/683c06d9/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/isobject/isobject.1.query.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/isobject/isobject.1.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/isobject/isobject.1.query.sqlpp
index 8305977..c99417d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/isobject/isobject.1.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/isobject/isobject.1.query.sqlpp
@@ -22,7 +22,7 @@
   "b": isobject(false),
   "c": is_object(null),
   "d": is_object(missing),
-  "e": isobj("d"),
+  "e": is_obj("d"),
   "f": isobj(4.0),
   "g": isobj(5),
   "h": isobj(["1", 2]),

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/683c06d9/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/isstring/isstring.1.query.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/isstring/isstring.1.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/isstring/isstring.1.query.sqlpp
index a5caf3c..3fe797e 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/isstring/isstring.1.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/isstring/isstring.1.query.sqlpp
@@ -22,7 +22,7 @@
   "b": isstring(false),
   "c": isstring(null),
   "d": isstr(missing),
-  "e": isstr("d"),
+  "e": is_str("d"),
   "f": isstr(4.0),
   "g": isstr(5),
   "h": isstr(["1", 2]),

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/683c06d9/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/to_atomic/to_atomic.3.query.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/to_atomic/to_atomic.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/to_atomic/to_atomic.3.query.sqlpp
index 07303d9..a6bdda1 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/to_atomic/to_atomic.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/to_atomic/to_atomic.3.query.sqlpp
@@ -19,7 +19,7 @@
 
 {
     "t1": [ toatomic(missing) is missing, toatom(null) is null ],
-    "t2": [ to_atomic(1), to_atomic(true), to_atomic("hello") ],
+    "t2": [ to_atom(1), to_atomic(true), to_atomic("hello") ],
     "t3": [ to_atomic([]), to_atomic([2]), to_atomic([2,3]), to_atomic([[[[4]]]]) ],
     "t4": [ to_atomic({{}}), to_atomic({{2}}), to_atomic({{2,3}}), to_atomic({{{{{{{{4}}}}}}}}) ],
     "t5": [ to_atomic({}), to_atomic({"a":2}), to_atomic({"a":2, "b":3}), to_atomic({"a":{"b":{"c":{"d":4}}}}) ],

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/683c06d9/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/to_boolean_01/to_boolean_01.1.query.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/to_boolean_01/to_boolean_01.1.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/to_boolean_01/to_boolean_01.1.query.sqlpp
index 79dc84e..45a82c7 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/to_boolean_01/to_boolean_01.1.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/to_boolean_01/to_boolean_01.1.query.sqlpp
@@ -20,8 +20,8 @@
  "t1": toboolean(false),
  "t2": to_boolean(true),
 
- "t3": to_boolean(int8("0")),
- "t4": to_boolean(int8("10")),
+ "t3": tobool(int8("0")),
+ "t4": to_bool(int8("10")),
 
  "t5": to_boolean(int16("0")),
  "t6": to_boolean(int16("10")),

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/683c06d9/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/to_number_01/to_number_01.1.query.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/to_number_01/to_number_01.1.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/to_number_01/to_number_01.1.query.sqlpp
index 739a6a9..ea31b79 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/to_number_01/to_number_01.1.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/to_number_01/to_number_01.1.query.sqlpp
@@ -21,7 +21,7 @@
   "t1": tonumber(false),
   "t2": to_number(true),
   "t3": tonum(int8("8")),
-  "t4": to_number(int16("16")),
+  "t4": to_num(int16("16")),
   "t5": to_number(int32("32")),
   "t6": to_number(int64("64")),
   "t7": to_number(float("1.5")),

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/683c06d9/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/to_object/to_object.1.query.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/to_object/to_object.1.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/to_object/to_object.1.query.sqlpp
index e7c04f7..bdca79d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/to_object/to_object.1.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/to_object/to_object.1.query.sqlpp
@@ -19,7 +19,7 @@
 
 {
   "t1": [ toobject(missing) is missing, toobj(null) is null ],
-  "t2": is_object(to_object({})),
+  "t2": is_object(to_obj({})),
   "t3": to_object({}),
   "t4": to_object({"a":1}),
   "t5": to_object({"a":1, "b":2}),

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/683c06d9/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/to_string_01/to_string_01.1.query.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/to_string_01/to_string_01.1.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/to_string_01/to_string_01.1.query.sqlpp
index 52a39fc..4130195 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/to_string_01/to_string_01.1.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/types/to_string_01/to_string_01.1.query.sqlpp
@@ -19,7 +19,7 @@
  {
   "t1": tostring(false),
   "t2": tostr(true),
-  "t3": to_string(int8("8")),
+  "t3": to_str(int8("8")),
   "t4": to_string(int16("16")),
   "t5": to_string(int32("32")),
   "t6": to_string(int64("64")),

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/683c06d9/asterixdb/asterix-doc/src/main/markdown/builtins/11_type.md
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-doc/src/main/markdown/builtins/11_type.md b/asterixdb/asterix-doc/src/main/markdown/builtins/11_type.md
index 578508f..c9eab13 100644
--- a/asterixdb/asterix-doc/src/main/markdown/builtins/11_type.md
+++ b/asterixdb/asterix-doc/src/main/markdown/builtins/11_type.md
@@ -19,7 +19,7 @@
 
 ## <a id="TypeFunctions">Type Functions</a> ##
 
-### is_array (isarray) ###
+### is_array ###
  * Syntax:
 
         is_array(expr)
@@ -53,7 +53,7 @@
 
  The function has an alias `isarray`.
 
-### is_atomic (isatomic, isatom) ###
+### is_atomic (is_atom) ###
  * Syntax:
 
         is_atomic(expr)
@@ -84,9 +84,9 @@
 
         { "a": true, "b": true, "c": null, "e": true, "f": true, "g": true, "h": false, "i": false }
 
- The function has two aliases, `isatomic` or `isatom`.
+ The function has three aliases: `isatomic`, `is_atom`, and `isatom`.
 
-### is_boolean (isboolean, isbool) ###
+### is_boolean (is_bool) ###
  * Syntax:
 
         is_boolean(expr)
@@ -118,10 +118,10 @@
 
         { "a": true, "b": true, "c": null, "e": false, "f": false, "g": false, "h": false, "i": false }
 
- The function has two aliases, `isboolean` or `isbool`.
+ The function has three aliases: `isboolean`, `is_bool`, and `isbool`.
 
 
-### is_number (isnumber, isnum) ###
+### is_number (is_num) ###
  * Syntax:
 
         is_number(expr)
@@ -154,9 +154,9 @@
 
         { "a": false, "b": false, "c": null, "e": false, "f": true, "g": true, "h": false, "i": false }
 
- The function has two aliases, `isnumber` or `isnum`.
+ The function has three aliases: `isnumber`, `is_num`, and `isnum`.
 
-### is_object (isobject, isobj) ###
+### is_object (is_obj) ###
  * Syntax:
 
         is_object(expr)
@@ -188,10 +188,10 @@
 
        { "a": false, "b": false, "c": null, "e": false, "f": false, "g": false, "h": false, "i": true }
 
- The function has two aliases, `isobject` or `isobj`.
+ The function has three aliases: `isobject`, `is_obj`, and `isobj`.
 
 
-### is_string (isstring, isstr) ###
+### is_string (is_str) ###
  * Syntax:
 
         is_string(expr)
@@ -223,7 +223,7 @@
 
         { "a": false, "b": false, "c": null, "e": true, "f": false, "g": false, "h": false, "i": false }
 
- The function has two aliases, `isstring` or `isstr`.
+ The function has three aliases: `isstring`, `is_str`, and `isstr`.
 
 
 ### is_null ###
@@ -321,7 +321,7 @@
 
  The function has an alias `toarray`.
 
-### to_atomic ###
+### to_atomic (to_atom) ###
   * Syntax:
 
         to_atomic(expr)
@@ -353,9 +353,9 @@
 
         { "v1": "asterix", "v2": "asterix", "v3": null, "v4": "asterix", "v5": null }
 
- The function has two aliases, `toatomic` or `toatom`.
+ The function has three aliases: `toatomic`, `to_atom`, and `toatom`.
 
-### to_boolean ###
+### to_boolean (to_bool) ###
   * Syntax:
 
         to_boolean(expr)
@@ -386,7 +386,7 @@
 
         { "v1": false, "v2": true, "v3": false, "v4": true }
 
- The function has two aliases, `toboolean` or `tobool`.
+ The function has three aliases: `toboolean`, `to_bool`, and `tobool`.
 
 ### to_bigint ###
   * Syntax:
@@ -458,7 +458,7 @@
 
  The function has an alias `todouble`.
 
-### to_number ###
+### to_number (to_num) ###
   * Syntax:
 
         to_number(expr)
@@ -491,9 +491,9 @@
 
         { "v1": 0, "v2": 1, "v3": 10, "v4": 11.5, "v5": 12.5 }
 
- The function has two aliases, `tonumber` or `tonum`.
+ The function has three aliases: `tonumber`, `to_num`, and `tonum`.
 
-### to_object ###
+### to_object (to_obj) ###
   * Syntax:
 
         to_object(expr)
@@ -518,9 +518,9 @@
 
         { "v1": {"value": "asterix"}, "v2": {} }
 
- The function has two aliases, `toobject` or `toobj`.
+ The function has three aliases: `toobject`, `to_obj`, and `toobj`.
 
-### to_string ###
+### to_string (to_str) ###
   * Syntax:
 
         to_string(expr)
@@ -551,4 +551,4 @@
 
         { "v1": "false", "v2": "true", "v3": "10", "v4": "11.5", "v5": "asterix" }
 
- The function has two aliases, `tostring` or `tostr`.
+ The function has three aliases: `tostring`, `to_str`, and `tostr`.

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/683c06d9/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/CommonFunctionMapUtil.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/CommonFunctionMapUtil.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/CommonFunctionMapUtil.java
index 3dffc00..3e6caab 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/CommonFunctionMapUtil.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/CommonFunctionMapUtil.java
@@ -54,15 +54,20 @@ public class CommonFunctionMapUtil {
         addFunctionMapping("isunknown", "is-unknown"); // isunknown, internal: is-unknown
         addFunctionMapping("isatomic", "is-atomic"); // isatomic, internal: is-atomic
         addFunctionMapping("isatom", "is-atomic"); // isatom, internal: is-atomic
+        addFunctionMapping("is_atom", "is-atomic"); // is_atom, internal: is-atomic
         addFunctionMapping("isboolean", "is-boolean"); // isboolean, internal: is-boolean
         addFunctionMapping("isbool", "is-boolean"); // isbool, internal: is-boolean
+        addFunctionMapping("is_bool", "is-boolean"); // is_bool, internal: is-boolean
         addFunctionMapping("isnumber", "is-number"); // isnumber, internal: is-number
         addFunctionMapping("isnum", "is-number"); // isnum, internal: is-number
+        addFunctionMapping("is_num", "is-number"); // is_num, internal: is-number
         addFunctionMapping("isstring", "is-string"); // isstring, internal: is-string
         addFunctionMapping("isstr", "is-string"); // isstr, internal: is-string
+        addFunctionMapping("is_str", "is-string"); // is_str, internal: is-string
         addFunctionMapping("isarray", "is-array"); // isarray, internal: is-array
         addFunctionMapping("isobject", "is-object"); // isobject, internal: is-object
         addFunctionMapping("isobj", "is-object"); // isobj, internal: is-object
+        addFunctionMapping("is_obj", "is-object"); // is_obj, internal: is-object
         addFunctionMapping("ifmissing", "if-missing"); // ifmissing, internal: if-missing
         addFunctionMapping("ifnull", "if-null"); // ifnull, internal: if-null
         addFunctionMapping("ifmissingornull", "if-missing-or-null"); // ifmissingornull, internal: if-missing-or-null
@@ -72,16 +77,21 @@ public class CommonFunctionMapUtil {
         addFunctionMapping("toarray", "to-array"); // toarray, internal: to-array
         addFunctionMapping("toatomic", "to-atomic"); // toatomic, internal: to-atomic
         addFunctionMapping("toatom", "to-atomic"); // toatom, internal: to-atomic
+        addFunctionMapping("to_atom", "to-atomic"); // to_atom, internal: to-atomic
         addFunctionMapping("toboolean", "to-boolean"); // toboolean, internal: to-boolean
         addFunctionMapping("tobool", "to-boolean"); // tobool, internal: to-boolean
+        addFunctionMapping("to_bool", "to-boolean"); // to_bool, internal: to-boolean
         addFunctionMapping("tobigint", "to-bigint"); // tobigint, internal: to-bigint
         addFunctionMapping("todouble", "to-double"); // todouble, internal: to-double
         addFunctionMapping("tostring", "to-string"); // tostring, internal: to-string
         addFunctionMapping("tostr", "to-string"); // tostr, internal: to-string
+        addFunctionMapping("to_str", "to-string"); // to_str, internal: to-string
         addFunctionMapping("tonumber", "to-number"); // tonumber, internal: to-number
         addFunctionMapping("tonum", "to-number"); // tonum, internal: to-number
+        addFunctionMapping("to_num", "to-number"); // to_num, internal: to-number
         addFunctionMapping("toobject", "to-object"); // toobject, internal: to-object
         addFunctionMapping("toobj", "to-object"); // toobj, internal: to-object
+        addFunctionMapping("to_obj", "to-object"); // to_obj, internal: to-object
 
         // Object functions
         // record-merge, internal: object-merge


[20/43] asterixdb git commit: [NO ISSUE] Add variable resolution appendix

Posted by im...@apache.org.
[NO ISSUE] Add variable resolution appendix

- update maven-site-plugin to version 3.7.1
- update maven-fluido-skin to version 1.7

Change-Id: Ibd4abd52f05d652d9436670b59beeb7cb6b846b5
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2653
Sonar-Qube: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Dmitry Lychagin <dm...@couchbase.com>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>


Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/20c1806d
Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/20c1806d
Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/20c1806d

Branch: refs/heads/release-0.9.4-pre-rc
Commit: 20c1806d14fc129ba31cdd4b3c1a002592fd5536
Parents: f02b43b
Author: Till Westmann <ti...@apache.org>
Authored: Tue May 22 14:02:03 2018 -0700
Committer: Till Westmann <ti...@apache.org>
Committed: Tue May 22 17:03:14 2018 -0700

----------------------------------------------------------------------
 asterixdb/asterix-doc/pom.xml                   |   2 +-
 .../src/main/markdown/sqlpp/0_toc.md            |   2 +-
 .../markdown/sqlpp/appendix_3_resolution.md     | 253 +++++++++++++++++++
 .../src/main/markdown/sqlpp/appendix_3_title.md |  20 ++
 .../src/site/markdown/aql/filters.md            |  16 +-
 asterixdb/asterix-doc/src/site/site.xml         |  10 +-
 asterixdb/pom.xml                               |   2 +-
 7 files changed, 284 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/20c1806d/asterixdb/asterix-doc/pom.xml
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-doc/pom.xml b/asterixdb/asterix-doc/pom.xml
index 734f7a3..8ddc1d8 100644
--- a/asterixdb/asterix-doc/pom.xml
+++ b/asterixdb/asterix-doc/pom.xml
@@ -52,7 +52,7 @@
             <configuration>
               <target>
                 <concat destfile="${project.build.directory}/generated-site/markdown/sqlpp/manual.md">
-                  <filelist dir="${project.basedir}/src/main/markdown/sqlpp" files="0_toc.md,1_intro.md,2_expr_title.md,2_expr.md,3_query_title.md,3_declare_dataverse.md,3_declare_function.md,3_query.md,4_error_title.md,4_error.md,5_ddl_head.md,5_ddl_dataset_index.md,5_ddl_nonenforced_index.md,5_ddl_function_removal.md,5_ddl_dml.md,appendix_1_title.md,appendix_1_keywords.md,appendix_2_title.md,appendix_2_parameters.md,appendix_2_index_only.md" />
+                  <filelist dir="${project.basedir}/src/main/markdown/sqlpp" files="0_toc.md,1_intro.md,2_expr_title.md,2_expr.md,3_query_title.md,3_declare_dataverse.md,3_declare_function.md,3_query.md,4_error_title.md,4_error.md,5_ddl_head.md,5_ddl_dataset_index.md,5_ddl_nonenforced_index.md,5_ddl_function_removal.md,5_ddl_dml.md,appendix_1_title.md,appendix_1_keywords.md,appendix_2_title.md,appendix_2_parameters.md,appendix_2_index_only.md,appendix_3_title.md,appendix_3_resolution.md" />
                 </concat>
                 <concat destfile="${project.build.directory}/generated-site/markdown/sqlpp/builtins.md">
                   <filelist dir="${project.basedir}/src/main/markdown/builtins" files="0_toc.md,1_numeric_common.md,1_numeric_delta.md,2_string_common.md,2_string_delta.md,3_binary.md,4_spatial.md,5_similarity.md,6_tokenizing.md,7_temporal.md,7_allens.md,8_record.md,9_aggregate_sql.md,10_comparison.md,11_type.md,13_conditional.md,12_misc.md" />

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/20c1806d/asterixdb/asterix-doc/src/main/markdown/sqlpp/0_toc.md
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-doc/src/main/markdown/sqlpp/0_toc.md b/asterixdb/asterix-doc/src/main/markdown/sqlpp/0_toc.md
index 84986ae..0569667 100644
--- a/asterixdb/asterix-doc/src/main/markdown/sqlpp/0_toc.md
+++ b/asterixdb/asterix-doc/src/main/markdown/sqlpp/0_toc.md
@@ -94,4 +94,4 @@
 * [Appendix 2. Performance Tuning](#Performance_tuning)
       * [Parallelism Parameter](#Parallelism_parameter)
       * [Memory Parameters](#Memory_parameters)
-
+* [Appendix 3. Variable Bindings and Name Resolution](#Variable_bindings_and_name_resolution)

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/20c1806d/asterixdb/asterix-doc/src/main/markdown/sqlpp/appendix_3_resolution.md
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-doc/src/main/markdown/sqlpp/appendix_3_resolution.md b/asterixdb/asterix-doc/src/main/markdown/sqlpp/appendix_3_resolution.md
new file mode 100644
index 0000000..1357571
--- /dev/null
+++ b/asterixdb/asterix-doc/src/main/markdown/sqlpp/appendix_3_resolution.md
@@ -0,0 +1,253 @@
+<!--
+ ! Licensed to the Apache Software Foundation (ASF) under one
+ ! or more contributor license agreements.  See the NOTICE file
+ ! distributed with this work for additional information
+ ! regarding copyright ownership.  The ASF licenses this file
+ ! to you under the Apache License, Version 2.0 (the
+ ! "License"); you may not use this file except in compliance
+ ! with the License.  You may obtain a copy of the License at
+ !
+ !   http://www.apache.org/licenses/LICENSE-2.0
+ !
+ ! Unless required by applicable law or agreed to in writing,
+ ! software distributed under the License is distributed on an
+ ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ! KIND, either express or implied.  See the License for the
+ ! specific language governing permissions and limitations
+ ! under the License.
+ !-->
+
+In this Appendix, we'll look at how variables are bound and how names are resolved.
+Names can appear in every clause of a query.
+Sometimes a name consists of just a single identifier, e.g., `region` or `revenue`.
+More often a name will consist of two identifiers separated by a dot, e.g., `customer.address`.
+Occasionally a name may have more than two identifiers, e.g., `policy.owner.address.zipcode`.
+*Resolving* a name means determining exactly what the (possibly multi-part) name refers to.
+It is necessary to have well-defined rules for how to resolve a name in cases of ambiguity.
+(In the absence of schemas, such cases arise more commonly, and also differently, than they do in SQL.)
+
+The basic job of each clause in a query block is to bind variables.
+Each clause sees the variables bound by previous clauses and may bind additional variables.
+Names are always resolved with respect to the variables that are bound ("in scope") at the place where the name use in question occurs.
+It is possible that the name resolution process will fail, which may lead to an empty result or an error message.
+
+One important bit of background: When the system is reading a query and resolving its names, it has a list of all the available dataverses and datasets.
+As a result, it knows whether `a.b` is a valid name for dataset `b` in dataverse `a`.
+However, the system does not in general have knowledge of the schemas of the data inside the datasets; remember that this is a much more open world.
+As a result, in general the system cannot know whether any object in a particular dataset will have a field named `c`.
+These assumptions affect how errors are handled.
+If you try to access dataset `a.b` and no dataset by that name exists, you will get an error and your query will not run.
+However, if you try to access a field `c` in a collection of objects, your query will run and return `missing` for each object that doesn't have a field named `c` – this is because it’s possible that some object (someday) could have such a field.
+
+## <a id="Binding_variables">Binding Variables</a>
+
+Variables can be bound in the following ways:
+
+1.  WITH and LET clauses bind a variable to the result of an expression in a straightforward way
+
+    Examples:
+
+    `WITH cheap_parts AS (SELECT partno FROM parts WHERE price < 100)`
+    binds the variable `cheap_parts` to the result of the subquery.
+
+    `LET pay = salary + bonus`
+    binds the variable `pay` to the result of evaluating the expression `salary + bonus`.
+
+2.  FROM, GROUP BY, and SELECT clauses have optional AS subclauses that contain an expression and a name (called an *iteration variable* in a FROM clause, or an alias in GROUP BY or SELECT.)
+
+    Examples:
+
+    `FROM customer AS c, order AS o`
+
+    `GROUP BY salary + bonus AS total_pay`
+
+    `SELECT MAX(price) AS highest_price`
+
+    An AS subclause always binds the name (as a variable) to the result of the expression (or, in the case of a FROM clause, to the *individual members* of the collection identified by the expression.)
+
+    It's always a good practice to use the keyword AS when defining an alias or iteration variable.
+    However, as in SQL, the syntax allows the keyword AS to be omitted.
+    For example, the FROM clause above could have been written like this:
+
+    `FROM customer c, order o`
+
+    Omitting the keyword AS does not affect the binding of variables.
+    The FROM clause in this example binds variables c and o whether the keyword AS is used or not.
+
+    In certain cases, a variable is automatically bound even if no alias or variable-name is specified.
+    Whenever an expression could have been followed by an AS subclause, if the expression consists of a simple name or a path expression, that expression binds a variable whose name is the same as the simple name or the last step in the path expression.
+    Here are some examples:
+
+    `FROM customer, order` binds iteration variables named `customer` and `order`
+
+    `GROUP BY address.zipcode` binds a variable named `zipcode`
+
+    `SELECT item[0].price` binds a variable named `price`
+
+    Note that a FROM clause iterates over a collection (usually a dataset), binding a variable to each member of the collection in turn.
+    The name of the collection remains in scope, but it is not a variable.
+    For example, consider this FROM clause used in a self-join:
+
+    `FROM customer AS c1, customer AS c2`
+
+    This FROM clause joins the customer dataset to itself, binding the iteration variables c1 and c2 to objects in the left-hand-side and right-hand-side of the join, respectively.
+    After the FROM clause, c1 and c2 are in scope as variables, and customer remains accessible as a dataset name but not as a variable.
+
+3.  Special rules for GROUP BY:
+
+    1.  If a GROUP BY clause specifies an expression that has no explicit alias, it binds a pseudo-variable that is lexicographically identical to the expression itself.
+        For example:
+
+        `GROUP BY salary + bonus` binds a pseudo-variable named `salary + bonus`.
+
+        This rule allows subsequent clauses to refer to the grouping expression (salary + bonus) even though its constituent variables (salary and bonus) are no longer in scope.
+        For example, the following query is valid:
+
+            FROM employee
+            GROUP BY salary + bonus
+            HAVING salary + bonus > 1000
+            SELECT salary + bonus, COUNT(*) AS how_many
+
+        While it might have been more elegant to explicitly require an alias in cases like this, the pseudo-variable rule is retained for SQL compatibility.
+        Note that the expression `salary + bonus` is not *actually* evaluated in the HAVING and SELECT clauses (and could not be since `salary` and `bonus` are no longer individually in scope).
+        Instead, the expression `salary + bonus` is treated as a reference to the pseudo-variable defined in the GROUP BY clause.
+
+    2.  A GROUP BY clause may be followed by a GROUP AS clause that binds a variable to the group.
+        The purpose of this variable is to make the individual objects inside the group visible to subqueries that may need to iterate over them.
+
+        The GROUP AS variable is bound to a multiset of objects.
+        Each object represents one of the members of the group.
+        Since the group may have been formed from a join, each of the member-objects contains a nested object for each variable bound by the nearest FROM clause (and its LET subclause, if any).
+        These nested objects, in turn, contain the actual fields of the group-member.
+        To understand this process, consider the following query fragment:
+
+            FROM parts AS p, suppliers AS s
+            WHERE p.suppno = s.suppno
+            GROUP BY p.color GROUP AS g
+
+        Suppose that the objects in `parts` have fields `partno`, `color`, and `suppno`.
+        Suppose that the objects in suppliers have fields `suppno` and `location`.
+
+        Then, for each group formed by the GROUP BY, the variable g will be bound to a multiset with the following structure:
+
+            [ { "p": { "partno": "p1", "color": "red", "suppno": "s1" },
+                "s": { "suppno": "s1", "location": "Denver" } },
+              { "p": { "partno": "p2", "color": "red", "suppno": "s2" },
+                "s": { "suppno": "s2", "location": "Atlanta" } },
+              ...
+            ]
+
+## <a id="Scoping">Scoping</a>
+
+In general, the variables that are in scope at a particular position are those variables that were bound earlier in the current query block, in outer (enclosing) query blocks, or in a WITH clause at the beginning of the query.
+More specific rules follow.
+
+The clauses in a query block are conceptually processed in the following order:
+
+* FROM (followed by LET subclause, if any)
+* WHERE
+* GROUP BY (followed by LET subclause, if any)
+* HAVING
+* SELECT or SELECT VALUE
+* ORDER BY
+* OFFSET
+* LIMIT
+
+During processing of each clause, the variables that are in scope are those variables that are bound in the following places:
+
+1.  In earlier clauses of the same query block (as defined by the ordering given above).
+
+    Example: `FROM orders AS o SELECT o.date`
+    The variable `o` in the SELECT clause is bound, in turn, to each object in the dataset `orders`.
+
+2.  In outer query blocks in which the current query block is nested.
+    In case of duplication, the innermost binding wins.
+
+3.  In the WITH clause (if any) at the beginning of the query.
+
+However, in a query block where a GROUP BY clause is present:
+
+1.  In clauses processed before GROUP BY, scoping rules are the same as though no GROUP BY were present.
+
+2.  In clauses processed after GROUP BY, the variables bound in the nearest FROM-clause (and its LET subclause, if any) are removed from scope and replaced by the variables bound in the GROUP BY clause (and its LET subclause, if any).
+    However, this replacement does not apply inside the arguments of the five SQL special aggregating functions (MIN, MAX, AVG, SUM, and COUNT).
+    These functions still need to see the individual data items over which they are computing an aggregation.
+    For example, after `FROM employee AS e GROUP BY deptno`, it would not be valid to reference `e.salary`, but `AVG(e.salary)` would be valid.
+
+Special case: In an expression inside a FROM clause, a variable is in scope if it was bound in an earlier expression in the same FROM clause.
+Example:
+
+    FROM orders AS o, o.items AS i
+
+The reason for this special case is to support iteration over nested collections.
+
+Note that, since the SELECT clause comes *after* the WHERE and GROUP BY clauses in conceptual processing order, any variables defined in SELECT are not visible in WHERE or GROUP BY.
+Therefore the following query will not return what might be the expected result (since in the WHERE clause, `pay` will be interpreted as a field in the `emp` object rather than as the computed value `salary + bonus`):
+
+    SELECT name, salary + bonus AS pay
+    FROM emp
+    WHERE pay > 1000
+    ORDER BY pay
+
+The likely intent of the query above can be accomplished as follows:
+
+    FROM emp AS e
+    LET pay = e.salary + e.bonus
+    WHERE pay > 1000
+    SELECT e.name, pay
+    ORDER BY pay
+
+## <a id="Resolving_names">Resolving Names</a>
+
+The process of name resolution begins with the leftmost identifier in the name.
+The rules for resolving the leftmost identifier are:
+
+1.  _In a FROM clause_: Names in a FROM clause identify the collections over which the query block will iterate.
+    These collections may be stored datasets or may be the results of nested query blocks.
+    A stored dataset may be in a named dataverse or in the default dataverse.
+    Thus, if the two-part name `a.b` is in a FROM clause, a might represent a dataverse and `b` might represent a dataset in that dataverse.
+    Another example of a two-part name in a FROM clause is `FROM orders AS o, o.items AS i`.
+    In `o.items`, `o` represents an order object bound earlier in the FROM clause, and items represents the items object inside that order.
+
+    The rules for resolving the leftmost identifier in a FROM clause (including a JOIN subclause), or in the expression following IN in a quantified predicate, are as follows:
+
+    1.  If the identifier matches a variable-name that is in scope, it resolves to the binding of that variable.
+        (Note that in the case of a subquery, an in-scope variable might have been bound in an outer query block; this is called a correlated subquery.)
+
+    2.  Otherwise, if the identifier is the first part of a two-part name like `a.b`, the name is treated as dataverse.dataset.
+        If the identifier stands alone as a one-part name, it is treated as the name of a dataset in the default dataverse.
+        An error will result if the designated dataverse or dataset does not exist.
+
+2.  _Elsewhere in a query block_: In clauses other than FROM, a name typically identifies a field of some object.
+    For example, if the expression `a.b` is in a SELECT or WHERE clause, it's likely that `a` represents an object and `b` represents a field in that object.
+
+    The rules for resolving the leftmost identifier in clauses other than the ones listed in Rule 1 are:
+
+    1.  If the identifier matches a variable-name that is in scope, it resolves to the binding of that variable.
+        (In the case of a correlated subquery, the in-scope variable might have been bound in an outer query block.)
+
+    2.  (The "Single Variable Rule"): Otherwise, if the FROM clause (or a LET clause if there is no FROM clause) in the current query block binds exactly one variable, the identifier is treated as a field access on the object bound to that variable.
+        For example, in the query `FROM customer SELECT address`, the identifier address is treated as a field in the object bound to the variable customer.
+        At runtime, if the object bound to customer has no `address` field, the `address` expression will return `missing`.
+        If the FROM clause (and its LET subclause, if any) in the current query block binds multiple variables, name resolution fails with an "ambiguous name" error.
+        Note that the Single Variable Rule searches for bound variables only in the current query block, not in outer (containing) blocks.
+        The purpose of this rule is to permit the compiler to resolve field-references unambiguously without relying on any schema information.
+
+        Exception: In a query that has a GROUP BY clause, the Single Variable Rule does not apply in any clauses that occur after the GROUP BY because, in these clauses, the variables bound by the FROM clause are no longer in scope.
+        In clauses after GROUP BY, only Rule 2.1 applies.
+
+3.  In an ORDER BY clause following a UNION ALL expression:
+
+    The leftmost identifier is treated as a field-access on the objects that are generated by the UNION ALL.
+    For example:
+
+        query-block-1
+        UNION ALL
+        query-block-2
+        ORDER BY salary
+
+    In the result of this query, objects that have a foo field will be ordered by the value of this field; objects that have no foo field will appear at at the beginning of the query result (in ascending order) or at the end (in descending order.)
+
+4.  Once the leftmost identifier has been resolved, the following dots and identifiers in the name (if any) are treated as a path expression that navigates to a field nested inside that object.
+    The name resolves to the field at the end of the path.
+    If this field does not exist, the value `missing` is returned.

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/20c1806d/asterixdb/asterix-doc/src/main/markdown/sqlpp/appendix_3_title.md
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-doc/src/main/markdown/sqlpp/appendix_3_title.md b/asterixdb/asterix-doc/src/main/markdown/sqlpp/appendix_3_title.md
new file mode 100644
index 0000000..ef1202e
--- /dev/null
+++ b/asterixdb/asterix-doc/src/main/markdown/sqlpp/appendix_3_title.md
@@ -0,0 +1,20 @@
+<!--
+ ! Licensed to the Apache Software Foundation (ASF) under one
+ ! or more contributor license agreements.  See the NOTICE file
+ ! distributed with this work for additional information
+ ! regarding copyright ownership.  The ASF licenses this file
+ ! to you under the Apache License, Version 2.0 (the
+ ! "License"); you may not use this file except in compliance
+ ! with the License.  You may obtain a copy of the License at
+ !
+ !   http://www.apache.org/licenses/LICENSE-2.0
+ !
+ ! Unless required by applicable law or agreed to in writing,
+ ! software distributed under the License is distributed on an
+ ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ! KIND, either express or implied.  See the License for the
+ ! specific language governing permissions and limitations
+ ! under the License.
+ !-->
+
+## <a id="Variable_bindings_and_name_resolution">Appendix 3. Variable Bindings and Name Resolution</a>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/20c1806d/asterixdb/asterix-doc/src/site/markdown/aql/filters.md
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-doc/src/site/markdown/aql/filters.md b/asterixdb/asterix-doc/src/site/markdown/aql/filters.md
index 24461f3..6b8e00f 100644
--- a/asterixdb/asterix-doc/src/site/markdown/aql/filters.md
+++ b/asterixdb/asterix-doc/src/site/markdown/aql/filters.md
@@ -25,8 +25,7 @@
 * [Filters in AsterixDB](#FiltersInAsterixDB)
 * [Filters and Merge Policies](#FiltersAndMergePolicies)
 
-## <a id="Motivation">Motivation</a> <font size="4"><a
-   href="#toc">[Back to TOC]</a></font>
+## <a id="Motivation">Motivation</a> <font size="4"><a href="#toc">[Back to TOC]</a></font>
 
 Traditional relational databases usually employ conventional index
 structures such as B+ trees due to their low read latency.  However,
@@ -86,9 +85,7 @@ same filtering technique can also be used with any secondary LSM index
 (e.g., spatial and temporal predicates), to obtain similar pruning
 power.
 
-## <a id="FiltersInAsterixDB">Filters in AsterixDB</a> <font
-   size="4"><a href="#toc">[Back to TOC]</a></font>
-
+## <a id="FiltersInAsterixDB">Filters in AsterixDB</a> <font size="4"><a href="#toc">[Back to TOC]</a></font>
 
 We have added support for LSM-based filters to all of AsterixDB's
 index types. To enable the use of filters, the user must specify the
@@ -98,12 +95,10 @@ filter's key when creating a dataset, as shown below:
 
         create dataset Tweets(TweetType) primary key tweetid with filter on send-time;
 
-
 Filters can be created on any totally ordered datatype (i.e., any
 field that can be indexed using a B+ -tree), such as integers,
 doubles, floats, UUIDs, datetimes, etc.
 
-
 When a dataset with a filter is created, the name of the filter's key
 field is persisted in the `Metadata.Dataset` dataset (which is the metadata
 dataset that stores the details of each dataset in an AsterixDB
@@ -117,10 +112,7 @@ dataset). AsterixDB will automatically maintain the filters and will
 leverage them to efficiently answer queries whenever possible (i.e.,
 when a query has predicates on the filter's key).
 
-
-## <a id="FiltersAndMergePolicies">Filters and Merge Policies</a> <font
-size="4"><a href="#toc">[Back to TOC]</a></font>
-
+## <a id="FiltersAndMergePolicies">Filters and Merge Policies</a> <font size="4"><a href="#toc">[Back to TOC]</a></font>
 
 The AsterixDB default merge policy, the prefix merge policy, relies on
 component sizes and the number of components to decide which
@@ -153,5 +145,3 @@ indexes will always have the same number of disk components as their
 primary index under the correlated-prefix merge policy. This has
 improved query performance, since disk components of secondary indexes
 now have a much better chance of being pruned.
-
-

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/20c1806d/asterixdb/asterix-doc/src/site/site.xml
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-doc/src/site/site.xml b/asterixdb/asterix-doc/src/site/site.xml
index a2fee6c..4f782d3 100644
--- a/asterixdb/asterix-doc/src/site/site.xml
+++ b/asterixdb/asterix-doc/src/site/site.xml
@@ -39,7 +39,7 @@
   <skin>
     <groupId>org.apache.maven.skins</groupId>
     <artifactId>maven-fluido-skin</artifactId>
-    <version>1.3.0</version>
+    <version>1.7</version>
   </skin>
   <custom>
     <fluidoSkin>
@@ -59,7 +59,7 @@
 
   <body>
     <head>
-      <script>
+      <![CDATA[<script>
         (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
         (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
         m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -67,7 +67,7 @@
 
         ga('create', 'UA-41536543-1', 'uci.edu');
         ga('send', 'pageview');
-      </script>
+      </script>]]>
     </head>
     <links>
       <item name="Documentation Home" href="index.html"/>
@@ -117,13 +117,13 @@
     <menu ref="reports"/>
 
     <footer>
-      <div class="row-fluid">Apache AsterixDB, AsterixDB, Apache, the Apache
+      <![CDATA[<div class="row-fluid">Apache AsterixDB, AsterixDB, Apache, the Apache
         feather logo, and the Apache AsterixDB project logo are either
         registered trademarks or trademarks of The Apache Software
         Foundation in the United States and other countries.
         All other marks mentioned may be trademarks or registered
         trademarks of their respective owners.
-      </div>
+      </div>]]>
     </footer>
 
   </body>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/20c1806d/asterixdb/pom.xml
----------------------------------------------------------------------
diff --git a/asterixdb/pom.xml b/asterixdb/pom.xml
index 6e87cf0..0520519 100644
--- a/asterixdb/pom.xml
+++ b/asterixdb/pom.xml
@@ -537,7 +537,7 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-site-plugin</artifactId>
-          <version>3.4</version>
+          <version>3.7.1</version>
         </plugin>
         <plugin>
           <groupId>org.jvnet.jaxb2.maven2</groupId>


[10/43] asterixdb git commit: [ASTERIXDB-2354][COMP] Partition constraint propagation for binary operators

Posted by im...@apache.org.
[ASTERIXDB-2354][COMP] Partition constraint propagation for binary operators

- user model changes: no
- storage format changes: no
- interface changes: no

Details:
- Fixes partition constraint propagation for binary operators.
  Previously only constraint from the second branch was used and
  constraint from the first branch was ignored.
  Now constraints from both branches are composed into a single one.

Change-Id: Ia9930479af9d0f67d6ed3ed490b9f05dc1cd8e3a
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2568
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Contrib: Jenkins <je...@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Till Westmann <ti...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/16ea11ca
Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/16ea11ca
Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/16ea11ca

Branch: refs/heads/release-0.9.4-pre-rc
Commit: 16ea11cab9d70fafb53b0ef7e6034bfdda63985c
Parents: 85142c0
Author: Dmitry Lychagin <dm...@couchbase.com>
Authored: Thu Apr 19 16:32:16 2018 -0700
Committer: Dmitry Lychagin <dm...@couchbase.com>
Committed: Thu Apr 19 21:21:03 2018 -0700

----------------------------------------------------------------------
 .../query-ASTERIXDB-2354.1.ddl.sqlpp            | 40 ++++++++++++++++++++
 .../query-ASTERIXDB-2354.2.query.sqlpp          | 29 ++++++++++++++
 .../query-ASTERIXDB-2354.1.adm                  |  3 ++
 .../resources/runtimets/testsuite_sqlpp.xml     |  5 +++
 .../AlgebricksAbsolutePartitionConstraint.java  | 27 ++++++++++++-
 .../AlgebricksCountPartitionConstraint.java     | 20 ++++++++++
 .../AlgebricksPartitionConstraint.java          |  5 +++
 .../algebricks/core/jobgen/impl/JobBuilder.java | 16 +++++---
 .../hyracks/api/exceptions/ErrorCode.java       |  1 +
 .../src/main/resources/errormsg/en.properties   |  1 +
 10 files changed, 140 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/16ea11ca/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-2354/query-ASTERIXDB-2354.1.ddl.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-2354/query-ASTERIXDB-2354.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-2354/query-ASTERIXDB-2354.1.ddl.sqlpp
new file mode 100644
index 0000000..2812a2c
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-2354/query-ASTERIXDB-2354.1.ddl.sqlpp
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+drop  dataverse tpch if exists;
+create  dataverse tpch;
+
+use tpch;
+
+create type tpch.OrderType as
+ closed {
+  o_orderkey : bigint,
+  o_custkey : bigint,
+  o_orderstatus : string,
+  o_totalprice : double,
+  o_orderdate : string,
+  o_orderpriority : string,
+  o_clerk : string,
+  o_shippriority : bigint,
+  o_comment : string
+};
+
+create dataset Orders(OrderType) primary key o_orderkey;
+
+create index OrdersIdx on Orders (o_custkey) type btree;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/16ea11ca/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-2354/query-ASTERIXDB-2354.2.query.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-2354/query-ASTERIXDB-2354.2.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-2354/query-ASTERIXDB-2354.2.query.sqlpp
new file mode 100644
index 0000000..1a78363
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-2354/query-ASTERIXDB-2354.2.query.sqlpp
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+use tpch;
+
+SELECT ds.DatasetName as v1
+FROM Metadata.`Dataset` ds
+WHERE ds.DatasetName LIKE "Orders%"
+UNION ALL
+SELECT ds.DatasetName v1, idx.DatasetName v2, idx.IndexName v3
+FROM Metadata.`Index` idx, Metadata.`Dataset` ds
+WHERE ds.DatasetName LIKE "Orders%" and idx.DatasetName LIKE "Orders%"
+ORDER BY v1, v2, v3
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/16ea11ca/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/query-ASTERIXDB-2354/query-ASTERIXDB-2354.1.adm
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/query-ASTERIXDB-2354/query-ASTERIXDB-2354.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/query-ASTERIXDB-2354/query-ASTERIXDB-2354.1.adm
new file mode 100644
index 0000000..e2ba372
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/query-ASTERIXDB-2354/query-ASTERIXDB-2354.1.adm
@@ -0,0 +1,3 @@
+{ "v1": "Orders" }
+{ "v1": "Orders", "v2": "Orders", "v3": "Orders" }
+{ "v1": "Orders", "v2": "Orders", "v3": "OrdersIdx" }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/16ea11ca/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
index 3b1363c..3823234 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
@@ -3715,6 +3715,11 @@
       </compilation-unit>
     </test-case>
     <test-case FilePath="misc">
+      <compilation-unit name="query-ASTERIXDB-2354">
+        <output-dir compare="Text">query-ASTERIXDB-2354</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="misc">
       <compilation-unit name="query-ASTERIXDB-2355">
         <output-dir compare="Text">none</output-dir>
         <expected-error><![CDATA[ASX1001: Syntax error: In line 22 >> %%%<< Encountered "%" at column 2.]]></expected-error>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/16ea11ca/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/constraints/AlgebricksAbsolutePartitionConstraint.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/constraints/AlgebricksAbsolutePartitionConstraint.java b/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/constraints/AlgebricksAbsolutePartitionConstraint.java
index 067579e..b6443c4 100644
--- a/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/constraints/AlgebricksAbsolutePartitionConstraint.java
+++ b/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/constraints/AlgebricksAbsolutePartitionConstraint.java
@@ -20,11 +20,15 @@ package org.apache.hyracks.algebricks.common.constraints;
 
 import java.util.Arrays;
 
+import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.hyracks.api.exceptions.ErrorCode;
+
 public class AlgebricksAbsolutePartitionConstraint extends AlgebricksPartitionConstraint {
     private final String[] locations;
 
     public AlgebricksAbsolutePartitionConstraint(String[] locations) {
-        this.locations = locations;
+        this.locations = locations.clone();
+        Arrays.sort(locations);
     }
 
     @Override
@@ -38,7 +42,26 @@ public class AlgebricksAbsolutePartitionConstraint extends AlgebricksPartitionCo
 
     @Override
     public String toString() {
-        return Arrays.toString(locations);
+        return getPartitionConstraintType().toString() + ':' + Arrays.toString(locations);
     }
 
+    @Override
+    public AlgebricksPartitionConstraint compose(AlgebricksPartitionConstraint that) throws AlgebricksException {
+        switch (that.getPartitionConstraintType()) {
+            case COUNT:
+                AlgebricksCountPartitionConstraint thatCount = (AlgebricksCountPartitionConstraint) that;
+                if (locations.length <= thatCount.getCount()) {
+                    return this;
+                }
+                break;
+            case ABSOLUTE:
+                AlgebricksAbsolutePartitionConstraint thatAbsolute = (AlgebricksAbsolutePartitionConstraint) that;
+                if (Arrays.equals(locations, thatAbsolute.locations)) {
+                    return this;
+                }
+                break;
+        }
+
+        throw AlgebricksException.create(ErrorCode.CANNOT_COMPOSE_PART_CONSTRAINTS, toString(), that.toString());
+    }
 }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/16ea11ca/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/constraints/AlgebricksCountPartitionConstraint.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/constraints/AlgebricksCountPartitionConstraint.java b/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/constraints/AlgebricksCountPartitionConstraint.java
index fbafdee..2fc4804 100644
--- a/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/constraints/AlgebricksCountPartitionConstraint.java
+++ b/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/constraints/AlgebricksCountPartitionConstraint.java
@@ -18,6 +18,9 @@
  */
 package org.apache.hyracks.algebricks.common.constraints;
 
+import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.hyracks.api.exceptions.ErrorCode;
+
 public class AlgebricksCountPartitionConstraint extends AlgebricksPartitionConstraint {
 
     private final int count;
@@ -35,4 +38,21 @@ public class AlgebricksCountPartitionConstraint extends AlgebricksPartitionConst
         return count;
     }
 
+    @Override
+    public String toString() {
+        return getPartitionConstraintType().toString() + ':' + count;
+    }
+
+    @Override
+    public AlgebricksPartitionConstraint compose(AlgebricksPartitionConstraint that) throws AlgebricksException {
+        switch (that.getPartitionConstraintType()) {
+            case COUNT:
+                AlgebricksCountPartitionConstraint thatCount = (AlgebricksCountPartitionConstraint) that;
+                return count <= thatCount.count ? this : that;
+            case ABSOLUTE:
+                return that.compose(this);
+        }
+
+        throw AlgebricksException.create(ErrorCode.CANNOT_COMPOSE_PART_CONSTRAINTS, toString(), that.toString());
+    }
 }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/16ea11ca/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/constraints/AlgebricksPartitionConstraint.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/constraints/AlgebricksPartitionConstraint.java b/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/constraints/AlgebricksPartitionConstraint.java
index ada1390..71575d5 100644
--- a/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/constraints/AlgebricksPartitionConstraint.java
+++ b/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/constraints/AlgebricksPartitionConstraint.java
@@ -18,6 +18,8 @@
  */
 package org.apache.hyracks.algebricks.common.constraints;
 
+import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+
 public abstract class AlgebricksPartitionConstraint {
     public enum PartitionConstraintType {
         ABSOLUTE,
@@ -25,4 +27,7 @@ public abstract class AlgebricksPartitionConstraint {
     }
 
     public abstract PartitionConstraintType getPartitionConstraintType();
+
+    public abstract AlgebricksPartitionConstraint compose(AlgebricksPartitionConstraint that)
+            throws AlgebricksException;
 }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/16ea11ca/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/JobBuilder.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/JobBuilder.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/JobBuilder.java
index 16992e7..526add1 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/JobBuilder.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/JobBuilder.java
@@ -185,7 +185,8 @@ public class JobBuilder implements IHyracksJobBuilder {
         return resultOps;
     }
 
-    private void setAllPartitionConstraints(Map<IConnectorDescriptor, TargetConstraint> tgtConstraints) {
+    private void setAllPartitionConstraints(Map<IConnectorDescriptor, TargetConstraint> tgtConstraints)
+            throws AlgebricksException {
         List<OperatorDescriptorId> roots = jobSpec.getRoots();
         setSpecifiedPartitionConstraints();
         for (OperatorDescriptorId rootId : roots) {
@@ -243,8 +244,8 @@ public class JobBuilder implements IHyracksJobBuilder {
     }
 
     private void setPartitionConstraintsBottomup(OperatorDescriptorId opId,
-            Map<IConnectorDescriptor, TargetConstraint> tgtConstraints, IOperatorDescriptor parentOp,
-            boolean finalPass) {
+            Map<IConnectorDescriptor, TargetConstraint> tgtConstraints, IOperatorDescriptor parentOp, boolean finalPass)
+            throws AlgebricksException {
         List<IConnectorDescriptor> opInputs = jobSpec.getOperatorInputMap().get(opId);
         AlgebricksPartitionConstraint opConstraint = null;
         IOperatorDescriptor opDesc = jobSpec.getOperatorMap().get(opId);
@@ -260,10 +261,10 @@ public class JobBuilder implements IHyracksJobBuilder {
                 if (constraint != null) {
                     switch (constraint) {
                         case ONE:
-                            opConstraint = countOneLocation;
+                            opConstraint = composePartitionConstraints(opConstraint, countOneLocation);
                             break;
                         case SAME_COUNT:
-                            opConstraint = partitionConstraintMap.get(src);
+                            opConstraint = composePartitionConstraints(opConstraint, partitionConstraintMap.get(src));
                             break;
                     }
                 }
@@ -439,4 +440,9 @@ public class JobBuilder implements IHyracksJobBuilder {
         }
         return false;
     }
+
+    private static AlgebricksPartitionConstraint composePartitionConstraints(AlgebricksPartitionConstraint pc1,
+            AlgebricksPartitionConstraint pc2) throws AlgebricksException {
+        return pc1 == null ? pc2 : pc2 == null ? pc1 : pc1.compose(pc2);
+    }
 }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/16ea11ca/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java
index 0691005..51afac1 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java
@@ -151,6 +151,7 @@ public class ErrorCode {
 
     // Compilation error codes.
     public static final int RULECOLLECTION_NOT_INSTANCE_OF_LIST = 10000;
+    public static final int CANNOT_COMPOSE_PART_CONSTRAINTS = 10001;
 
     private static class Holder {
         private static final Map<Integer, String> errorMessageMap;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/16ea11ca/hyracks-fullstack/hyracks/hyracks-api/src/main/resources/errormsg/en.properties
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/resources/errormsg/en.properties b/hyracks-fullstack/hyracks/hyracks-api/src/main/resources/errormsg/en.properties
index 1846062..452d379 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/main/resources/errormsg/en.properties
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/resources/errormsg/en.properties
@@ -133,3 +133,4 @@
 114 = Node (%1$s) is not active
 
 10000 = The given rule collection %1$s is not an instance of the List class.
+10001 = Cannot compose partition constraint %1$s with %2$s


[28/43] asterixdb git commit: [ASTERIXDB-2318] Build dashboard in mvn

Posted by im...@apache.org.
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/styles.9f50282210bba5318775.bundle.css
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/styles.9f50282210bba5318775.bundle.css b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/styles.9f50282210bba5318775.bundle.css
deleted file mode 100644
index 8b566dc..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/styles.9f50282210bba5318775.bundle.css
+++ /dev/null
@@ -1 +0,0 @@
-html{box-sizing:border-box}body{font-family:Roboto Mono,monospace;font-size:.8rem;font-weight:500}.ui-datatable .ui-sortable-column div.ui-dt-c{padding-right:15px!important}.mat-elevation-z0{box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.mat-elevation-z1{box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12)}.mat-elevation-z2{box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.mat-elevation-z3{box-shadow:0 3px 3px -2px rgba(0,0,0,.2),0 3px 4px 0 rgba(0,0,0,.14),0 1px 8px 0 rgba(0,0,0,.12)}.mat-elevation-z4{box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.mat-elevation-z5{box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 5px 8px 0 rgba(0,0,0,.14),0 1px 14px 0 rgba(0,0,0,.12)}.mat-elevation-z6{box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.mat-elevation-z7{box-shadow:0
  4px 5px -2px rgba(0,0,0,.2),0 7px 10px 1px rgba(0,0,0,.14),0 2px 16px 1px rgba(0,0,0,.12)}.mat-elevation-z8{box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.mat-elevation-z9{box-shadow:0 5px 6px -3px rgba(0,0,0,.2),0 9px 12px 1px rgba(0,0,0,.14),0 3px 16px 2px rgba(0,0,0,.12)}.mat-elevation-z10{box-shadow:0 6px 6px -3px rgba(0,0,0,.2),0 10px 14px 1px rgba(0,0,0,.14),0 4px 18px 3px rgba(0,0,0,.12)}.mat-elevation-z11{box-shadow:0 6px 7px -4px rgba(0,0,0,.2),0 11px 15px 1px rgba(0,0,0,.14),0 4px 20px 3px rgba(0,0,0,.12)}.mat-elevation-z12{box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)}.mat-elevation-z13{box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 13px 19px 2px rgba(0,0,0,.14),0 5px 24px 4px rgba(0,0,0,.12)}.mat-elevation-z14{box-shadow:0 7px 9px -4px rgba(0,0,0,.2),0 14px 21px 2px rgba(0,0,0,.14),0 5px 26px 4px rgba(0,0,0,.12)}.mat-elevation-z15{box-shadow:0 8px 9px -5px rgba
 (0,0,0,.2),0 15px 22px 2px rgba(0,0,0,.14),0 6px 28px 5px rgba(0,0,0,.12)}.mat-elevation-z16{box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)}.mat-elevation-z17{box-shadow:0 8px 11px -5px rgba(0,0,0,.2),0 17px 26px 2px rgba(0,0,0,.14),0 6px 32px 5px rgba(0,0,0,.12)}.mat-elevation-z18{box-shadow:0 9px 11px -5px rgba(0,0,0,.2),0 18px 28px 2px rgba(0,0,0,.14),0 7px 34px 6px rgba(0,0,0,.12)}.mat-elevation-z19{box-shadow:0 9px 12px -6px rgba(0,0,0,.2),0 19px 29px 2px rgba(0,0,0,.14),0 7px 36px 6px rgba(0,0,0,.12)}.mat-elevation-z20{box-shadow:0 10px 13px -6px rgba(0,0,0,.2),0 20px 31px 3px rgba(0,0,0,.14),0 8px 38px 7px rgba(0,0,0,.12)}.mat-elevation-z21{box-shadow:0 10px 13px -6px rgba(0,0,0,.2),0 21px 33px 3px rgba(0,0,0,.14),0 8px 40px 7px rgba(0,0,0,.12)}.mat-elevation-z22{box-shadow:0 10px 14px -6px rgba(0,0,0,.2),0 22px 35px 3px rgba(0,0,0,.14),0 8px 42px 7px rgba(0,0,0,.12)}.mat-elevation-z23{box-shadow:0 11px 14px -7px rgba(
 0,0,0,.2),0 23px 36px 3px rgba(0,0,0,.14),0 9px 44px 8px rgba(0,0,0,.12)}.mat-elevation-z24{box-shadow:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12)}.mat-h1,.mat-headline,.mat-typography h1{font:400 24px/32px Roboto,Helvetica Neue,sans-serif;margin:0 0 16px}.mat-h2,.mat-title,.mat-typography h2{font:500 20px/32px Roboto,Helvetica Neue,sans-serif;margin:0 0 16px}.mat-h3,.mat-subheading-2,.mat-typography h3{font:400 16px/28px Roboto,Helvetica Neue,sans-serif;margin:0 0 16px}.mat-h4,.mat-subheading-1,.mat-typography h4{font:400 15px/24px Roboto,Helvetica Neue,sans-serif;margin:0 0 16px}.mat-h5,.mat-typography h5{font-size:11.62px}.mat-h5,.mat-h6,.mat-typography h5,.mat-typography h6{font-weight:400;font-family:Roboto,Helvetica Neue,sans-serif;line-height:20px;margin:0 0 12px}.mat-h6,.mat-typography h6{font-size:9.38px}.mat-body-2,.mat-body-strong{font:500 14px/24px Roboto,Helvetica Neue,sans-serif}.mat-body,.mat-body-1,.mat-typography{fo
 nt:400 14px/20px Roboto,Helvetica Neue,sans-serif}.mat-body-1 p,.mat-body p,.mat-typography p{margin:0 0 12px}.mat-caption,.mat-small{font:400 12px/20px Roboto,Helvetica Neue,sans-serif}.mat-display-4,.mat-typography .mat-display-4{font:300 112px/112px Roboto,Helvetica Neue,sans-serif;margin:0 0 56px;letter-spacing:-.05em}.mat-display-3,.mat-typography .mat-display-3{font:400 56px/56px Roboto,Helvetica Neue,sans-serif;margin:0 0 64px;letter-spacing:-.02em}.mat-display-2,.mat-typography .mat-display-2{font:400 45px/48px Roboto,Helvetica Neue,sans-serif;margin:0 0 64px;letter-spacing:-.005em}.mat-display-1,.mat-typography .mat-display-1{font:400 34px/40px Roboto,Helvetica Neue,sans-serif;margin:0 0 64px}.mat-button,.mat-fab,.mat-icon-button,.mat-mini-fab,.mat-raised-button{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:500}.mat-button-toggle,.mat-card{font-family:Roboto,Helvetica Neue,sans-serif}.mat-card-title{font-size:24px;font-weight:400}.mat-card-content,
 .mat-card-header .mat-card-title,.mat-card-subtitle{font-size:14px}.mat-checkbox{font-family:Roboto,Helvetica Neue,sans-serif}.mat-checkbox-layout .mat-checkbox-label{line-height:24px}.mat-chip{font-size:13px;line-height:18px}.mat-chip .mat-chip-remove.mat-icon{font-size:18px}.mat-table{font-family:Roboto,Helvetica Neue,sans-serif}.mat-header-cell{font-size:12px;font-weight:500}.mat-cell{font-size:14px}.mat-calendar{font-family:Roboto,Helvetica Neue,sans-serif}.mat-calendar-body{font-size:13px}.mat-calendar-body-label,.mat-calendar-period-button{font-size:14px;font-weight:500}.mat-calendar-table-header th{font-size:11px;font-weight:400}.mat-dialog-title{font:500 20px/32px Roboto,Helvetica Neue,sans-serif}.mat-expansion-panel-header{font-family:Roboto,Helvetica Neue,sans-serif;font-size:15px;font-weight:400}.mat-expansion-panel-content{font:400 14px/20px Roboto,Helvetica Neue,sans-serif}.mat-form-field{font-family:Roboto,Helvetica Neue,sans-serif;font-size:inherit;font-weight:400;lin
 e-height:1.125}.mat-form-field-wrapper{padding-bottom:1.25em}.mat-form-field-prefix .mat-icon,.mat-form-field-suffix .mat-icon{font-size:150%;line-height:1.125}.mat-form-field-prefix .mat-icon-button,.mat-form-field-suffix .mat-icon-button{height:1.5em;width:1.5em}.mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field-suffix .mat-icon-button .mat-icon{height:1.125em;line-height:1.125}.mat-form-field-infix{padding:.4375em 0;border-top:.84375em solid transparent}.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.001px);transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.001px);-ms-transform:translateY(-1.28125em) scale(.75);width:133.33333333%}.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapp
 er .mat-form-field-label{-webkit-transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00101px);transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00101px);-ms-transform:translateY(-1.28124em) scale(.75);width:133.33334333%}.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00102px);transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00102px);-ms-transform:translateY(-1.28123em) scale(.75);width:133.33335333%}.mat-form-field-label-wrapper{top:-.84375em;padding-top:.84375em}.mat-form-field-label{top:1.28125em}.mat-form-field-underline{bottom:1.25em}.mat-form-field-subscript-wrapper{font-size:75%;margin-top:.54166667em;top:calc(100% - 1.66666667em)}.mat-grid-tile-footer,.mat-grid-tile-header{font-size:14px}.mat-grid-tile-footer .mat-line,.mat-grid-tile-header .mat-lin
 e{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-grid-tile-footer .mat-line:nth-child(n+2),.mat-grid-tile-header .mat-line:nth-child(n+2){font-size:12px}input.mat-input-element{margin-top:-.0625em}.mat-menu-item{font-family:Roboto,Helvetica Neue,sans-serif;font-size:16px;font-weight:400}.mat-paginator,.mat-paginator-page-size .mat-select-trigger{font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px}.mat-radio-button,.mat-select{font-family:Roboto,Helvetica Neue,sans-serif}.mat-select-trigger{height:1.125em}.mat-slide-toggle-content{font:400 14px/20px Roboto,Helvetica Neue,sans-serif}.mat-slider-thumb-label-text{font-size:12px;font-weight:500}.mat-slider-thumb-label-text,.mat-stepper-horizontal,.mat-stepper-vertical{font-family:Roboto,Helvetica Neue,sans-serif}.mat-step-label{font-size:14px;font-weight:400}.mat-step-label-selected{font-size:14px;font-weight:500}.mat-tab-group,.mat-tab-label,.mat-tab-link{font-family:Roboto,Hel
 vetica Neue,sans-serif}.mat-tab-label,.mat-tab-link{font-size:14px;font-weight:500}.mat-toolbar,.mat-toolbar h1,.mat-toolbar h2,.mat-toolbar h3,.mat-toolbar h4,.mat-toolbar h5,.mat-toolbar h6{font:500 20px/32px Roboto,Helvetica Neue,sans-serif;margin:0}.mat-tooltip{font-size:10px;padding-top:6px;padding-bottom:6px}.mat-list-item,.mat-list-option,.mat-tooltip{font-family:Roboto,Helvetica Neue,sans-serif}.mat-list .mat-list-item,.mat-nav-list .mat-list-item,.mat-selection-list .mat-list-item{font-size:16px}.mat-list .mat-list-item .mat-line,.mat-nav-list .mat-list-item .mat-line,.mat-selection-list .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list .mat-list-item .mat-line:nth-child(n+2),.mat-nav-list .mat-list-item .mat-line:nth-child(n+2),.mat-selection-list .mat-list-item .mat-line:nth-child(n+2){font-size:14px}.mat-list .mat-list-option,.mat-nav-list .mat-list-option,.mat-selection-list .mat-list-option{
 font-size:16px}.mat-list .mat-list-option .mat-line,.mat-nav-list .mat-list-option .mat-line,.mat-selection-list .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list .mat-list-option .mat-line:nth-child(n+2),.mat-nav-list .mat-list-option .mat-line:nth-child(n+2),.mat-selection-list .mat-list-option .mat-line:nth-child(n+2){font-size:14px}.mat-list .mat-subheader,.mat-nav-list .mat-subheader,.mat-selection-list .mat-subheader{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:500}.mat-list[dense] .mat-list-item,.mat-nav-list[dense] .mat-list-item,.mat-selection-list[dense] .mat-list-item{font-size:12px}.mat-list[dense] .mat-list-item .mat-line,.mat-nav-list[dense] .mat-list-item .mat-line,.mat-selection-list[dense] .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list[dense] .mat-list-item .mat-line:nth-child(n+
 2),.mat-list[dense] .mat-list-option,.mat-nav-list[dense] .mat-list-item .mat-line:nth-child(n+2),.mat-nav-list[dense] .mat-list-option,.mat-selection-list[dense] .mat-list-item .mat-line:nth-child(n+2),.mat-selection-list[dense] .mat-list-option{font-size:12px}.mat-list[dense] .mat-list-option .mat-line,.mat-nav-list[dense] .mat-list-option .mat-line,.mat-selection-list[dense] .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list[dense] .mat-list-option .mat-line:nth-child(n+2),.mat-nav-list[dense] .mat-list-option .mat-line:nth-child(n+2),.mat-selection-list[dense] .mat-list-option .mat-line:nth-child(n+2){font-size:12px}.mat-list[dense] .mat-subheader,.mat-nav-list[dense] .mat-subheader,.mat-selection-list[dense] .mat-subheader{font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;font-weight:500}.mat-option{font-family:Roboto,Helvetica Neue,sans-serif;font-size:16px}.mat-optgroup-label{font:500 14
 px/24px Roboto,Helvetica Neue,sans-serif}.mat-simple-snackbar{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px}.mat-simple-snackbar-action{line-height:1;font-family:inherit;font-size:inherit;font-weight:500}.mat-ripple{overflow:hidden}@media screen and (-ms-high-contrast:active){.mat-ripple{display:none}}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,-webkit-transform 0ms cubic-bezier(0,0,.2,1);transition:opacity,transform 0ms cubic-bezier(0,0,.2,1);transition:opacity,transform 0ms cubic-bezier(0,0,.2,1),-webkit-transform 0ms cubic-bezier(0,0,.2,1);-webkit-transform:scale(0);transform:scale(0)}.mat-option{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;line-height:48px;height:48px;padding:0 16px;text-align:left;text-decoration:none;position:relative;cursor:pointer;outline:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:hori
 zontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;max-width:100%;box-sizing:border-box;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.mat-option[disabled]{cursor:default}[dir=rtl] .mat-option{text-align:right}.mat-option .mat-icon{margin-right:16px}[dir=rtl] .mat-option .mat-icon{margin-left:16px;margin-right:0}.mat-option[aria-disabled=true]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.mat-optgroup .mat-option:not(.mat-option-multiple){padding-left:32px}[dir=rtl] .mat-optgroup .mat-option:not(.mat-option-multiple){padding-left:16px;padding-right:32px}.mat-option-text{display:inline-block;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;overflow:hidden;text-overflow:ellipsis}.mat-option-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}@media screen and (-ms-high-contrast:active){.mat-option-ripple{opacity:.5}}.mat-option-pseudo-checkbox{margin-right:8px
 }[dir=rtl] .mat-option-pseudo-checkbox{margin-left:8px;margin-right:0}.mat-optgroup-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;line-height:48px;height:48px;padding:0 16px;text-align:left;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.mat-optgroup-label[disabled]{cursor:default}[dir=rtl] .mat-optgroup-label{text-align:right}.mat-optgroup-label .mat-icon{margin-right:16px}[dir=rtl] .mat-optgroup-label .mat-icon{margin-left:16px;margin-right:0}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.cdk-global-overlay-wrapper,.cdk-overlay-container{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-global-overlay-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{box-sizing:border-box}.cdk-o
 verlay-backdrop,.cdk-overlay-pane{position:absolute;pointer-events:auto;z-index:1000}.cdk-overlay-backdrop{top:0;bottom:0;left:0;right:0;-webkit-tap-highlight-color:transparent;transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.48}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.6)}.cdk-overlay-transparent-backdrop{background:none}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}.mat-ripple-element{background-color:rgba(0,0,0,.1)}.mat-option{color:rgba(0,0,0,.87)}.mat-option:focus:not(.mat-option-disabled),.mat-option:hover:not(.mat-option-disabled){background:rgba(0,0,0,.04)}.mat-primary .mat-option.mat-selected:not(.mat-option-disabled){color:#9e9e9e}.mat-accent .mat-option.mat-selected:not(.mat-option-disabled){color:#ffab40}.mat-warn .mat-option.mat-selected:not(.mat-option-disabled){color:#f44336}.mat-option.mat-active,.mat-option.mat-selected:not(.mat-option-multiple):not(.mat-option-disab
 led){background:rgba(0,0,0,.04)}.mat-option.mat-active{color:rgba(0,0,0,.87)}.mat-option.mat-option-disabled{color:rgba(0,0,0,.38)}.mat-optgroup-label{color:rgba(0,0,0,.54)}.mat-optgroup-disabled .mat-optgroup-label{color:rgba(0,0,0,.38)}.mat-pseudo-checkbox{color:rgba(0,0,0,.54)}.mat-pseudo-checkbox:after{color:#fafafa}.mat-accent .mat-pseudo-checkbox-checked,.mat-accent .mat-pseudo-checkbox-indeterminate,.mat-pseudo-checkbox-checked,.mat-pseudo-checkbox-indeterminate{background:#ffab40}.mat-primary .mat-pseudo-checkbox-checked,.mat-primary .mat-pseudo-checkbox-indeterminate{background:#9e9e9e}.mat-warn .mat-pseudo-checkbox-checked,.mat-warn .mat-pseudo-checkbox-indeterminate{background:#f44336}.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled{background:#b0b0b0}.mat-app-background{background-color:#fafafa}.mat-theme-loaded-marker{display:none}.mat-autocomplete-panel{background:#fff;color:rgba(0,0,0,.87)}.mat-a
 utocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover){background:#fff}.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover):not(.mat-option-disabled){color:rgba(0,0,0,.87)}.mat-button,.mat-icon-button{background:transparent}.mat-button.mat-primary .mat-button-focus-overlay,.mat-icon-button.mat-primary .mat-button-focus-overlay{background-color:hsla(0,0%,62%,.12)}.mat-button.mat-accent .mat-button-focus-overlay,.mat-icon-button.mat-accent .mat-button-focus-overlay{background-color:rgba(255,171,64,.12)}.mat-button.mat-warn .mat-button-focus-overlay,.mat-icon-button.mat-warn .mat-button-focus-overlay{background-color:rgba(244,67,54,.12)}.mat-button[disabled] .mat-button-focus-overlay,.mat-icon-button[disabled] .mat-button-focus-overlay{background-color:transparent}.mat-button.mat-primary,.mat-icon-button.mat-primary{color:#9e9e9e}.mat-button.mat-accent,.mat-icon-button.mat-accent{color:#ffab40}.mat-button.mat-warn,.mat-icon-button.mat-warn{colo
 r:#f44336}.mat-button.mat-accent[disabled],.mat-button.mat-primary[disabled],.mat-button.mat-warn[disabled],.mat-button[disabled][disabled],.mat-icon-button.mat-accent[disabled],.mat-icon-button.mat-primary[disabled],.mat-icon-button.mat-warn[disabled],.mat-icon-button[disabled][disabled]{color:rgba(0,0,0,.38)}.mat-fab,.mat-mini-fab,.mat-raised-button{color:rgba(0,0,0,.87);background-color:#fff}.mat-fab.mat-accent,.mat-fab.mat-primary,.mat-mini-fab.mat-accent,.mat-mini-fab.mat-primary,.mat-raised-button.mat-accent,.mat-raised-button.mat-primary{color:rgba(0,0,0,.87)}.mat-fab.mat-warn,.mat-mini-fab.mat-warn,.mat-raised-button.mat-warn{color:#fff}.mat-fab.mat-accent[disabled],.mat-fab.mat-primary[disabled],.mat-fab.mat-warn[disabled],.mat-fab[disabled][disabled],.mat-mini-fab.mat-accent[disabled],.mat-mini-fab.mat-primary[disabled],.mat-mini-fab.mat-warn[disabled],.mat-mini-fab[disabled][disabled],.mat-raised-button.mat-accent[disabled],.mat-raised-button.mat-primary[disabled],.mat-ra
 ised-button.mat-warn[disabled],.mat-raised-button[disabled][disabled]{color:rgba(0,0,0,.38)}.mat-fab.mat-primary,.mat-mini-fab.mat-primary,.mat-raised-button.mat-primary{background-color:#9e9e9e}.mat-fab.mat-accent,.mat-mini-fab.mat-accent,.mat-raised-button.mat-accent{background-color:#ffab40}.mat-fab.mat-warn,.mat-mini-fab.mat-warn,.mat-raised-button.mat-warn{background-color:#f44336}.mat-fab.mat-accent[disabled],.mat-fab.mat-primary[disabled],.mat-fab.mat-warn[disabled],.mat-fab[disabled][disabled],.mat-mini-fab.mat-accent[disabled],.mat-mini-fab.mat-primary[disabled],.mat-mini-fab.mat-warn[disabled],.mat-mini-fab[disabled][disabled],.mat-raised-button.mat-accent[disabled],.mat-raised-button.mat-primary[disabled],.mat-raised-button.mat-warn[disabled],.mat-raised-button[disabled][disabled]{background-color:rgba(0,0,0,.12)}.mat-fab.mat-accent .mat-ripple-element,.mat-fab.mat-primary .mat-ripple-element,.mat-mini-fab.mat-accent .mat-ripple-element,.mat-mini-fab.mat-primary .mat-ripp
 le-element,.mat-raised-button.mat-accent .mat-ripple-element,.mat-raised-button.mat-primary .mat-ripple-element{background-color:rgba(0,0,0,.2)}.mat-fab.mat-warn .mat-ripple-element,.mat-mini-fab.mat-warn .mat-ripple-element,.mat-raised-button.mat-warn .mat-ripple-element{background-color:hsla(0,0%,100%,.2)}.mat-button.mat-primary .mat-ripple-element{background-color:hsla(0,0%,62%,.1)}.mat-button.mat-accent .mat-ripple-element{background-color:rgba(255,171,64,.1)}.mat-button.mat-warn .mat-ripple-element{background-color:rgba(244,67,54,.1)}.mat-icon-button.mat-primary .mat-ripple-element{background-color:hsla(0,0%,62%,.2)}.mat-icon-button.mat-accent .mat-ripple-element{background-color:rgba(255,171,64,.2)}.mat-icon-button.mat-warn .mat-ripple-element{background-color:rgba(244,67,54,.2)}.mat-button-toggle{color:rgba(0,0,0,.38)}.mat-button-toggle.cdk-focused .mat-button-toggle-focus-overlay{background-color:rgba(0,0,0,.06)}.mat-button-toggle-checked{background-color:#e0e0e0;color:rgba(
 0,0,0,.54)}.mat-button-toggle-disabled{background-color:#eee;color:rgba(0,0,0,.38)}.mat-button-toggle-disabled.mat-button-toggle-checked{background-color:#bdbdbd}.mat-card{background:#fff;color:rgba(0,0,0,.87)}.mat-card-subtitle{color:rgba(0,0,0,.54)}.mat-checkbox-frame{border-color:rgba(0,0,0,.54)}.mat-checkbox-checkmark{fill:#fafafa}.mat-checkbox-checkmark-path{stroke:#fafafa!important}.mat-checkbox-mixedmark{background-color:#fafafa}.mat-checkbox-checked.mat-primary .mat-checkbox-background,.mat-checkbox-indeterminate.mat-primary .mat-checkbox-background{background-color:#9e9e9e}.mat-checkbox-checked.mat-accent .mat-checkbox-background,.mat-checkbox-indeterminate.mat-accent .mat-checkbox-background{background-color:#ffab40}.mat-checkbox-checked.mat-warn .mat-checkbox-background,.mat-checkbox-indeterminate.mat-warn .mat-checkbox-background{background-color:#f44336}.mat-checkbox-disabled.mat-checkbox-checked .mat-checkbox-background,.mat-checkbox-disabled.mat-checkbox-indeterminate
  .mat-checkbox-background{background-color:#b0b0b0}.mat-checkbox-disabled:not(.mat-checkbox-checked) .mat-checkbox-frame{border-color:#b0b0b0}.mat-checkbox-disabled .mat-checkbox-label{color:#b0b0b0}.mat-checkbox:not(.mat-checkbox-disabled).mat-primary .mat-checkbox-ripple .mat-ripple-element{background-color:hsla(0,0%,62%,.26)}.mat-checkbox:not(.mat-checkbox-disabled).mat-accent .mat-checkbox-ripple .mat-ripple-element{background-color:rgba(255,171,64,.26)}.mat-checkbox:not(.mat-checkbox-disabled).mat-warn .mat-checkbox-ripple .mat-ripple-element{background-color:rgba(244,67,54,.26)}.mat-chip:not(.mat-basic-chip){background-color:#e0e0e0;color:rgba(0,0,0,.87)}.mat-chip:not(.mat-basic-chip) .mat-chip-remove{color:rgba(0,0,0,.87);opacity:.4}.mat-chip:not(.mat-basic-chip) .mat-chip-remove:hover{opacity:.54}.mat-chip.mat-chip-selected.mat-primary{background-color:#9e9e9e;color:rgba(0,0,0,.87)}.mat-chip.mat-chip-selected.mat-primary .mat-chip-remove{color:rgba(0,0,0,.87);opacity:.4}.mat
 -chip.mat-chip-selected.mat-primary .mat-chip-remove:hover{opacity:.54}.mat-chip.mat-chip-selected.mat-warn{background-color:#f44336;color:#fff}.mat-chip.mat-chip-selected.mat-warn .mat-chip-remove{color:#fff;opacity:.4}.mat-chip.mat-chip-selected.mat-warn .mat-chip-remove:hover{opacity:.54}.mat-chip.mat-chip-selected.mat-accent{background-color:#ffab40;color:rgba(0,0,0,.87)}.mat-chip.mat-chip-selected.mat-accent .mat-chip-remove{color:rgba(0,0,0,.87);opacity:.4}.mat-chip.mat-chip-selected.mat-accent .mat-chip-remove:hover{opacity:.54}.mat-table{background:#fff}.mat-header-row,.mat-row{border-bottom-color:rgba(0,0,0,.12)}.mat-header-cell{color:rgba(0,0,0,.54)}.mat-cell{color:rgba(0,0,0,.87)}.mat-datepicker-content{background-color:#fff;color:rgba(0,0,0,.87)}.mat-calendar-arrow{border-top-color:rgba(0,0,0,.54)}.mat-calendar-next-button,.mat-calendar-previous-button{color:rgba(0,0,0,.54)}.mat-calendar-table-header{color:rgba(0,0,0,.38)}.mat-calendar-table-header-divider:after{backgrou
 nd:rgba(0,0,0,.12)}.mat-calendar-body-label{color:rgba(0,0,0,.54)}.mat-calendar-body-cell-content{color:rgba(0,0,0,.87);border-color:transparent}.mat-calendar-body-disabled>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected){color:rgba(0,0,0,.38)}.cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected),.cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected),:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected){background-color:rgba(0,0,0,.04)}.mat-calendar-body-selected{background-color:#9e9e9e;color:rgba(0,0,0,.87)}.mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:hsla(0,0%,62%,.4)}.mat-calendar-body-today:not(.mat-calendar-body-selected){border-color:rgba(0,0,0,.38)}.mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px rgba(0,0,0,.87)}.mat-calendar-body-disable
 d>.mat-calendar-body-today:not(.mat-calendar-body-selected){border-color:rgba(0,0,0,.18)}.mat-dialog-container,.mat-expansion-panel{background:#fff;color:rgba(0,0,0,.87)}.mat-action-row{border-top-color:rgba(0,0,0,.12)}.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]).cdk-keyboard-focused,.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]).cdk-program-focused,.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]):hover{background:rgba(0,0,0,.04)}.mat-expansion-panel-header-title{color:rgba(0,0,0,.87)}.mat-expansion-indicator:after,.mat-expansion-panel-header-description{color:rgba(0,0,0,.54)}.mat-expansion-panel-header[aria-disabled=true]{color:rgba(0,0,0,.38)}.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description,.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title{color:inherit}.mat-form-field-lab
 el,.mat-hint{color:rgba(0,0,0,.54)}.mat-focused .mat-form-field-label{color:#9e9e9e}.mat-focused .mat-form-field-label.mat-accent{color:#ffab40}.mat-focused .mat-form-field-label.mat-warn{color:#f44336}.mat-focused .mat-form-field-required-marker{color:#ffab40}.mat-form-field-underline{background-color:rgba(0,0,0,.42)}.mat-form-field-disabled .mat-form-field-underline{background-image:linear-gradient(90deg,rgba(0,0,0,.42) 0,rgba(0,0,0,.42) 33%,transparent 0);background-size:4px 1px;background-repeat:repeat-x}.mat-form-field-ripple{background-color:#9e9e9e}.mat-form-field-ripple.mat-accent{background-color:#ffab40}.mat-form-field-ripple.mat-warn{background-color:#f44336}.mat-form-field-invalid .mat-form-field-label,.mat-form-field-invalid .mat-form-field-label.mat-accent,.mat-form-field-invalid .mat-form-field-label .mat-form-field-required-marker{color:#f44336}.mat-form-field-invalid .mat-form-field-ripple{background-color:#f44336}.mat-error{color:#f44336}.mat-icon.mat-primary{color
 :#9e9e9e}.mat-icon.mat-accent{color:#ffab40}.mat-icon.mat-warn{color:#f44336}.mat-input-element:disabled{color:rgba(0,0,0,.38)}.mat-input-element::placeholder{color:rgba(0,0,0,.42)}.mat-input-element::-moz-placeholder{color:rgba(0,0,0,.42)}.mat-input-element::-webkit-input-placeholder{color:rgba(0,0,0,.42)}.mat-input-element:-ms-input-placeholder{color:rgba(0,0,0,.42)}.mat-list .mat-list-item,.mat-list .mat-list-option,.mat-nav-list .mat-list-item,.mat-nav-list .mat-list-option,.mat-selection-list .mat-list-item,.mat-selection-list .mat-list-option{color:rgba(0,0,0,.87)}.mat-list .mat-subheader,.mat-nav-list .mat-subheader,.mat-selection-list .mat-subheader{color:rgba(0,0,0,.54)}.mat-list-item-disabled{background-color:#eee}.mat-divider{border-top-color:rgba(0,0,0,.12)}.mat-nav-list .mat-list-item{outline:none}.mat-nav-list .mat-list-item.mat-list-item-focus,.mat-nav-list .mat-list-item:hover{background:rgba(0,0,0,.04)}.mat-list-option{outline:none}.mat-list-option.mat-list-item-foc
 us,.mat-list-option:hover{background:rgba(0,0,0,.04)}.mat-menu-panel{background:#fff}.mat-menu-item{background:transparent;color:rgba(0,0,0,.87)}.mat-menu-item[disabled]{color:rgba(0,0,0,.38)}.mat-menu-item-submenu-trigger:after,.mat-menu-item .mat-icon:not([color]){color:rgba(0,0,0,.54)}.mat-menu-item-highlighted:not([disabled]),.mat-menu-item:focus:not([disabled]),.mat-menu-item:hover:not([disabled]){background:rgba(0,0,0,.04)}.mat-paginator{background:#fff}.mat-paginator,.mat-paginator-page-size .mat-select-trigger{color:rgba(0,0,0,.54)}.mat-paginator-decrement,.mat-paginator-increment{border-top:2px solid rgba(0,0,0,.54);border-right:2px solid rgba(0,0,0,.54)}.mat-icon-button[disabled] .mat-paginator-decrement,.mat-icon-button[disabled] .mat-paginator-increment{border-color:rgba(0,0,0,.38)}.mat-progress-bar-background{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20version%3D%271.1%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20xmlns%3Axlink%3D%27http%
 3A%2F%2Fwww.w3.org%2F1999%2Fxlink%27%20x%3D%270px%27%20y%3D%270px%27%20enable-background%3D%27new%200%200%205%202%27%20xml%3Aspace%3D%27preserve%27%20viewBox%3D%270%200%205%202%27%20preserveAspectRatio%3D%27none%20slice%27%3E%3Ccircle%20cx%3D%271%27%20cy%3D%271%27%20r%3D%271%27%20fill%3D%27whitesmoke%27%2F%3E%3C%2Fsvg%3E")}.mat-progress-bar-buffer{background-color:#f5f5f5}.mat-progress-bar-fill:after{background-color:#9e9e9e}.mat-progress-bar.mat-accent .mat-progress-bar-background{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20version%3D%271.1%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20xmlns%3Axlink%3D%27http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%27%20x%3D%270px%27%20y%3D%270px%27%20enable-background%3D%27new%200%200%205%202%27%20xml%3Aspace%3D%27preserve%27%20viewBox%3D%270%200%205%202%27%20preserveAspectRatio%3D%27none%20slice%27%3E%3Ccircle%20cx%3D%271%27%20cy%3D%271%27%20r%3D%271%27%20fill%3D%27%23ffd180%27%2F%3E%3C%2Fsvg%3E")}.mat-progress-bar.mat-a
 ccent .mat-progress-bar-buffer{background-color:#ffd180}.mat-progress-bar.mat-accent .mat-progress-bar-fill:after{background-color:#ffab40}.mat-progress-bar.mat-warn .mat-progress-bar-background{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20version%3D%271.1%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20xmlns%3Axlink%3D%27http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%27%20x%3D%270px%27%20y%3D%270px%27%20enable-background%3D%27new%200%200%205%202%27%20xml%3Aspace%3D%27preserve%27%20viewBox%3D%270%200%205%202%27%20preserveAspectRatio%3D%27none%20slice%27%3E%3Ccircle%20cx%3D%271%27%20cy%3D%271%27%20r%3D%271%27%20fill%3D%27%23ffcdd2%27%2F%3E%3C%2Fsvg%3E")}.mat-progress-bar.mat-warn .mat-progress-bar-buffer{background-color:#ffcdd2}.mat-progress-bar.mat-warn .mat-progress-bar-fill:after{background-color:#f44336}.mat-progress-spinner circle,.mat-spinner circle{stroke:#9e9e9e}.mat-progress-spinner.mat-accent circle,.mat-spinner.mat-accent circle{stroke:#ffab40}.mat-pr
 ogress-spinner.mat-warn circle,.mat-spinner.mat-warn circle{stroke:#f44336}.mat-radio-outer-circle{border-color:rgba(0,0,0,.54)}.mat-radio-disabled .mat-radio-outer-circle{border-color:rgba(0,0,0,.38)}.mat-radio-disabled .mat-radio-inner-circle,.mat-radio-disabled .mat-radio-ripple .mat-ripple-element{background-color:rgba(0,0,0,.38)}.mat-radio-disabled .mat-radio-label-content{color:rgba(0,0,0,.38)}.mat-radio-button.mat-primary.mat-radio-checked .mat-radio-outer-circle{border-color:#9e9e9e}.mat-radio-button.mat-primary .mat-radio-inner-circle{background-color:#9e9e9e}.mat-radio-button.mat-primary .mat-radio-ripple .mat-ripple-element{background-color:hsla(0,0%,62%,.26)}.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ffab40}.mat-radio-button.mat-accent .mat-radio-inner-circle{background-color:#ffab40}.mat-radio-button.mat-accent .mat-radio-ripple .mat-ripple-element{background-color:rgba(255,171,64,.26)}.mat-radio-button.mat-warn.mat-radio-checke
 d .mat-radio-outer-circle{border-color:#f44336}.mat-radio-button.mat-warn .mat-radio-inner-circle{background-color:#f44336}.mat-radio-button.mat-warn .mat-radio-ripple .mat-ripple-element{background-color:rgba(244,67,54,.26)}.mat-select-content,.mat-select-panel-done-animating{background:#fff}.mat-select-value{color:rgba(0,0,0,.87)}.mat-select-placeholder{color:rgba(0,0,0,.42)}.mat-select-disabled .mat-select-value{color:rgba(0,0,0,.38)}.mat-select-arrow{color:rgba(0,0,0,.54)}.mat-select-panel .mat-option.mat-selected:not(.mat-option-multiple){background:rgba(0,0,0,.12)}.mat-form-field.mat-focused.mat-primary .mat-select-arrow{color:#9e9e9e}.mat-form-field.mat-focused.mat-accent .mat-select-arrow{color:#ffab40}.mat-form-field.mat-focused.mat-warn .mat-select-arrow,.mat-form-field .mat-select.mat-select-invalid .mat-select-arrow{color:#f44336}.mat-form-field .mat-select.mat-select-disabled .mat-select-arrow{color:rgba(0,0,0,.38)}.mat-drawer-container{background-color:#fafafa;color:rg
 ba(0,0,0,.87)}.mat-drawer{color:rgba(0,0,0,.87)}.mat-drawer,.mat-drawer.mat-drawer-push{background-color:#fff}.mat-drawer-backdrop.mat-drawer-shown{background-color:rgba(0,0,0,.6)}.mat-slide-toggle.mat-checked:not(.mat-disabled) .mat-slide-toggle-thumb{background-color:#ff9800}.mat-slide-toggle.mat-checked:not(.mat-disabled) .mat-slide-toggle-bar{background-color:rgba(255,152,0,.5)}.mat-slide-toggle:not(.mat-checked) .mat-ripple-element{background-color:rgba(0,0,0,.06)}.mat-slide-toggle .mat-ripple-element{background-color:rgba(255,152,0,.12)}.mat-slide-toggle.mat-primary.mat-checked:not(.mat-disabled) .mat-slide-toggle-thumb{background-color:#9e9e9e}.mat-slide-toggle.mat-primary.mat-checked:not(.mat-disabled) .mat-slide-toggle-bar{background-color:hsla(0,0%,62%,.5)}.mat-slide-toggle.mat-primary:not(.mat-checked) .mat-ripple-element{background-color:rgba(0,0,0,.06)}.mat-slide-toggle.mat-primary .mat-ripple-element{background-color:hsla(0,0%,62%,.12)}.mat-slide-toggle.mat-warn.mat-ch
 ecked:not(.mat-disabled) .mat-slide-toggle-thumb{background-color:#f44336}.mat-slide-toggle.mat-warn.mat-checked:not(.mat-disabled) .mat-slide-toggle-bar{background-color:rgba(244,67,54,.5)}.mat-slide-toggle.mat-warn:not(.mat-checked) .mat-ripple-element{background-color:rgba(0,0,0,.06)}.mat-slide-toggle.mat-warn .mat-ripple-element{background-color:rgba(244,67,54,.12)}.mat-disabled .mat-slide-toggle-thumb{background-color:#bdbdbd}.mat-disabled .mat-slide-toggle-bar{background-color:rgba(0,0,0,.1)}.mat-slide-toggle-thumb{background-color:#fafafa}.mat-slide-toggle-bar{background-color:rgba(0,0,0,.38)}.mat-slider-track-background{background-color:rgba(0,0,0,.26)}.mat-primary .mat-slider-thumb,.mat-primary .mat-slider-thumb-label,.mat-primary .mat-slider-track-fill{background-color:#9e9e9e}.mat-primary .mat-slider-thumb-label-text{color:rgba(0,0,0,.87)}.mat-accent .mat-slider-thumb,.mat-accent .mat-slider-thumb-label,.mat-accent .mat-slider-track-fill{background-color:#ffab40}.mat-acce
 nt .mat-slider-thumb-label-text{color:rgba(0,0,0,.87)}.mat-warn .mat-slider-thumb,.mat-warn .mat-slider-thumb-label,.mat-warn .mat-slider-track-fill{background-color:#f44336}.mat-warn .mat-slider-thumb-label-text{color:#fff}.mat-slider-focus-ring{background-color:rgba(255,171,64,.2)}.cdk-focused .mat-slider-track-background,.mat-slider:hover .mat-slider-track-background{background-color:rgba(0,0,0,.38)}.mat-slider-disabled .mat-slider-thumb,.mat-slider-disabled .mat-slider-track-background,.mat-slider-disabled .mat-slider-track-fill,.mat-slider-disabled:hover .mat-slider-track-background{background-color:rgba(0,0,0,.26)}.mat-slider-min-value .mat-slider-focus-ring{background-color:rgba(0,0,0,.12)}.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb,.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb-label{background-color:rgba(0,0,0,.87)}.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb,.mat-slider-min-value.mat-s
 lider-thumb-label-showing.cdk-focused .mat-slider-thumb-label{background-color:rgba(0,0,0,.26)}.mat-slider-min-value:not(.mat-slider-thumb-label-showing) .mat-slider-thumb{border-color:rgba(0,0,0,.26);background-color:transparent}.mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused .mat-slider-thumb,.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover .mat-slider-thumb{border-color:rgba(0,0,0,.38)}.mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused.mat-slider-disabled .mat-slider-thumb,.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover.mat-slider-disabled .mat-slider-thumb{border-color:rgba(0,0,0,.26)}.mat-slider-has-ticks .mat-slider-wrapper:after{border-color:rgba(0,0,0,.7)}.mat-slider-horizontal .mat-slider-ticks{background-image:repeating-linear-gradient(90deg,rgba(0,0,0,.7),rgba(0,0,0,.7) 2px,transparent 0,transparent);background-image:-moz-repeating-linear-gradient(.0001deg,rgba(0,0,0,.7),rgba(0,0,0,.7) 2px,transpa
 rent 0,transparent)}.mat-slider-vertical .mat-slider-ticks{background-image:repeating-linear-gradient(180deg,rgba(0,0,0,.7),rgba(0,0,0,.7) 2px,transparent 0,transparent)}.mat-step-header.cdk-keyboard-focused,.mat-step-header.cdk-program-focused,.mat-step-header:hover{background-color:rgba(0,0,0,.04)}.mat-step-header .mat-step-label,.mat-step-header .mat-step-optional{color:rgba(0,0,0,.38)}.mat-step-header .mat-step-icon{background-color:#9e9e9e;color:rgba(0,0,0,.87)}.mat-step-header .mat-step-icon-not-touched{background-color:rgba(0,0,0,.38);color:rgba(0,0,0,.87)}.mat-step-header .mat-step-label.mat-step-label-active{color:rgba(0,0,0,.87)}.mat-stepper-horizontal,.mat-stepper-vertical{background-color:#fff}.mat-stepper-vertical-line:before{border-left-color:rgba(0,0,0,.12)}.mat-stepper-horizontal-line{border-top-color:rgba(0,0,0,.12)}.mat-tab-header,.mat-tab-nav-bar{border-bottom:1px solid rgba(0,0,0,.12)}.mat-tab-group-inverted-header .mat-tab-header,.mat-tab-group-inverted-header .
 mat-tab-nav-bar{border-top:1px solid rgba(0,0,0,.12);border-bottom:none}.mat-tab-label,.mat-tab-link{color:rgba(0,0,0,.87)}.mat-tab-label.mat-tab-disabled,.mat-tab-link.mat-tab-disabled{color:rgba(0,0,0,.38)}.mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.87)}.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.38)}.mat-tab-group[class*=mat-background-] .mat-tab-header,.mat-tab-nav-bar[class*=mat-background-]{border-bottom:none;border-top:none}.mat-tab-group.mat-primary .mat-tab-label:focus,.mat-tab-group.mat-primary .mat-tab-link:focus,.mat-tab-nav-bar.mat-primary .mat-tab-label:focus,.mat-tab-nav-bar.mat-primary .mat-tab-link:focus{background-color:hsla(0,0%,96%,.3)}.mat-tab-group.mat-primary .mat-ink-bar,.mat-tab-nav-bar.mat-primary .mat-ink-bar{background-color:#9e9e9e}.mat-tab-group.mat-primary.mat-background-primary .mat-ink-bar,.mat-tab-nav-bar.mat-primary.mat-background-primary .mat-ink-bar{background-color:rgba(0,0,0,.8
 7)}.mat-tab-group.mat-accent .mat-tab-label:focus,.mat-tab-group.mat-accent .mat-tab-link:focus,.mat-tab-nav-bar.mat-accent .mat-tab-label:focus,.mat-tab-nav-bar.mat-accent .mat-tab-link:focus{background-color:rgba(255,209,128,.3)}.mat-tab-group.mat-accent .mat-ink-bar,.mat-tab-nav-bar.mat-accent .mat-ink-bar{background-color:#ffab40}.mat-tab-group.mat-accent.mat-background-accent .mat-ink-bar,.mat-tab-nav-bar.mat-accent.mat-background-accent .mat-ink-bar{background-color:rgba(0,0,0,.87)}.mat-tab-group.mat-warn .mat-tab-label:focus,.mat-tab-group.mat-warn .mat-tab-link:focus,.mat-tab-nav-bar.mat-warn .mat-tab-label:focus,.mat-tab-nav-bar.mat-warn .mat-tab-link:focus{background-color:rgba(255,205,210,.3)}.mat-tab-group.mat-warn .mat-ink-bar,.mat-tab-nav-bar.mat-warn .mat-ink-bar{background-color:#f44336}.mat-tab-group.mat-warn.mat-background-warn .mat-ink-bar,.mat-tab-nav-bar.mat-warn.mat-background-warn .mat-ink-bar{background-color:#fff}.mat-tab-group.mat-background-primary .mat-ta
 b-label:focus,.mat-tab-group.mat-background-primary .mat-tab-link:focus,.mat-tab-nav-bar.mat-background-primary .mat-tab-label:focus,.mat-tab-nav-bar.mat-background-primary .mat-tab-link:focus{background-color:hsla(0,0%,96%,.3)}.mat-tab-group.mat-background-primary .mat-tab-header,.mat-tab-group.mat-background-primary .mat-tab-links,.mat-tab-nav-bar.mat-background-primary .mat-tab-header,.mat-tab-nav-bar.mat-background-primary .mat-tab-links{background-color:#9e9e9e}.mat-tab-group.mat-background-primary .mat-tab-label,.mat-tab-group.mat-background-primary .mat-tab-link,.mat-tab-nav-bar.mat-background-primary .mat-tab-label,.mat-tab-nav-bar.mat-background-primary .mat-tab-link{color:rgba(0,0,0,.87)}.mat-tab-group.mat-background-primary .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-primary .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-primary .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-primary .mat-tab-link.mat-tab-disabled{color:rg
 ba(0,0,0,.4)}.mat-tab-group.mat-background-primary .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.87)}.mat-tab-group.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.4)}.mat-tab-group.mat-background-primary .mat-ripple-element,.mat-tab-nav-bar.mat-background-primary .mat-ripple-element{background-color:rgba(0,0,0,.12)}.mat-tab-group.mat-background-accent .mat-tab-label:focus,.mat-tab-group.mat-background-accent .mat-tab-link:focus,.mat-tab-nav-bar.mat-background-accent .mat-tab-label:focus,.mat-tab-nav-bar.mat-background-accent .mat-tab-link:focus{background-color:rgba(255,209,128,.3)}.mat-tab-group.mat-background-accent .mat-tab-header,.mat-tab-group.mat-background-accent .mat-tab-links,.mat-tab-nav-bar.mat-background
 -accent .mat-tab-header,.mat-tab-nav-bar.mat-background-accent .mat-tab-links{background-color:#ffab40}.mat-tab-group.mat-background-accent .mat-tab-label,.mat-tab-group.mat-background-accent .mat-tab-link,.mat-tab-nav-bar.mat-background-accent .mat-tab-label,.mat-tab-nav-bar.mat-background-accent .mat-tab-link{color:rgba(0,0,0,.87)}.mat-tab-group.mat-background-accent .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-accent .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-accent .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-accent .mat-tab-link.mat-tab-disabled{color:rgba(0,0,0,.4)}.mat-tab-group.mat-background-accent .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.87)}.mat-tab-group.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-disabled .mat-
 tab-header-pagination-chevron{border-color:rgba(0,0,0,.4)}.mat-tab-group.mat-background-accent .mat-ripple-element,.mat-tab-nav-bar.mat-background-accent .mat-ripple-element{background-color:rgba(0,0,0,.12)}.mat-tab-group.mat-background-warn .mat-tab-label:focus,.mat-tab-group.mat-background-warn .mat-tab-link:focus,.mat-tab-nav-bar.mat-background-warn .mat-tab-label:focus,.mat-tab-nav-bar.mat-background-warn .mat-tab-link:focus{background-color:rgba(255,205,210,.3)}.mat-tab-group.mat-background-warn .mat-tab-header,.mat-tab-group.mat-background-warn .mat-tab-links,.mat-tab-nav-bar.mat-background-warn .mat-tab-header,.mat-tab-nav-bar.mat-background-warn .mat-tab-links{background-color:#f44336}.mat-tab-group.mat-background-warn .mat-tab-label,.mat-tab-group.mat-background-warn .mat-tab-link,.mat-tab-nav-bar.mat-background-warn .mat-tab-label,.mat-tab-nav-bar.mat-background-warn .mat-tab-link{color:#fff}.mat-tab-group.mat-background-warn .mat-tab-label.mat-tab-disabled,.mat-tab-group.
 mat-background-warn .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-warn .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-warn .mat-tab-link.mat-tab-disabled{color:hsla(0,0%,100%,.4)}.mat-tab-group.mat-background-warn .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-chevron{border-color:#fff}.mat-tab-group.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:hsla(0,0%,100%,.4)}.mat-tab-group.mat-background-warn .mat-ripple-element,.mat-tab-nav-bar.mat-background-warn .mat-ripple-element{background-color:hsla(0,0%,100%,.12)}.mat-toolbar{background:#f5f5f5;color:rgba(0,0,0,.87)}.mat-toolbar.mat-primary{background:#9e9e9e;color:rgba(0,0,0,.87)}.mat-toolbar.mat-accent{background:#ffab40;color:rgba(0,0,0,.87)}.mat-toolbar.mat-warn{background:#f44336;col
 or:#fff}.mat-tooltip{background:rgba(97,97,97,.9)}.mat-snack-bar-container{background:#323232;color:#fff}.mat-simple-snackbar-action{color:#ffab40}*{font-family:Roboto,Helvetica Neue,sans-serif}.CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor-mark{background-color:rgba(20
 ,255,20,.5)}.cm-animate-fat-cursor,.cm-fat-cursor-mark{-webkit-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.cm-animate-fat-cursor{width:auto;border:0;background-color:#7e7}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:-20px;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default
  .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.CodeMirror-sizer{position:rela
 tive;border-right:30px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMir
 ror-lines{cursor:text;min-height:1px}.CodeMirror pre{border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;overflow:auto}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeM
 irror-cursors{visibility:hidden;position:relative;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:none}.cm-s-monokai.CodeMirror{background:#272822;color:#f8f8f2}.cm-s-monokai div.CodeMirror-selected{background:#49483e}.cm-s-monokai .CodeMirror-line::selection,.cm-s-monokai .CodeMirror-line>span::selection
 ,.cm-s-monokai .CodeMirror-line>span>span::selection{background:rgba(73,72,62,.99)}.cm-s-monokai .CodeMirror-line::-moz-selection,.cm-s-monokai .CodeMirror-line>span::-moz-selection,.cm-s-monokai .CodeMirror-line>span>span::-moz-selection{background:rgba(73,72,62,.99)}.cm-s-monokai .CodeMirror-gutters{background:#272822;border-right:0}.cm-s-monokai .CodeMirror-guttermarker{color:#fff}.cm-s-monokai .CodeMirror-guttermarker-subtle,.cm-s-monokai .CodeMirror-linenumber{color:#d0d0d0}.cm-s-monokai .CodeMirror-cursor{border-left:1px solid #f8f8f0}.cm-s-monokai span.cm-comment{color:#75715e}.cm-s-monokai span.cm-atom,.cm-s-monokai span.cm-number{color:#ae81ff}.cm-s-monokai span.cm-attribute,.cm-s-monokai span.cm-property{color:#a6e22e}.cm-s-monokai span.cm-keyword{color:#f92672}.cm-s-monokai span.cm-builtin{color:#66d9ef}.cm-s-monokai span.cm-string{color:#e6db74}.cm-s-monokai span.cm-variable{color:#f8f8f2}.cm-s-monokai span.cm-variable-2{color:#9effff}.cm-s-monokai span.cm-type,.cm-s-mon
 okai span.cm-variable-3{color:#66d9ef}.cm-s-monokai span.cm-def{color:#fd971f}.cm-s-monokai span.cm-bracket{color:#f8f8f2}.cm-s-monokai span.cm-tag{color:#f92672}.cm-s-monokai span.cm-header,.cm-s-monokai span.cm-link{color:#ae81ff}.cm-s-monokai span.cm-error{background:#f92672;color:#f8f8f0}.cm-s-monokai .CodeMirror-activeline-background{background:#373831}.cm-s-monokai .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}@charset "UTF-8";.ui-widget,.ui-widget button,.ui-widget input,.ui-widget select,.ui-widget textarea{font-family:Roboto,Trebuchet MS,Arial,Helvetica,sans-serif;font-size:1em}.ui-widget :active{outline:none}.ui-widget-content{border:1px solid #d5d5d5;background:#fff;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #d9d9d9;background:#f6f7f9;color:#1b1d1f;font-weight:400}.ui-widget-header a{color:#1b1d1f}.ui-widget-overlay{background:#666;opacity:.5;filter:Alpha(Opacity=50)}.ui-state-default{border:1px solid #d6d6d6
 ;background:#fff;color:#555}.ui-state-default a{color:#555}.ui-state-active{border-color:#bebebe;background:#d6d6d6;color:#212121}.ui-state-active a{color:#212121}.ui-state-highlight{border-color:#156090;background:#186ba0;color:#fff}.ui-state-highlight a{color:#fff}.ui-state-focus{border-color:silver;background:#eee;color:#212121}.ui-state-focus a{color:#212121}.ui-state-error{border-color:#f44336;background:#f5554a;color:#cd0a0a}.ui-state-error a{color:#cd0a0a}.ui-state-disabled,.ui-widget:disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none;cursor:default!important}.ui-state-disabled *,.ui-widget:disabled *{cursor:default!important}.ui-inputtext:enabled:hover{border-color:silver}.ui-inputtext.ui-state-focus,.ui-inputtext:focus{outline:0 none;border-color:silver;box-shadow:0 0 5px silver}.ui-inputgroup .ui-inputgroup-addon{border-color:#d6d6d6;background-color:#f0f0f0;color:#222}.ui-inputgroup .ui-inputgroup-addon:first-child{border-top-left-radius:3px;border-bottom
 -left-radius:3px}.ui-inputgroup .ui-inputgroup-addon:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.ui-inputgroup .ui-button:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.ui-inputgroup .ui-button:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.ui-float-label input.ng-dirty.ng-invalid~label{color:#cd0a0a}.ui-autocomplete .ui-autocomplete-multiple-container:not(.ui-state-disabled).ui-state-focus,.ui-autocomplete .ui-autocomplete-multiple-container:not(.ui-state-disabled):hover,.ui-chips>ul:not(.ui-state-disabled).ui-state-focus,.ui-chips>ul:not(.ui-state-disabled):hover{border-color:silver}.ui-button:enabled:hover,.ui-button:focus,.ui-fileupload-choose:not(.ui-state-disabled):hover{outline:0 none;border-color:silver;background:#eee;color:#212121}.ui-button:enabled:hover a,.ui-button:focus a,.ui-fileupload-choose:not(.ui-state-disabled):hover a{color:#212121}.ui-button:enabled:active,.ui-fileupload-choose:not(.ui-st
 ate-disabled):active{border-color:#bebebe;background:#d6d6d6;color:#212121}.ui-chkbox-box:not(.ui-state-disabled):not(.ui-state-active):hover{border-color:silver;background:#eee;color:#212121}.ui-chkbox-box:not(.ui-state-disabled):not(.ui-state-active):hover a{color:#212121}.ui-radiobutton-box:not(.ui-state-disabled):not(.ui-state-active):hover{border-color:silver;background:#eee;color:#212121}.ui-radiobutton-box:not(.ui-state-disabled):not(.ui-state-active):hover a{color:#212121}.ui-dropdown:not(.ui-state-disabled):hover{border-color:silver;background:#eee;color:#212121}.ui-dropdown:not(.ui-state-disabled):hover a{color:#212121}.ui-dropdown-panel .ui-dropdown-item:not(.ui-state-highlight):hover{border-color:silver;background:#eee;color:#212121}.ui-dropdown-panel .ui-dropdown-item:not(.ui-state-highlight):hover a{color:#212121}.ui-listbox .ui-listbox-header .ui-listbox-filter-container .fa{color:#222}.ui-listbox:not(.ui-state-disabled) .ui-listbox-item:not(.ui-state-highlight):hover
 {border-color:silver;background:#eee;color:#212121}.ui-listbox:not(.ui-state-disabled) .ui-listbox-item:not(.ui-state-highlight):hover a{color:#212121}.ui-listbox.ui-state-disabled .ui-chkbox-box:not(.ui-state-active):hover{border-color:#d6d6d6;background:#fff;color:#555}.ui-multiselect:not(.ui-state-disabled):hover{border-color:silver;background:#eee;color:#212121}.ui-multiselect:not(.ui-state-disabled):hover a{color:#212121}.ui-multiselect-panel .ui-multiselect-item:not(.ui-state-highlight):hover{border-color:silver;background:#eee;color:#212121}.ui-multiselect-panel .ui-multiselect-item:not(.ui-state-highlight):hover a{color:#212121}.ui-multiselect-panel .ui-multiselect-close{color:#1b1d1f}.ui-multiselect-panel .ui-multiselect-filter-container .fa{color:#222}.ui-spinner:not(.ui-state-disabled) .ui-spinner-button:enabled:hover{border-color:silver;background:#eee;color:#212121}.ui-spinner:not(.ui-state-disabled) .ui-spinner-button:enabled:hover a{color:#212121}.ui-spinner:not(.ui-s
 tate-disabled) .ui-spinner-button:enabled:active{border-color:#bebebe;background:#d6d6d6;color:#212121}.ui-selectbutton .ui-button:not(.ui-state-disabled):not(.ui-state-active):hover{border-color:silver;background:#eee;color:#212121}.ui-selectbutton .ui-button:not(.ui-state-disabled):not(.ui-state-active):hover a{color:#212121}.ui-togglebutton:not(.ui-state-disabled):not(.ui-state-active):hover{border-color:silver;background:#eee;color:#212121}.ui-togglebutton:not(.ui-state-disabled):not(.ui-state-active):hover a{color:#212121}.ui-paginator a:not(.ui-state-disabled):not(.ui-state-active):hover{border-color:silver;background:#eee;color:#212121}.ui-paginator a:not(.ui-state-disabled):not(.ui-state-active):hover a{color:#212121}.ui-paginator a{color:#555}.ui-datatable .ui-rowgroup-header a{color:#1b1d1f}.ui-datatable .ui-sortable-column:not(.ui-state-active):hover{background:#eee;color:#212121}.ui-datatable .ui-row-toggler{color:#222}.ui-datatable tbody.ui-datatable-hoverable-rows>tr.u
 i-widget-content:not(.ui-state-highlight):hover{cursor:pointer;background:#eee;color:#212121}.ui-orderlist .ui-orderlist-item:not(.ui-state-highlight):hover{border-color:silver;background:#eee;color:#212121}.ui-orderlist .ui-orderlist-item:not(.ui-state-highlight):hover a{color:#212121}.ui-picklist .ui-picklist-item:not(.ui-state-disabled):not(.ui-state-highlight):hover{border-color:silver;background:#eee;color:#212121}.ui-picklist .ui-picklist-item:not(.ui-state-disabled):not(.ui-state-highlight):hover a{color:#212121}.ui-picklist .ui-picklist-droppoint-highlight{border-color:#156090;background:#186ba0;color:#1f1f1f}.ui-picklist .ui-picklist-droppoint-highlight a{color:#1f1f1f}.ui-picklist .ui-picklist-highlight{border-color:#156090;color:#1f1f1f}.ui-picklist .ui-picklist-highlight a{color:#1f1f1f}.ui-tree.ui-treenode-dragover{border-color:#156090}.ui-tree .ui-treenode-content.ui-treenode-selectable .ui-treenode-label:not(.ui-state-highlight):hover{border-color:silver;background:#e
 ee;color:#212121}.ui-tree .ui-treenode-content.ui-treenode-selectable .ui-treenode-label:not(.ui-state-highlight):hover a{color:#212121}.ui-tree .ui-treenode-content.ui-treenode-dragover{background:#d6d6d6;color:#212121}.ui-tree.ui-tree-horizontal .ui-treenode-content.ui-treenode-selectable .ui-treenode-label:not(.ui-state-highlight):hover{background-color:inherit;color:inherit}.ui-tree.ui-tree-horizontal .ui-treenode-content.ui-treenode-selectable:not(.ui-state-highlight):hover{border-color:silver;background:#eee;color:#212121}.ui-tree.ui-tree-horizontal .ui-treenode-content.ui-treenode-selectable:not(.ui-state-highlight):hover a{color:#212121}.ui-treetable .ui-treetable-row.ui-treetable-row-selectable:not(.ui-state-highlight):hover{background:#eee;color:#212121}.ui-organizationchart .ui-organizationchart-node-content.ui-organizationchart-selectable-node:not(.ui-state-highlight):hover{border-color:silver;background:#eee;color:#212121}.ui-organizationchart .ui-organizationchart-node
 -content.ui-organizationchart-selectable-node:not(.ui-state-highlight):hover a{color:#212121}.ui-accordion .ui-accordion-header:not(.ui-state-active):not(.ui-state-disabled):hover{border-color:silver;background:#eee;color:#212121}.ui-accordion .ui-accordion-header:not(.ui-state-active):not(.ui-state-disabled):hover a{color:#212121}.ui-fieldset.ui-fieldset-toggleable .ui-fieldset-legend:hover{border-color:silver;background:#eee;color:#212121}.ui-fieldset.ui-fieldset-toggleable .ui-fieldset-legend:hover a{color:#212121}.ui-panel .ui-panel-titlebar .ui-panel-titlebar-icon:hover{border-color:silver;background:#eee;color:#212121}.ui-panel .ui-panel-titlebar .ui-panel-titlebar-icon:hover a{color:#212121}.ui-tabview .ui-tabview-nav li:not(.ui-state-active):not(.ui-state-disabled):hover{border-color:silver;background:#eee;color:#212121}.ui-tabview .ui-tabview-nav li:not(.ui-state-active):not(.ui-state-disabled):hover a{color:#212121}.ui-dialog .ui-dialog-titlebar-icon{color:#1b1d1f}.ui-dial
 og .ui-dialog-titlebar-icon:hover{border-color:silver;background:#eee;color:#212121}.ui-dialog .ui-dialog-titlebar-icon:hover a{color:#212121}.ui-sidebar .ui-sidebar-close{color:#1b1d1f}.ui-sidebar .ui-sidebar-close:hover{border-color:silver;background:#eee;color:#212121}.ui-sidebar .ui-sidebar-close:hover a{color:#212121}.ui-overlaypanel .ui-overlaypanel-close:hover{border-color:silver;background:#eee;color:#212121}.ui-overlaypanel .ui-overlaypanel-close:hover a{color:#212121}.ui-inplace .ui-inplace-display:hover{border-color:silver;background:#eee;color:#212121}.ui-inplace .ui-inplace-display:hover a{color:#212121}.ui-breadcrumb a{color:#1b1d1f}.ui-menu .ui-menuitem .ui-menuitem-link{color:#222}.ui-menu .ui-menuitem .ui-menuitem-link:hover{border-color:silver;background:#eee;color:#212121;border-color:transparent}.ui-menu .ui-menuitem .ui-menuitem-link:hover a{color:#212121}.ui-menu .ui-menuitem.ui-menuitem-active>.ui-menuitem-link{border-color:silver;background:#eee;color:#212121
 ;border-color:transparent}.ui-menu .ui-menuitem.ui-menuitem-active>.ui-menuitem-link a{color:#212121}.ui-tabmenu .ui-tabmenu-nav li:not(.ui-state-active):hover{border-color:silver;background:#eee;color:#212121}.ui-tabmenu .ui-tabmenu-nav li:not(.ui-state-active):hover a{color:#212121}.ui-steps .ui-steps-item:not(.ui-state-highlight):not(.ui-state-disabled):hover{border-color:silver;background:#eee;color:#212121}.ui-steps .ui-steps-item:not(.ui-state-highlight):not(.ui-state-disabled):hover a{color:#212121}.ui-panelmenu .ui-panelmenu-header:not(.ui-state-active):hover{border-color:silver;background:#eee;color:#212121;border-color:#d6d6d6}.ui-panelmenu .ui-panelmenu-header.ui-state-active a,.ui-panelmenu .ui-panelmenu-header:not(.ui-state-active):hover a{color:#212121}.ui-panelmenu .ui-panelmenu-content .ui-menuitem-link{color:#222}.ui-panelmenu .ui-panelmenu-content .ui-menuitem-link:hover{border-color:silver;background:#eee;color:#212121;border-color:transparent}.ui-panelmenu .ui-pa
 nelmenu-content .ui-menuitem-link:hover a{color:#212121}.ui-datepicker .ui-datepicker-header a{color:#1b1d1f}.ui-datepicker .ui-datepicker-header a:hover{border-color:silver;background:#eee;color:#212121}.ui-datepicker .ui-datepicker-header a:hover a{color:#212121}.ui-datepicker .ui-datepicker-calendar td:not(.ui-state-disabled) a:hover{border-color:silver;background:#eee;color:#212121}.ui-datepicker .ui-datepicker-calendar td:not(.ui-state-disabled) a:hover a{color:#212121}.fc .fc-toolbar .fc-prev-button .ui-icon-circle-triangle-w{margin-top:.3em;background:none!important;display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-indent:0!important;text-align:center}.fc .fc-toolbar .fc-prev-button .ui-icon-circle-triangle-w:before{content:"\F053"}.fc .fc-toolbar .fc-next-button .ui-icon-circle-triangle-e{margin-top:.3em;background:none!important;display:inline-bloc
 k;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-indent:0!important;text-align:center}.fc .fc-toolbar .fc-next-button .ui-icon-circle-triangle-e:before{content:"\F054"}.ui-rating a{color:#222}.ui-organizationchart .ui-organizationchart-line-down{background-color:#bcbcbc}.ui-organizationchart .ui-organizationchart-line-left{border-right:1px solid #bcbcbc}.ui-organizationchart .ui-organizationchart-line-top{border-top:1px solid #bcbcbc}.ui-organizationchart .ui-organizationchart-node-content{border-color:#bcbcbc}.ui-organizationchart .ui-organizationchart-node-content .ui-node-toggler{color:#bcbcbc}.ui-inputtext.ng-dirty.ng-invalid,p-autocomplete.ng-dirty.ng-invalid>.ui-autocomplete>.ui-inputtext,p-calendar.ng-dirty.ng-invalid>.ui-calendar>.ui-inputtext,p-checkbox.ng-dirty.ng-invalid .ui-chkbox-box,p-chips.ng-dirty.ng-invalid>.ui-inputtext,p-dropdown.ng-dirty.ng-invalid>.ui-dr
 opdown,p-inputmask.ng-dirty.ng-invalid>.ui-inputtext,p-inputswitch.ng-dirty.ng-invalid .ui-inputswitch,p-listbox.ng-dirty.ng-invalid .ui-inputtext,p-multiselect.ng-dirty.ng-invalid>.ui-multiselect,p-radiobutton.ng-dirty.ng-invalid .ui-radiobutton-box,p-selectbutton.ng-dirty.ng-invalid .ui-button,p-spinner.ng-dirty.ng-invalid>.ui-inputtext,p-togglebutton.ng-dirty.ng-invalid .ui-button{border-bottom-color:#f44336}.ui-corner-tl{border-top-left-radius:3px}.ui-corner-tr{border-top-right-radius:3px}.ui-corner-bl{border-bottom-left-radius:3px}.ui-corner-br{border-bottom-right-radius:3px}.ui-corner-top{border-top-left-radius:3px;border-top-right-radius:3px}.ui-corner-bottom{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.ui-corner-right{border-top-right-radius:3px;border-bottom-right-radius:3px}.ui-corner-left{border-top-left-radius:3px;border-bottom-left-radius:3px}.ui-corner-all{border-radius:3px}@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:url(roboto-
 v15-latin-regular.9f916e330c478bbfa2a0.eot);src:local("Roboto"),local("Roboto-Regular"),url(roboto-v15-latin-regular.9f916e330c478bbfa2a0.eot?#iefix) format("embedded-opentype"),url(roboto-v15-latin-regular.7e367be02cd17a96d513.woff2) format("woff2"),url(roboto-v15-latin-regular.16e1d930cf13fb7a9563.woff) format("woff"),url(roboto-v15-latin-regular.38861cba61c66739c145.ttf) format("truetype"),url(roboto-v15-latin-regular.3d3a53586bd78d1069ae.svg#Roboto) format("svg")}.ui-widget-header{background:#f6f7f9 0 0 repeat-x;background:linear-gradient(180deg,#f6f7f9 0,#ebedf0)}.ui-accordion .ui-accordion-header{background:#f6f7f9;border-top:1px solid #d9d9d9}.ui-accordion .ui-accordion-header a{color:#1b1d1f}.ui-accordion .ui-accordion-header:not(.ui-state-active):not(.ui-state-disabled):hover{background:#ededf0}.ui-accordion .ui-accordion-header.ui-state-active{background:#fff;border-left-color:transparent;border-right-color:transparent;border-bottom-color:transparent;border-radius:0}.ui-ac
 cordion .ui-accordion-content,.ui-tabview.ui-widget-content{border:0 none}.ui-tabview .ui-tabview-nav{background:transparent}.ui-tabview .ui-tabview-nav>li.ui-state-default{background:#f6f7f9}.ui-tabview .ui-tabview-nav>li.ui-state-active{background:#fff;font-weight:400;color:#555}.ui-tabview .ui-tabview-nav>li:not(.ui-state-active):not(.ui-state-disabled):hover{background:#ededf0}.ui-spinner:not(.ui-state-disabled) .ui-spinner-button:enabled:hover{border:1px solid #1f89ce;background:#1f89ce;outline:0 none;color:#fff}.ui-spinner:not(.ui-state-disabled) .ui-spinner-button:enabled:active{border:1px solid #156090;background:#186ba0;color:#fff}.ui-slider{position:relative;text-align:left;background:#838688;border:none;box-shadow:inset 0 1px 3px rgba(0,0,0,.6)}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:17px!important;height:21px!important;cursor:default;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAVCAYAAAAjODzXAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWF
 nZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjZBQjgwQThDRjQ4ODExRTBBMzgxQjZGRjMwN0M4RjFGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjZBQjgwQThERjQ4ODExRTBBMzgxQjZGRjMwN0M4RjFGIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NkFCODBBOEFGNDg4MTFFMEEzODFCNkZGMzA3QzhGMUYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NkFCODBBOEJGNDg4MTFFMEEzODFCNkZGMzA3
 QzhGMUYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5U68QXAAAED0lEQVR42qyWzU9jVRjGz+29pdBSKJWAksmMGheTyAwLKCRE/gAXAq5MEHZujCtCov8CS5dOMgkLozALo0ZCYgTdkgyTAhqR8GUDmGKhQin97q3Pc3zP5FpnGJ16k6f33N7z/u77dc69lvrn4RwcHLxXq9XeKhaLt6vV6i3XdRO4/qVUKn0Ti8XuY05FXX/8Z4blHa+srLw2NDT0WVNTUyyTyaiTkxN1dnamQqGQCgaD+gzgw/X19XfHx8d3YVOrc+C5GT4B+AB4Y3h4+BEmxxzHUX6//7Es6y9/ASAoNjIy8mhhYaHXY98wQ//09/dHent7P8ekcLlc1gYtLS1ahCA61dzcrAKBgAb6fL7w4ODgp5xmvGiUQUf8s7OzH6J+N7LZrEJNVaVS0cZMIwEGaCCcA2jf8vLyR+yH/4NBSDgajb59eXmpbNvWqQNQTw6HwxrG2hKCplP5fF6LUbe3t78D+48ZUaMMOhKBZ7fYWPScN40ikYiGtLa2qkKhoPigXC6nx4wYdjdpT0caZdCREOoVMDcoAugxwWw6dr75H8vv8RjwJtrrGjfIoCMODIpIZYAp1ZsADNva2lRHR4dKJpOqu7tbR0SwiYg1xsGutLlsG2XQkcrp6Wm6q6vrJRqzuVhXnk2EjEaWncI8HQkh+/v7Z7CvktYog6vmanNzM07P0Tg6CjaVSa05p9NpHQnTyoZkdKurqw9pT21sbKw3wuAuE4WXb66trd3r6ekJcQI7npFwKRpDNiGjpLgCdnZ2Un19fe/D/geWRhifPAfjA9h/z/pW6TFS1DI6OnoHk22mjGIUhBHCZQc2YH7eK09NTd07Ojpahv1vrDMZe3t7rWNjY3fB8P0bxuTk5P3j4+PvyKAj7K7i7u7u1dLSk
 osd8tXOzs6AgfDM2mJV6J1xe3s7A8BCPB7/EnZbUF4YJTDyi4uLamBg4OXrGFtbW5cTExNfoJxfwe5nMmzZodlw2VQqdTE3N5fiNo0NKoRa20i5D5FUDw8Pc/Pz89vT09MPMO9bzN+ALsQJS96meTRtDowLZCiMngkKw0LDuolEIg/G3szMzNd4EZIRh/7g883bl03L9dwF3YZeh16BXuD2LUvsFPoV+kkykWIWPG9gMoLQDeiuMLhZdXgYfGgC+hHahI6hAoOxPJ8DtryAotCLUKeAHYn2Sh6ehNIG4HHEkge2if1NCSwkbDKy0O/iTFKu+X/NEUjN1BnKyPhcwJZcl8WZrIzduu+RmpQ4J44qKV1AsuVKP53L/bzM1wy7DlTzOOXKRDpXNPuFjCtP+CjycipiWxGnCxLAuShbV9a/faGZa0vK4Zjt2wM3D3Cv+Uw0ZXYkG/VZLT0po9Y1MKvuvjdjzzq89t6vOPdpnD8FGACiWVtxaofC7AAAAABJRU5ErkJggg==) 0 0 no-repeat;outline:none;border-radius:0;border:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background:#14a4ff;box-shadow:inset 0 1px 3px rgba(0,0,0,.6);border-radius:3px}.ui-slider .ui-slider-handle.ui-state-active{background-position:-17px 0}.ui-slider-horizontal{height:6px}.ui-slider-horizontal .ui-slider-handle{top:-2px!important;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-
 slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.1em!important;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-progressbar.ui-progressbar-determinate .ui-progressbar-value{border:0 none;background:#8ec5fc}.ui-progressbar.ui-progressbar-determinate .ui-progressbar .ui-progressbar-label{color:#222}.ui-progressbar.ui-progressbar-indeterminate{background:#8ec5fc}.ui-progressbar.ui-progressbar-indeterminate .ui-progressbar-value{border:0 none;background-color:#186ba0}.ui-button,.ui-widget-content .ui-button,.ui-widget-header .ui-button,.ui-widget.ui-button{border:1px solid #2399e5;color:#fff;background:#2399e5;transition:background-color .2s}.ui-button:enabled:hover,.ui-button:focus,.ui-widget-content .ui-button:e
 nabled:hover,.ui-widget-content .ui-button:focus,.ui-widget-header .ui-button:enabled:hover,.ui-widget-header .ui-button:focus,.ui-widget.ui-button:enabled:hover,.ui-widget.ui-button:focus{border:1px solid #1f89ce;background:#1f89ce;outline:0 none;color:#fff}.ui-button:enabled:active,.ui-widget-content .ui-button:enabled:active,.ui-widget-header .ui-button:enabled:active,.ui-widget.ui-button:enabled:active{border:1px solid #156090;background:#186ba0;color:#fff}.ui-fileupload-choose.ui-state-focus,.ui-fileupload-choose:not(.ui-state-disabled):hover{border:1px solid #1f89ce;background:#1f89ce;outline:0 none;color:#fff}.ui-chkbox-box.ui-state-active,.ui-fileupload-choose:not(.ui-state-disabled):active,.ui-radiobutton-box.ui-state-active{border:1px solid #156090;background:#186ba0;color:#fff}.ui-chkbox-box.ui-state-focus,.ui-radiobutton-box.ui-state-focus{box-shadow:0 0 5px #1f89ce}.ui-chkbox-box.ui-state-focus.ui-state-active{background:#186ba0}.ui-inputtext{background:#fff;color:#222;
 transition:.2s}.ui-inputtext.ui-state-focus,.ui-inputtext:focus{box-shadow:0 0 5px #1f89ce}.ui-inputswitch-on{background:#186ba0!important;color:#fff!important}.ui-paginator .ui-paginator-page.ui-state-active{background:#186ba0;color:#fff;border-color:#156090}.ui-datatable th.ui-state-default{background:#ebedf0;border-color:#d9d9d9}.ui-datatable th.ui-sortable-column:not(.ui-state-active):hover{background:#d3d5d8;border-color:#d9d9d9}.ui-datatable th.ui-state-active{background:#186ba0;color:#fff}.ui-datatable tbody>tr.ui-widget-content{border-color:#d9d9d9}.ui-datatable tbody>tr.ui-widget-content.ui-datatable-odd{background-color:#fafafb}.ui-datatable tbody>tr.ui-widget-content.ui-state-highlight{background-color:#186ba0;color:#fff}.ui-datatable tfoot td.ui-state-default{background:#ebedf0;border-color:#d9d9d9}.ui-panel.ui-widget{padding:0}.ui-panel.ui-widget .ui-panel-titlebar.ui-corner-all{-moz-border-radius-bottom-left:0;border-bottom-left-radius:0;-moz-border-radius-bottom-right
 :0;border-bottom-right-radius:0}.ui-panel.ui-widget .ui-panel-titlebar{border-width:0 0 1px 0}.ui-panel.ui-widget .ui-panel-titlebar-icon span{position:relative;top:1px}.ui-treetable th.ui-state-default{background:#ebedf0;border-color:#d9d9d9}.ui-selectbutton .ui-button.ui-state-default,.ui-togglebutton.ui-button.ui-state-default{border:1px solid #d6d6d6;background:#fff;font-weight:400;color:#555}.ui-selectbutton .ui-button.ui-state-focus,.ui-selectbutton .ui-button.ui-state-hover,.ui-togglebutton.ui-button.ui-state-focus,.ui-togglebutton.ui-button.ui-state-hover{border:1px solid silver;background:#eee;font-weight:400;color:#212121}.ui-selectbutton .ui-button.ui-state-focus.ui-state-active,.ui-togglebutton.ui-button.ui-state-focus{box-shadow:0 0 5px #1f89ce}.ui-selectbutton .ui-button.ui-state-active,.ui-togglebutton.ui-button.ui-state-active{border:1px solid #156090;background:#186ba0;color:#fff}.ui-multiselect .ui-multiselect-label{background-color:#fff}.ui-dropdown.ui-state-focus
 ,.ui-multiselect.ui-state-focus{box-shadow:0 0 5px #1f89ce}.ui-growl-item-container.ui-state-highlight.ui-growl-message-info{background-color:#2196f3;border-color:#2196f3}.ui-growl-item-container.ui-state-highlight.ui-growl-message-error{background-color:#f44336;border-color:#f44336}.ui-growl-item-container.ui-state-highlight.ui-growl-message-warn{background-color:#ffb300;border-color:#ffb300}.ui-growl-item-container.ui-state-highlight.ui-growl-message-success{background-color:#4caf50;border-color:#4caf50}.ui-tabmenu{border:0 none}.ui-tabmenu .ui-tabmenu-nav{background:none}.ui-tabmenu .ui-tabmenu-nav>li.ui-state-default{background:#f6f7f9}.ui-tabmenu .ui-tabmenu-nav>li.ui-state-active{background:#fff;font-weight:400;color:#555}.ui-tabmenu .ui-tabmenu-nav>li:not(.ui-state-active):not(.ui-state-disabled):hover{background:#ededf0}.ui-menu,.ui-menu .ui-menu-child{border:1px solid #d9d9d9;color:#1b1d1f;background:#f6f7f9 0 0 repeat-x;background:linear-gradient(180deg,#f6f7f9 0,#ebedf0)}
 .ui-menu .ui-menuitem.ui-menuitem-active>.ui-menuitem-link,.ui-menu .ui-menuitem .ui-menuitem-link:hover{background-color:#a6a6a6;color:#fff}.ui-panelmenu .ui-panelmenu-header.ui-state-active,.ui-panelmenu .ui-panelmenu-header.ui-state-active a{border-color:#156090;background:#186ba0;color:#fff}.ui-datepicker.ui-widget{padding:0}.ui-datepicker.ui-widget .ui-datepicker-header{border-radius:0;border-top:0 none;border-left:0 none;border-right:0 none}.ui-datepicker.ui-widget .ui-datepicker-header a:hover{border-width:1px}.ui-datepicker.ui-widget .ui-datepicker-calendar{margin:0}.ui-datepicker.ui-widget .ui-datepicker-calendar thead th{background-color:#f6f8fa;padding:8px}.ui-datepicker.ui-widget .ui-datepicker-calendar td{border-bottom:1px solid hsla(0,0%,84%,.5);padding:0}.ui-datepicker.ui-widget .ui-datepicker-calendar td a{border:0 none;text-align:center;padding:8px}.ui-datepicker.ui-widget .ui-datepicker-calendar td a.ui-state-highlight{background-color:#d6d6d6;color:#212121}.ui-dat
 epicker.ui-widget .ui-datepicker-calendar td a.ui-state-active{background-color:#186ba0;color:#fff}.ui-datepicker.ui-widget .ui-datepicker-calendar tr:last-child td{border-bottom:0 none}.ui-datepicker.ui-widget .ui-timepicker{border-bottom:0 none;border-left:0 none;border-right:0 none;border-radius:0}.ui-datepicker.ui-widget.ui-datepicker-timeonly .ui-timepicker{border-top:0 none}.ui-steps .ui-steps-item.ui-state-highlight .ui-menuitem-link{color:#fff}.ui-dialog.ui-widget .ui-dialog-titlebar{padding:1em 1.5em}.ui-dialog.ui-widget .ui-dialog-titlebar .ui-dialog-title{font-size:1.25em}.ui-dialog.ui-widget .ui-dialog-content{padding:1em 1.5em}.fc .fc-button-group .ui-state-active{border:1px solid #156090;background:#186ba0;color:#fff}.ui-widget,.ui-widget *{box-sizing:border-box}.ui-helper-hidden{display:none!important}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-hidden-accessible input,
 .ui-helper-hidden-accessible select{-webkit-transform:scale(0);transform:scale(0)}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:after,.ui-helper-clearfix:before{content:"";display:table}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{zoom:1}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-state-disabled,.ui-state-disabled a{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:
 100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.3)}.ui-unselectable-text{-webkit-user-select:none;-moz-user-select:none;-o-user-select:none;-ms-user-select:none;user-select:none}.ui-scrollbar-measure{width:100px;height:100px;overflow:scroll;position:absolute;top:-9999px}.ui-overflow-hidden{overflow:hidden}::-webkit-input-placeholder{color:#898989}:-moz-placeholder,::-moz-placeholder{color:#898989;opacity:1}:-ms-input-placeholder,::-ms-input-placeholder{color:#898989}.ui-placeholder{color:#898989}.ui-accordion{width:100%}.ui-
 accordion .ui-accordion-header{cursor:pointer;position:relative;margin-top:1px;zoom:1}.ui-accordion .ui-accordion-header a{display:block;padding:.5em .5em .5em 2em}.ui-accordion .ui-accordion-header>.fa{position:absolute;left:.5em;top:50%;margin-top:-.5em}.ui-accordion .ui-accordion-content{padding:1em;border-top:0;overflow:visible;zoom:1}.ui-accordion .ui-accordion-header.ui-state-disabled,.ui-accordion .ui-accordion-header.ui-state-disabled a{cursor:default}.ui-accordion-content-wrapper-overflown{overflow:hidden}.ui-rtl .ui-accordion .ui-accordion-header a{padding:.5em 2em .5em .5em}.ui-rtl .ui-accordion .ui-accordion-header>.fa{left:auto;right:.5em}.ui-rtl .ui-accordion .ui-accordion-header>.fa-caret-right:before{content:"\F0D9"}.ui-autocomplete{width:auto;zoom:1;cursor:pointer;box-shadow:none;position:relative;display:inline-block}.ui-autocomplete .ui-autocomplete-dropdown{height:100%;width:2em;margin-right:0;vertical-align:top}.ui-autocomplete .ui-autocomplete-input{padding-rig
 ht:1.5em}.ui-autocomplete-loader{position:absolute;right:.25em;top:50%;margin-top:-.5em}.ui-autocomplete-query{font-weight:700}.ui-autocomplete-panel{position:absolute;overflow:auto}.ui-autocomplete-panel .ui-autocomplete-list{padding:.4em;border:0 none}.ui-autocomplete-panel .ui-autocomplete-list-item{border:0 none;cursor:pointer;font-weight:400;margin:1px 0;padding:.186em .313em;text-align:left}.ui-autocomplete .ui-button-icon-only,.ui-autocomplete .ui-button-icon-only:enabled:active,.ui-autocomplete .ui-button-icon-only:enabled:focus,.ui-autocomplete .ui-button-icon-only:enabled:hover{border-left:0 none}.ui-autocomplete-multiple-container{display:inline-block;vertical-align:middle}.ui-autocomplete-multiple-container.ui-inputtext{clear:left;cursor:text;list-style-type:none;margin:0;overflow:hidden;padding:0 1.5em 0 .25em}.ui-autocomplete-token{cursor:default;display:inline-block;vertical-align:middle;overflow:hidden;padding:.125em .5em;white-space:nowrap;position:relative;margin-r
 ight:.125em;border:0 none;font-size:.9em}.ui-autocomplete-token-label{display:block;margin-right:2em}.ui-autocomplete-token-icon{margin-top:-.5em;position:absolute;right:.2em;top:50%;cursor:pointer}.ui-autocomplete-input-token{display:inline-block;vertical-align:middle;list-style-type:none;margin:0 0 0 .125em;padding:.25em .25em .25em 0}.ui-autocomplete-input-token input{border:0 none;width:10em;outline:medium none;background-color:transparent;margin:0;padding:0;box-shadow:none;border-radius:0}.ui-autocomplete-dd .ui-autocomplete-loader{right:2.25em}.ui-autocomplete-dd .ui-autocomplete-multiple-container.ui-corner-all,.ui-autocomplete-dd input.ui-corner-all{border-top-right-radius:0;border-bottom-right-radius:0}.ui-autocomplete-dd .ui-autocomplete-dropdown.ui-corner-all{border-top-left-radius:0;border-bottom-left-radius:0}.ui-fluid .ui-autocomplete,.ui-fluid .ui-autocomplete-input,.ui-fluid p-autocomplete{width:100%}.ui-fluid .ui-autocomplete.ui-autocomplete-dd .ui-autocomplete-inpu
 t,.ui-fluid .ui-autocomplete.ui-autocomplete-dd .ui-autocomplete-multiple-container{width:calc(100% - 2em)}.ui-fluid .ui-autocomplete .ui-autocomplete-dropdown.ui-button{width:2em}.ui-blockui{position:absolute;top:0;left:0;width:100%;height:100%}.ui-blockui-document{position:fixed}.ui-breadcrumb{margin:0;padding:0;padding:.3em}.ui-breadcrumb ul{margin:0;padding:0}.ui-breadcrumb ul li{display:inline-block;vertical-align:middle}.ui-breadcrumb ul li .ui-menuitem-link{text-decoration:none}.ui-button{display:inline-block;position:relative;padding:0;margin-right:.1em;text-decoration:none!important;cursor:pointer;text-align:center;zoom:1;overflow:visible}.ui-button-icon-only{width:2em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.25em 1em}.ui-button-icon-only .ui-button-text{padding:.25em;text-indent:-9999999px}.ui-button-text-icon-left .ui-button-text{padding:.25em 1em .25em 2.1em}.ui-button-text-icon-right .ui-button-text{paddin
 g:.25em 2.1em .25em 1em}.ui-button-icon-only .fa,.ui-button-text-icon-left .fa,.ui-button-text-icon-right .fa{position:absolute;top:50%;margin-top:-.5em}.ui-button-icon-only .fa{top:50%;left:50%;margin-top:-.5em;margin-left:-.6em}.ui-button-icon-left{left:.5em}.ui-button-icon-right{right:.5em}.ui-buttonset .ui-button{margin-left:0;margin-right:0}button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-fluid .ui-button{width:100%;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box}.ui-fluid .ui-button-text-icon-left .ui-button-text,.ui-fluid .ui-button-text-icon-right .ui-button-text{padding-left:1em;padding-right:1em}.ui-fluid .ui-buttonset,.ui-fluid .ui-buttonset.ui-buttonset-1 .ui-button{width:100%}.ui-fluid .ui-buttonset.ui-buttonset-2 .ui-button{width:50%}.ui-fluid .ui-buttonset.ui-buttonset-3 .ui-button{width:33.3%}.ui-fluid .ui-buttonset.ui-buttonset-4 .ui-button{width:25%}.ui-fluid .ui-buttonset.ui-buttonset-5 .ui-button{width:20%}.ui-fluid .ui-but
 tonset.ui-buttonset-6 .ui-button{width:16.6%}@media(max-width:640px){.ui-fluid .ui-buttonset.ui-buttonset-1 .ui-button,.ui-fluid .ui-buttonset.ui-buttonset-2 .ui-button,.ui-fluid .ui-buttonset.ui-buttonset-3 .ui-button,.ui-fluid .ui-buttonset.ui-buttonset-4 .ui-button,.ui-fluid .ui-buttonset.ui-buttonset-5 .ui-button,.ui-fluid .ui-buttonset.ui-buttonset-6 .ui-button{width:100%}}.ui-button.ui-button-secondary.ui-state-default,.ui-splitbutton.ui-button-secondary .ui-button.ui-state-default{background-color:#fff;border-color:#ccc;color:#373a3c}.ui-button.ui-button-secondary:enabled:hover,.ui-button.ui-button-secondary:focus,.ui-splitbutton.ui-button-secondary .ui-button:enabled:hover,.ui-splitbutton.ui-button-secondary .ui-button:focus{background-color:#f2f2f2;border-color:#ccc;color:#373a3c}.ui-button.ui-button-secondary:enabled:active,.ui-splitbutton.ui-button-secondary .ui-button:enabled:active{background-color:#e6e6e6;border-color:#ccc;color:#373a3c}.ui-button.ui-button-success.ui-
 state-default,.ui-splitbutton.ui-button-success .ui-button.ui-state-default{background-color:#5cb85c;border-color:#5cb85c;color:#fff}.ui-button.ui-button-success:enabled:hover,.ui-button.ui-button-success:focus,.ui-splitbutton.ui-button-success .ui-button:enabled:hover,.ui-splitbutton.ui-button-success .ui-button:focus{background-color:#4cae4c;border-color:#5cb85c}.ui-button.ui-button-success:enabled:active,.ui-splitbutton.ui-button-success .ui-button:enabled:active{background-color:#449d44;border-color:#5cb85c}.ui-button.ui-button-info.ui-state-default,.ui-splitbutton.ui-button-info .ui-button.ui-state-default{background-color:#5bc0de;border-color:#5bc0de;color:#fff}.ui-button.ui-button-info:enabled:hover,.ui-button.ui-button-info:focus,.ui-splitbutton.ui-button-info .ui-button:enabled:hover,.ui-splitbutton.ui-button-info .ui-button:focus{background-color:#46b8da;border-color:#5bc0de}.ui-button.ui-button-info:enabled:active,.ui-splitbutton.ui-button-info .ui-button:enabled:active{b
 ackground-color:#31b0d5;border-color:#5bc0de}.ui-button.ui-button-warning.ui-state-default,.ui-splitbutton.ui-button-warning .ui-button.ui-state-default{background-color:#f0ad4e;border-color:#f0ad4e;color:#fff}.ui-button.ui-button-warning:enabled:hover,.ui-button.ui-button-warning:focus,.ui-splitbutton.ui-button-warning .ui-button:enabled:hover,.ui-splitbutton.ui-button-warning .ui-button:focus{background-color:#eea236;border-color:#f0ad4e}.ui-button.ui-button-warning:enabled:active,.ui-splitbutton.ui-button-warning .ui-button:enabled:active{background-color:#ec971f;border-color:#f0ad4e}.ui-button.ui-button-danger.ui-state-default,.ui-splitbutton.ui-button-danger .ui-button.ui-state-default{background-color:#d9534f;border-color:#d9534f;color:#fff}.ui-button.ui-button-danger:enabled:hover,.ui-button.ui-button-danger:focus,.ui-splitbutton.ui-button-danger .ui-button:enabled:hover,.ui-splitbutton.ui-button-danger .ui-button:focus{background-color:#d43f3a;border-color:#d9534f}.ui-button
 .ui-button-danger:enabled:active,.ui-splitbutton.ui-button-danger .ui-button:enabled:active{background-color:#c9302c;border-color:#d9534f}.ui-calendar{position:relative;display:inline-block}.ui-calendar .ui-calendar-button{position:absolute;height:100%;border-top-left-radius:0;border-bottom-left-radius:0;width:2em;border-left:0 none}.ui-calendar .ui-calendar-button:enabled:hover,.ui-calendar .ui-calendar-button:focus{border-left:0 none}.ui-fluid .ui-calendar{width:100%}.ui-fluid .ui-calendar-button{width:2em}.ui-fluid .ui-datepicker-buttonbar button{width:auto}.ui-fluid .ui-calendar.ui-calendar-w-btn .ui-inputtext{width:calc(100% - 2em)}.ui-datepicker{width:17em;padding:.2em;display:none;position:absolute}.ui-datepicker.ui-datepicker-inline{display:inline-block;position:static}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-next,.ui-datepicker .ui-datepicker-prev{position:absolute;top:.125em;width:1.8em;height:1.8em}.ui-datepicker 
 .ui-datepicker-prev{left:.125em}.ui-datepicker .ui-datepicker-next{right:.125em}.ui-datepicker .ui-datepicker-n

<TRUNCATED>

[09/43] asterixdb git commit: [ASTERIXDB-2355][SQL] Incorrect error reporting by SQL++ parser

Posted by im...@apache.org.
[ASTERIXDB-2355][SQL] Incorrect error reporting by SQL++ parser

- user model changes: no
- storage format changes: no
- interface changes: no

Details:
- Fixes incorrect error reporting by SQL++ parser.
  Error messages like: “Flags=“, “Conversion=“

Change-Id: Id68f2b039c8198509658a90a60b8a8dc95361a84
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2572
Sonar-Qube: Jenkins <je...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
Contrib: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Till Westmann <ti...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/85142c08
Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/85142c08
Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/85142c08

Branch: refs/heads/release-0.9.4-pre-rc
Commit: 85142c086e29358ecb8550c5fa152f76f02d96cb
Parents: 7de451f
Author: Dmitry Lychagin <dm...@couchbase.com>
Authored: Thu Apr 5 17:27:36 2018 -0700
Committer: Dmitry Lychagin <dm...@couchbase.com>
Committed: Thu Apr 19 13:36:10 2018 -0700

----------------------------------------------------------------------
 .../asterix/app/result/ResultPrinterTest.java   |  2 +-
 .../asterix/test/common/ResultExtractor.java    |  6 +++---
 .../query-ASTERIXDB-2355.1.query.sqlpp          | 22 ++++++++++++++++++++
 .../resources/runtimets/testsuite_sqlpp.xml     |  8 ++++++-
 .../main/resources/asx_errormsg/en.properties   |  1 +
 .../asterix-lang-sqlpp/src/main/javacc/SQLPP.jj |  5 +++--
 6 files changed, 37 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/85142c08/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/result/ResultPrinterTest.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/result/ResultPrinterTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/result/ResultPrinterTest.java
index 6810e19..7e851bf 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/result/ResultPrinterTest.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/result/ResultPrinterTest.java
@@ -76,7 +76,7 @@ public class ResultPrinterTest {
         try {
             // ensure result is valid json and error will be returned and not results.
             ResultExtractor.extract(IOUtils.toInputStream(resultStr, StandardCharsets.UTF_8));
-        } catch (AsterixException e) {
+        } catch (Exception e) {
             exceptionThrown = true;
             Assert.assertTrue(e.getMessage().contains(expectedException.getMessage()));
         }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/85142c08/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/ResultExtractor.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/ResultExtractor.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/ResultExtractor.java
index 890667a..a356d23 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/ResultExtractor.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/ResultExtractor.java
@@ -171,14 +171,14 @@ public class ResultExtractor {
         return IOUtils.toInputStream(resultBuilder.toString(), StandardCharsets.UTF_8);
     }
 
-    private static void checkForErrors(ObjectNode result) throws AsterixException {
+    private static void checkForErrors(ObjectNode result) throws Exception {
         final JsonNode errorsField = result.get(ResultField.ERRORS.getFieldName());
         if (errorsField != null) {
             final JsonNode errors = errorsField.get(0).get("msg");
             if (!result.get(ResultField.METRICS.getFieldName()).has("errorCount")) {
-                throw new AsterixException("Request reported error but not an errorCount");
+                throw new Exception("Request reported error but not an errorCount");
             }
-            throw new AsterixException(errors.asText());
+            throw new Exception(errors.asText());
         }
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/85142c08/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-2355/query-ASTERIXDB-2355.1.query.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-2355/query-ASTERIXDB-2355.1.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-2355/query-ASTERIXDB-2355.1.query.sqlpp
new file mode 100644
index 0000000..68d7f4a
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-2355/query-ASTERIXDB-2355.1.query.sqlpp
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/* Invalid syntax */
+
+ %%%

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/85142c08/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
index 1b49358..3b1363c 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
@@ -1895,7 +1895,7 @@
     <test-case FilePath="dml">
       <compilation-unit name="load-with-autogenerated-no-field">
         <output-dir compare="Text">load-with-autogenerated-no-field</output-dir>
-        <expected-error>org.apache.asterix.common.exceptions.AsterixException: ASX1014: Field "not_id" is not found</expected-error>
+        <expected-error>ASX1014: Field "not_id" is not found</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="dml">
@@ -3715,6 +3715,12 @@
       </compilation-unit>
     </test-case>
     <test-case FilePath="misc">
+      <compilation-unit name="query-ASTERIXDB-2355">
+        <output-dir compare="Text">none</output-dir>
+        <expected-error><![CDATA[ASX1001: Syntax error: In line 22 >> %%%<< Encountered "%" at column 2.]]></expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="misc">
       <compilation-unit name="unsupported_parameter">
         <output-dir compare="Text">none</output-dir>
         <expected-error>Query parameter compiler.joinmem is not supported</expected-error>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/85142c08/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties b/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
index 92aac98..175f144 100644
--- a/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
+++ b/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
@@ -74,6 +74,7 @@
 200 = External UDF cannot produce expected result. Please check the UDF configuration
 
 # Compile-time check errors
+1001 = Syntax error: %1$s
 1007 = Invalid expression: function %1$s expects its %2$s input parameter to be a %3$s expression, but the actual expression is %4$s
 1008 = Invalid parameter number: function %1$s cannot take %2$s parameters
 1010 = Phrase search in Full-text is not yet supported. Only one keyword per expression is permitted

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/85142c08/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
index 9af114b..b8b7622 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
+++ b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
@@ -64,6 +64,7 @@ import org.apache.asterix.common.annotations.UndeclaredFieldsDataGen;
 import org.apache.asterix.common.config.DatasetConfig.DatasetType;
 import org.apache.asterix.common.config.DatasetConfig.IndexType;
 import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
 import org.apache.asterix.common.functions.FunctionConstants;
 import org.apache.asterix.common.functions.FunctionSignature;
 import org.apache.asterix.lang.common.base.Expression;
@@ -296,9 +297,9 @@ class SQLPPParser extends ScopeChecker implements IParser {
             // this is here as the JavaCharStream that's below the lexer somtimes throws Errors that are not handled
             // by the ANTLR-generated lexer or parser (e.g it does this for invalid backslash u + 4 hex digits escapes)
             final String msg = e.getClass().getSimpleName() + (e.getMessage() != null ? ": " + e.getMessage() : "");
-            throw new CompilationException(new ParseException(msg));
+            throw new CompilationException(ErrorCode.PARSE_ERROR, msg);
         } catch (ParseException e) {
-            throw new CompilationException("Syntax error: " + getMessage(e));
+            throw new CompilationException(ErrorCode.PARSE_ERROR, getMessage(e));
         }
     }
 


[04/43] asterixdb git commit: [NO ISSUE] Reduce runtime dependencies on commons-lang

Posted by im...@apache.org.
[NO ISSUE] Reduce runtime dependencies on commons-lang

Change-Id: Iff6678efff502b566020896320ecdf170ade720a
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2576
Sonar-Qube: Jenkins <je...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Contrib: Jenkins <je...@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Michael Blow <mb...@apache.org>
Reviewed-by: Murtadha Hubail <mh...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/4ef1f253
Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/4ef1f253
Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/4ef1f253

Branch: refs/heads/release-0.9.4-pre-rc
Commit: 4ef1f2530951956a5531d6f1f56ea816a483c5ef
Parents: 0b9177d
Author: Michael Blow <mb...@apache.org>
Authored: Thu Apr 12 22:14:32 2018 -0400
Committer: Michael Blow <mb...@apache.org>
Committed: Thu Apr 12 21:54:02 2018 -0700

----------------------------------------------------------------------
 asterixdb/asterix-algebra/pom.xml                             | 4 ----
 .../asterix/translator/SqlppExpressionToPlanTranslator.java   | 2 +-
 asterixdb/asterix-app/pom.xml                                 | 6 ++----
 .../org/apache/asterix/test/common/TestTupleGenerator.java    | 2 +-
 .../org/apache/asterix/test/runtime/LangExecutionUtil.java    | 3 +--
 asterixdb/asterix-lang-common/pom.xml                         | 4 ----
 .../asterix/lang/common/expression/AbstractAccessor.java      | 5 +++--
 .../lang/common/expression/OrderedListTypeDefinition.java     | 7 ++++---
 .../lang/common/expression/TypeReferenceExpression.java       | 7 ++++---
 .../org/apache/asterix/lang/common/literal/DoubleLiteral.java | 7 ++++---
 .../org/apache/asterix/lang/common/literal/FloatLiteral.java  | 7 ++++---
 .../apache/asterix/lang/common/literal/IntegerLiteral.java    | 5 +++--
 .../asterix/lang/common/literal/LongIntegerLiteral.java       | 5 +++--
 .../org/apache/asterix/lang/common/literal/StringLiteral.java | 7 ++++---
 .../org/apache/asterix/lang/common/struct/Identifier.java     | 6 +++---
 asterixdb/asterix-metadata/pom.xml                            | 4 ----
 .../apache/asterix/metadata/declared/LoadableDataSource.java  | 2 +-
 .../asterix/metadata/utils/RTreeResourceFactoryProvider.java  | 2 +-
 hyracks-fullstack/pom.xml                                     | 5 -----
 19 files changed, 39 insertions(+), 51 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4ef1f253/asterixdb/asterix-algebra/pom.xml
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-algebra/pom.xml b/asterixdb/asterix-algebra/pom.xml
index 5a61c96..6a6bb8d 100644
--- a/asterixdb/asterix-algebra/pom.xml
+++ b/asterixdb/asterix-algebra/pom.xml
@@ -176,10 +176,6 @@
       <artifactId>commons-lang3</artifactId>
     </dependency>
     <dependency>
-      <groupId>commons-lang</groupId>
-      <artifactId>commons-lang</artifactId>
-    </dependency>
-    <dependency>
       <groupId>com.google.guava</groupId>
       <artifactId>guava</artifactId>
     </dependency>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4ef1f253/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java
index 42e38f9..9e36ba9 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java
@@ -70,7 +70,7 @@ import org.apache.asterix.om.base.AString;
 import org.apache.asterix.om.constants.AsterixConstantValue;
 import org.apache.asterix.om.functions.BuiltinFunctions;
 import org.apache.asterix.om.types.BuiltinType;
-import org.apache.commons.lang.NotImplementedException;
+import org.apache.commons.lang3.NotImplementedException;
 import org.apache.commons.lang3.mutable.Mutable;
 import org.apache.commons.lang3.mutable.MutableObject;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4ef1f253/asterixdb/asterix-app/pom.xml
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/pom.xml b/asterixdb/asterix-app/pom.xml
index b51d499..020bc6c 100644
--- a/asterixdb/asterix-app/pom.xml
+++ b/asterixdb/asterix-app/pom.xml
@@ -557,10 +557,6 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>commons-lang</groupId>
-      <artifactId>commons-lang</artifactId>
-    </dependency>
-    <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-lang3</artifactId>
     </dependency>
@@ -596,6 +592,7 @@
     <dependency>
       <groupId>org.apache.hadoop</groupId>
       <artifactId>hadoop-common</artifactId>
+      <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.asterix</groupId>
@@ -605,6 +602,7 @@
     <dependency>
       <groupId>org.apache.hadoop</groupId>
       <artifactId>hadoop-hdfs</artifactId>
+      <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>com.fasterxml.jackson.core</groupId>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4ef1f253/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestTupleGenerator.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestTupleGenerator.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestTupleGenerator.java
index 54bdb1b..2f326d8 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestTupleGenerator.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestTupleGenerator.java
@@ -20,7 +20,7 @@ package org.apache.asterix.test.common;
 
 import java.util.Random;
 
-import org.apache.commons.lang.RandomStringUtils;
+import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.data.std.util.GrowableArray;
 import org.apache.hyracks.dataflow.common.data.accessors.ITupleReference;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4ef1f253/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/LangExecutionUtil.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/LangExecutionUtil.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/LangExecutionUtil.java
index 9da0e66..cd270cd 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/LangExecutionUtil.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/LangExecutionUtil.java
@@ -31,14 +31,13 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
-import org.apache.asterix.common.config.NodeProperties;
 import org.apache.asterix.app.external.ExternalUDFLibrarian;
 import org.apache.asterix.common.library.ILibraryManager;
 import org.apache.asterix.common.utils.StorageConstants;
 import org.apache.asterix.test.common.TestExecutor;
 import org.apache.asterix.testframework.context.TestCaseContext;
-import org.apache.commons.lang.SystemUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.SystemUtils;
 import org.apache.hyracks.api.io.IODeviceHandle;
 import org.apache.hyracks.control.nc.NodeControllerService;
 import org.apache.hyracks.util.ThreadDumpUtil;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4ef1f253/asterixdb/asterix-lang-common/pom.xml
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/pom.xml b/asterixdb/asterix-lang-common/pom.xml
index 0fe7e6d..b20bd58 100644
--- a/asterixdb/asterix-lang-common/pom.xml
+++ b/asterixdb/asterix-lang-common/pom.xml
@@ -92,10 +92,6 @@
       <version>${project.version}</version>
     </dependency>
     <dependency>
-      <groupId>commons-lang</groupId>
-      <artifactId>commons-lang</artifactId>
-    </dependency>
-    <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-collections4</artifactId>
     </dependency>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4ef1f253/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/AbstractAccessor.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/AbstractAccessor.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/AbstractAccessor.java
index eb35c9c..1cc2e50 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/AbstractAccessor.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/AbstractAccessor.java
@@ -18,9 +18,10 @@
  */
 package org.apache.asterix.lang.common.expression;
 
+import java.util.Objects;
+
 import org.apache.asterix.lang.common.base.AbstractExpression;
 import org.apache.asterix.lang.common.base.Expression;
-import org.apache.commons.lang.ObjectUtils;
 
 public abstract class AbstractAccessor extends AbstractExpression {
     protected Expression expr;
@@ -40,7 +41,7 @@ public abstract class AbstractAccessor extends AbstractExpression {
 
     @Override
     public int hashCode() {
-        return ObjectUtils.hashCode(expr);
+        return Objects.hashCode(expr);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4ef1f253/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/OrderedListTypeDefinition.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/OrderedListTypeDefinition.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/OrderedListTypeDefinition.java
index 7b04c7f..58d3756 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/OrderedListTypeDefinition.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/OrderedListTypeDefinition.java
@@ -18,9 +18,10 @@
  */
 package org.apache.asterix.lang.common.expression;
 
+import java.util.Objects;
+
 import org.apache.asterix.common.exceptions.CompilationException;
 import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
-import org.apache.commons.lang.ObjectUtils;
 
 public class OrderedListTypeDefinition implements TypeExpression {
 
@@ -46,7 +47,7 @@ public class OrderedListTypeDefinition implements TypeExpression {
 
     @Override
     public int hashCode() {
-        return ObjectUtils.hashCode(itemTypeExpression);
+        return Objects.hashCode(itemTypeExpression);
     }
 
     @Override
@@ -58,6 +59,6 @@ public class OrderedListTypeDefinition implements TypeExpression {
             return false;
         }
         OrderedListTypeDefinition target = (OrderedListTypeDefinition) object;
-        return ObjectUtils.equals(itemTypeExpression, target.itemTypeExpression);
+        return Objects.equals(itemTypeExpression, target.itemTypeExpression);
     }
 }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4ef1f253/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/TypeReferenceExpression.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/TypeReferenceExpression.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/TypeReferenceExpression.java
index e87b2cc..8c1e5c6 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/TypeReferenceExpression.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/TypeReferenceExpression.java
@@ -18,10 +18,11 @@
  */
 package org.apache.asterix.lang.common.expression;
 
+import java.util.Objects;
+
 import org.apache.asterix.common.exceptions.CompilationException;
 import org.apache.asterix.lang.common.struct.Identifier;
 import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
-import org.apache.commons.lang.ObjectUtils;
 import org.apache.hyracks.algebricks.common.utils.Pair;
 
 public class TypeReferenceExpression implements TypeExpression {
@@ -48,7 +49,7 @@ public class TypeReferenceExpression implements TypeExpression {
 
     @Override
     public int hashCode() {
-        return ObjectUtils.hashCode(ident);
+        return Objects.hashCode(ident);
     }
 
     @Override
@@ -60,6 +61,6 @@ public class TypeReferenceExpression implements TypeExpression {
             return false;
         }
         TypeReferenceExpression target = (TypeReferenceExpression) object;
-        return ObjectUtils.equals(ident, target.ident);
+        return Objects.equals(ident, target.ident);
     }
 }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4ef1f253/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/DoubleLiteral.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/DoubleLiteral.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/DoubleLiteral.java
index 5812b19..93d2517 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/DoubleLiteral.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/DoubleLiteral.java
@@ -18,8 +18,9 @@
  */
 package org.apache.asterix.lang.common.literal;
 
+import java.util.Objects;
+
 import org.apache.asterix.lang.common.base.Literal;
-import org.apache.commons.lang.ObjectUtils;
 
 public class DoubleLiteral extends Literal {
     private static final long serialVersionUID = -5685491458356989250L;
@@ -50,7 +51,7 @@ public class DoubleLiteral extends Literal {
 
     @Override
     public int hashCode() {
-        return ObjectUtils.hashCode(value);
+        return Objects.hashCode(value);
     }
 
     @Override
@@ -62,7 +63,7 @@ public class DoubleLiteral extends Literal {
             return false;
         }
         DoubleLiteral target = (DoubleLiteral) object;
-        return ObjectUtils.equals(value, target.value);
+        return Objects.equals(value, target.value);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4ef1f253/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/FloatLiteral.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/FloatLiteral.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/FloatLiteral.java
index a3dfd6a..88dd4cd 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/FloatLiteral.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/FloatLiteral.java
@@ -18,8 +18,9 @@
  */
 package org.apache.asterix.lang.common.literal;
 
+import java.util.Objects;
+
 import org.apache.asterix.lang.common.base.Literal;
-import org.apache.commons.lang.ObjectUtils;
 
 public class FloatLiteral extends Literal {
     private static final long serialVersionUID = 3273563021227964396L;
@@ -46,7 +47,7 @@ public class FloatLiteral extends Literal {
 
     @Override
     public int hashCode() {
-        return ObjectUtils.hashCode(value);
+        return Objects.hashCode(value);
     }
 
     @Override
@@ -58,7 +59,7 @@ public class FloatLiteral extends Literal {
             return false;
         }
         FloatLiteral target = (FloatLiteral) object;
-        return ObjectUtils.equals(value, target.value);
+        return Objects.equals(value, target.value);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4ef1f253/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/IntegerLiteral.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/IntegerLiteral.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/IntegerLiteral.java
index a46a736..35c7d17 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/IntegerLiteral.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/IntegerLiteral.java
@@ -18,8 +18,9 @@
  */
 package org.apache.asterix.lang.common.literal;
 
+import java.util.Objects;
+
 import org.apache.asterix.lang.common.base.Literal;
-import org.apache.commons.lang.ObjectUtils;
 
 public class IntegerLiteral extends Literal {
     private static final long serialVersionUID = -8633520244871361967L;
@@ -46,7 +47,7 @@ public class IntegerLiteral extends Literal {
 
     @Override
     public int hashCode() {
-        return ObjectUtils.hashCode(value);
+        return Objects.hashCode(value);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4ef1f253/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/LongIntegerLiteral.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/LongIntegerLiteral.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/LongIntegerLiteral.java
index 5e00cb8..c9e0b8c 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/LongIntegerLiteral.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/LongIntegerLiteral.java
@@ -18,8 +18,9 @@
  */
 package org.apache.asterix.lang.common.literal;
 
+import java.util.Objects;
+
 import org.apache.asterix.lang.common.base.Literal;
-import org.apache.commons.lang.ObjectUtils;
 
 public class LongIntegerLiteral extends Literal {
     private static final long serialVersionUID = -8633520244871361967L;
@@ -50,7 +51,7 @@ public class LongIntegerLiteral extends Literal {
 
     @Override
     public int hashCode() {
-        return ObjectUtils.hashCode(value);
+        return Objects.hashCode(value);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4ef1f253/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/StringLiteral.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/StringLiteral.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/StringLiteral.java
index 9caad3e..b5ab9ec 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/StringLiteral.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/StringLiteral.java
@@ -18,8 +18,9 @@
  */
 package org.apache.asterix.lang.common.literal;
 
+import java.util.Objects;
+
 import org.apache.asterix.lang.common.base.Literal;
-import org.apache.commons.lang.ObjectUtils;
 
 public class StringLiteral extends Literal {
 
@@ -52,7 +53,7 @@ public class StringLiteral extends Literal {
 
     @Override
     public int hashCode() {
-        return ObjectUtils.hashCode(value);
+        return Objects.hashCode(value);
     }
 
     @Override
@@ -64,7 +65,7 @@ public class StringLiteral extends Literal {
             return false;
         }
         StringLiteral target = (StringLiteral) object;
-        return ObjectUtils.equals(value, target.value);
+        return Objects.equals(value, target.value);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4ef1f253/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/struct/Identifier.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/struct/Identifier.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/struct/Identifier.java
index b77fd94..1443833 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/struct/Identifier.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/struct/Identifier.java
@@ -18,7 +18,7 @@
  */
 package org.apache.asterix.lang.common.struct;
 
-import org.apache.commons.lang.ObjectUtils;
+import java.util.Objects;
 
 public class Identifier {
     protected String value;
@@ -53,11 +53,11 @@ public class Identifier {
             return false;
         }
         Identifier target = (Identifier) o;
-        return ObjectUtils.equals(value, target.value);
+        return Objects.equals(value, target.value);
     }
 
     @Override
     public int hashCode() {
-        return ObjectUtils.hashCode(value);
+        return Objects.hashCode(value);
     }
 }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4ef1f253/asterixdb/asterix-metadata/pom.xml
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-metadata/pom.xml b/asterixdb/asterix-metadata/pom.xml
index 5f3df49..94c2668 100644
--- a/asterixdb/asterix-metadata/pom.xml
+++ b/asterixdb/asterix-metadata/pom.xml
@@ -104,10 +104,6 @@
       <artifactId>algebricks-data</artifactId>
     </dependency>
     <dependency>
-      <groupId>commons-lang</groupId>
-      <artifactId>commons-lang</artifactId>
-    </dependency>
-    <dependency>
       <groupId>org.apache.hyracks</groupId>
       <artifactId>algebricks-core</artifactId>
     </dependency>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4ef1f253/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/LoadableDataSource.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/LoadableDataSource.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/LoadableDataSource.java
index 91030bf..8fdcbbc 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/LoadableDataSource.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/LoadableDataSource.java
@@ -30,7 +30,7 @@ import org.apache.asterix.metadata.entities.InternalDatasetDetails;
 import org.apache.asterix.om.types.ARecordType;
 import org.apache.asterix.om.types.ATypeTag;
 import org.apache.asterix.om.types.IAType;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.hyracks.algebricks.common.constraints.AlgebricksPartitionConstraint;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.common.utils.Pair;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4ef1f253/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/RTreeResourceFactoryProvider.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/RTreeResourceFactoryProvider.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/RTreeResourceFactoryProvider.java
index 5075adc..08f8b7d 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/RTreeResourceFactoryProvider.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/RTreeResourceFactoryProvider.java
@@ -37,7 +37,7 @@ import org.apache.asterix.om.types.ARecordType;
 import org.apache.asterix.om.types.ATypeTag;
 import org.apache.asterix.om.types.IAType;
 import org.apache.asterix.om.utils.NonTaggedFormatUtil;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.common.utils.Pair;
 import org.apache.hyracks.algebricks.data.IBinaryComparatorFactoryProvider;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4ef1f253/hyracks-fullstack/pom.xml
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/pom.xml b/hyracks-fullstack/pom.xml
index 393119d..62407a4 100644
--- a/hyracks-fullstack/pom.xml
+++ b/hyracks-fullstack/pom.xml
@@ -128,11 +128,6 @@
         <version>2.6</version>
       </dependency>
       <dependency>
-        <groupId>commons-lang</groupId>
-        <artifactId>commons-lang</artifactId>
-        <version>2.6</version>
-      </dependency>
-      <dependency>
         <groupId>com.fasterxml.jackson.core</groupId>
         <artifactId>jackson-databind</artifactId>
         <version>2.8.4</version>


[14/43] asterixdb git commit: [NO ISSUE][HYR] Ensure IJobLifecycleListener is notified on cancelled queued jobs

Posted by im...@apache.org.
[NO ISSUE][HYR] Ensure IJobLifecycleListener is notified on cancelled queued jobs

Change-Id: I7e26c9d1015725f895876f5873eccd3f86b17653
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2624
Sonar-Qube: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Michael Blow <mb...@apache.org>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Contrib: Jenkins <je...@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Murtadha Hubail <mh...@apache.org>


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

Branch: refs/heads/release-0.9.4-pre-rc
Commit: c2d19a558508bc6397ca044430546ce5be4e0872
Parents: d1c696b
Author: Michael Blow <mb...@apache.org>
Authored: Fri Apr 27 16:08:15 2018 -0400
Committer: Michael Blow <mb...@apache.org>
Committed: Fri Apr 27 17:56:43 2018 -0700

----------------------------------------------------------------------
 .../api/exceptions/HyracksException.java        | 11 +++
 .../hyracks/control/cc/job/JobManager.java      | 90 +++++++++++---------
 .../apache/hyracks/control/cc/job/JobRun.java   |  9 +-
 3 files changed, 62 insertions(+), 48 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/c2d19a55/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksException.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksException.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksException.java
index 7aa84e2..210779e 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksException.java
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksException.java
@@ -40,6 +40,17 @@ public class HyracksException extends IOException {
         return new HyracksException(cause);
     }
 
+    public static HyracksException wrapOrThrowUnchecked(Throwable cause) {
+        if (cause instanceof Error) {
+            throw (Error) cause;
+        } else if (cause instanceof RuntimeException) {
+            throw (RuntimeException) cause;
+        } else if (cause instanceof HyracksException) {
+            return (HyracksException) cause;
+        }
+        return new HyracksException(cause);
+    }
+
     public static HyracksException create(int code, Serializable... params) {
         return new HyracksException(ErrorCode.HYRACKS, code, ErrorCode.getErrorMessage(code), params);
     }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/c2d19a55/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/job/JobManager.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/job/JobManager.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/job/JobManager.java
index 9fd1a02..3ba25f5 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/job/JobManager.java
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/job/JobManager.java
@@ -31,12 +31,14 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.hyracks.api.exceptions.ErrorCode;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.exceptions.HyracksException;
 import org.apache.hyracks.api.job.ActivityClusterGraph;
 import org.apache.hyracks.api.job.JobId;
 import org.apache.hyracks.api.job.JobSpecification;
 import org.apache.hyracks.api.job.JobStatus;
 import org.apache.hyracks.api.job.resource.IJobCapacityController;
+import org.apache.hyracks.api.util.ExceptionUtils;
 import org.apache.hyracks.control.cc.ClusterControllerService;
 import org.apache.hyracks.control.cc.NodeControllerState;
 import org.apache.hyracks.control.cc.application.CCServiceContext;
@@ -65,8 +67,7 @@ public class JobManager implements IJobManager {
     private final IJobCapacityController jobCapacityController;
     private IJobQueue jobQueue;
 
-    public JobManager(CCConfig ccConfig, ClusterControllerService ccs, IJobCapacityController jobCapacityController)
-            throws HyracksException {
+    public JobManager(CCConfig ccConfig, ClusterControllerService ccs, IJobCapacityController jobCapacityController) {
         this.ccs = ccs;
         this.jobCapacityController = jobCapacityController;
         try {
@@ -116,6 +117,8 @@ public class JobManager implements IJobManager {
             case EXECUTE:
                 executeJob(jobRun);
                 break;
+            default:
+                throw new IllegalStateException("unknown submission status: " + status);
         }
     }
 
@@ -136,9 +139,18 @@ public class JobManager implements IJobManager {
             List<Exception> exceptions =
                     Collections.singletonList(HyracksException.create(ErrorCode.JOB_CANCELED, jobId));
             // Since the job has not been executed, we only need to update its status and lifecyle here.
-            jobRun.setStatus(JobStatus.FAILURE, exceptions);
+            jobRun.setStatus(JobStatus.FAILURE_BEFORE_EXECUTION, exceptions);
             runMapArchive.put(jobId, jobRun);
             runMapHistory.put(jobId, exceptions);
+            CCServiceContext serviceCtx = ccs.getContext();
+            if (serviceCtx != null) {
+                try {
+                    serviceCtx.notifyJobFinish(jobId, JobStatus.FAILURE_BEFORE_EXECUTION, exceptions);
+                } catch (Exception e) {
+                    LOGGER.error("Exception notifying cancel on pending job {}", jobId, e);
+                    throw HyracksDataException.create(e);
+                }
+            }
         }
         callback.setValue(null);
     }
@@ -152,14 +164,12 @@ public class JobManager implements IJobManager {
             finalComplete(run);
             return;
         }
-        JobId jobId = run.getJobId();
-        HyracksException caughtException = null;
         if (run.getPendingStatus() != null && run.getCleanupPendingNodeIds().isEmpty()) {
             finalComplete(run);
             return;
         }
         if (run.getPendingStatus() != null) {
-            LOGGER.warn("Ignoring duplicate cleanup for JobRun with id: " + jobId);
+            LOGGER.warn("Ignoring duplicate cleanup for JobRun with id: {}", run::getJobId);
             return;
         }
         Set<String> targetNodes = run.getParticipatingNodeIds();
@@ -168,38 +178,40 @@ public class JobManager implements IJobManager {
             run.setPendingStatus(status, exceptions);
         }
 
-        if (targetNodes != null && !targetNodes.isEmpty()) {
-            INodeManager nodeManager = ccs.getNodeManager();
-            Set<String> toDelete = new HashSet<>();
-            for (String n : targetNodes) {
-                NodeControllerState ncs = nodeManager.getNodeControllerState(n);
+        if (!targetNodes.isEmpty()) {
+            cleanupJobOnNodes(run, status, targetNodes);
+        } else {
+            finalComplete(run);
+        }
+
+    }
+
+    private void cleanupJobOnNodes(JobRun run, JobStatus status, Set<String> targetNodes) throws HyracksException {
+        Throwable caughtException = null;
+        JobId jobId = run.getJobId();
+        INodeManager nodeManager = ccs.getNodeManager();
+        Set<String> toDelete = new HashSet<>();
+        for (String n : targetNodes) {
+            NodeControllerState ncs = nodeManager.getNodeControllerState(n);
+            if (ncs == null) {
+                toDelete.add(n);
+            } else {
                 try {
-                    if (ncs == null) {
-                        toDelete.add(n);
-                    } else {
-                        ncs.getNodeController().cleanUpJoblet(jobId, status);
-                    }
+                    ncs.getNodeController().cleanUpJoblet(jobId, status);
                 } catch (Exception e) {
-                    LOGGER.log(Level.ERROR, e.getMessage(), e);
-                    if (caughtException == null) {
-                        caughtException = HyracksException.create(e);
-                    } else {
-                        caughtException.addSuppressed(e);
-                    }
+                    LOGGER.error("Exception cleaning up joblet {} on node {}", jobId, n, e);
+                    caughtException = ExceptionUtils.suppress(caughtException, e);
                 }
             }
-            targetNodes.removeAll(toDelete);
-            run.getCleanupPendingNodeIds().removeAll(toDelete);
-            if (run.getCleanupPendingNodeIds().isEmpty()) {
-                finalComplete(run);
-            }
-        } else {
+        }
+        targetNodes.removeAll(toDelete);
+        run.getCleanupPendingNodeIds().removeAll(toDelete);
+        if (run.getCleanupPendingNodeIds().isEmpty()) {
             finalComplete(run);
         }
-
         // throws caught exceptions if any
         if (caughtException != null) {
-            throw caughtException;
+            throw HyracksException.wrapOrThrowUnchecked(caughtException);
         }
     }
 
@@ -207,13 +219,13 @@ public class JobManager implements IJobManager {
     public void finalComplete(JobRun run) throws HyracksException {
         checkJob(run);
         JobId jobId = run.getJobId();
-        HyracksException caughtException = null;
+        Throwable caughtException = null;
         CCServiceContext serviceCtx = ccs.getContext();
         if (serviceCtx != null) {
             try {
                 serviceCtx.notifyJobFinish(jobId, run.getPendingStatus(), run.getPendingExceptions());
-            } catch (HyracksException e) {
-                LOGGER.log(Level.ERROR, e.getMessage(), e);
+            } catch (Exception e) {
+                LOGGER.error("Exception notifying job finish {}", jobId, e);
                 caughtException = e;
             }
         }
@@ -224,18 +236,14 @@ public class JobManager implements IJobManager {
         runMapHistory.put(jobId, run.getExceptions());
 
         if (run.getActivityClusterGraph().isReportTaskDetails()) {
-            /**
+            /*
              * log job details when profiling is enabled
              */
             try {
                 ccs.getJobLogFile().log(createJobLogObject(run));
             } catch (Exception e) {
-                LOGGER.log(Level.ERROR, e.getMessage(), e);
-                if (caughtException == null) {
-                    caughtException = HyracksException.create(e);
-                } else {
-                    caughtException.addSuppressed(e);
-                }
+                LOGGER.error("Exception reporting task details for job {}", jobId, e);
+                caughtException = ExceptionUtils.suppress(caughtException, e);
             }
         }
 
@@ -248,7 +256,7 @@ public class JobManager implements IJobManager {
 
         // throws caught exceptions if any
         if (caughtException != null) {
-            throw caughtException;
+            throw HyracksException.wrapOrThrowUnchecked(caughtException);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/c2d19a55/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/job/JobRun.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/job/JobRun.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/job/JobRun.java
index e4699c7..5b98260 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/job/JobRun.java
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/job/JobRun.java
@@ -209,17 +209,12 @@ public class JobRun implements IJobStatusConditionVariable {
     }
 
     public void registerOperatorLocation(OperatorDescriptorId op, int partition, String location) {
-        Map<Integer, String> locations = operatorLocations.get(op);
-        if (locations == null) {
-            locations = new HashMap<Integer, String>();
-            operatorLocations.put(op, locations);
-        }
-        locations.put(partition, location);
+        operatorLocations.computeIfAbsent(op, k -> new HashMap<>()).put(partition, location);
     }
 
     @Override
     public synchronized void waitForCompletion() throws Exception {
-        while (status != JobStatus.TERMINATED && status != JobStatus.FAILURE) {
+        while (status == JobStatus.PENDING || status == JobStatus.RUNNING) {
             wait();
         }
         if (exceptions != null && !exceptions.isEmpty()) {


[16/43] asterixdb git commit: [NO ISSUE][STO] Fix component switch in LSMBTreeRangeSearchCursor

Posted by im...@apache.org.
[NO ISSUE][STO] Fix component switch in LSMBTreeRangeSearchCursor

- user model changes: no
- storage format changes: no
- interface changes: no

Details:
- switchRequest array is used for switching memory components
  with disk components. It has the size = maximum number of
  memory components which can be greater than all the number of
  components size in certain cases (0 disk component,
  1 memory component for example). To avoid index out of bound,
  we end the loop early in this corner case.

Change-Id: If20cc671974485bf73ad05e95d681424805611d3
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2633
Reviewed-by: Murtadha Hubail <mh...@apache.org>
Sonar-Qube: Jenkins <je...@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Contrib: Jenkins <je...@fulliautomatix.ics.uci.edu>


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

Branch: refs/heads/release-0.9.4-pre-rc
Commit: e29ecfb6a053f95b1b262b99d0cd0650c6eef658
Parents: 6cbb8da
Author: Abdullah Alamoudi <ba...@gmail.com>
Authored: Thu May 3 19:45:50 2018 +0300
Committer: abdullah alamoudi <ba...@gmail.com>
Committed: Thu May 3 23:03:11 2018 -0700

----------------------------------------------------------------------
 .../storage/am/lsm/btree/impls/LSMBTreeRangeSearchCursor.java   | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e29ecfb6/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeRangeSearchCursor.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeRangeSearchCursor.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeRangeSearchCursor.java
index a675047..361612e 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeRangeSearchCursor.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeRangeSearchCursor.java
@@ -212,7 +212,10 @@ public class LSMBTreeRangeSearchCursor extends LSMIndexSearchCursor {
         }
         opCtx.getIndex().getHarness().replaceMemoryComponentsWithDiskComponents(getOpCtx(), replaceFrom);
         // redo the search on the new component
-        for (int i = replaceFrom; i < switchRequest.length; i++) {
+        // switchRequest array has the size = number of memory components. which can be greater
+        // than operationalComponents size in certain cases (0 disk component, 1 memory component for example)
+        // To avoid index out of bound, we end the loop at the first of the two conditions
+        for (int i = replaceFrom; i < switchRequest.length && i < operationalComponents.size(); i++) {
             if (switchRequest[i]) {
                 ILSMComponent component = operationalComponents.get(i);
                 BTree btree = (BTree) component.getIndex();


[29/43] asterixdb git commit: [ASTERIXDB-2318] Build dashboard in mvn

Posted by im...@apache.org.
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/scripts.da68998bdd77aff4e764.bundle.js
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/scripts.da68998bdd77aff4e764.bundle.js b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/scripts.da68998bdd77aff4e764.bundle.js
deleted file mode 100644
index 73c64a5..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/scripts.da68998bdd77aff4e764.bundle.js
+++ /dev/null
@@ -1,6 +0,0 @@
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.CodeMirror=t()}(this,function(){"use strict";function e(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}function t(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function r(e,r){return t(e).appendChild(r)}function n(e,t,r,n){var i=document.createElement(e);if(r&&(i.className=r),n&&(i.style.cssText=n),"string"==typeof t)i.appendChild(document.createTextNode(t));else if(t)for(var o=0;o<t.length;++o)i.appendChild(t[o]);return i}function i(e,t,r,i){var o=n(e,t,r,i);return o.setAttribute("role","presentation"),o}function o(e,t){if(3==t.nodeType&&(t=t.parentNode),e.contains)return e.contains(t);do{if(11==t.nodeType&&(t=t.host),t==e)return!0}while(t=t.parentNode)}function l(){var e;try{e=document.activeElement}catch(t){e=document.body||null}for(;e&&e.shadowRoot&&e.shadowRoot.activeElement;)e=e.shadowRoot.activeElement;retu
 rn e}function s(t,r){var n=t.className;e(r).test(n)||(t.className+=(n?" ":"")+r)}function a(t,r){for(var n=t.split(" "),i=0;i<n.length;i++)n[i]&&!e(n[i]).test(r)&&(r+=" "+n[i]);return r}function u(e){var t=Array.prototype.slice.call(arguments,1);return function(){return e.apply(null,t)}}function c(e,t,r){t||(t={});for(var n in e)!e.hasOwnProperty(n)||!1===r&&t.hasOwnProperty(n)||(t[n]=e[n]);return t}function f(e,t,r,n,i){null==t&&-1==(t=e.search(/[^\s\u00a0]/))&&(t=e.length);for(var o=n||0,l=i||0;;){var s=e.indexOf("\t",o);if(s<0||s>=t)return l+(t-o);l+=s-o,l+=r-l%r,o=s+1}}function h(e,t){for(var r=0;r<e.length;++r)if(e[r]==t)return r;return-1}function d(e,t,r){for(var n=0,i=0;;){var o=e.indexOf("\t",n);-1==o&&(o=e.length);var l=o-n;if(o==e.length||i+l>=t)return n+Math.min(l,t-i);if(i+=o-n,i+=r-i%r,n=o+1,i>=t)return n}}function p(e){for(;Yl.length<=e;)Yl.push(g(Yl)+" ");return Yl[e]}function g(e){return e[e.length-1]}function v(e,t){for(var r=[],n=0;n<e.length;n++)r[n]=t(e[n],n);ret
 urn r}function m(e,t,r){for(var n=0,i=r(t);n<e.length&&r(e[n])<=i;)n++;e.splice(n,0,t)}function y(){}function b(e,t){var r;return Object.create?r=Object.create(e):(y.prototype=e,r=new y),t&&c(t,r),r}function w(e){return/\w/.test(e)||e>"€"&&(e.toUpperCase()!=e.toLowerCase()||_l.test(e))}function x(e,t){return t?!!(t.source.indexOf("\\w")>-1&&w(e))||t.test(e):w(e)}function C(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}function S(e){return e.charCodeAt(0)>=768&&ql.test(e)}function L(e,t,r){for(;(r<0?t>0:t<e.length)&&S(e.charAt(t));)t+=r;return t}function k(e,t,r){for(var n=t>r?-1:1;;){if(t==r)return t;var i=(t+r)/2,o=n<0?Math.ceil(i):Math.floor(i);if(o==t)return e(o)?t:r;e(o)?r=o:t=o+n}}function T(e,t,r){var o=this;this.input=r,o.scrollbarFiller=n("div",null,"CodeMirror-scrollbar-filler"),o.scrollbarFiller.setAttribute("cm-not-content","true"),o.gutterFiller=n("div",null,"CodeMirror-gutter-filler"),o.gutterFiller.setAttribute("cm-not-content","true"),o.lineDiv=i("
 div",null,"CodeMirror-code"),o.selectionDiv=n("div",null,null,"position: relative; z-index: 1"),o.cursorDiv=n("div",null,"CodeMirror-cursors"),o.measure=n("div",null,"CodeMirror-measure"),o.lineMeasure=n("div",null,"CodeMirror-measure"),o.lineSpace=i("div",[o.measure,o.lineMeasure,o.selectionDiv,o.cursorDiv,o.lineDiv],null,"position: relative; outline: none");var l=i("div",[o.lineSpace],"CodeMirror-lines");o.mover=n("div",[l],null,"position: relative"),o.sizer=n("div",[o.mover],"CodeMirror-sizer"),o.sizerWidth=null,o.heightForcer=n("div",null,null,"position: absolute; height: "+Ul+"px; width: 1px;"),o.gutters=n("div",null,"CodeMirror-gutters"),o.lineGutter=null,o.scroller=n("div",[o.sizer,o.heightForcer,o.gutters],"CodeMirror-scroll"),o.scroller.setAttribute("tabIndex","-1"),o.wrapper=n("div",[o.scrollbarFiller,o.gutterFiller,o.scroller],"CodeMirror"),yl&&bl<8&&(o.gutters.style.zIndex=-1,o.scroller.style.paddingRight=0),wl||pl&&Ol||(o.scroller.draggable=!0),e&&(e.appendChild?e.appen
 dChild(o.wrapper):e(o.wrapper)),o.viewFrom=o.viewTo=t.first,o.reportedViewFrom=o.reportedViewTo=t.first,o.view=[],o.renderedView=null,o.externalMeasured=null,o.viewOffset=0,o.lastWrapHeight=o.lastWrapWidth=0,o.updateLineNumbers=null,o.nativeBarWidth=o.barHeight=o.barWidth=0,o.scrollbarsClipped=!1,o.lineNumWidth=o.lineNumInnerWidth=o.lineNumChars=null,o.alignWidgets=!1,o.cachedCharWidth=o.cachedTextHeight=o.cachedPaddingH=null,o.maxLine=null,o.maxLineLength=0,o.maxLineChanged=!1,o.wheelDX=o.wheelDY=o.wheelStartX=o.wheelStartY=null,o.shift=!1,o.selForContextMenu=null,o.activeTouch=null,r.init(o)}function M(e,t){if((t-=e.first)<0||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var r=e;!r.lines;)for(var n=0;;++n){var i=r.children[n],o=i.chunkSize();if(t<o){r=i;break}t-=o}return r.lines[t]}function N(e,t,r){var n=[],i=t.line;return e.iter(t.line,r.line+1,function(e){var o=e.text;i==r.line&&(o=o.slice(0,r.ch)),i==t.line&&(o=o.slice(t.ch)),n.push(o),++i}
 ),n}function O(e,t,r){var n=[];return e.iter(t,r,function(e){n.push(e.text)}),n}function A(e,t){var r=t-e.height;if(r)for(var n=e;n;n=n.parent)n.height+=r}function W(e){if(null==e.parent)return null;for(var t=e.parent,r=h(t.lines,e),n=t.parent;n;t=n,n=n.parent)for(var i=0;n.children[i]!=t;++i)r+=n.children[i].chunkSize();return r+t.first}function D(e,t){var r=e.first;e:do{for(var n=0;n<e.children.length;++n){var i=e.children[n],o=i.height;if(t<o){e=i;continue e}t-=o,r+=i.chunkSize()}return r}while(!e.lines);for(var l=0;l<e.lines.length;++l){var s=e.lines[l],a=s.height;if(t<a)break;t-=a}return r+l}function H(e,t){return t>=e.first&&t<e.first+e.size}function F(e,t){return String(e.lineNumberFormatter(t+e.firstLineNumber))}function P(e,t,r){if(void 0===r&&(r=null),!(this instanceof P))return new P(e,t,r);this.line=e,this.ch=t,this.sticky=r}function E(e,t){return e.line-t.line||e.ch-t.ch}function z(e,t){return e.sticky==t.sticky&&0==E(e,t)}function I(e){return P(e.line,e.ch)}function R(
 e,t){return E(e,t)<0?t:e}function B(e,t){return E(e,t)<0?e:t}function G(e,t){return Math.max(e.first,Math.min(t,e.first+e.size-1))}function U(e,t){if(t.line<e.first)return P(e.first,0);var r=e.first+e.size-1;return t.line>r?P(r,M(e,r).text.length):V(t,M(e,t.line).text.length)}function V(e,t){var r=e.ch;return null==r||r>t?P(e.line,t):r<0?P(e.line,0):e}function K(e,t){for(var r=[],n=0;n<t.length;n++)r[n]=U(e,t[n]);return r}function j(){$l=!0}function X(){Zl=!0}function Y(e,t,r){this.marker=e,this.from=t,this.to=r}function _(e,t){if(e)for(var r=0;r<e.length;++r){var n=e[r];if(n.marker==t)return n}}function q(e,t){for(var r,n=0;n<e.length;++n)e[n]!=t&&(r||(r=[])).push(e[n]);return r}function $(e,t){e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],t.marker.attachLine(e)}function Z(e,t,r){var n;if(e)for(var i=0;i<e.length;++i){var o=e[i],l=o.marker,s=null==o.from||(l.inclusiveLeft?o.from<=t:o.from<t);if(s||o.from==t&&"bookmark"==l.type&&(!r||!o.marker.insertLeft)){var a=null==o.
 to||(l.inclusiveRight?o.to>=t:o.to>t);(n||(n=[])).push(new Y(l,o.from,a?null:o.to))}}return n}function Q(e,t,r){var n;if(e)for(var i=0;i<e.length;++i){var o=e[i],l=o.marker,s=null==o.to||(l.inclusiveRight?o.to>=t:o.to>t);if(s||o.from==t&&"bookmark"==l.type&&(!r||o.marker.insertLeft)){var a=null==o.from||(l.inclusiveLeft?o.from<=t:o.from<t);(n||(n=[])).push(new Y(l,a?null:o.from-t,null==o.to?null:o.to-t))}}return n}function J(e,t){if(t.full)return null;var r=H(e,t.from.line)&&M(e,t.from.line).markedSpans,n=H(e,t.to.line)&&M(e,t.to.line).markedSpans;if(!r&&!n)return null;var i=t.from.ch,o=t.to.ch,l=0==E(t.from,t.to),s=Z(r,i,l),a=Q(n,o,l),u=1==t.text.length,c=g(t.text).length+(u?i:0);if(s)for(var f=0;f<s.length;++f){var h=s[f];if(null==h.to){var d=_(a,h.marker);d?u&&(h.to=null==d.to?null:d.to+c):h.to=i}}if(a)for(var p=0;p<a.length;++p){var v=a[p];if(null!=v.to&&(v.to+=c),null==v.from){var m=_(s,v.marker);m||(v.from=c,u&&(s||(s=[])).push(v))}else v.from+=c,u&&(s||(s=[])).push(v)}s&&(s=e
 e(s)),a&&a!=s&&(a=ee(a));var y=[s];if(!u){var b,w=t.text.length-2;if(w>0&&s)for(var x=0;x<s.length;++x)null==s[x].to&&(b||(b=[])).push(new Y(s[x].marker,null,null));for(var C=0;C<w;++C)y.push(b);y.push(a)}return y}function ee(e){for(var t=0;t<e.length;++t){var r=e[t];null!=r.from&&r.from==r.to&&!1!==r.marker.clearWhenEmpty&&e.splice(t--,1)}return e.length?e:null}function te(e,t,r){var n=null;if(e.iter(t.line,r.line+1,function(e){if(e.markedSpans)for(var t=0;t<e.markedSpans.length;++t){var r=e.markedSpans[t].marker;!r.readOnly||n&&-1!=h(n,r)||(n||(n=[])).push(r)}}),!n)return null;for(var i=[{from:t,to:r}],o=0;o<n.length;++o)for(var l=n[o],s=l.find(0),a=0;a<i.length;++a){var u=i[a];if(!(E(u.to,s.from)<0||E(u.from,s.to)>0)){var c=[a,1],f=E(u.from,s.from),d=E(u.to,s.to);(f<0||!l.inclusiveLeft&&!f)&&c.push({from:u.from,to:s.from}),(d>0||!l.inclusiveRight&&!d)&&c.push({from:s.to,to:u.to}),i.splice.apply(i,c),a+=c.length-3}}return i}function re(e){var t=e.markedSpans;if(t){for(var r=0;r<t.
 length;++r)t[r].marker.detachLine(e);e.markedSpans=null}}function ne(e,t){if(t){for(var r=0;r<t.length;++r)t[r].marker.attachLine(e);e.markedSpans=t}}function ie(e){return e.inclusiveLeft?-1:0}function oe(e){return e.inclusiveRight?1:0}function le(e,t){var r=e.lines.length-t.lines.length;if(0!=r)return r;var n=e.find(),i=t.find(),o=E(n.from,i.from)||ie(e)-ie(t);if(o)return-o;var l=E(n.to,i.to)||oe(e)-oe(t);return l||t.id-e.id}function se(e,t){var r,n=Zl&&e.markedSpans;if(n)for(var i=void 0,o=0;o<n.length;++o)i=n[o],i.marker.collapsed&&null==(t?i.from:i.to)&&(!r||le(r,i.marker)<0)&&(r=i.marker);return r}function ae(e){return se(e,!0)}function ue(e){return se(e,!1)}function ce(e,t,r,n,i){var o=M(e,t),l=Zl&&o.markedSpans;if(l)for(var s=0;s<l.length;++s){var a=l[s];if(a.marker.collapsed){var u=a.marker.find(0),c=E(u.from,r)||ie(a.marker)-ie(i),f=E(u.to,n)||oe(a.marker)-oe(i);if(!(c>=0&&f<=0||c<=0&&f>=0)&&(c<=0&&(a.marker.inclusiveRight&&i.inclusiveLeft?E(u.to,r)>=0:E(u.to,r)>0)||c>=0&&(
 a.marker.inclusiveRight&&i.inclusiveLeft?E(u.from,n)<=0:E(u.from,n)<0)))return!0}}}function fe(e){for(var t;t=ae(e);)e=t.find(-1,!0).line;return e}function he(e){for(var t;t=ue(e);)e=t.find(1,!0).line;return e}function de(e){for(var t,r;t=ue(e);)e=t.find(1,!0).line,(r||(r=[])).push(e);return r}function pe(e,t){var r=M(e,t),n=fe(r);return r==n?t:W(n)}function ge(e,t){if(t>e.lastLine())return t;var r,n=M(e,t);if(!ve(e,n))return t;for(;r=ue(n);)n=r.find(1,!0).line;return W(n)+1}function ve(e,t){var r=Zl&&t.markedSpans;if(r)for(var n=void 0,i=0;i<r.length;++i)if(n=r[i],n.marker.collapsed){if(null==n.from)return!0;if(!n.marker.widgetNode&&0==n.from&&n.marker.inclusiveLeft&&me(e,t,n))return!0}}function me(e,t,r){if(null==r.to){var n=r.marker.find(1,!0);return me(e,n.line,_(n.line.markedSpans,r.marker))}if(r.marker.inclusiveRight&&r.to==t.text.length)return!0;for(var i=void 0,o=0;o<t.markedSpans.length;++o)if(i=t.markedSpans[o],i.marker.collapsed&&!i.marker.widgetNode&&i.from==r.to&&(null=
 =i.to||i.to!=r.from)&&(i.marker.inclusiveLeft||r.marker.inclusiveRight)&&me(e,t,i))return!0}function ye(e){e=fe(e);for(var t=0,r=e.parent,n=0;n<r.lines.length;++n){var i=r.lines[n];if(i==e)break;t+=i.height}for(var o=r.parent;o;r=o,o=r.parent)for(var l=0;l<o.children.length;++l){var s=o.children[l];if(s==r)break;t+=s.height}return t}function be(e){if(0==e.height)return 0;for(var t,r=e.text.length,n=e;t=ae(n);){var i=t.find(0,!0);n=i.from.line,r+=i.from.ch-i.to.ch}for(n=e;t=ue(n);){var o=t.find(0,!0);r-=n.text.length-o.from.ch,n=o.to.line,r+=n.text.length-o.to.ch}return r}function we(e){var t=e.display,r=e.doc;t.maxLine=M(r,r.first),t.maxLineLength=be(t.maxLine),t.maxLineChanged=!0,r.iter(function(e){var r=be(e);r>t.maxLineLength&&(t.maxLineLength=r,t.maxLine=e)})}function xe(e,t,r,n){if(!e)return n(t,r,"ltr",0);for(var i=!1,o=0;o<e.length;++o){var l=e[o];(l.from<r&&l.to>t||t==r&&l.to==t)&&(n(Math.max(l.from,t),Math.min(l.to,r),1==l.level?"rtl":"ltr",o),i=!0)}i||n(t,r,"ltr")}function
  Ce(e,t,r){var n;Ql=null;for(var i=0;i<e.length;++i){var o=e[i];if(o.from<t&&o.to>t)return i;o.to==t&&(o.from!=o.to&&"before"==r?n=i:Ql=i),o.from==t&&(o.from!=o.to&&"before"!=r?n=i:Ql=i)}return null!=n?n:Ql}function Se(e,t){var r=e.order;return null==r&&(r=e.order=Jl(e.text,t)),r}function Le(e,t){return e._handlers&&e._handlers[t]||es}function ke(e,t,r){if(e.removeEventListener)e.removeEventListener(t,r,!1);else if(e.detachEvent)e.detachEvent("on"+t,r);else{var n=e._handlers,i=n&&n[t];if(i){var o=h(i,r);o>-1&&(n[t]=i.slice(0,o).concat(i.slice(o+1)))}}}function Te(e,t){var r=Le(e,t);if(r.length)for(var n=Array.prototype.slice.call(arguments,2),i=0;i<r.length;++i)r[i].apply(null,n)}function Me(e,t,r){return"string"==typeof t&&(t={type:t,preventDefault:function(){this.defaultPrevented=!0}}),Te(e,r||t.type,e,t),He(t)||t.codemirrorIgnore}function Ne(e){var t=e._handlers&&e._handlers.cursorActivity;if(t)for(var r=e.curOp.cursorActivityHandlers||(e.curOp.cursorActivityHandlers=[]),n=0;n<t.
 length;++n)-1==h(r,t[n])&&r.push(t[n])}function Oe(e,t){return Le(e,t).length>0}function Ae(e){e.prototype.on=function(e,t){ts(this,e,t)},e.prototype.off=function(e,t){ke(this,e,t)}}function We(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function De(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function He(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function Fe(e){We(e),De(e)}function Pe(e){return e.target||e.srcElement}function Ee(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),Al&&e.ctrlKey&&1==t&&(t=3),t}function ze(e){if(null==Bl){var t=n("span","​");r(e,n("span",[t,document.createTextNode("x")])),0!=e.firstChild.offsetHeight&&(Bl=t.offsetWidth<=1&&t.offsetHeight>2&&!(yl&&bl<8))}var i=Bl?n("span","​"):n("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return i.setAttribute("cm-text",""),i}function Ie(e){if(null!=Gl)return Gl;var n=r(e,document.createTextNode("AخA"
 )),i=Fl(n,0,1).getBoundingClientRect(),o=Fl(n,1,2).getBoundingClientRect();return t(e),!(!i||i.left==i.right)&&(Gl=o.right-i.right<3)}function Re(e){if(null!=ls)return ls;var t=r(e,n("span","x")),i=t.getBoundingClientRect(),o=Fl(t,0,1).getBoundingClientRect();return ls=Math.abs(i.left-o.left)>1}function Be(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),ss[e]=t}function Ge(e,t){as[e]=t}function Ue(e){if("string"==typeof e&&as.hasOwnProperty(e))e=as[e];else if(e&&"string"==typeof e.name&&as.hasOwnProperty(e.name)){var t=as[e.name];"string"==typeof t&&(t={name:t}),e=b(t,e),e.name=t.name}else{if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+xml$/.test(e))return Ue("application/xml");if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+json$/.test(e))return Ue("application/json")}return"string"==typeof e?{name:e}:e||{name:"null"}}function Ve(e,t){t=Ue(t);var r=ss[t.name];if(!r)return Ve(e,"text/plain");var n=r(e,t);if(us.hasOwnProperty(t.name)){var i=us[t.name];for(var
  o in i)i.hasOwnProperty(o)&&(n.hasOwnProperty(o)&&(n["_"+o]=n[o]),n[o]=i[o])}if(n.name=t.name,t.helperType&&(n.helperType=t.helperType),t.modeProps)for(var l in t.modeProps)n[l]=t.modeProps[l];return n}function Ke(e,t){c(t,us.hasOwnProperty(e)?us[e]:us[e]={})}function je(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var r={};for(var n in t){var i=t[n];i instanceof Array&&(i=i.concat([])),r[n]=i}return r}function Xe(e,t){for(var r;e.innerMode&&(r=e.innerMode(t))&&r.mode!=e;)t=r.state,e=r.mode;return r||{mode:e,state:t}}function Ye(e,t,r){return!e.startState||e.startState(t,r)}function _e(e,t,r,n){var i=[e.state.modeGen],o={};rt(e,t.text,e.doc.mode,r,function(e,t){return i.push(e,t)},o,n);for(var l=r.state,s=0;s<e.state.overlays.length;++s)!function(n){r.baseTokens=i;var s=e.state.overlays[n],a=1,u=0;r.state=!0,rt(e,t.text,s.mode,r,function(e,t){for(var r=a;u<e;){var n=i[a];n>e&&i.splice(a,1,e,i[a+1],n),a+=2,u=Math.min(e,n)}if(t)if(s.opaque)i.splice(r,a-r,e,"overlay "+
 t),a=r+2;else for(;r<a;r+=2){var o=i[r+1];i[r+1]=(o?o+" ":"")+"overlay "+t}},o),r.state=l,r.baseTokens=null,r.baseTokenPos=1}(s);return{styles:i,classes:o.bgClass||o.textClass?o:null}}function qe(e,t,r){if(!t.styles||t.styles[0]!=e.state.modeGen){var n=$e(e,W(t)),i=t.text.length>e.options.maxHighlightLength&&je(e.doc.mode,n.state),o=_e(e,t,n);i&&(n.state=i),t.stateAfter=n.save(!i),t.styles=o.styles,o.classes?t.styleClasses=o.classes:t.styleClasses&&(t.styleClasses=null),r===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function $e(e,t,r){var n=e.doc,i=e.display;if(!n.mode.startState)return new hs(n,!0,t);var o=nt(e,t,r),l=o>n.first&&M(n,o-1).stateAfter,s=l?hs.fromSaved(n,l,o):new hs(n,Ye(n.mode),o);return n.iter(o,t,function(r){Ze(e,r.text,s);var n=s.line;r.stateAfter=n==t-1||n%5==0||n>=i.viewFrom&&n<i.viewTo?s.save():null,s.nextLine()}),r&&(n.modeFrontier=s.line),s}function Ze(e,t,r,n){var i=e.doc.mode,o=new cs(
 t,e.options.tabSize,r);for(o.start=o.pos=n||0,""==t&&Qe(i,r.state);!o.eol();)Je(i,o,r.state),o.start=o.pos}function Qe(e,t){if(e.blankLine)return e.blankLine(t);if(e.innerMode){var r=Xe(e,t);return r.mode.blankLine?r.mode.blankLine(r.state):void 0}}function Je(e,t,r,n){for(var i=0;i<10;i++){n&&(n[0]=Xe(e,r).mode);var o=e.token(t,r);if(t.pos>t.start)return o}throw new Error("Mode "+e.name+" failed to advance stream.")}function et(e,t,r,n){var i,o=e.doc,l=o.mode;t=U(o,t);var s,a=M(o,t.line),u=$e(e,t.line,r),c=new cs(a.text,e.options.tabSize,u);for(n&&(s=[]);(n||c.pos<t.ch)&&!c.eol();)c.start=c.pos,i=Je(l,c,u.state),n&&s.push(new ds(c,i,je(o.mode,u.state)));return n?s:new ds(c,i,u.state)}function tt(e,t){if(e)for(;;){var r=e.match(/(?:^|\s+)line-(background-)?(\S+)/);if(!r)break;e=e.slice(0,r.index)+e.slice(r.index+r[0].length);var n=r[1]?"bgClass":"textClass";null==t[n]?t[n]=r[2]:new RegExp("(?:^|s)"+r[2]+"(?:$|s)").test(t[n])||(t[n]+=" "+r[2])}return e}function rt(e,t,r,n,i,o,l){var 
 s=r.flattenSpans;null==s&&(s=e.options.flattenSpans);var a,u=0,c=null,f=new cs(t,e.options.tabSize,n),h=e.options.addModeClass&&[null];for(""==t&&tt(Qe(r,n.state),o);!f.eol();){if(f.pos>e.options.maxHighlightLength?(s=!1,l&&Ze(e,t,n,f.pos),f.pos=t.length,a=null):a=tt(Je(r,f,n.state,h),o),h){var d=h[0].name;d&&(a="m-"+(a?d+" "+a:d))}if(!s||c!=a){for(;u<f.start;)u=Math.min(f.start,u+5e3),i(u,c);c=a}f.start=f.pos}for(;u<f.pos;){var p=Math.min(f.pos,u+5e3);i(p,c),u=p}}function nt(e,t,r){for(var n,i,o=e.doc,l=r?-1:t-(e.doc.mode.innerMode?1e3:100),s=t;s>l;--s){if(s<=o.first)return o.first;var a=M(o,s-1),u=a.stateAfter;if(u&&(!r||s+(u instanceof fs?u.lookAhead:0)<=o.modeFrontier))return s;var c=f(a.text,null,e.options.tabSize);(null==i||n>c)&&(i=s-1,n=c)}return i}function it(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontier<t-10)){for(var r=e.first,n=t-1;n>r;n--){var i=M(e,n).stateAfter;if(i&&(!(i instanceof fs)||n+i.lookAhead<t)){r=n+1;break}}e.highlightFrontier=Math
 .min(e.highlightFrontier,r)}}function ot(e,t,r,n){e.text=t,e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null),null!=e.order&&(e.order=null),re(e),ne(e,r);var i=n?n(e):1;i!=e.height&&A(e,i)}function lt(e){e.parent=null,re(e)}function st(e,t){if(!e||/^\s*$/.test(e))return null;var r=t.addModeClass?ms:vs;return r[e]||(r[e]=e.replace(/\S+/g,"cm-$&"))}function at(e,t){var r=i("span",null,null,wl?"padding-right: .1px":null),n={pre:i("pre",[r],"CodeMirror-line"),content:r,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:(yl||wl)&&e.getOption("lineWrapping")};t.measure={};for(var o=0;o<=(t.rest?t.rest.length:0);o++){var l=o?t.rest[o-1]:t.line,s=void 0;n.pos=0,n.addToken=ct,Ie(e.display.measure)&&(s=Se(l,e.doc.direction))&&(n.addToken=ht(n.addToken,s)),n.map=[];pt(l,n,qe(e,l,t!=e.display.externalMeasured&&W(l))),l.styleClasses&&(l.styleClasses.bgClass&&(n.bgClass=a(l.styleClasses.bgClass,n.bgClass||"")),l.styleClasses.textClass&&(n.textClass=a(l.styleClasses.textClass,n.textClass||""))
 ),0==n.map.length&&n.map.push(0,0,n.content.appendChild(ze(e.display.measure))),0==o?(t.measure.map=n.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(n.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(wl){var u=n.content.lastChild;(/\bcm-tab\b/.test(u.className)||u.querySelector&&u.querySelector(".cm-tab"))&&(n.content.className="cm-tab-wrap-hack")}return Te(e,"renderLine",e,t.line,n.pre),n.pre.className&&(n.textClass=a(n.pre.className,n.textClass||"")),n}function ut(e){var t=n("span","•","cm-invalidchar");return t.title="\\u"+e.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function ct(e,t,r,i,o,l,s){if(t){var a,u=e.splitSpaces?ft(t,e.trailingSpace):t,c=e.cm.state.specialChars,f=!1;if(c.test(t)){a=document.createDocumentFragment();for(var h=0;;){c.lastIndex=h;var d=c.exec(t),g=d?d.index-h:t.length-h;if(g){var v=document.createTextNode(u.slice(h,h+g));yl&&bl<9?a.appendChild(n("span",[v])):a.appendChild(v),e.map.push(e.pos,e.pos+g,v
 ),e.col+=g,e.pos+=g}if(!d)break;h+=g+1;var m=void 0;if("\t"==d[0]){var y=e.cm.options.tabSize,b=y-e.col%y;m=a.appendChild(n("span",p(b),"cm-tab")),m.setAttribute("role","presentation"),m.setAttribute("cm-text","\t"),e.col+=b}else"\r"==d[0]||"\n"==d[0]?(m=a.appendChild(n("span","\r"==d[0]?"␍":"␤","cm-invalidchar")),m.setAttribute("cm-text",d[0]),e.col+=1):(m=e.cm.options.specialCharPlaceholder(d[0]),m.setAttribute("cm-text",d[0]),yl&&bl<9?a.appendChild(n("span",[m])):a.appendChild(m),e.col+=1);e.map.push(e.pos,e.pos+1,m),e.pos++}}else e.col+=t.length,a=document.createTextNode(u),e.map.push(e.pos,e.pos+t.length,a),yl&&bl<9&&(f=!0),e.pos+=t.length;if(e.trailingSpace=32==u.charCodeAt(t.length-1),r||i||o||f||s){var w=r||"";i&&(w+=i),o&&(w+=o);var x=n("span",[a],w,s);return l&&(x.title=l),e.content.appendChild(x)}e.content.appendChild(a)}}function ft(e,t){if(e.length>1&&!/  /.test(e))return e;for(var r=t,n="",i=0;i<e.length;i++){var o=e.charAt(i);" "!=o||!r||i!=e.length-1&&32!=e.charC
 odeAt(i+1)||(o=" "),n+=o,r=" "==o}return n}function ht(e,t){return function(r,n,i,o,l,s,a){i=i?i+" cm-force-border":"cm-force-border";for(var u=r.pos,c=u+n.length;;){for(var f=void 0,h=0;h<t.length&&(f=t[h],!(f.to>u&&f.from<=u));h++);if(f.to>=c)return e(r,n,i,o,l,s,a);e(r,n.slice(0,f.to-u),i,o,null,s,a),o=null,n=n.slice(f.to-u),u=f.to}}}function dt(e,t,r,n){var i=!n&&r.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!n&&e.cm.display.input.needsContentAttribute&&(i||(i=e.content.appendChild(document.createElement("span"))),i.setAttribute("cm-marker",r.id)),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t,e.trailingSpace=!1}function pt(e,t,r){var n=e.markedSpans,i=e.text,o=0;if(n)for(var l,s,a,u,c,f,h,d=i.length,p=0,g=1,v="",m=0;;){if(m==p){a=u=c=f=s="",h=null,m=1/0;for(var y=[],b=void 0,w=0;w<n.length;++w){var x=n[w],C=x.marker;"bookmark"==C.type&&x.from==p&&C.widgetNode?y.push(C):x.from<=p&&(null==x.to||x.to>p||C.collapsed&&x.to==p&&x.from==p)?(null!=x.to&&x.to!
 =p&&m>x.to&&(m=x.to,u=""),C.className&&(a+=" "+C.className),C.css&&(s=(s?s+";":"")+C.css),C.startStyle&&x.from==p&&(c+=" "+C.startStyle),C.endStyle&&x.to==m&&(b||(b=[])).push(C.endStyle,x.to),C.title&&!f&&(f=C.title),C.collapsed&&(!h||le(h.marker,C)<0)&&(h=x)):x.from>p&&m>x.from&&(m=x.from)}if(b)for(var S=0;S<b.length;S+=2)b[S+1]==m&&(u+=" "+b[S]);if(!h||h.from==p)for(var L=0;L<y.length;++L)dt(t,0,y[L]);if(h&&(h.from||0)==p){if(dt(t,(null==h.to?d+1:h.to)-p,h.marker,null==h.from),null==h.to)return;h.to==p&&(h=!1)}}if(p>=d)break;for(var k=Math.min(d,m);;){if(v){var T=p+v.length;if(!h){var M=T>k?v.slice(0,k-p):v;t.addToken(t,M,l?l+a:a,c,p+M.length==m?u:"",f,s)}if(T>=k){v=v.slice(k-p),p=k;break}p=T,c=""}v=i.slice(o,o=r[g++]),l=st(r[g++],t.cm.options)}}else for(var N=1;N<r.length;N+=2)t.addToken(t,i.slice(o,o=r[N]),st(r[N+1],t.cm.options))}function gt(e,t,r){this.line=t,this.rest=de(t),this.size=this.rest?W(g(this.rest))-r+1:1,this.node=this.text=null,this.hidden=ve(e,t)}function vt(e,t,
 r){for(var n,i=[],o=t;o<r;o=n){var l=new gt(e.doc,M(e.doc,o),o);n=o+l.size,i.push(l)}return i}function mt(e){ys?ys.ops.push(e):e.ownsGroup=ys={ops:[e],delayedCallbacks:[]}}function yt(e){var t=e.delayedCallbacks,r=0;do{for(;r<t.length;r++)t[r].call(null);for(var n=0;n<e.ops.length;n++){var i=e.ops[n];if(i.cursorActivityHandlers)for(;i.cursorActivityCalled<i.cursorActivityHandlers.length;)i.cursorActivityHandlers[i.cursorActivityCalled++].call(null,i.cm)}}while(r<t.length)}function bt(e,t){var r=e.ownsGroup;if(r)try{yt(r)}finally{ys=null,t(r)}}function wt(e,t){var r=Le(e,t);if(r.length){var n,i=Array.prototype.slice.call(arguments,2);ys?n=ys.delayedCallbacks:bs?n=bs:(n=bs=[],setTimeout(xt,0));for(var o=0;o<r.length;++o)!function(e){n.push(function(){return r[e].apply(null,i)})}(o)}}function xt(){var e=bs;bs=null;for(var t=0;t<e.length;++t)e[t]()}function Ct(e,t,r,n){for(var i=0;i<t.changes.length;i++){var o=t.changes[i];"text"==o?Tt(e,t):"gutter"==o?Nt(e,t,r,n):"class"==o?Mt(e,t):"wi
 dget"==o&&Ot(e,t,n)}t.changes=null}function St(e){return e.node==e.text&&(e.node=n("div",null,null,"position: relative"),e.text.parentNode&&e.text.parentNode.replaceChild(e.node,e.text),e.node.appendChild(e.text),yl&&bl<8&&(e.node.style.zIndex=2)),e.node}function Lt(e,t){var r=t.bgClass?t.bgClass+" "+(t.line.bgClass||""):t.line.bgClass;if(r&&(r+=" CodeMirror-linebackground"),t.background)r?t.background.className=r:(t.background.parentNode.removeChild(t.background),t.background=null);else if(r){var i=St(t);t.background=i.insertBefore(n("div",null,r),i.firstChild),e.display.input.setUneditable(t.background)}}function kt(e,t){var r=e.display.externalMeasured;return r&&r.line==t.line?(e.display.externalMeasured=null,t.measure=r.measure,r.built):at(e,t)}function Tt(e,t){var r=t.text.className,n=kt(e,t);t.text==t.node&&(t.node=n.pre),t.text.parentNode.replaceChild(n.pre,t.text),t.text=n.pre,n.bgClass!=t.bgClass||n.textClass!=t.textClass?(t.bgClass=n.bgClass,t.textClass=n.textClass,Mt(e,t)
 ):r&&(t.text.className=r)}function Mt(e,t){Lt(e,t),t.line.wrapClass?St(t).className=t.line.wrapClass:t.node!=t.text&&(t.node.className="");var r=t.textClass?t.textClass+" "+(t.line.textClass||""):t.line.textClass;t.text.className=r||""}function Nt(e,t,r,i){if(t.gutter&&(t.node.removeChild(t.gutter),t.gutter=null),t.gutterBackground&&(t.node.removeChild(t.gutterBackground),t.gutterBackground=null),t.line.gutterClass){var o=St(t);t.gutterBackground=n("div",null,"CodeMirror-gutter-background "+t.line.gutterClass,"left: "+(e.options.fixedGutter?i.fixedPos:-i.gutterTotalWidth)+"px; width: "+i.gutterTotalWidth+"px"),e.display.input.setUneditable(t.gutterBackground),o.insertBefore(t.gutterBackground,t.text)}var l=t.line.gutterMarkers;if(e.options.lineNumbers||l){var s=St(t),a=t.gutter=n("div",null,"CodeMirror-gutter-wrapper","left: "+(e.options.fixedGutter?i.fixedPos:-i.gutterTotalWidth)+"px");if(e.display.input.setUneditable(a),s.insertBefore(a,t.text),t.line.gutterClass&&(a.className+=" 
 "+t.line.gutterClass),!e.options.lineNumbers||l&&l["CodeMirror-linenumbers"]||(t.lineNumber=a.appendChild(n("div",F(e.options,r),"CodeMirror-linenumber CodeMirror-gutter-elt","left: "+i.gutterLeft["CodeMirror-linenumbers"]+"px; width: "+e.display.lineNumInnerWidth+"px"))),l)for(var u=0;u<e.options.gutters.length;++u){var c=e.options.gutters[u],f=l.hasOwnProperty(c)&&l[c];f&&a.appendChild(n("div",[f],"CodeMirror-gutter-elt","left: "+i.gutterLeft[c]+"px; width: "+i.gutterWidth[c]+"px"))}}}function Ot(e,t,r){t.alignable&&(t.alignable=null);for(var n=t.node.firstChild,i=void 0;n;n=i)i=n.nextSibling,"CodeMirror-linewidget"==n.className&&t.node.removeChild(n);Wt(e,t,r)}function At(e,t,r,n){var i=kt(e,t);return t.text=t.node=i.pre,i.bgClass&&(t.bgClass=i.bgClass),i.textClass&&(t.textClass=i.textClass),Mt(e,t),Nt(e,t,r,n),Wt(e,t,n),t.node}function Wt(e,t,r){if(Dt(e,t.line,t,r,!0),t.rest)for(var n=0;n<t.rest.length;n++)Dt(e,t.rest[n],t,r,!1)}function Dt(e,t,r,i,o){if(t.widgets)for(var l=St(r
 ),s=0,a=t.widgets;s<a.length;++s){var u=a[s],c=n("div",[u.node],"CodeMirror-linewidget");u.handleMouseEvents||c.setAttribute("cm-ignore-events","true"),Ht(u,c,r,i),e.display.input.setUneditable(c),o&&u.above?l.insertBefore(c,r.gutter||r.text):l.appendChild(c),wt(u,"redraw")}}function Ht(e,t,r,n){if(e.noHScroll){(r.alignable||(r.alignable=[])).push(t);var i=n.wrapperWidth;t.style.left=n.fixedPos+"px",e.coverGutter||(i-=n.gutterTotalWidth,t.style.paddingLeft=n.gutterTotalWidth+"px"),t.style.width=i+"px"}e.coverGutter&&(t.style.zIndex=5,t.style.position="relative",e.noHScroll||(t.style.marginLeft=-n.gutterTotalWidth+"px"))}function Ft(e){if(null!=e.height)return e.height;var t=e.doc.cm;if(!t)return 0;if(!o(document.body,e.node)){var i="position: relative;";e.coverGutter&&(i+="margin-left: -"+t.display.gutters.offsetWidth+"px;"),e.noHScroll&&(i+="width: "+t.display.wrapper.clientWidth+"px;"),r(t.display.measure,n("div",[e.node],null,i))}return e.height=e.node.parentNode.offsetHeight}fun
 ction Pt(e,t){for(var r=Pe(t);r!=e.wrapper;r=r.parentNode)if(!r||1==r.nodeType&&"true"==r.getAttribute("cm-ignore-events")||r.parentNode==e.sizer&&r!=e.mover)return!0}function Et(e){return e.lineSpace.offsetTop}function zt(e){return e.mover.offsetHeight-e.lineSpace.offsetHeight}function It(e){if(e.cachedPaddingH)return e.cachedPaddingH;var t=r(e.measure,n("pre","x")),i=window.getComputedStyle?window.getComputedStyle(t):t.currentStyle,o={left:parseInt(i.paddingLeft),right:parseInt(i.paddingRight)};return isNaN(o.left)||isNaN(o.right)||(e.cachedPaddingH=o),o}function Rt(e){return Ul-e.display.nativeBarWidth}function Bt(e){return e.display.scroller.clientWidth-Rt(e)-e.display.barWidth}function Gt(e){return e.display.scroller.clientHeight-Rt(e)-e.display.barHeight}function Ut(e,t,r){var n=e.options.lineWrapping,i=n&&Bt(e);if(!t.measure.heights||n&&t.measure.width!=i){var o=t.measure.heights=[];if(n){t.measure.width=i;for(var l=t.text.firstChild.getClientRects(),s=0;s<l.length-1;s++){var
  a=l[s],u=l[s+1];Math.abs(a.bottom-u.bottom)>2&&o.push((a.bottom+u.top)/2-r.top)}}o.push(r.bottom-r.top)}}function Vt(e,t,r){if(e.line==t)return{map:e.measure.map,cache:e.measure.cache};for(var n=0;n<e.rest.length;n++)if(e.rest[n]==t)return{map:e.measure.maps[n],cache:e.measure.caches[n]};for(var i=0;i<e.rest.length;i++)if(W(e.rest[i])>r)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}function Kt(e,t){t=fe(t);var n=W(t),i=e.display.externalMeasured=new gt(e.doc,t,n);i.lineN=n;var o=i.built=at(e,i);return i.text=o.pre,r(e.display.lineMeasure,o.pre),i}function jt(e,t,r,n){return _t(e,Yt(e,t),r,n)}function Xt(e,t){if(t>=e.display.viewFrom&&t<e.display.viewTo)return e.display.view[kr(e,t)];var r=e.display.externalMeasured;return r&&t>=r.lineN&&t<r.lineN+r.size?r:void 0}function Yt(e,t){var r=W(t),n=Xt(e,r);n&&!n.text?n=null:n&&n.changes&&(Ct(e,n,r,wr(e)),e.curOp.forceUpdate=!0),n||(n=Kt(e,t));var i=Vt(n,t,r);return{line:t,view:n,rect:null,map:i.map,cache:i.cache,before
 :i.before,hasHeights:!1}}function _t(e,t,r,n,i){t.before&&(r=-1);var o,l=r+(n||"");return t.cache.hasOwnProperty(l)?o=t.cache[l]:(t.rect||(t.rect=t.view.text.getBoundingClientRect()),t.hasHeights||(Ut(e,t.view,t.rect),t.hasHeights=!0),o=Zt(e,t,r,n),o.bogus||(t.cache[l]=o)),{left:o.left,right:o.right,top:i?o.rtop:o.top,bottom:i?o.rbottom:o.bottom}}function qt(e,t,r){for(var n,i,o,l,s,a,u=0;u<e.length;u+=3)if(s=e[u],a=e[u+1],t<s?(i=0,o=1,l="left"):t<a?(i=t-s,o=i+1):(u==e.length-3||t==a&&e[u+3]>t)&&(o=a-s,i=o-1,t>=a&&(l="right")),null!=i){if(n=e[u+2],s==a&&r==(n.insertLeft?"left":"right")&&(l=r),"left"==r&&0==i)for(;u&&e[u-2]==e[u-3]&&e[u-1].insertLeft;)n=e[2+(u-=3)],l="left";if("right"==r&&i==a-s)for(;u<e.length-3&&e[u+3]==e[u+4]&&!e[u+5].insertLeft;)n=e[(u+=3)+2],l="right";break}return{node:n,start:i,end:o,collapse:l,coverStart:s,coverEnd:a}}function $t(e,t){var r=ws;if("left"==t)for(var n=0;n<e.length&&(r=e[n]).left==r.right;n++);else for(var i=e.length-1;i>=0&&(r=e[i]).left==r.righ
 t;i--);return r}function Zt(e,t,r,n){var i,o=qt(t.map,r,n),l=o.node,s=o.start,a=o.end,u=o.collapse
-;if(3==l.nodeType){for(var c=0;c<4;c++){for(;s&&S(t.line.text.charAt(o.coverStart+s));)--s;for(;o.coverStart+a<o.coverEnd&&S(t.line.text.charAt(o.coverStart+a));)++a;if(i=yl&&bl<9&&0==s&&a==o.coverEnd-o.coverStart?l.parentNode.getBoundingClientRect():$t(Fl(l,s,a).getClientRects(),n),i.left||i.right||0==s)break;a=s,s-=1,u="right"}yl&&bl<11&&(i=Qt(e.display.measure,i))}else{s>0&&(u=n="right");var f;i=e.options.lineWrapping&&(f=l.getClientRects()).length>1?f["right"==n?f.length-1:0]:l.getBoundingClientRect()}if(yl&&bl<9&&!s&&(!i||!i.left&&!i.right)){var h=l.parentNode.getClientRects()[0];i=h?{left:h.left,right:h.left+br(e.display),top:h.top,bottom:h.bottom}:ws}for(var d=i.top-t.rect.top,p=i.bottom-t.rect.top,g=(d+p)/2,v=t.view.measure.heights,m=0;m<v.length-1&&!(g<v[m]);m++);var y=m?v[m-1]:0,b=v[m],w={left:("right"==u?i.right:i.left)-t.rect.left,right:("left"==u?i.left:i.right)-t.rect.left,top:y,bottom:b};return i.left||i.right||(w.bogus=!0),e.options.singleCursorHeightPerLine||(w.rtop
 =d,w.rbottom=p),w}function Qt(e,t){if(!window.screen||null==screen.logicalXDPI||screen.logicalXDPI==screen.deviceXDPI||!Re(e))return t;var r=screen.logicalXDPI/screen.deviceXDPI,n=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*r,right:t.right*r,top:t.top*n,bottom:t.bottom*n}}function Jt(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t<e.rest.length;t++)e.measure.caches[t]={}}function er(e){e.display.externalMeasure=null,t(e.display.lineMeasure);for(var r=0;r<e.display.view.length;r++)Jt(e.display.view[r])}function tr(e){er(e),e.display.cachedCharWidth=e.display.cachedTextHeight=e.display.cachedPaddingH=null,e.options.lineWrapping||(e.display.maxLineChanged=!0),e.display.lineNumChars=null}function rr(){return Cl&&Nl?-(document.body.getBoundingClientRect().left-parseInt(getComputedStyle(document.body).marginLeft)):window.pageXOffset||(document.documentElement||document.body).scrollLeft}function nr(){return Cl&&Nl?-(document.body.getBoundingCli
 entRect().top-parseInt(getComputedStyle(document.body).marginTop)):window.pageYOffset||(document.documentElement||document.body).scrollTop}function ir(e){var t=0;if(e.widgets)for(var r=0;r<e.widgets.length;++r)e.widgets[r].above&&(t+=Ft(e.widgets[r]));return t}function or(e,t,r,n,i){if(!i){var o=ir(t);r.top+=o,r.bottom+=o}if("line"==n)return r;n||(n="local");var l=ye(t);if("local"==n?l+=Et(e.display):l-=e.display.viewOffset,"page"==n||"window"==n){var s=e.display.lineSpace.getBoundingClientRect();l+=s.top+("window"==n?0:nr());var a=s.left+("window"==n?0:rr());r.left+=a,r.right+=a}return r.top+=l,r.bottom+=l,r}function lr(e,t,r){if("div"==r)return t;var n=t.left,i=t.top;if("page"==r)n-=rr(),i-=nr();else if("local"==r||!r){var o=e.display.sizer.getBoundingClientRect();n+=o.left,i+=o.top}var l=e.display.lineSpace.getBoundingClientRect();return{left:n-l.left,top:i-l.top}}function sr(e,t,r,n,i){return n||(n=M(e.doc,t.line)),or(e,n,jt(e,n,t.ch,i),r)}function ar(e,t,r,n,i,o){function l(t,l
 ){var s=_t(e,i,t,l?"right":"left",o);return l?s.left=s.right:s.right=s.left,or(e,n,s,r)}function s(e,t,r){var n=a[t],i=1==n.level;return l(r?e-1:e,i!=r)}n=n||M(e.doc,t.line),i||(i=Yt(e,n));var a=Se(n,e.doc.direction),u=t.ch,c=t.sticky;if(u>=n.text.length?(u=n.text.length,c="before"):u<=0&&(u=0,c="after"),!a)return l("before"==c?u-1:u,"before"==c);var f=Ce(a,u,c),h=Ql,d=s(u,f,"before"==c);return null!=h&&(d.other=s(u,h,"before"!=c)),d}function ur(e,t){var r=0;t=U(e.doc,t),e.options.lineWrapping||(r=br(e.display)*t.ch);var n=M(e.doc,t.line),i=ye(n)+Et(e.display);return{left:r,right:r,top:i,bottom:i+n.height}}function cr(e,t,r,n,i){var o=P(e,t,r);return o.xRel=i,n&&(o.outside=!0),o}function fr(e,t,r){var n=e.doc;if((r+=e.display.viewOffset)<0)return cr(n.first,0,null,!0,-1);var i=D(n,r),o=n.first+n.size-1;if(i>o)return cr(n.first+n.size-1,M(n,o).text.length,null,!0,1);t<0&&(t=0);for(var l=M(n,i);;){var s=gr(e,l,i,t,r),a=ue(l),u=a&&a.find(0,!0);if(!a||!(s.ch>u.from.ch||s.ch==u.from.ch&&
 s.xRel>0))return s;i=W(l=u.to.line)}}function hr(e,t,r,n){n-=ir(t);var i=t.text.length,o=k(function(t){return _t(e,r,t-1).bottom<=n},i,0);return i=k(function(t){return _t(e,r,t).top>n},o,i),{begin:o,end:i}}function dr(e,t,r,n){return r||(r=Yt(e,t)),hr(e,t,r,or(e,t,_t(e,r,n),"line").top)}function pr(e,t,r,n){return!(e.bottom<=r)&&(e.top>r||(n?e.left:e.right)>t)}function gr(e,t,r,n,i){i-=ye(t);var o=Yt(e,t),l=ir(t),s=0,a=t.text.length,u=!0,c=Se(t,e.doc.direction);if(c){var f=(e.options.lineWrapping?mr:vr)(e,t,r,o,c,n,i);u=1!=f.level,s=u?f.from:f.to-1,a=u?f.to:f.from-1}var h,d,p=null,g=null,v=k(function(t){var r=_t(e,o,t);return r.top+=l,r.bottom+=l,!!pr(r,n,i,!1)&&(r.top<=i&&r.left<=n&&(p=t,g=r),!0)},s,a),m=!1;if(g){var y=n-g.left<g.right-n,b=y==u;v=p+(b?0:1),d=b?"after":"before",h=y?g.left:g.right}else{u||v!=a&&v!=s||v++,d=0==v?"after":v==t.text.length?"before":_t(e,o,v-(u?1:0)).bottom+l<=i==u?"after":"before";var w=ar(e,P(r,v,d),"line",t,o);h=w.left,m=i<w.top||i>=w.bottom}return v=L
 (t.text,v,1),cr(r,v,d,m,n-h)}function vr(e,t,r,n,i,o,l){var s=k(function(s){var a=i[s],u=1!=a.level;return pr(ar(e,P(r,u?a.to:a.from,u?"before":"after"),"line",t,n),o,l,!0)},0,i.length-1),a=i[s];if(s>0){var u=1!=a.level,c=ar(e,P(r,u?a.from:a.to,u?"after":"before"),"line",t,n);pr(c,o,l,!0)&&c.top>l&&(a=i[s-1])}return a}function mr(e,t,r,n,i,o,l){var s=hr(e,t,n,l),a=s.begin,u=s.end;/\s/.test(t.text.charAt(u-1))&&u--;for(var c=null,f=null,h=0;h<i.length;h++){var d=i[h];if(!(d.from>=u||d.to<=a)){var p=1!=d.level,g=_t(e,n,p?Math.min(u,d.to)-1:Math.max(a,d.from)).right,v=g<o?o-g+1e9:g-o;(!c||f>v)&&(c=d,f=v)}}return c||(c=i[i.length-1]),c.from<a&&(c={from:a,to:c.to,level:c.level}),c.to>u&&(c={from:c.from,to:u,level:c.level}),c}function yr(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==gs){gs=n("pre");for(var i=0;i<49;++i)gs.appendChild(document.createTextNode("x")),gs.appendChild(n("br"));gs.appendChild(document.createTextNode("x"))}r(e.measure,gs);var o=gs.offsetHeight/
 50;return o>3&&(e.cachedTextHeight=o),t(e.measure),o||1}function br(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=n("span","xxxxxxxxxx"),i=n("pre",[t]);r(e.measure,i);var o=t.getBoundingClientRect(),l=(o.right-o.left)/10;return l>2&&(e.cachedCharWidth=l),l||10}function wr(e){for(var t=e.display,r={},n={},i=t.gutters.clientLeft,o=t.gutters.firstChild,l=0;o;o=o.nextSibling,++l)r[e.options.gutters[l]]=o.offsetLeft+o.clientLeft+i,n[e.options.gutters[l]]=o.clientWidth;return{fixedPos:xr(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:r,gutterWidth:n,wrapperWidth:t.wrapper.clientWidth}}function xr(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function Cr(e){var t=yr(e.display),r=e.options.lineWrapping,n=r&&Math.max(5,e.display.scroller.clientWidth/br(e.display)-3);return function(i){if(ve(e.doc,i))return 0;var o=0;if(i.widgets)for(var l=0;l<i.widgets.length;l++)i.widgets[l].height&&(o+=i.widgets[l].height);return r?o+(Math.ceil(
 i.text.length/n)||1)*t:o+t}}function Sr(e){var t=e.doc,r=Cr(e);t.iter(function(e){var t=r(e);t!=e.height&&A(e,t)})}function Lr(e,t,r,n){var i=e.display;if(!r&&"true"==Pe(t).getAttribute("cm-not-content"))return null;var o,l,s=i.lineSpace.getBoundingClientRect();try{o=t.clientX-s.left,l=t.clientY-s.top}catch(t){return null}var a,u=fr(e,o,l);if(n&&1==u.xRel&&(a=M(e.doc,u.line).text).length==u.ch){var c=f(a,a.length,e.options.tabSize)-a.length;u=P(u.line,Math.max(0,Math.round((o-It(e.display).left)/br(e.display))-c))}return u}function kr(e,t){if(t>=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var r=e.display.view,n=0;n<r.length;n++)if((t-=r[n].size)<0)return n}function Tr(e){e.display.input.showSelection(e.display.input.prepareSelection())}function Mr(e,t){void 0===t&&(t=!0);for(var r=e.doc,n={},i=n.cursors=document.createDocumentFragment(),o=n.selection=document.createDocumentFragment(),l=0;l<r.sel.ranges.length;l++)if(t||l!=r.sel.primIndex){var s=r.sel.ra
 nges[l];if(!(s.from().line>=e.display.viewTo||s.to().line<e.display.viewFrom)){var a=s.empty();(a||e.options.showCursorWhenSelecting)&&Nr(e,s.head,i),a||Ar(e,s,o)}}return n}function Nr(e,t,r){var i=ar(e,t,"div",null,null,!e.options.singleCursorHeightPerLine),o=r.appendChild(n("div"," ","CodeMirror-cursor"));if(o.style.left=i.left+"px",o.style.top=i.top+"px",o.style.height=Math.max(0,i.bottom-i.top)*e.options.cursorHeight+"px",i.other){var l=r.appendChild(n("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"));l.style.display="",l.style.left=i.other.left+"px",l.style.top=i.other.top+"px",l.style.height=.85*(i.other.bottom-i.other.top)+"px"}}function Or(e,t){return e.top-t.top||e.left-t.left}function Ar(e,t,r){function i(e,t,r,i){t<0&&(t=0),t=Math.round(t),i=Math.round(i),a.appendChild(n("div",null,"CodeMirror-selected","position: absolute; left: "+e+"px;\n                             top: "+t+"px; width: "+(null==r?f-e:r)+"px;\n                             height: "+(i-t)+"px"
 ))}function o(t,r,n){function o(r,n){return sr(e,P(t,r),"div",d,n)}function l(t,r,n){var i=dr(e,d,null,t),l="ltr"==r==("after"==n)?"left":"right";return o("after"==n?i.begin:i.end-(/\s/.test(d.text.charAt(i.end-1))?2:1),l)[l]}var a,u,d=M(s,t),p=d.text.length,g=Se(d,s.direction);return xe(g,r||0,null==n?p:n,function(e,t,s,d){var v="ltr"==s,m=o(e,v?"left":"right"),y=o(t-1,v?"right":"left"),b=null==r&&0==e,w=null==n&&t==p,x=0==d,C=!g||d==g.length-1;if(y.top-m.top<=3){var S=(h?b:w)&&x,L=(h?w:b)&&C,k=S?c:(v?m:y).left,T=L?f:(v?y:m).right;i(k,m.top,T-k,m.bottom)}else{var M,N,O,A;v?(M=h&&b&&x?c:m.left,N=h?f:l(e,s,"before"),O=h?c:l(t,s,"after"),A=h&&w&&C?f:y.right):(M=h?l(e,s,"before"):c,N=!h&&b&&x?f:m.right,O=!h&&w&&C?c:y.left,A=h?l(t,s,"after"):f),i(M,m.top,N-M,m.bottom),m.bottom<y.top&&i(c,m.bottom,null,y.top),i(O,y.top,A-O,y.bottom)}(!a||Or(m,a)<0)&&(a=m),Or(y,a)<0&&(a=y),(!u||Or(m,u)<0)&&(u=m),Or(y,u)<0&&(u=y)}),{start:a,end:u}}var l=e.display,s=e.doc,a=document.createDocumentFragment()
 ,u=It(e.display),c=u.left,f=Math.max(l.sizerWidth,Bt(e)-l.sizer.offsetLeft)-u.right,h="ltr"==s.direction,d=t.from(),p=t.to();if(d.line==p.line)o(d.line,d.ch,p.ch);else{var g=M(s,d.line),v=M(s,p.line),m=fe(g)==fe(v),y=o(d.line,d.ch,m?g.text.length+1:null).end,b=o(p.line,m?0:null,p.ch).start;m&&(y.top<b.top-2?(i(y.right,y.top,null,y.bottom),i(c,b.top,b.left,b.bottom)):i(y.right,y.top,b.left-y.right,y.bottom)),y.bottom<b.top&&i(c,y.bottom,null,b.top)}r.appendChild(a)}function Wr(e){if(e.state.focused){var t=e.display;clearInterval(t.blinker);var r=!0;t.cursorDiv.style.visibility="",e.options.cursorBlinkRate>0?t.blinker=setInterval(function(){return t.cursorDiv.style.visibility=(r=!r)?"":"hidden"},e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function Dr(e){e.state.focused||(e.display.input.focus(),Fr(e))}function Hr(e){e.state.delayingBlurEvent=!0,setTimeout(function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,Pr(e))},10
 0)}function Fr(e,t){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1),"nocursor"!=e.options.readOnly&&(e.state.focused||(Te(e,"focus",e,t),e.state.focused=!0,s(e.display.wrapper,"CodeMirror-focused"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),wl&&setTimeout(function(){return e.display.input.reset(!0)},20)),e.display.input.receivedFocus()),Wr(e))}function Pr(e,t){e.state.delayingBlurEvent||(e.state.focused&&(Te(e,"blur",e,t),e.state.focused=!1,zl(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout(function(){e.state.focused||(e.display.shift=!1)},150))}function Er(e){for(var t=e.display,r=t.lineDiv.offsetTop,n=0;n<t.view.length;n++){var i=t.view[n],o=void 0;if(!i.hidden){if(yl&&bl<8){var l=i.node.offsetTop+i.node.offsetHeight;o=l-r,r=l}else{var s=i.node.getBoundingClientRect();o=s.bottom-s.top}var a=i.line.height-o;if(o<2&&(o=yr(t)),(a>.005||a<-.005)&&(A(i.line,o),zr(i.line),i.rest))for(var u=0;u<i.rest.length;u+
 +)zr(i.rest[u])}}}function zr(e){if(e.widgets)for(var t=0;t<e.widgets.length;++t){var r=e.widgets[t],n=r.node.parentNode;n&&(r.height=n.offsetHeight)}}function Ir(e,t,r){var n=r&&null!=r.top?Math.max(0,r.top):e.scroller.scrollTop;n=Math.floor(n-Et(e));var i=r&&null!=r.bottom?r.bottom:n+e.wrapper.clientHeight,o=D(t,n),l=D(t,i);if(r&&r.ensure){var s=r.ensure.from.line,a=r.ensure.to.line;s<o?(o=s,l=D(t,ye(M(t,s))+e.wrapper.clientHeight)):Math.min(a,t.lastLine())>=l&&(o=D(t,ye(M(t,a))-e.wrapper.clientHeight),l=a)}return{from:o,to:Math.max(l,o+1)}}function Rr(e){var t=e.display,r=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var n=xr(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,o=n+"px",l=0;l<r.length;l++)if(!r[l].hidden){e.options.fixedGutter&&(r[l].gutter&&(r[l].gutter.style.left=o),r[l].gutterBackground&&(r[l].gutterBackground.style.left=o));var s=r[l].alignable;if(s)for(var a=0;a<s.length;a++)s[a].style.left=o}e.options.fixedGutter&&(
 t.gutters.style.left=n+i+"px")}}function Br(e){if(!e.options.lineNumbers)return!1;var t=e.doc,r=F(e.options,t.first+t.size-1),i=e.display;if(r.length!=i.lineNumChars){var o=i.measure.appendChild(n("div",[n("div",r)],"CodeMirror-linenumber CodeMirror-gutter-elt")),l=o.firstChild.offsetWidth,s=o.offsetWidth-l;return i.lineGutter.style.width="",i.lineNumInnerWidth=Math.max(l,i.lineGutter.offsetWidth-s)+1,i.lineNumWidth=i.lineNumInnerWidth+s,i.lineNumChars=i.lineNumInnerWidth?r.length:-1,i.lineGutter.style.width=i.lineNumWidth+"px",Dn(e),!0}return!1}function Gr(e,t){if(!Me(e,"scrollCursorIntoView")){var r=e.display,i=r.sizer.getBoundingClientRect(),o=null;if(t.top+i.top<0?o=!0:t.bottom+i.top>(window.innerHeight||document.documentElement.clientHeight)&&(o=!1),null!=o&&!Tl){var l=n("div","​",null,"position: absolute;\n                         top: "+(t.top-r.viewOffset-Et(e.display))+"px;\n                         height: "+(t.bottom-t.top+Rt(e)+r.barHeight)+"px;\n                      
    left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;");e.display.lineSpace.appendChild(l),l.scrollIntoView(o),e.display.lineSpace.removeChild(l)}}}function Ur(e,t,r,n){null==n&&(n=0);var i;e.options.lineWrapping||t!=r||(t=t.ch?P(t.line,"before"==t.sticky?t.ch-1:t.ch,"after"):t,r="before"==t.sticky?P(t.line,t.ch+1,"before"):t);for(var o=0;o<5;o++){var l=!1,s=ar(e,t),a=r&&r!=t?ar(e,r):s;i={left:Math.min(s.left,a.left),top:Math.min(s.top,a.top)-n,right:Math.max(s.left,a.left),bottom:Math.max(s.bottom,a.bottom)+n};var u=Kr(e,i),c=e.doc.scrollTop,f=e.doc.scrollLeft;if(null!=u.scrollTop&&(Zr(e,u.scrollTop),Math.abs(e.doc.scrollTop-c)>1&&(l=!0)),null!=u.scrollLeft&&(Jr(e,u.scrollLeft),Math.abs(e.doc.scrollLeft-f)>1&&(l=!0)),!l)break}return i}function Vr(e,t){var r=Kr(e,t);null!=r.scrollTop&&Zr(e,r.scrollTop),null!=r.scrollLeft&&Jr(e,r.scrollLeft)}function Kr(e,t){var r=e.display,n=yr(e.display);t.top<0&&(t.top=0);var i=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:r.scrolle
 r.scrollTop,o=Gt(e),l={};t.bottom-t.top>o&&(t.bottom=t.top+o);var s=e.doc.height+zt(r),a=t.top<n,u=t.bottom>s-n;if(t.top<i)l.scrollTop=a?0:t.top;else if(t.bottom>i+o){var c=Math.min(t.top,(u?s:t.bottom)-o);c!=i&&(l.scrollTop=c)}var f=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:r.scroller.scrollLeft,h=Bt(e)-(e.options.fixedGutter?r.gutters.offsetWidth:0),d=t.right-t.left>h;return d&&(t.right=t.left+h),t.left<10?l.scrollLeft=0:t.left<f?l.scrollLeft=Math.max(0,t.left-(d?0:10)):t.right>h+f-3&&(l.scrollLeft=t.right+(d?0:10)-h),l}function jr(e,t){null!=t&&(qr(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+t)}function Xr(e){qr(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function Yr(e,t,r){null==t&&null==r||qr(e),null!=t&&(e.curOp.scrollLeft=t),null!=r&&(e.curOp.scrollTop=r)}function _r(e,t){qr(e),e.curOp.scrollToPos=t}function qr(e){var t=e.curOp.scrollToPos;if(t){e.curOp.scrollToPos=null;$r(e,ur(e,
 t.from),ur(e,t.to),t.margin)}}function $r(e,t,r,n){var i=Kr(e,{left:Math.min(t.left,r.left),top:Math.min(t.top,r.top)-n,right:Math.max(t.right,r.right),bottom:Math.max(t.bottom,r.bottom)+n});Yr(e,i.scrollLeft,i.scrollTop)}function Zr(e,t){Math.abs(e.doc.scrollTop-t)<2||(pl||An(e,{top:t}),Qr(e,t,!0),pl&&An(e),Sn(e,100))}function Qr(e,t,r){t=Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t),(e.display.scroller.scrollTop!=t||r)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function Jr(e,t,r,n){t=Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth),(r?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!n||(e.doc.scrollLeft=t,Rr(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function en(e){var t=e.display,r=t.gutters.offsetWidth,n=Math.round(e.doc.height+zt(e.display));return{clientHeight:t.scroller.c
 lientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?r:0,docHeight:n,scrollHeight:n+Rt(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:r}}function tn(e,t){t||(t=en(e));var r=e.display.barWidth,n=e.display.barHeight;rn(e,t);for(var i=0;i<4&&r!=e.display.barWidth||n!=e.display.barHeight;i++)r!=e.display.barWidth&&e.options.lineWrapping&&Er(e),rn(e,en(e)),r=e.display.barWidth,n=e.display.barHeight}function rn(e,t){var r=e.display,n=r.scrollbars.update(t);r.sizer.style.paddingRight=(r.barWidth=n.right)+"px",r.sizer.style.paddingBottom=(r.barHeight=n.bottom)+"px",r.heightForcer.style.borderBottom=n.bottom+"px solid transparent",n.right&&n.bottom?(r.scrollbarFiller.style.display="block",r.scrollbarFiller.style.height=n.bottom+"px",r.scrollbarFiller.style.width=n.right+"px"):r.scrollbarFiller.style.display="",n.bottom&&e.options.coverGutterNextToScrollbar&
 &e.options.fixedGutter?(r.gutterFiller.style.display="block",r.gutterFiller.style.height=n.bottom+"px",r.gutterFiller.style.width=t.gutterWidth+"px"):r.gutterFiller.style.display=""}function nn(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&zl(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new Ss[e.options.scrollbarStyle](function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),ts(t,"mousedown",function(){e.state.focused&&setTimeout(function(){return e.display.input.focus()},0)}),t.setAttribute("cm-not-content","true")},function(t,r){"horizontal"==r?Jr(e,t):Zr(e,t)},e),e.display.scrollbars.addClass&&s(e.display.wrapper,e.display.scrollbars.addClass)}function on(e){e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:null,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:nul
 l,focus:!1,id:++Ls},mt(e.curOp)}function ln(e){bt(e.curOp,function(e){for(var t=0;t<e.ops.length;t++)e.ops[t].cm.curOp=null;sn(e)})}function sn(e){for(var t=e.ops,r=0;r<t.length;r++)an(t[r]);for(var n=0;n<t.length;n++)un(t[n]);for(var i=0;i<t.length;i++)cn(t[i]);for(var o=0;o<t.length;o++)fn(t[o]);for(var l=0;l<t.length;l++)hn(t[l])}function an(e){var t=e.cm,r=t.display;kn(t),e.updateMaxLine&&we(t),e.mustUpdate=e.viewChanged||e.forceUpdate||null!=e.scrollTop||e.scrollToPos&&(e.scrollToPos.from.line<r.viewFrom||e.scrollToPos.to.line>=r.viewTo)||r.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new ks(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function un(e){e.updatedDisplay=e.mustUpdate&&Nn(e.cm,e.update)}function cn(e){var t=e.cm,r=t.display;e.updatedDisplay&&Er(t),e.barMeasure=en(t),r.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=jt(t,r.maxLine,r.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scroll
 Width=Math.max(r.scroller.clientWidth,r.sizer.offsetLeft+e.adjustWidthTo+Rt(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,r.sizer.offsetLeft+e.adjustWidthTo-Bt(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=r.input.prepareSelection())}function fn(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft<t.doc.scrollLeft&&Jr(t,Math.min(t.display.scroller.scrollLeft,e.maxScrollLeft),!0),t.display.maxLineChanged=!1);var r=e.focus&&e.focus==l();e.preparedSelection&&t.display.input.showSelection(e.preparedSelection,r),(e.updatedDisplay||e.startHeight!=t.doc.height)&&tn(t,e.barMeasure),e.updatedDisplay&&Hn(t,e.barMeasure),e.selectionChanged&&Wr(t),t.state.focused&&e.updateInput&&t.display.input.reset(e.typing),r&&Dr(e.cm)}function hn(e){var t=e.cm,r=t.display,n=t.doc;if(e.updatedDisplay&&On(t,e.update),null==r.wheelStartX||null==e.scrollTop&&null==e.scrollLeft&&!e.scrollToPos||(r.wheelStartX=r.wheelStartY=null),null!=e
 .scrollTop&&Qr(t,e.scrollTop,e.forceScroll),null!=e.scrollLeft&&Jr(t,e.scrollLeft,!0,!0),e.scrollToPos){Gr(t,Ur(t,U(n,e.scrollToPos.from),U(n,e.scrollToPos.to),e.scrollToPos.margin))}var i=e.maybeHiddenMarkers,o=e.maybeUnhiddenMarkers;if(i)for(var l=0;l<i.length;++l)i[l].lines.length||Te(i[l],"hide");if(o)for(var s=0;s<o.length;++s)o[s].lines.length&&Te(o[s],"unhide");r.wrapper.offsetHeight&&(n.scrollTop=t.display.scroller.scrollTop),e.changeObjs&&Te(t,"changes",t,e.changeObjs),e.update&&e.update.finish()}function dn(e,t){if(e.curOp)return t();on(e);try{return t()}finally{ln(e)}}function pn(e,t){return function(){if(e.curOp)return t.apply(e,arguments);on(e);try{return t.apply(e,arguments)}finally{ln(e)}}}function gn(e){return function(){if(this.curOp)return e.apply(this,arguments);on(this);try{return e.apply(this,arguments)}finally{ln(this)}}}function vn(e){return function(){var t=this.cm;if(!t||t.curOp)return e.apply(this,arguments);on(t);try{return e.apply(this,arguments)}finally{
 ln(t)}}}function mn(e,t,r,n){null==t&&(t=e.doc.first),null==r&&(r=e.doc.first+e.doc.size),n||(n=0);var i=e.display;if(n&&r<i.viewTo&&(null==i.updateLineNumbers||i.updateLineNumbers>t)&&(i.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=i.viewTo)Zl&&pe(e.doc,t)<i.viewTo&&bn(e);else if(r<=i.viewFrom)Zl&&ge(e.doc,r+n)>i.viewFrom?bn(e):(i.viewFrom+=n,i.viewTo+=n);else if(t<=i.viewFrom&&r>=i.viewTo)bn(e);else if(t<=i.viewFrom){var o=wn(e,r,r+n,1);o?(i.view=i.view.slice(o.index),i.viewFrom=o.lineN,i.viewTo+=n):bn(e)}else if(r>=i.viewTo){var l=wn(e,t,t,-1);l?(i.view=i.view.slice(0,l.index),i.viewTo=l.lineN):bn(e)}else{var s=wn(e,t,t,-1),a=wn(e,r,r+n,1);s&&a?(i.view=i.view.slice(0,s.index).concat(vt(e,s.lineN,a.lineN)).concat(i.view.slice(a.index)),i.viewTo+=n):bn(e)}var u=i.externalMeasured;u&&(r<u.lineN?u.lineN+=n:t<u.lineN+u.size&&(i.externalMeasured=null))}function yn(e,t,r){e.curOp.viewChanged=!0;var n=e.display,i=e.display.externalMeasured;if(i&&t>=i.lineN&&t<i.lineN+i.size&&(n.externa
 lMeasured=null),!(t<n.viewFrom||t>=n.viewTo)){var o=n.view[kr(e,t)];if(null!=o.node){var l=o.changes||(o.changes=[]);-1==h(l,r)&&l.push(r)}}}function bn(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function wn(e,t,r,n){var i,o=kr(e,t),l=e.display.view;if(!Zl||r==e.doc.first+e.doc.size)return{index:o,lineN:r};for(var s=e.display.viewFrom,a=0;a<o;a++)s+=l[a].size;if(s!=t){if(n>0){if(o==l.length-1)return null;i=s+l[o].size-t,o++}else i=s-t;t+=i,r+=i}for(;pe(e.doc,r)!=r;){if(o==(n<0?0:l.length-1))return null;r+=n*l[o-(n<0?1:0)].size,o+=n}return{index:o,lineN:r}}function xn(e,t,r){var n=e.display;0==n.view.length||t>=n.viewTo||r<=n.viewFrom?(n.view=vt(e,t,r),n.viewFrom=t):(n.viewFrom>t?n.view=vt(e,t,n.viewFrom).concat(n.view):n.viewFrom<t&&(n.view=n.view.slice(kr(e,t))),n.viewFrom=t,n.viewTo<r?n.view=n.view.concat(vt(e,n.viewTo,r)):n.viewTo>r&&(n.view=n.view.slice(0,kr(e,r)))),n.viewTo=r}function Cn(e){for(var t=e.display.view,r=0,n=0;n<t.le
 ngth;n++){var i=t[n];i.hidden||i.node&&!i.changes||++r}return r}function Sn(e,t){e.doc.highlightFrontier<e.display.viewTo&&e.state.highlight.set(t,u(Ln,e))}function Ln(e){var t=e.doc;if(!(t.highlightFrontier>=e.display.viewTo)){var r=+new Date+e.options.workTime,n=$e(e,t.highlightFrontier),i=[];t.iter(n.line,Math.min(t.first+t.size,e.display.viewTo+500),function(o){if(n.line>=e.display.viewFrom){var l=o.styles,s=o.text.length>e.options.maxHighlightLength?je(t.mode,n.state):null,a=_e(e,o,n,!0);s&&(n.state=s),o.styles=a.styles;var u=o.styleClasses,c=a.classes;c?o.styleClasses=c:u&&(o.styleClasses=null);for(var f=!l||l.length!=o.styles.length||u!=c&&(!u||!c||u.bgClass!=c.bgClass||u.textClass!=c.textClass),h=0;!f&&h<l.length;++h)f=l[h]!=o.styles[h];f&&i.push(n.line),o.stateAfter=n.save(),n.nextLine()}else o.text.length<=e.options.maxHighlightLength&&Ze(e,o.text,n),o.stateAfter=n.line%5==0?n.save():null,n.nextLine();if(+new Date>r)return Sn(e,e.options.workDelay),!0}),t.highlightFrontier
 =n.line,t.modeFrontier=Math.max(t.modeFrontier,n.line),i.length&&dn(e,function(){for(var t=0;t<i.length;t++)yn(e,i[t],"text")})}}function kn(e){var t=e.display;!t.scrollbarsClipped&&t.scroller.offsetWidth&&(t.nativeBarWidth=t.scroller.offsetWidth-t.scroller.clientWidth,t.heightForcer.style.height=Rt(e)+"px",t.sizer.style.marginBottom=-t.nativeBarWidth+"px",t.sizer.style.borderRightWidth=Rt(e)+"px",t.scrollbarsClipped=!0)}function Tn(e){if(e.hasFocus())return null;var t=l();if(!t||!o(e.display.lineDiv,t))return null;var r={activeElt:t};if(window.getSelection){var n=window.getSelection();n.anchorNode&&n.extend&&o(e.display.lineDiv,n.anchorNode)&&(r.anchorNode=n.anchorNode,r.anchorOffset=n.anchorOffset,r.focusNode=n.focusNode,r.focusOffset=n.focusOffset)}return r}function Mn(e){if(e&&e.activeElt&&e.activeElt!=l()&&(e.activeElt.focus(),e.anchorNode&&o(document.body,e.anchorNode)&&o(document.body,e.focusNode))){var t=window.getSelection(),r=document.createRange();r.setEnd(e.anchorNode,e.
 anchorOffset),r.collapse(!1),t.removeAllRanges(),t.addRange(r),t.extend(e.focusNode,e.focusOffset)}}function Nn(e,r){var n=e.display,i=e.doc;if(r.editorIsHidden)return bn(e),!1;if(!r.force&&r.visible.from>=n.viewFrom&&r.visible.to<=n.viewTo&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&0==Cn(e))return!1;Br(e)&&(bn(e),r.dims=wr(e));var o=i.first+i.size,l=Math.max(r.visible.from-e.options.viewportMargin,i.first),s=Math.min(o,r.visible.to+e.options.viewportMargin);n.viewFrom<l&&l-n.viewFrom<20&&(l=Math.max(i.first,n.viewFrom)),n.viewTo>s&&n.viewTo-s<20&&(s=Math.min(o,n.viewTo)),Zl&&(l=pe(e.doc,l),s=ge(e.doc,s));var a=l!=n.viewFrom||s!=n.viewTo||n.lastWrapHeight!=r.wrapperHeight||n.lastWrapWidth!=r.wrapperWidth;xn(e,l,s),n.viewOffset=ye(M(e.doc,n.viewFrom)),e.display.mover.style.top=n.viewOffset+"px";var u=Cn(e);if(!a&&0==u&&!r.force&&n.renderedView==n.view&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo))return!1;var c=Tn(e);return u>4&
 &(n.lineDiv.style.display="none"),Wn(e,n.updateLineNumbers,r.dims),u>4&&(n.lineDiv.style.display=""),n.renderedView=n.view,Mn(c),t(n.cursorDiv),t(n.selectionDiv),n.gutters.style.height=n.sizer.style.minHeight=0,a&&(n.lastWrapHeight=r.wrapperHeight,n.lastWrapWidth=r.wrapperWidth,Sn(e,400)),n.updateLineNumbers=null,!0}function On(e,t){for(var r=t.viewport,n=!0;(n&&e.options.lineWrapping&&t.oldDisplayWidth!=Bt(e)||(r&&null!=r.top&&(r={top:Math.min(e.doc.height+zt(e.display)-Gt(e),r.top)}),t.visible=Ir(e.display,e.doc,r),!(t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)))&&Nn(e,t);n=!1){Er(e);var i=en(e);Tr(e),tn(e,i),Hn(e,i),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function An(e,t){var r=new ks(e,t);if(Nn(e,r)){Er(e),On(e,r);var
  n=en(e);Tr(e),tn(e,n),Hn(e,n),r.finish()}}function Wn(e,r,n){function i(t){var r=t.nextSibling;return wl&&Al&&e.display.currentWheelTarget==t?t.style.display="none":t.parentNode.removeChild(t),r}for(var o=e.display,l=e.options.lineNumbers,s=o.lineDiv,a=s.firstChild,u=o.view,c=o.viewFrom,f=0;f<u.length;f++){var d=u[f];if(d.hidden);else if(d.node&&d.node.parentNode==s){for(;a!=d.node;)a=i(a);var p=l&&null!=r&&r<=c&&d.lineNumber;d.changes&&(h(d.changes,"gutter")>-1&&(p=!1),Ct(e,d,c,n)),p&&(t(d.lineNumber),d.lineNumber.appendChild(document.createTextNode(F(e.options,c)))),a=d.node.nextSibling}else{var g=At(e,d,c,n);s.insertBefore(g,a)}c+=d.size}for(;a;)a=i(a)}function Dn(e){var t=e.display.gutters.offsetWidth;e.display.sizer.style.marginLeft=t+"px"}function Hn(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+Rt(e)+"px"}function Fn(e){var r=e.display.gutters,i=e.options.
 gutters;t(r);for(var o=0;o<i.length;++o){var l=i[o],s=r.appendChild(n("div",null,"CodeMirror-gutter "+l));"CodeMirror-linenumbers"==l&&(e.display.lineGutter=s,s.style.width=(e.display.lineNumWidth||1)+"px")}r.style.display=o?"":"none",Dn(e)}function Pn(e){var t=h(e.gutters,"CodeMirror-linenumbers");-1==t&&e.lineNumbers?e.gutters=e.gutters.concat(["CodeMirror-linenumbers"]):t>-1&&!e.lineNumbers&&(e.gutters=e.gutters.slice(0),e.gutters.splice(t,1))}function En(e){var t=e.wheelDeltaX,r=e.wheelDeltaY;return null==t&&e.detail&&e.axis==e.HORIZONTAL_AXIS&&(t=e.detail),null==r&&e.detail&&e.axis==e.VERTICAL_AXIS?r=e.detail:null==r&&(r=e.wheelDelta),{x:t,y:r}}function zn(e){var t=En(e);return t.x*=Ms,t.y*=Ms,t}function In(e,t){var r=En(t),n=r.x,i=r.y,o=e.display,l=o.scroller,s=l.scrollWidth>l.clientWidth,a=l.scrollHeight>l.clientHeight;if(n&&s||i&&a){if(i&&Al&&wl)e:for(var u=t.target,c=o.view;u!=l;u=u.parentNode)for(var f=0;f<c.length;f++)if(c[f].node==u){e.display.currentWheelTarget=u;break 
 e}if(n&&!pl&&!Sl&&null!=Ms)return i&&a&&Zr(e,Math.max(0,l.scrollTop+i*Ms)),Jr(e,Math.max(0,l.scrollLeft+n*Ms)),(!i||i&&a)&&We(t),void(o.wheelStartX=null);if(i&&null!=Ms){var h=i*Ms,d=e.doc.scrollTop,p=d+o.wrapper.clientHeight;h<0?d=Math.max(0,d+h-50):p=Math.min(e.doc.height,p+h+50),An(e,{top:d,bottom:p})}Ts<20&&(null==o.wheelStartX?(o.wheelStartX=l.scrollLeft,o.wheelStartY=l.scrollTop,o.wheelDX=n,o.wheelDY=i,setTimeout(function(){if(null!=o.wheelStartX){var e=l.scrollLeft-o.wheelStartX,t=l.scrollTop-o.wheelStartY,r=t&&o.wheelDY&&t/o.wheelDY||e&&o.wheelDX&&e/o.wheelDX;o.wheelStartX=o.wheelStartY=null,r&&(Ms=(Ms*Ts+r)/(Ts+1),++Ts)}},200)):(o.wheelDX+=n,o.wheelDY+=i))}}function Rn(e,t){var r=e[t];e.sort(function(e,t){return E(e.from(),t.from())}),t=h(e,r);for(var n=1;n<e.length;n++){var i=e[n],o=e[n-1];if(E(o.to(),i.from())>=0){var l=B(o.from(),i.from()),s=R(o.to(),i.to()),a=o.empty()?i.from()==i.head:o.from()==o.head;n<=t&&--t,e.splice(--n,2,new Os(a?s:l,a?l:s))}}return new Ns(e,t)}fu
 nction Bn(e,t){return new Ns([new Os(e,t||e)],0)}function Gn(e){return e.text?P(e.from.line+e.text.length-1,g(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function Un(e,t){if(E(e,t.from)<0)return e;if(E(e,t.to)<=0)return Gn(t);var r=e.line+t.text.length-(t.to.line-t.from.line)-1,n=e.ch;return e.line==t.to.line&&(n+=Gn(t).ch-t.to.ch),P(r,n)}function Vn(e,t){for(var r=[],n=0;n<e.sel.ranges.length;n++){var i=e.sel.ranges[n];r.push(new Os(Un(i.anchor,t),Un(i.head,t)))}return Rn(r,e.sel.primIndex)}function Kn(e,t,r){return e.line==t.line?P(r.line,e.ch-t.ch+r.ch):P(r.line+(e.line-t.line),e.ch)}function jn(e,t,r){for(var n=[],i=P(e.first,0),o=i,l=0;l<t.length;l++){var s=t[l],a=Kn(s.from,i,o),u=Kn(Gn(s),i,o);if(i=s.to,o=u,"around"==r){var c=e.sel.ranges[l],f=E(c.head,c.anchor)<0;n[l]=new Os(f?u:a,f?a:u)}else n[l]=new Os(a,a)}return new Ns(n,e.sel.primIndex)}function Xn(e){e.doc.mode=Ve(e.options,e.doc.modeOption),Yn(e)}function Yn(e){e.doc.iter(function(e){e.stateAfter&&(e.stateAfter
 =null),e.styles&&(e.styles=null)}),e.doc.modeFrontier=e.doc.highlightFrontier=e.doc.first,Sn(e,100),
-e.state.modeGen++,e.curOp&&mn(e)}function _n(e,t){return 0==t.from.ch&&0==t.to.ch&&""==g(t.text)&&(!e.cm||e.cm.options.wholeLineUpdateBefore)}function qn(e,t,r,n){function i(e){return r?r[e]:null}function o(e,r,i){ot(e,r,i,n),wt(e,"change",e,t)}function l(e,t){for(var r=[],o=e;o<t;++o)r.push(new ps(u[o],i(o),n));return r}var s=t.from,a=t.to,u=t.text,c=M(e,s.line),f=M(e,a.line),h=g(u),d=i(u.length-1),p=a.line-s.line;if(t.full)e.insert(0,l(0,u.length)),e.remove(u.length,e.size-u.length);else if(_n(e,t)){var v=l(0,u.length-1);o(f,f.text,d),p&&e.remove(s.line,p),v.length&&e.insert(s.line,v)}else if(c==f)if(1==u.length)o(c,c.text.slice(0,s.ch)+h+c.text.slice(a.ch),d);else{var m=l(1,u.length-1);m.push(new ps(h+c.text.slice(a.ch),d,n)),o(c,c.text.slice(0,s.ch)+u[0],i(0)),e.insert(s.line+1,m)}else if(1==u.length)o(c,c.text.slice(0,s.ch)+u[0]+f.text.slice(a.ch),i(0)),e.remove(s.line+1,p);else{o(c,c.text.slice(0,s.ch)+u[0],i(0)),o(f,h+f.text.slice(a.ch),d);var y=l(1,u.length-1);p>1&&e.remove(
 s.line+1,p-1),e.insert(s.line+1,y)}wt(e,"change",e,t)}function $n(e,t,r){function n(e,i,o){if(e.linked)for(var l=0;l<e.linked.length;++l){var s=e.linked[l];if(s.doc!=i){var a=o&&s.sharedHist;r&&!a||(t(s.doc,a),n(s.doc,e,a))}}}n(e,null,!0)}function Zn(e,t){if(t.cm)throw new Error("This document is already in use.");e.doc=t,t.cm=e,Sr(e),Xn(e),Qn(e),e.options.lineWrapping||we(e),e.options.mode=t.modeOption,mn(e)}function Qn(e){("rtl"==e.doc.direction?s:zl)(e.display.lineDiv,"CodeMirror-rtl")}function Jn(e){dn(e,function(){Qn(e),mn(e)})}function ei(e){this.done=[],this.undone=[],this.undoDepth=1/0,this.lastModTime=this.lastSelTime=0,this.lastOp=this.lastSelOp=null,this.lastOrigin=this.lastSelOrigin=null,this.generation=this.maxGeneration=e||1}function ti(e,t){var r={from:I(t.from),to:Gn(t),text:N(e,t.from,t.to)};return ai(e,r,t.from.line,t.to.line+1),$n(e,function(e){return ai(e,r,t.from.line,t.to.line+1)},!0),r}function ri(e){for(;e.length;){if(!g(e).ranges)break;e.pop()}}function ni(e
 ,t){return t?(ri(e.done),g(e.done)):e.done.length&&!g(e.done).ranges?g(e.done):e.done.length>1&&!e.done[e.done.length-2].ranges?(e.done.pop(),g(e.done)):void 0}function ii(e,t,r,n){var i=e.history;i.undone.length=0;var o,l,s=+new Date;if((i.lastOp==n||i.lastOrigin==t.origin&&t.origin&&("+"==t.origin.charAt(0)&&e.cm&&i.lastModTime>s-e.cm.options.historyEventDelay||"*"==t.origin.charAt(0)))&&(o=ni(i,i.lastOp==n)))l=g(o.changes),0==E(t.from,t.to)&&0==E(t.from,l.to)?l.to=Gn(t):o.changes.push(ti(e,t));else{var a=g(i.done);for(a&&a.ranges||si(e.sel,i.done),o={changes:[ti(e,t)],generation:i.generation},i.done.push(o);i.done.length>i.undoDepth;)i.done.shift(),i.done[0].ranges||i.done.shift()}i.done.push(r),i.generation=++i.maxGeneration,i.lastModTime=i.lastSelTime=s,i.lastOp=i.lastSelOp=n,i.lastOrigin=i.lastSelOrigin=t.origin,l||Te(e,"historyAdded")}function oi(e,t,r,n){var i=t.charAt(0);return"*"==i||"+"==i&&r.ranges.length==n.ranges.length&&r.somethingSelected()==n.somethingSelected()&&ne
 w Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}function li(e,t,r,n){var i=e.history,o=n&&n.origin;r==i.lastSelOp||o&&i.lastSelOrigin==o&&(i.lastModTime==i.lastSelTime&&i.lastOrigin==o||oi(e,o,g(i.done),t))?i.done[i.done.length-1]=t:si(t,i.done),i.lastSelTime=+new Date,i.lastSelOrigin=o,i.lastSelOp=r,n&&!1!==n.clearRedo&&ri(i.undone)}function si(e,t){var r=g(t);r&&r.ranges&&r.equals(e)||t.push(e)}function ai(e,t,r,n){var i=t["spans_"+e.id],o=0;e.iter(Math.max(e.first,r),Math.min(e.first+e.size,n),function(r){r.markedSpans&&((i||(i=t["spans_"+e.id]={}))[o]=r.markedSpans),++o})}function ui(e){if(!e)return null;for(var t,r=0;r<e.length;++r)e[r].marker.explicitlyCleared?t||(t=e.slice(0,r)):t&&t.push(e[r]);return t?t.length?t:null:e}function ci(e,t){var r=t["spans_"+e.id];if(!r)return null;for(var n=[],i=0;i<t.text.length;++i)n.push(ui(r[i]));return n}function fi(e,t){var r=ci(e,t),n=J(e,t);if(!r)return n;if(!n)return r;for(var i=0;i<r.length;++i){var o=r[i],l=n[i
 ];if(o&&l)e:for(var s=0;s<l.length;++s){for(var a=l[s],u=0;u<o.length;++u)if(o[u].marker==a.marker)continue e;o.push(a)}else l&&(r[i]=l)}return r}function hi(e,t,r){for(var n=[],i=0;i<e.length;++i){var o=e[i];if(o.ranges)n.push(r?Ns.prototype.deepCopy.call(o):o);else{var l=o.changes,s=[];n.push({changes:s});for(var a=0;a<l.length;++a){var u=l[a],c=void 0;if(s.push({from:u.from,to:u.to,text:u.text}),t)for(var f in u)(c=f.match(/^spans_(\d+)$/))&&h(t,Number(c[1]))>-1&&(g(s)[f]=u[f],delete u[f])}}}return n}function di(e,t,r,n){if(n){var i=e.anchor;if(r){var o=E(t,i)<0;o!=E(r,i)<0?(i=t,t=r):o!=E(t,r)<0&&(t=r)}return new Os(i,t)}return new Os(r||t,t)}function pi(e,t,r,n,i){null==i&&(i=e.cm&&(e.cm.display.shift||e.extend)),wi(e,new Ns([di(e.sel.primary(),t,r,i)],0),n)}function gi(e,t,r){for(var n=[],i=e.cm&&(e.cm.display.shift||e.extend),o=0;o<e.sel.ranges.length;o++)n[o]=di(e.sel.ranges[o],t[o],null,i);wi(e,Rn(n,e.sel.primIndex),r)}function vi(e,t,r,n){var i=e.sel.ranges.slice(0);i[t]=r,
 wi(e,Rn(i,e.sel.primIndex),n)}function mi(e,t,r,n){wi(e,Bn(t,r),n)}function yi(e,t,r){var n={ranges:t.ranges,update:function(t){var r=this;this.ranges=[];for(var n=0;n<t.length;n++)r.ranges[n]=new Os(U(e,t[n].anchor),U(e,t[n].head))},origin:r&&r.origin};return Te(e,"beforeSelectionChange",e,n),e.cm&&Te(e.cm,"beforeSelectionChange",e.cm,n),n.ranges!=t.ranges?Rn(n.ranges,n.ranges.length-1):t}function bi(e,t,r){var n=e.history.done,i=g(n);i&&i.ranges?(n[n.length-1]=t,xi(e,t,r)):wi(e,t,r)}function wi(e,t,r){xi(e,t,r),li(e,e.sel,e.cm?e.cm.curOp.id:NaN,r)}function xi(e,t,r){(Oe(e,"beforeSelectionChange")||e.cm&&Oe(e.cm,"beforeSelectionChange"))&&(t=yi(e,t,r)),Ci(e,Li(e,t,r&&r.bias||(E(t.primary().head,e.sel.primary().head)<0?-1:1),!0)),r&&!1===r.scroll||!e.cm||Xr(e.cm)}function Ci(e,t){t.equals(e.sel)||(e.sel=t,e.cm&&(e.cm.curOp.updateInput=e.cm.curOp.selectionChanged=!0,Ne(e.cm)),wt(e,"cursorActivity",e))}function Si(e){Ci(e,Li(e,e.sel,null,!1))}function Li(e,t,r,n){for(var i,o=0;o<t.ran
 ges.length;o++){var l=t.ranges[o],s=t.ranges.length==e.sel.ranges.length&&e.sel.ranges[o],a=Ti(e,l.anchor,s&&s.anchor,r,n),u=Ti(e,l.head,s&&s.head,r,n);(i||a!=l.anchor||u!=l.head)&&(i||(i=t.ranges.slice(0,o)),i[o]=new Os(a,u))}return i?Rn(i,t.primIndex):t}function ki(e,t,r,n,i){var o=M(e,t.line);if(o.markedSpans)for(var l=0;l<o.markedSpans.length;++l){var s=o.markedSpans[l],a=s.marker;if((null==s.from||(a.inclusiveLeft?s.from<=t.ch:s.from<t.ch))&&(null==s.to||(a.inclusiveRight?s.to>=t.ch:s.to>t.ch))){if(i&&(Te(a,"beforeCursorEnter"),a.explicitlyCleared)){if(o.markedSpans){--l;continue}break}if(!a.atomic)continue;if(r){var u=a.find(n<0?1:-1),c=void 0;if((n<0?a.inclusiveRight:a.inclusiveLeft)&&(u=Mi(e,u,-n,u&&u.line==t.line?o:null)),u&&u.line==t.line&&(c=E(u,r))&&(n<0?c<0:c>0))return ki(e,u,t,n,i)}var f=a.find(n<0?-1:1);return(n<0?a.inclusiveLeft:a.inclusiveRight)&&(f=Mi(e,f,n,f.line==t.line?o:null)),f?ki(e,f,t,n,i):null}}return t}function Ti(e,t,r,n,i){var o=n||1,l=ki(e,t,r,o,i)||!i&
 &ki(e,t,r,o,!0)||ki(e,t,r,-o,i)||!i&&ki(e,t,r,-o,!0);return l||(e.cantEdit=!0,P(e.first,0))}function Mi(e,t,r,n){return r<0&&0==t.ch?t.line>e.first?U(e,P(t.line-1)):null:r>0&&t.ch==(n||M(e,t.line)).text.length?t.line<e.first+e.size-1?P(t.line+1,0):null:new P(t.line,t.ch+r)}function Ni(e){e.setSelection(P(e.firstLine(),0),P(e.lastLine()),Kl)}function Oi(e,t,r){var n={canceled:!1,from:t.from,to:t.to,text:t.text,origin:t.origin,cancel:function(){return n.canceled=!0}};return r&&(n.update=function(t,r,i,o){t&&(n.from=U(e,t)),r&&(n.to=U(e,r)),i&&(n.text=i),void 0!==o&&(n.origin=o)}),Te(e,"beforeChange",e,n),e.cm&&Te(e.cm,"beforeChange",e.cm,n),n.canceled?null:{from:n.from,to:n.to,text:n.text,origin:n.origin}}function Ai(e,t,r){if(e.cm){if(!e.cm.curOp)return pn(e.cm,Ai)(e,t,r);if(e.cm.state.suppressEdits)return}if(!(Oe(e,"beforeChange")||e.cm&&Oe(e.cm,"beforeChange"))||(t=Oi(e,t,!0))){var n=$l&&!r&&te(e,t.from,t.to);if(n)for(var i=n.length-1;i>=0;--i)Wi(e,{from:n[i].from,to:n[i].to,text:i
 ?[""]:t.text,origin:t.origin});else Wi(e,t)}}function Wi(e,t){if(1!=t.text.length||""!=t.text[0]||0!=E(t.from,t.to)){var r=Vn(e,t);ii(e,t,r,e.cm?e.cm.curOp.id:NaN),Fi(e,t,r,J(e,t));var n=[];$n(e,function(e,r){r||-1!=h(n,e.history)||(Ri(e.history,t),n.push(e.history)),Fi(e,t,null,J(e,t))})}}function Di(e,t,r){if(!e.cm||!e.cm.state.suppressEdits||r){for(var n,i=e.history,o=e.sel,l="undo"==t?i.done:i.undone,s="undo"==t?i.undone:i.done,a=0;a<l.length&&(n=l[a],r?!n.ranges||n.equals(e.sel):n.ranges);a++);if(a!=l.length){for(i.lastOrigin=i.lastSelOrigin=null;n=l.pop(),n.ranges;){if(si(n,s),r&&!n.equals(e.sel))return void wi(e,n,{clearRedo:!1});o=n}var u=[];si(o,s),s.push({changes:u,generation:i.generation}),i.generation=n.generation||++i.maxGeneration;for(var c=Oe(e,"beforeChange")||e.cm&&Oe(e.cm,"beforeChange"),f=n.changes.length-1;f>=0;--f){var d=function(r){var i=n.changes[r];if(i.origin=t,c&&!Oi(e,i,!1))return l.length=0,{};u.push(ti(e,i));var o=r?Vn(e,i):g(l);Fi(e,i,o,fi(e,i)),!r&&e.c
 m&&e.cm.scrollIntoView({from:i.from,to:Gn(i)});var s=[];$n(e,function(e,t){t||-1!=h(s,e.history)||(Ri(e.history,i),s.push(e.history)),Fi(e,i,null,fi(e,i))})}(f);if(d)return d.v}}}}function Hi(e,t){if(0!=t&&(e.first+=t,e.sel=new Ns(v(e.sel.ranges,function(e){return new Os(P(e.anchor.line+t,e.anchor.ch),P(e.head.line+t,e.head.ch))}),e.sel.primIndex),e.cm)){mn(e.cm,e.first,e.first-t,t);for(var r=e.cm.display,n=r.viewFrom;n<r.viewTo;n++)yn(e.cm,n,"gutter")}}function Fi(e,t,r,n){if(e.cm&&!e.cm.curOp)return pn(e.cm,Fi)(e,t,r,n);if(t.to.line<e.first)return void Hi(e,t.text.length-1-(t.to.line-t.from.line));if(!(t.from.line>e.lastLine())){if(t.from.line<e.first){var i=t.text.length-1-(e.first-t.from.line);Hi(e,i),t={from:P(e.first,0),to:P(t.to.line+i,t.to.ch),text:[g(t.text)],origin:t.origin}}var o=e.lastLine();t.to.line>o&&(t={from:t.from,to:P(o,M(e,o).text.length),text:[t.text[0]],origin:t.origin}),t.removed=N(e,t.from,t.to),r||(r=Vn(e,t)),e.cm?Pi(e.cm,t,n):qn(e,t,n),xi(e,r,Kl)}}function 
 Pi(e,t,r){var n=e.doc,i=e.display,o=t.from,l=t.to,s=!1,a=o.line;e.options.lineWrapping||(a=W(fe(M(n,o.line))),n.iter(a,l.line+1,function(e){if(e==i.maxLine)return s=!0,!0})),n.sel.contains(t.from,t.to)>-1&&Ne(e),qn(n,t,r,Cr(e)),e.options.lineWrapping||(n.iter(a,o.line+t.text.length,function(e){var t=be(e);t>i.maxLineLength&&(i.maxLine=e,i.maxLineLength=t,i.maxLineChanged=!0,s=!1)}),s&&(e.curOp.updateMaxLine=!0)),it(n,o.line),Sn(e,400);var u=t.text.length-(l.line-o.line)-1;t.full?mn(e):o.line!=l.line||1!=t.text.length||_n(e.doc,t)?mn(e,o.line,l.line+1,u):yn(e,o.line,"text");var c=Oe(e,"changes"),f=Oe(e,"change");if(f||c){var h={from:o,to:l,text:t.text,removed:t.removed,origin:t.origin};f&&wt(e,"change",e,h),c&&(e.curOp.changeObjs||(e.curOp.changeObjs=[])).push(h)}e.display.selForContextMenu=null}function Ei(e,t,r,n,i){if(n||(n=r),E(n,r)<0){var o;o=[n,r],r=o[0],n=o[1]}"string"==typeof t&&(t=e.splitLines(t)),Ai(e,{from:r,to:n,text:t,origin:i})}function zi(e,t,r,n){r<e.line?e.line+=n:t<
 e.line&&(e.line=t,e.ch=0)}function Ii(e,t,r,n){for(var i=0;i<e.length;++i){var o=e[i],l=!0;if(o.ranges){o.copied||(o=e[i]=o.deepCopy(),o.copied=!0);for(var s=0;s<o.ranges.length;s++)zi(o.ranges[s].anchor,t,r,n),zi(o.ranges[s].head,t,r,n)}else{for(var a=0;a<o.changes.length;++a){var u=o.changes[a];if(r<u.from.line)u.from=P(u.from.line+n,u.from.ch),u.to=P(u.to.line+n,u.to.ch);else if(t<=u.to.line){l=!1;break}}l||(e.splice(0,i+1),i=0)}}}function Ri(e,t){var r=t.from.line,n=t.to.line,i=t.text.length-(n-r)-1;Ii(e.done,r,n,i),Ii(e.undone,r,n,i)}function Bi(e,t,r,n){var i=t,o=t;return"number"==typeof t?o=M(e,G(e,t)):i=W(t),null==i?null:(n(o,i)&&e.cm&&yn(e.cm,i,r),o)}function Gi(e){var t=this;this.lines=e,this.parent=null;for(var r=0,n=0;n<e.length;++n)e[n].parent=t,r+=e[n].height;this.height=r}function Ui(e){var t=this;this.children=e;for(var r=0,n=0,i=0;i<e.length;++i){var o=e[i];r+=o.chunkSize(),n+=o.height,o.parent=t}this.size=r,this.height=n,this.parent=null}function Vi(e,t,r){ye(t)<(e
 .curOp&&e.curOp.scrollTop||e.doc.scrollTop)&&jr(e,r)}function Ki(e,t,r,n){var i=new As(e,r,n),o=e.cm;return o&&i.noHScroll&&(o.display.alignWidgets=!0),Bi(e,t,"widget",function(t){var r=t.widgets||(t.widgets=[]);if(null==i.insertAt?r.push(i):r.splice(Math.min(r.length-1,Math.max(0,i.insertAt)),0,i),i.line=t,o&&!ve(e,t)){var n=ye(t)<e.scrollTop;A(t,t.height+Ft(i)),n&&jr(o,i.height),o.curOp.forceUpdate=!0}return!0}),wt(o,"lineWidgetAdded",o,i,"number"==typeof t?t:W(t)),i}function ji(e,t,r,n,o){if(n&&n.shared)return Xi(e,t,r,n,o);if(e.cm&&!e.cm.curOp)return pn(e.cm,ji)(e,t,r,n,o);var l=new Ds(e,o),s=E(t,r);if(n&&c(n,l,!1),s>0||0==s&&!1!==l.clearWhenEmpty)return l;if(l.replacedWith&&(l.collapsed=!0,l.widgetNode=i("span",[l.replacedWith],"CodeMirror-widget"),n.handleMouseEvents||l.widgetNode.setAttribute("cm-ignore-events","true"),n.insertLeft&&(l.widgetNode.insertLeft=!0)),l.collapsed){if(ce(e,t.line,t,r,l)||t.line!=r.line&&ce(e,r.line,t,r,l))throw new Error("Inserting collapsed marker 
 partially overlapping an existing one");X()}l.addToHistory&&ii(e,{from:t,to:r,origin:"markText"},e.sel,NaN);var a,u=t.line,f=e.cm;if(e.iter(u,r.line+1,function(e){f&&l.collapsed&&!f.options.lineWrapping&&fe(e)==f.display.maxLine&&(a=!0),l.collapsed&&u!=t.line&&A(e,0),$(e,new Y(l,u==t.line?t.ch:null,u==r.line?r.ch:null)),++u}),l.collapsed&&e.iter(t.line,r.line+1,function(t){ve(e,t)&&A(t,0)}),l.clearOnEnter&&ts(l,"beforeCursorEnter",function(){return l.clear()}),l.readOnly&&(j(),(e.history.done.length||e.history.undone.length)&&e.clearHistory()),l.collapsed&&(l.id=++Ws,l.atomic=!0),f){if(a&&(f.curOp.updateMaxLine=!0),l.collapsed)mn(f,t.line,r.line+1);else if(l.className||l.title||l.startStyle||l.endStyle||l.css)for(var h=t.line;h<=r.line;h++)yn(f,h,"text");l.atomic&&Si(f.doc),wt(f,"markerAdded",f,l)}return l}function Xi(e,t,r,n,i){n=c(n),n.shared=!1;var o=[ji(e,t,r,n,i)],l=o[0],s=n.widgetNode;return $n(e,function(e){s&&(n.widgetNode=s.cloneNode(!0)),o.push(ji(e,U(e,t),U(e,r),n,i));for
 (var a=0;a<e.linked.length;++a)if(e.linked[a].isParent)return;l=g(o)}),new Hs(o,l)}function Yi(e){return e.findMarks(P(e.first,0),e.clipPos(P(e.lastLine())),function(e){return e.parent})}function _i(e,t){for(var r=0;r<t.length;r++){var n=t[r],i=n.find(),o=e.clipPos(i.from),l=e.clipPos(i.to);if(E(o,l)){var s=ji(e,o,l,n.primary,n.primary.type);n.markers.push(s),s.parent=n}}}function qi(e){for(var t=0;t<e.length;t++)!function(t){var r=e[t],n=[r.primary.doc];$n(r.primary.doc,function(e){return n.push(e)});for(var i=0;i<r.markers.length;i++){var o=r.markers[i];-1==h(n,o.doc)&&(o.parent=null,r.markers.splice(i--,1))}}(t)}function $i(e){var t=this;if(Ji(t),!Me(t,e)&&!Pt(t.display,e)){We(e),yl&&(Es=+new Date);var r=Lr(t,e,!0),n=e.dataTransfer.files;if(r&&!t.isReadOnly())if(n&&n.length&&window.FileReader&&window.File)for(var i=n.length,o=Array(i),l=0,s=0;s<i;++s)!function(e,n){if(!t.options.allowDropFileTypes||-1!=h(t.options.allowDropFileTypes,e.type)){var s=new FileReader;s.onload=pn(t,fun
 ction(){var e=s.result;if(/[\x00-\x08\x0e-\x1f]{2}/.test(e)&&(e=""),o[n]=e,++l==i){r=U(t.doc,r);var a={from:r,to:r,text:t.doc.splitLines(o.join(t.doc.lineSeparator())),origin:"paste"};Ai(t.doc,a),bi(t.doc,Bn(r,Gn(a)))}}),s.readAsText(e)}}(n[s],s);else{if(t.state.draggingText&&t.doc.sel.contains(r)>-1)return t.state.draggingText(e),void setTimeout(function(){return t.display.input.focus()},20);try{var a=e.dataTransfer.getData("Text");if(a){var u;if(t.state.draggingText&&!t.state.draggingText.copy&&(u=t.listSelections()),xi(t.doc,Bn(r,r)),u)for(var c=0;c<u.length;++c)Ei(t.doc,"",u[c].anchor,u[c].head,"drag");t.replaceSelection(a,"around","paste"),t.display.input.focus()}}catch(e){}}}}function Zi(e,t){if(yl&&(!e.state.draggingText||+new Date-Es<100))return void Fe(t);if(!Me(e,t)&&!Pt(e.display,t)&&(t.dataTransfer.setData("Text",e.getSelection()),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setDragImage&&!Ll)){var r=n("img",null,null,"position: fixed; left: 0; top: 0;");r.src=
 "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",Sl&&(r.width=r.height=1,e.display.wrapper.appendChild(r),r._top=r.offsetTop),t.dataTransfer.setDragImage(r,0,0),Sl&&r.parentNode.removeChild(r)}}function Qi(e,t){var i=Lr(e,t);if(i){var o=document.createDocumentFragment();Nr(e,i,o),e.display.dragCursor||(e.display.dragCursor=n("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),r(e.display.dragCursor,o)}}function Ji(e){e.display.dragCursor&&(e.display.lineSpace.removeChild(e.display.dragCursor),e.display.dragCursor=null)}function eo(e){if(document.getElementsByClassName)for(var t=document.getElementsByClassName("CodeMirror"),r=0;r<t.length;r++){var n=t[r].CodeMirror;n&&e(n)}}function to(){zs||(ro(),zs=!0)}function ro(){var e;ts(window,"resize",function(){null==e&&(e=setTimeout(function(){e=null,eo(no)},100))}),ts(window,"blur",function(){return eo(Pr)})}function no(e){var t=e.di
 splay;t.lastWrapHeight==t.wrapper.clientHeight&&t.lastWrapWidth==t.wrapper.clientWidth||(t.cachedCharWidth=t.cachedTextHeight=t.cachedPaddingH=null,t.scrollbarsClipped=!1,e.setSize())}function io(e){var t=e.split(/-(?!$)/);e=t[t.length-1];for(var r,n,i,o,l=0;l<t.length-1;l++){var s=t[l];if(/^(cmd|meta|m)$/i.test(s))o=!0;else if(/^a(lt)?$/i.test(s))r=!0;else if(/^(c|ctrl|control)$/i.test(s))n=!0;else{if(!/^s(hift)?$/i.test(s))throw new Error("Unrecognized modifier name: "+s);i=!0}}return r&&(e="Alt-"+e),n&&(e="Ctrl-"+e),o&&(e="Cmd-"+e),i&&(e="Shift-"+e),e}function oo(e){var t={};for(var r in e)if(e.hasOwnProperty(r)){var n=e[r];if(/^(name|fallthrough|(de|at)tach)$/.test(r))continue;if("..."==n){delete e[r];continue}for(var i=v(r.split(" "),io),o=0;o<i.length;o++){var l=void 0,s=void 0;o==i.length-1?(s=i.join(" "),l=n):(s=i.slice(0,o+1).join(" "),l="...");var a=t[s];if(a){if(a!=l)throw new Error("Inconsistent bindings for "+s)}else t[s]=l}delete e[r]}for(var u in t)e[u]=t[u];return e}
 function lo(e,t,r,n){t=co(t);var i=t.call?t.call(e,n):t[e];if(!1===i)return"nothing";if("..."===i)return"multi";if(null!=i&&r(i))return"handled";if(t.fallthrough){if("[object Array]"!=Object.prototype.toString.call(t.fallthrough))return lo(e,t.fallthrough,r,n);for(var o=0;o<t.fallthrough.length;o++){var l=lo(e,t.fallthrough[o],r,n);if(l)return l}}}function so(e){var t="string"==typeof e?e:Is[e.keyCode];return"Ctrl"==t||"Alt"==t||"Shift"==t||"Mod"==t}function ao(e,t,r){var n=e;return t.altKey&&"Alt"!=n&&(e="Alt-"+e),(Pl?t.metaKey:t.ctrlKey)&&"Ctrl"!=n&&(e="Ctrl-"+e),(Pl?t.ctrlKey:t.metaKey)&&"Cmd"!=n&&(e="Cmd-"+e),!r&&t.shiftKey&&"Shift"!=n&&(e="Shift-"+e),e}function uo(e,t){if(Sl&&34==e.keyCode&&e.char)return!1;var r=Is[e.keyCode];return null!=r&&!e.altGraphKey&&ao(r,e,t)}function co(e){return"string"==typeof e?Us[e]:e}function fo(e,t){for(var r=e.doc.sel.ranges,n=[],i=0;i<r.length;i++){for(var o=t(r[i]);n.length&&E(o.from,g(n).to)<=0;){var l=n.pop();if(E(l.from,o.from)<0){o.from=l.
 from;break}}n.push(o)}dn(e,function(){for(var t=n.length-1;t>=0;t--)Ei(e.doc,"",n[t].from,n[t].to,"+delete");Xr(e)})}function ho(e,t,r){var n=L(e.text,t+r,r);return n<0||n>e.text.length?null:n}function po(e,t,r){var n=ho(e,t.ch,r);return null==n?null:new P(t.line,n,r<0?"after":"before")}function go(e,t,r,n,i){if(e){var o=Se(r,t.doc.direction);if(o){var l,s=i<0?g(o):o[0],a=i<0==(1==s.level),u=a?"after":"before";if(s.level>0||"rtl"==t.doc.direction){var c=Yt(t,r);l=i<0?r.text.length-1:0;var f=_t(t,c,l).top;l=k(function(e){return _t(t,c,e).top==f},i<0==(1==s.level)?s.from:s.to-1,l),"before"==u&&(l=ho(r,l,1))}else l=i<0?s.to:s.from;return new P(n,l,u)}}return new P(n,i<0?r.text.length:0,i<0?"before":"after")}function vo(e,t,r,n){var i=Se(t,e.doc.direction);if(!i)return po(t,r,n);r.ch>=t.text.length?(r.ch=t.text.length,r.sticky="before"):r.ch<=0&&(r.ch=0,r.sticky="after");var o=Ce(i,r.ch,r.sticky),l=i[o];if("ltr"==e.doc.direction&&l.level%2==0&&(n>0?l.to>r.ch:l.from<r.ch))return po(t,r,n
 );var s,a=function(e,r){return ho(t,e instanceof P?e.ch:e,r)},u=function(r){return e.options.lineWrapping?(s=s||Yt(e,t),dr(e,t,s,r)):{begin:0,end:t.text.length}},c=u("before"==r.sticky?a(r,-1):r.ch);if("rtl"==e.doc.direction||1==l.level){var f=1==l.level==n<0,h=a(r,f?1:-1);if(null!=h&&(f?h<=l.to&&h<=c.end:h>=l.from&&h>=c.begin)){var d=f?"before":"after";return new P(r.line,h,d)}}var p=function(e,t,n){for(var o=function(e,t){return t?new P(r.line,a(e,1),"before"):new P(r.line,e,"after")};e>=0&&e<i.length;e+=t){var l=i[e],s=t>0==(1!=l.level),u=s?n.begin:a(n.end,-1);if(l.from<=u&&u<l.to)return o(u,s);if(u=s?l.from:a(l.to,-1),n.begin<=u&&u<n.end)return o(u,s)}},g=p(o+n,n,c);if(g)return g;var v=n>0?c.end:a(c.begin,-1);return null==v||n>0&&v==t.text.length||!(g=p(n>0?0:i.length-1,n,u(v)))?null:g}function mo(e,t){var r=M(e.doc,t),n=fe(r);return n!=r&&(t=W(n)),go(!0,e,n,t,1)}function yo(e,t){var r=M(e.doc,t),n=he(r);return n!=r&&(t=W(n)),go(!0,e,r,t,-1)}function bo(e,t){var r=mo(e,t.line),n
 =M(e.doc,r.line),i=Se(n,e.doc.direction);if(!i||0==i[0].level){var o=Math.max(0,n.text.search(/\S/)),l=t.line==r.line&&t.ch<=o&&t.ch;return P(r.line,l?0:o,r.sticky)}return r}function wo(e,t,r){if("string"==typeof t&&!(t=Vs[t]))return!1;e.display.input.ensurePolled();var n=e.display.shift,i=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),r&&(e.display.shift=!1),i=t(e)!=Vl}finally{e.display.shift=n,e.state.suppressEdits=!1}return i}function xo(e,t,r){for(var n=0;n<e.state.keyMaps.length;n++){var i=lo(t,e.state.keyMaps[n],r,e);if(i)return i}return e.options.extraKeys&&lo(t,e.options.extraKeys,r,e)||lo(t,e.options.keyMap,r,e)}function Co(e,t,r,n){var i=e.state.keySeq;if(i){if(so(t))return"handled";if(/\'$/.test(t)?e.state.keySeq=null:Ks.set(50,function(){e.state.keySeq==i&&(e.state.keySeq=null,e.display.input.reset())}),So(e,i+" "+t,r,n))return!0}return So(e,t,r,n)}function So(e,t,r,n){var i=xo(e,t,n);return"multi"==i&&(e.state.keySeq=t),"handled"==i&&wt(e,"keyHandled",e,t,r),"handled
 "!=i&&"multi"!=i||(We(r),Wr(e)),!!i}function Lo(e,t){var r=uo(t,!0);return!!r&&(t.shiftKey&&!e.state.keySeq?Co(e,"Shift-"+r,t,function(t){return wo(e,t,!0)})||Co(e,r,t,function(t){if("string"==typeof t?/^go[A-Z]/.test(t):t.motion)return wo(e,t)}):Co(e,r,t,function(t){return wo(e,t)}))}function ko(e,t,r){return Co(e,"'"+r+"'",t,function(t){return wo(e,t,!0)})}function To(e){var t=this;if(t.curOp.focus=l(),!Me(t,e)){yl&&bl<11&&27==e.keyCode&&(e.returnValue=!1);var r=e.keyCode;t.display.shift=16==r||e.shiftKey;var n=Lo(t,e);Sl&&(js=n?r:null,!n&&88==r&&!os&&(Al?e.metaKey:e.ctrlKey)&&t.replaceSelection("",null,"cut")),18!=r||/\bCodeMirror-crosshair\b/.test(t.display.lineDiv.className)||Mo(t)}}function Mo(e){function t(e){18!=e.keyCode&&e.altKey||(zl(r,"CodeMirror-crosshair"),ke(document,"keyup",t),ke(document,"mouseover",t))}var r=e.display.lineDiv;s(r,"CodeMirror-crosshair"),ts(document,"keyup",t),ts(document,"mouseover",t)}function No(e){16==e.keyCode&&(this.doc.sel.shift=!1),Me(this,e
 )}function Oo(e){var t=this;if(!(Pt(t.display,e)||Me(t,e)||e.ctrlKey&&!e.altKey||Al&&e.metaKey)){var r=e.keyCode,n=e.charCode;if(Sl&&r==js)return js=null,void We(e);if(!Sl||e.which&&!(e.which<10)||!Lo(t,e)){var i=String.fromCharCode(null==n?r:n);"\b"!=i&&(ko(t,e,i)||t.display.input.onKeyPress(e))}}}function Ao(e,t){var r=+new Date;return _s&&_s.compare(r,e,t)?(Ys=_s=null,"triple"):Ys&&Ys.compare(r,e,t)?(_s=new Xs(r,e,t),Ys=null,"double"):(Ys=new Xs(r,e,t),_s=null,"single")}function Wo(e){var t=this,r=t.display;if(!(Me(t,e)||r.activeTouch&&r.input.supportsTouch())){if(r.input.ensurePolled(),r.shift=e.shiftKey,Pt(r,e))return void(wl||(r.scroller.draggable=!1,setTimeout(function(){return r.scroller.draggable=!0},100)));if(!Bo(t,e)){var n=Lr(t,e),i=Ee(e),o=n?Ao(n,i):"single";window.focus(),1==i&&t.state.selectingText&&t.state.selectingText(e),n&&Do(t,i,n,o,e)||(1==i?n?Fo(t,n,o,e):Pe(e)==r.scroller&&We(e):2==i?(n&&pi(t.doc,n),setTimeout(function(){return r.input.focus()},20)):3==i&&(El?G
 o(t,e):Hr(t)))}}}function Do(e,t,r,n,i){var o="Click";return"double"==n?o="Double"+o:"triple"==n&&(o="Triple"+o),o=(1==t?"Left":2==t?"Middle":"Right")+o,Co(e,ao(o,i),i,function(t){if("string"==typeof t&&(t=Vs[t]),!t)return!1;var n=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),n=t(e,r)!=Vl}finally{e.state.suppressEdits=!1}return n})}function Ho(e,t,r){var n=e.getOption("configureMouse"),i=n?n(e,t,r):{};if(null==i.unit){var o=Wl?r.shiftKey&&r.metaKey:r.altKey;i.unit=o?"rectangle":"single"==t?"char":"double"==t?"word":"line"}return(null==i.extend||e.doc.extend)&&(i.extend=e.doc.extend||r.shiftKey),null==i.addNew&&(i.addNew=Al?r.metaKey:r.ctrlKey),null==i.moveOnDrag&&(i.moveOnDrag=!(Al?r.altKey:r.ctrlKey)),i}function Fo(e,t,r,n){yl?setTimeout(u(Dr,e),0):e.curOp.focus=l();var i,o=Ho(e,r,n),s=e.doc.sel;e.options.dragDrop&&rs&&!e.isReadOnly()&&"single"==r&&(i=s.contains(t))>-1&&(E((i=s.ranges[i]).from(),t)<0||t.

<TRUNCATED>

[06/43] asterixdb git commit: [NO ISSUE][LIC] Fix regression on missing license

Posted by im...@apache.org.
[NO ISSUE][LIC] Fix regression on missing license

Change-Id: I8ce9e8f790857df5273d87de9c6b7e6e9a060749
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2595
Reviewed-by: Michael Blow <mb...@apache.org>
Tested-by: Michael Blow <mb...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/5e4ad72c
Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/5e4ad72c
Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/5e4ad72c

Branch: refs/heads/release-0.9.4-pre-rc
Commit: 5e4ad72c67f474ed8b02c945afb371b8e29c628a
Parents: 6406179
Author: Michael Blow <mb...@apache.org>
Authored: Sat Apr 14 14:12:10 2018 -0400
Committer: Michael Blow <mb...@apache.org>
Committed: Sat Apr 14 11:15:52 2018 -0700

----------------------------------------------------------------------
 .../content/www.slf4j.org_license.html.txt      | 21 ++++++++++++++++++++
 1 file changed, 21 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5e4ad72c/asterixdb/src/main/licenses/content/www.slf4j.org_license.html.txt
----------------------------------------------------------------------
diff --git a/asterixdb/src/main/licenses/content/www.slf4j.org_license.html.txt b/asterixdb/src/main/licenses/content/www.slf4j.org_license.html.txt
new file mode 100644
index 0000000..05ee024
--- /dev/null
+++ b/asterixdb/src/main/licenses/content/www.slf4j.org_license.html.txt
@@ -0,0 +1,21 @@
+ Copyright (c) 2004-2013 QOS.ch
+ All rights reserved.
+
+ Permission is hereby granted, free  of charge, to any person obtaining
+ a  copy  of this  software  and  associated  documentation files  (the
+ "Software"), to  deal in  the Software without  restriction, including
+ without limitation  the rights to  use, copy, modify,  merge, publish,
+ distribute,  sublicense, and/or sell  copies of  the Software,  and to
+ permit persons to whom the Software  is furnished to do so, subject to
+ the following conditions:
+
+ The  above  copyright  notice  and  this permission  notice  shall  be
+ included in all copies or substantial portions of the Software.
+
+ THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
+ EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
+ MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


[32/43] asterixdb git commit: [ASTERIXDB-2318] Build dashboard in mvn

Posted by im...@apache.org.
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/main.37b7b7cad656490b195a.bundle.js
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/main.37b7b7cad656490b195a.bundle.js b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/main.37b7b7cad656490b195a.bundle.js
deleted file mode 100644
index 43d0410..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/main.37b7b7cad656490b195a.bundle.js
+++ /dev/null
@@ -1 +0,0 @@
-webpackJsonp([0],{"+GRi":function(e,t,n){var r=n("Wo2w"),i=n("Wy9r");e.exports=function(e){return r(i(e))}},"+iEx":function(e,t,n){n("fHxy"),n("5GJ3"),n("X0O/"),n("HCkn"),n("ncNB"),n("soMw"),n("8sYH"),n("IJ3P"),n("t6ta"),e.exports=n("b4gG").Reflect},"+pQw":function(e,t,n){var r=n("JXkd");e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},"/zAi":function(e,t,n){"use strict";var r=n("6Xbx").__decorate,i=n("6Xbx").__metadata;Object.defineProperty(t,"__esModule",{value:!0});var o=n("LMZF"),l=n("Un6q"),a=n("LMZF"),s=function(){};s=r([a.Component({selector:"p-header",template:"<ng-content></ng-content>"})],s),t.Header=s;var u=function(){};u=r([a.Component({selector:"p-footer",template:"<ng-content></ng-content>"})],u),t.Footer=u;var c=function(){function e(e){this.template=e}return e.prototype.getType=function(){return this.name},e}();r([o.Input(),i("design:type",String)],c.prototype,"type",void 0),r([o.Input("pTemplate"),i("design:type",String)],c.prototype
 ,"name",void 0),c=r([o.Directive({selector:"[pTemplate]",host:{}})],c),t.PrimeTemplate=c;var d=function(){function e(e){this.viewContainer=e}return e.prototype.ngOnInit=function(){this.view=this.viewContainer.createEmbeddedView(this.templateRef,{$implicit:this.item,index:this.index})},e.prototype.ngOnDestroy=function(){this.view.destroy()},e}();r([o.Input(),i("design:type",Object)],d.prototype,"item",void 0),r([o.Input(),i("design:type",Number)],d.prototype,"index",void 0),r([o.Input("pTemplateWrapper"),i("design:type",o.TemplateRef)],d.prototype,"templateRef",void 0),d=r([o.Directive({selector:"[pTemplateWrapper]"})],d),t.TemplateWrapper=d;var p=function(){function e(){this.filterType="text",this.exportable=!0,this.sortFunction=new o.EventEmitter}return e.prototype.ngAfterContentInit=function(){var e=this;this.templates.forEach(function(t){switch(t.getType()){case"header":e.headerTemplate=t.template;break;case"body":e.bodyTemplate=t.template;break;case"footer":e.footerTemplate=t.te
 mplate;break;case"filter":e.filterTemplate=t.template;break;case"editor":e.editorTemplate=t.template;break;default:e.bodyTemplate=t.template}})},e}();r([o.Input(),i("design:type",String)],p.prototype,"field",void 0),r([o.Input(),i("design:type",String)],p.prototype,"colId",void 0),r([o.Input(),i("design:type",String)],p.prototype,"sortField",void 0),r([o.Input(),i("design:type",String)],p.prototype,"filterField",void 0),r([o.Input(),i("design:type",String)],p.prototype,"header",void 0),r([o.Input(),i("design:type",String)],p.prototype,"footer",void 0),r([o.Input(),i("design:type",Object)],p.prototype,"sortable",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"editable",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"filter",void 0),r([o.Input(),i("design:type",String)],p.prototype,"filterMatchMode",void 0),r([o.Input(),i("design:type",String)],p.prototype,"filterType",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"excludeGlobalFilter",void 0),r([o
 .Input(),i("design:type",Number)],p.prototype,"rowspan",void 0),r([o.Input(),i("design:type",Number)],p.prototype,"colspan",void 0),r([o.Input(),i("design:type",String)],p.prototype,"scope",void 0),r([o.Input(),i("design:type",Object)],p.prototype,"style",void 0),r([o.Input(),i("design:type",String)],p.prototype,"styleClass",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"exportable",void 0),r([o.Input(),i("design:type",Object)],p.prototype,"headerStyle",void 0),r([o.Input(),i("design:type",String)],p.prototype,"headerStyleClass",void 0),r([o.Input(),i("design:type",Object)],p.prototype,"bodyStyle",void 0),r([o.Input(),i("design:type",String)],p.prototype,"bodyStyleClass",void 0),r([o.Input(),i("design:type",Object)],p.prototype,"footerStyle",void 0),r([o.Input(),i("design:type",String)],p.prototype,"footerStyleClass",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"hidden",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"expander",void 0),r([o.Inpu
 t(),i("design:type",String)],p.prototype,"selectionMode",void 0),r([o.Input(),i("design:type",String)],p.prototype,"filterPlaceholder",void 0),r([o.Input(),i("design:type",Number)],p.prototype,"filterMaxlength",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"frozen",void 0),r([o.Output(),i("design:type",o.EventEmitter)],p.prototype,"sortFunction",void 0),r([o.ContentChildren(c),i("design:type",o.QueryList)],p.prototype,"templates",void 0),r([o.ContentChild(o.TemplateRef),i("design:type",o.TemplateRef)],p.prototype,"template",void 0),p=r([a.Component({selector:"p-column",template:""})],p),t.Column=p;var f=function(){};r([o.ContentChildren(p),i("design:type",o.QueryList)],f.prototype,"columns",void 0),f=r([a.Component({selector:"p-row",template:""})],f),t.Row=f;var h=function(){};r([o.Input(),i("design:type",Boolean)],h.prototype,"frozen",void 0),r([o.ContentChildren(f),i("design:type",o.QueryList)],h.prototype,"rows",void 0),h=r([a.Component({selector:"p-headerColumnGroup
 ",template:""})],h),t.HeaderColumnGroup=h;var m=function(){};r([o.Input(),i("design:type",Boolean)],m.prototype,"frozen",void 0),r([o.ContentChildren(f),i("design:type",o.QueryList)],m.prototype,"rows",void 0),m=r([a.Component({selector:"p-footerColumnGroup",template:""})],m),t.FooterColumnGroup=m;var g=function(){function e(e){this.viewContainer=e}return e.prototype.ngOnInit=function(){this.view=this.viewContainer.createEmbeddedView(this.column.bodyTemplate,{$implicit:this.column,rowData:this.rowData,rowIndex:this.rowIndex})},e.prototype.ngOnChanges=function(e){this.view&&"rowIndex"in e&&(this.view.context.rowIndex=e.rowIndex.currentValue)},e.prototype.ngOnDestroy=function(){this.view.destroy()},e}();r([o.Input(),i("design:type",Object)],g.prototype,"column",void 0),r([o.Input(),i("design:type",Object)],g.prototype,"rowData",void 0),r([o.Input(),i("design:type",Number)],g.prototype,"rowIndex",void 0),g=r([a.Component({selector:"p-columnBodyTemplateLoader",template:""})],g),t.Column
 BodyTemplateLoader=g;var y=function(){function e(e){this.viewContainer=e}return e.prototype.ngOnInit=function(){this.view=this.viewContainer.createEmbeddedView(this.column.headerTemplate,{$implicit:this.column})},e.prototype.ngOnDestroy=function(){this.view.destroy()},e}();r([o.Input(),i("design:type",Object)],y.prototype,"column",void 0),y=r([a.Component({selector:"p-columnHeaderTemplateLoader",template:""})],y),t.ColumnHeaderTemplateLoader=y;var v=function(){function e(e){this.viewContainer=e}return e.prototype.ngOnInit=function(){this.view=this.viewContainer.createEmbeddedView(this.column.footerTemplate,{$implicit:this.column})},e.prototype.ngOnDestroy=function(){this.view.destroy()},e}();r([o.Input(),i("design:type",Object)],v.prototype,"column",void 0),v=r([a.Component({selector:"p-columnFooterTemplateLoader",template:""})],v),t.ColumnFooterTemplateLoader=v;var b=function(){function e(e){this.viewContainer=e}return e.prototype.ngOnInit=function(){this.view=this.viewContainer.cr
 eateEmbeddedView(this.column.filterTemplate,{$implicit:this.column})},e.prototype.ngOnDestroy=function(){this.view.destroy()},e}();r([o.Input(),i("design:type",Object)],b.prototype,"column",void 0),b=r([a.Component({selector:"p-columnFilterTemplateLoader",template:""})],b),t.ColumnFilterTemplateLoader=b;var _=function(){function e(e){this.viewContainer=e}return e.prototype.ngOnInit=function(){this.view=this.viewContainer.createEmbeddedView(this.column.editorTemplate,{$implicit:this.column,rowData:this.rowData,rowIndex:this.rowIndex})},e.prototype.ngOnDestroy=function(){this.view.destroy()},e}();r([o.Input(),i("design:type",Object)],_.prototype,"column",void 0),r([o.Input(),i("design:type",Object)],_.prototype,"rowData",void 0),r([o.Input(),i("design:type",Object)],_.prototype,"rowIndex",void 0),_=r([a.Component({selector:"p-columnEditorTemplateLoader",template:""})],_),t.ColumnEditorTemplateLoader=_;var w=function(){function e(e){this.viewContainer=e}return e.prototype.ngOnInit=func
 tion(){this.template&&(this.view=this.viewContainer.createEmbeddedView(this.template,{$implicit:this.data}))},e.prototype.ngOnDestroy=function(){this.view&&this.view.destroy()},e}();r([o.Input(),i("design:type",o.TemplateRef)],w.prototype,"template",void 0),r([o.Input(),i("design:type",Object)],w.prototype,"data",void 0),w=r([a.Component({selector:"p-templateLoader",template:""})],w),t.TemplateLoader=w;var x=function(){};x=r([o.NgModule({imports:[l.CommonModule],exports:[s,u,p,d,y,g,v,b,c,w,f,h,m,_],declarations:[s,u,p,d,y,g,v,b,c,w,f,h,m,_]})],x),t.SharedModule=x},0:function(e,t,n){e.exports=n("cDNt")},"0l2a":function(e,t,n){"use strict";var r=n("6Xbx"),i=n("E9/g"),o=function(){function e(e){this.total=e}return e.prototype.call=function(e,t){return t.subscribe(new l(e,this.total))},e}(),l=function(e){function t(t,n){e.call(this,t),this.total=n,this.count=0}return Object(r.__extends)(t,e),t.prototype._next=function(e){++this.count>this.total&&this.destination.next(e)},t}(i.a);t.a=fu
 nction(e){return function(e){return function(t){return t.lift(new o(e))}}(e)(this)}},"0nO6":function(e,t,n){"use strict";function r(e){return null==e||0===e.length}function i(e){return null!=e}function o(e){var t=Object(D["\u0275isPromise"])(e)?R(e):e;if(!Object(D["\u0275isObservable"])(t))throw new Error("Expected validator to return Promise or Observable.");return t}function l(e){var t=e.reduce(function(e,t){return null!=t?Object(k.__assign)({},e,t):e},{});return 0===Object.keys(t).length?null:t}function a(e){return e.validate?function(t){return e.validate(t)}:e}function s(e){return e.validate?function(t){return e.validate(t)}:e}function u(){throw new Error("unimplemented")}function c(e,t){return null==e?""+t:(t&&"object"==typeof t&&(t="Object"),(e+": "+t).slice(0,50))}function d(e,t){return null==e?""+t:("string"==typeof t&&(t="'"+t+"'"),t&&"object"==typeof t&&(t="Object"),(e+": "+t).slice(0,50))}function p(e,t){return t.path.concat([e])}function f(e,t){e||y(t,"Cannot find contro
 l with"),t.valueAccessor||y(t,"No value accessor for form control with"),e.validator=V.compose([e.validator,t.validator]),e.asyncValidator=V.composeAsync([e.asyncValidator,t.asyncValidator]),t.valueAccessor.writeValue(e.value),function(e,t){t.valueAccessor.registerOnChange(function(n){e._pendingValue=n,e._pendingChange=!0,e._pendingDirty=!0,"change"===e.updateOn&&h(e,t)})}(e,t),function(t,n){e.registerOnChange(function(e,t){n.valueAccessor.writeValue(e),t&&n.viewToModelUpdate(e)})}(0,t),function(e,t){t.valueAccessor.registerOnTouched(function(){e._pendingTouched=!0,"blur"===e.updateOn&&e._pendingChange&&h(e,t),"submit"!==e.updateOn&&e.markAsTouched()})}(e,t),t.valueAccessor.setDisabledState&&e.registerOnDisabledChange(function(e){t.valueAccessor.setDisabledState(e)}),t._rawValidators.forEach(function(t){t.registerOnValidatorChange&&t.registerOnValidatorChange(function(){return e.updateValueAndValidity()})}),t._rawAsyncValidators.forEach(function(t){t.registerOnValidatorChange&&t.reg
 isterOnValidatorChange(function(){return e.updateValueAndValidity()})})}function h(e,t){t.viewToModelUpdate(e._pendingValue),e._pendingDirty&&e.markAsDirty(),e.setValue(e._pendingValue,{emitModelToViewChange:!1}),e._pendingChange=!1}function m(e,t){null==e&&y(t,"Cannot find control with"),e.validator=V.compose([e.validator,t.validator]),e.asyncValidator=V.composeAsync([e.asyncValidator,t.asyncValidator])}function g(e){return y(e,"There is no FormControl instance attached to form control element with")}function y(e,t){var n;throw n=e.path.length>1?"path: '"+e.path.join(" -> ")+"'":e.path[0]?"name: '"+e.path+"'":"unspecified name attribute",new Error(t+" "+n)}function v(e){return null!=e?V.compose(e.map(a)):null}function b(e){return null!=e?V.composeAsync(e.map(s)):null}function _(e,t){if(!e.hasOwnProperty("model"))return!1;var n=e.model;return!!n.isFirstChange()||!Object(D["\u0275looseIdentical"])(t,n.currentValue)}function w(e,t){e._syncPendingControls(),t.forEach(function(e){var t=
 e.control;"submit"===t.updateOn&&t._pendingChange&&(e.viewToModelUpdate(t._pendingValue),t._pendingChange=!1)})}function x(e,t){if(!t)return null;var n=void 0,r=void 0,i=void 0;return t.forEach(function(t){t.constructor===U?n=t:function(e){return le.some(function(t){return e.constructor===t})}(t)?(r&&y(e,"More than one built-in value accessor matches form control with"),r=t):(i&&y(e,"More than one custom value accessor matches form control with"),i=t)}),i||r||n||(y(e,"No valid value accessor for form control with"),null)}function C(e,t){var n=e.indexOf(t);n>-1&&e.splice(n,1)}function E(e){var t=O(e)?e.validators:e;return Array.isArray(t)?v(t):t||null}function S(e,t){var n=O(t)?t.asyncValidators:e;return Array.isArray(n)?b(n):n||null}function O(e){return null!=e&&!Array.isArray(e)&&"object"==typeof e}function T(e){return!(e instanceof je||e instanceof Le||e instanceof ze)}Object.defineProperty(t,"__esModule",{value:!0});var k=n("6Xbx"),D=n("LMZF"),I=n("Jsyr"),R=n("KRwF").a.create,M=n
 ("dmC+"),P=n("RyBE");n.d(t,"AbstractControlDirective",function(){return N}),n.d(t,"AbstractFormGroupDirective",function(){return ae}),n.d(t,"CheckboxControlValueAccessor",function(){return H}),n.d(t,"ControlContainer",function(){return A}),n.d(t,"NG_VALUE_ACCESSOR",function(){return z}),n.d(t,"COMPOSITION_BUFFER_MODE",function(){return q}),n.d(t,"DefaultValueAccessor",function(){return U}),n.d(t,"NgControl",function(){return $}),n.d(t,"NgControlStatus",function(){return ce}),n.d(t,"NgControlStatusGroup",function(){return de}),n.d(t,"NgForm",function(){return xe}),n.d(t,"NgModel",function(){return Re}),n.d(t,"NgModelGroup",function(){return ke}),n.d(t,"RadioControlValueAccessor",function(){return Y}),n.d(t,"FormControlDirective",function(){return Ne}),n.d(t,"FormControlName",function(){return He}),n.d(t,"FormGroupDirective",function(){return Le}),n.d(t,"FormArrayName",function(){return ze}),n.d(t,"FormGroupName",function(){return je}),n.d(t,"NgSelectOption",function(){return ne}),n.d
 (t,"SelectControlValueAccessor",function(){return te}),n.d(t,"SelectMultipleControlValueAccessor",function(){return ie}),n.d(t,"CheckboxRequiredValidator",function(){return Ge}),n.d(t,"EmailValidator",function(){return $e}),n.d(t,"MaxLengthValidator",function(){return Xe}),n.d(t,"MinLengthValidator",function(){return Qe}),n.d(t,"PatternValidator",function(){return et}),n.d(t,"RequiredValidator",function(){return Ue}),n.d(t,"FormBuilder",function(){return tt}),n.d(t,"AbstractControl",function(){return ge}),n.d(t,"FormArray",function(){return be}),n.d(t,"FormControl",function(){return ye}),n.d(t,"FormGroup",function(){return ve}),n.d(t,"NG_ASYNC_VALIDATORS",function(){return F}),n.d(t,"NG_VALIDATORS",function(){return L}),n.d(t,"Validators",function(){return V}),n.d(t,"VERSION",function(){return nt}),n.d(t,"FormsModule",function(){return st}),n.d(t,"ReactiveFormsModule",function(){return ut}),n.d(t,"\u0275ba",function(){return at}),n.d(t,"\u0275z",function(){return lt}),n.d(t,"\u0275x
 ",function(){return it}),n.d(t,"\u0275y",function(){return ot}),n.d(t,"\u0275a",function(){return B}),n.d(t,"\u0275b",function(){return W}),n.d(t,"\u0275c",function(){return se}),n.d(t,"\u0275d",function(){return ue}),n.d(t,"\u0275e",function(){return _e}),n.d(t,"\u0275f",function(){return De}),n.d(t,"\u0275g",function(){return Te}),n.d(t,"\u0275bf",function(){return rt}),n.d(t,"\u0275bb",function(){return G}),n.d(t,"\u0275bc",function(){return K}),n.d(t,"\u0275h",function(){return Z}),n.d(t,"\u0275i",function(){return Q}),n.d(t,"\u0275bd",function(){return X}),n.d(t,"\u0275be",function(){return J}),n.d(t,"\u0275j",function(){return Pe}),n.d(t,"\u0275k",function(){return Be}),n.d(t,"\u0275l",function(){return Ae}),n.d(t,"\u0275n",function(){return Ve}),n.d(t,"\u0275m",function(){return Fe}),n.d(t,"\u0275o",function(){return ee}),n.d(t,"\u0275q",function(){return oe}),n.d(t,"\u0275p",function(){return re}),n.d(t,"\u0275s",function(){return qe}),n.d(t,"\u0275t",function(){return Ke}),
 n.d(t,"\u0275v",function(){return Ye}),n.d(t,"\u0275u",function(){return Ze}),n.d(t,"\u0275w",function(){return Je}),n.d(t,"\u0275r",function(){return We});var N=function(){function e(){}return Object.defineProperty(e.prototype,"value",{get:function(){return this.control?this.control.value:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"valid",{get:function(){return this.control?this.control.valid:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"invalid",{get:function(){return this.control?this.control.invalid:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"pending",{get:function(){return this.control?this.control.pending:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"disabled",{get:function(){return this.control?this.control.disabled:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"enabled",{get:function(){return this.control?this.control.enabled:null},enumera
 ble:!0,configurable:!0}),Object.defineProperty(e.prototype,"errors",{get:function(){return this.control?this.control.errors:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"pristine",{get:function(){return this.control?this.control.pristine:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"dirty",{get:function(){return this.control?this.control.dirty:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"touched",{get:function(){return this.control?this.control.touched:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"status",{get:function(){return this.control?this.control.status:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"untouched",{get:function(){return this.control?this.control.untouched:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"statusChanges",{get:function(){return this.control?this.control.statusChanges:null},enumerable:!0,configu
 rable:!0}),Object.defineProperty(e.prototype,"valueChanges",{get:function(){return this.control?this.control.valueChanges:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"path",{get:function(){return null},enumerable:!0,configurable:!0}),e.prototype.reset=function(e){void 0===e&&(e=void 0),this.control&&this.control.reset(e)},e.prototype.hasError=function(e,t){return!!this.control&&this.control.hasError(e,t)},e.prototype.getError=function(e,t){return this.control?this.control.getError(e,t):null},e}(),A=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(k.__extends)(t,e),Object.defineProperty(t.prototype,"formDirective",{get:function(){return null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"path",{get:function(){return null},enumerable:!0,configurable:!0}),t}(N),L=new D.InjectionToken("NgValidators"),F=new D.InjectionToken("NgAsyncValidators"),j=/^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]
 +(\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/,V=function(){function e(){}return e.min=function(e){return function(t){if(r(t.value)||r(e))return null;var n=parseFloat(t.value);return!isNaN(n)&&n<e?{min:{min:e,actual:t.value}}:null}},e.max=function(e){return function(t){if(r(t.value)||r(e))return null;var n=parseFloat(t.value);return!isNaN(n)&&n>e?{max:{max:e,actual:t.value}}:null}},e.required=function(e){return r(e.value)?{required:!0}:null},e.requiredTrue=function(e){return!0===e.value?null:{required:!0}},e.email=function(e){return j.test(e.value)?null:{email:!0}},e.minLength=function(e){return function(t){if(r(t.value))return null;var n=t.value?t.value.length:0;return n<e?{minlength:{requiredLength:e,actualLength:n}}:null}},e.maxLength=function(e){return function(t){var n=t.value?t.value.length:0;return n>e?{maxlength:{requiredLength:e,actualLength:n}}:null}},e.pattern=function(t){if(!t)return e.n
 ullValidator;var n,i;return"string"==typeof t?(i="^"+t+"$",n=new RegExp(i)):(i=t.toString(),n=t),function(e){if(r(e.value))return null;var t=e.value;return n.test(t)?null:{pattern:{requiredPattern:i,actualValue:t}}}},e.nullValidator=function(e){return null},e.compose=function(e){if(!e)return null;var t=e.filter(i);return 0==t.length?null:function(e){return l(function(e,n){return t.map(function(t){return t(e)})}(e))}},e.composeAsync=function(e){if(!e)return null;var t=e.filter(i);return 0==t.length?null:function(e){var n=function(e,n){return t.map(function(t){return t(e)})}(e).map(o);return M.a.call(Object(I.a)(n),l)}},e}(),z=new D.InjectionToken("NgValueAccessor"),B={provide:z,useExisting:Object(D.forwardRef)(function(){return H}),multi:!0},H=function(){function e(e,t){this._renderer=e,this._elementRef=t,this.onChange=function(e){},this.onTouched=function(){}}return e.prototype.writeValue=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"checked",e)},e.prototype
 .registerOnChange=function(e){this.onChange=e},e.prototype.registerOnTouched=function(e){this.onTouched=e},e.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},e}(),W={provide:z,useExisting:Object(D.forwardRef)(function(){return U}),multi:!0},q=new D.InjectionToken("CompositionEventMode"),U=function(){function e(e,t,n){this._renderer=e,this._elementRef=t,this._compositionMode=n,this.onChange=function(e){},this.onTouched=function(){},this._composing=!1,null==this._compositionMode&&(this._compositionMode=!function(){var e=Object(P.s)()?Object(P.s)().getUserAgent():"";return/android (\d+)/.test(e.toLowerCase())}())}return e.prototype.writeValue=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"value",null==e?"":e)},e.prototype.registerOnChange=function(e){this.onChange=e},e.prototype.registerOnTouched=function(e){this.onTouched=e},e.prototype.setDisabledState=function(e){this._renderer.setProperty(this._e
 lementRef.nativeElement,"disabled",e)},e.prototype._handleInput=function(e){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(e)},e.prototype._compositionStart=function(){this._composing=!0},e.prototype._compositionEnd=function(e){this._composing=!1,this._compositionMode&&this.onChange(e)},e}(),G={provide:z,useExisting:Object(D.forwardRef)(function(){return K}),multi:!0},K=function(){function e(e,t){this._renderer=e,this._elementRef=t,this.onChange=function(e){},this.onTouched=function(){}}return e.prototype.writeValue=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"value",null==e?"":e)},e.prototype.registerOnChange=function(e){this.onChange=function(t){e(""==t?null:parseFloat(t))}},e.prototype.registerOnTouched=function(e){this.onTouched=e},e.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},e}(),$=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this
 ;return t._parent=null,t.name=null,t.valueAccessor=null,t._rawValidators=[],t._rawAsyncValidators=[],t}return Object(k.__extends)(t,e),Object.defineProperty(t.prototype,"validator",{get:function(){return u()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"asyncValidator",{get:function(){return u()},enumerable:!0,configurable:!0}),t}(N),Z={provide:z,useExisting:Object(D.forwardRef)(function(){return Y}),multi:!0},Q=function(){function e(){this._accessors=[]}return e.prototype.add=function(e,t){this._accessors.push([e,t])},e.prototype.remove=function(e){for(var t=this._accessors.length-1;t>=0;--t)if(this._accessors[t][1]===e)return void this._accessors.splice(t,1)},e.prototype.select=function(e){var t=this;this._accessors.forEach(function(n){t._isSameGroup(n,e)&&n[1]!==e&&n[1].fireUncheck(e.value)})},e.prototype._isSameGroup=function(e,t){return!!e[0].control&&e[0]._parent===t._control._parent&&e[1].name===t.name},e}(),Y=function(){function e(e,t,n,r){this._rendere
 r=e,this._elementRef=t,this._registry=n,this._injector=r,this.onChange=function(){},this.onTouched=function(){}}return e.prototype.ngOnInit=function(){this._control=this._injector.get($),this._checkName(),this._registry.add(this._control,this)},e.prototype.ngOnDestroy=function(){this._registry.remove(this)},e.prototype.writeValue=function(e){this._state=e===this.value,this._renderer.setProperty(this._elementRef.nativeElement,"checked",this._state)},e.prototype.registerOnChange=function(e){var t=this;this._fn=e,this.onChange=function(){e(t.value),t._registry.select(t)}},e.prototype.fireUncheck=function(e){this.writeValue(e)},e.prototype.registerOnTouched=function(e){this.onTouched=e},e.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},e.prototype._checkName=function(){this.name&&this.formControlName&&this.name!==this.formControlName&&this._throwNameError(),!this.name&&this.formControlName&&(this.name=this.formControlName)}
 ,e.prototype._throwNameError=function(){throw new Error('\n      If you define both a name and a formControlName attribute on your radio button, their values\n      must match. Ex: <input type="radio" formControlName="food" name="food">\n    ')},e}(),X={provide:z,useExisting:Object(D.forwardRef)(function(){return J}),multi:!0},J=function(){function e(e,t){this._renderer=e,this._elementRef=t,this.onChange=function(e){},this.onTouched=function(){}}return e.prototype.writeValue=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"value",parseFloat(e))},e.prototype.registerOnChange=function(e){this.onChange=function(t){e(""==t?null:parseFloat(t))}},e.prototype.registerOnTouched=function(e){this.onTouched=e},e.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},e}(),ee={provide:z,useExisting:Object(D.forwardRef)(function(){return te}),multi:!0},te=function(){function e(e,t){this._renderer=e,this._elementRef=t,t
 his._optionMap=new Map,this._idCounter=0,this.onChange=function(e){},this.onTouched=function(){},this._compareWith=D["\u0275looseIdentical"]}return Object.defineProperty(e.prototype,"compareWith",{set:function(e){if("function"!=typeof e)throw new Error("compareWith must be a function, but received "+JSON.stringify(e));this._compareWith=e},enumerable:!0,configurable:!0}),e.prototype.writeValue=function(e){this.value=e;var t=this._getOptionId(e);null==t&&this._renderer.setProperty(this._elementRef.nativeElement,"selectedIndex",-1);var n=c(t,e);this._renderer.setProperty(this._elementRef.nativeElement,"value",n)},e.prototype.registerOnChange=function(e){var t=this;this.onChange=function(n){t.value=t._getOptionValue(n),e(t.value)}},e.prototype.registerOnTouched=function(e){this.onTouched=e},e.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},e.prototype._registerOption=function(){return(this._idCounter++).toString()},e.protot
 ype._getOptionId=function(e){for(var t=0,n=Array.from(this._optionMap.keys());t<n.length;t++){var r=n[t];if(this._compareWith(this._optionMap.get(r),e))return r}return null},e.prototype._getOptionValue=function(e){var t=e.split(":")[0];return this._optionMap.has(t)?this._optionMap.get(t):e},e}(),ne=function(){function e(e,t,n){this._element=e,this._renderer=t,this._select=n,this._select&&(this.id=this._select._registerOption())}return Object.defineProperty(e.prototype,"ngValue",{set:function(e){null!=this._select&&(this._select._optionMap.set(this.id,e),this._setElementValue(c(this.id,e)),this._select.writeValue(this._select.value))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{set:function(e){this._setElementValue(e),this._select&&this._select.writeValue(this._select.value)},enumerable:!0,configurable:!0}),e.prototype._setElementValue=function(e){this._renderer.setProperty(this._element.nativeElement,"value",e)},e.prototype.ngOnDestroy=function(){this.
 _select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))},e}(),re={provide:z,useExisting:Object(D.forwardRef)(function(){return ie}),multi:!0},ie=function(){function e(e,t){this._renderer=e,this._elementRef=t,this._optionMap=new Map,this._idCounter=0,this.onChange=function(e){},this.onTouched=function(){},this._compareWith=D["\u0275looseIdentical"]}return Object.defineProperty(e.prototype,"compareWith",{set:function(e){if("function"!=typeof e)throw new Error("compareWith must be a function, but received "+JSON.stringify(e));this._compareWith=e},enumerable:!0,configurable:!0}),e.prototype.writeValue=function(e){var t=this;this.value=e;var n;if(Array.isArray(e)){var r=e.map(function(e){return t._getOptionId(e)});n=function(e,t){e._setSelected(r.indexOf(t.toString())>-1)}}else n=function(e,t){e._setSelected(!1)};this._optionMap.forEach(n)},e.prototype.registerOnChange=function(e){var t=this;this.onChange=function(n){var r=[];if(n.hasOwnProperty("se
 lectedOptions"))for(var i=n.selectedOptions,o=0;o<i.length;o++){var l=i.item(o),a=t._getOptionValue(l.value);r.push(a)}else for(i=n.options,o=0;o<i.length;o++)(l=i.item(o)).selected&&(a=t._getOptionValue(l.value),r.push(a));t.value=r,e(r)}},e.prototype.registerOnTouched=function(e){this.onTouched=e},e.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},e.prototype._registerOption=function(e){var t=(this._idCounter++).toString();return this._optionMap.set(t,e),t},e.prototype._getOptionId=function(e){for(var t=0,n=Array.from(this._optionMap.keys());t<n.length;t++){var r=n[t];if(this._compareWith(this._optionMap.get(r)._value,e))return r}return null},e.prototype._getOptionValue=function(e){var t=e.split(":")[0];return this._optionMap.has(t)?this._optionMap.get(t)._value:e},e}(),oe=function(){function e(e,t,n){this._element=e,this._renderer=t,this._select=n,this._select&&(this.id=this._select._registerOption(this))}return Objec
 t.defineProperty(e.prototype,"ngValue",{set:function(e){null!=this._select&&(this._value=e,this._setElementValue(d(this.id,e)),this._select.writeValue(this._select.value))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{set:function(e){this._select?(this._value=e,this._setElementValue(d(this.id,e)),this._select.writeValue(this._select.value)):this._setElementValue(e)},enumerable:!0,configurable:!0}),e.prototype._setElementValue=function(e){this._renderer.setProperty(this._element.nativeElement,"value",e)},e.prototype._setSelected=function(e){this._renderer.setProperty(this._element.nativeElement,"selected",e)},e.prototype.ngOnDestroy=function(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))},e}(),le=[H,J,K,te,ie,Y],ae=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(k.__extends)(t,e),t.prototype.ngOnInit=function(){this._checkParentType(),this.formDirective.addFormGr
 oup(this)},t.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeFormGroup(this)},Object.defineProperty(t.prototype,"control",{get:function(){return this.formDirective.getFormGroup(this)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"path",{get:function(){return p(this.name,this._parent)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"formDirective",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"validator",{get:function(){return v(this._validators)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"asyncValidator",{get:function(){return b(this._asyncValidators)},enumerable:!0,configurable:!0}),t.prototype._checkParentType=function(){},t}(A),se=function(){function e(e){this._cd=e}return Object.defineProperty(e.prototype,"ngClassUntouched",{get:function(){return!!this._cd.control&&this._cd.control.untouched},enumer
 able:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngClassTouched",{get:function(){return!!this._cd.control&&this._cd.control.touched},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngClassPristine",{get:function(){return!!this._cd.control&&this._cd.control.pristine},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngClassDirty",{get:function(){return!!this._cd.control&&this._cd.control.dirty},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngClassValid",{get:function(){return!!this._cd.control&&this._cd.control.valid},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngClassInvalid",{get:function(){return!!this._cd.control&&this._cd.control.invalid},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngClassPending",{get:function(){return!!this._cd.control&&this._cd.control.pending},enumerable:!0,configurable:!0}),e}(),ue={"[class.ng-untouched]":"ngClassUntouched","[class.ng-touched]"
 :"ngClassTouched","[class.ng-pristine]":"ngClassPristine","[class.ng-dirty]":"ngClassDirty","[class.ng-valid]":"ngClassValid","[class.ng-invalid]":"ngClassInvalid","[class.ng-pending]":"ngClassPending"},ce=function(e){function t(t){return e.call(this,t)||this}return Object(k.__extends)(t,e),t}(se),de=function(e){function t(t){return e.call(this,t)||this}return Object(k.__extends)(t,e),t}(se),pe="VALID",fe="INVALID",he="PENDING",me="DISABLED",ge=function(){function e(e,t){this.validator=e,this.asyncValidator=t,this._onCollectionChange=function(){},this.pristine=!0,this.touched=!1,this._onDisabledChange=[]}return Object.defineProperty(e.prototype,"parent",{get:function(){return this._parent},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"valid",{get:function(){return this.status===pe},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"invalid",{get:function(){return this.status===fe},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,
 "pending",{get:function(){return this.status==he},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"disabled",{get:function(){return this.status===me},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"enabled",{get:function(){return this.status!==me},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"dirty",{get:function(){return!this.pristine},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"untouched",{get:function(){return!this.touched},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"updateOn",{get:function(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"},enumerable:!0,configurable:!0}),e.prototype.setValidators=function(e){this.validator=E(e)},e.prototype.setAsyncValidators=function(e){this.asyncValidator=S(e)},e.prototype.clearValidators=function(){this.validator=null},e.prototype.clearAsyncValidators=function(){this.asyncValidator=null},e.prototype.markAsTouc
 hed=function(e){void 0===e&&(e={}),this.touched=!0,this._parent&&!e.onlySelf&&this._parent.markAsTouched(e)},e.prototype.markAsUntouched=function(e){void 0===e&&(e={}),this.touched=!1,this._pendingTouched=!1,this._forEachChild(function(e){e.markAsUntouched({onlySelf:!0})}),this._parent&&!e.onlySelf&&this._parent._updateTouched(e)},e.prototype.markAsDirty=function(e){void 0===e&&(e={}),this.pristine=!1,this._parent&&!e.onlySelf&&this._parent.markAsDirty(e)},e.prototype.markAsPristine=function(e){void 0===e&&(e={}),this.pristine=!0,this._pendingDirty=!1,this._forEachChild(function(e){e.markAsPristine({onlySelf:!0})}),this._parent&&!e.onlySelf&&this._parent._updatePristine(e)},e.prototype.markAsPending=function(e){void 0===e&&(e={}),this.status=he,this._parent&&!e.onlySelf&&this._parent.markAsPending(e)},e.prototype.disable=function(e){void 0===e&&(e={}),this.status=me,this.errors=null,this._forEachChild(function(e){e.disable({onlySelf:!0})}),this._updateValue(),!1!==e.emitEvent&&(this
 .valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors(!!e.onlySelf),this._onDisabledChange.forEach(function(e){return e(!0)})},e.prototype.enable=function(e){void 0===e&&(e={}),this.status=pe,this._forEachChild(function(e){e.enable({onlySelf:!0})}),this.updateValueAndValidity({onlySelf:!0,emitEvent:e.emitEvent}),this._updateAncestors(!!e.onlySelf),this._onDisabledChange.forEach(function(e){return e(!1)})},e.prototype._updateAncestors=function(e){this._parent&&!e&&(this._parent.updateValueAndValidity(),this._parent._updatePristine(),this._parent._updateTouched())},e.prototype.setParent=function(e){this._parent=e},e.prototype.updateValueAndValidity=function(e){void 0===e&&(e={}),this._setInitialStatus(),this._updateValue(),this.enabled&&(this._cancelExistingSubscription(),this.errors=this._runValidator(),this.status=this._calculateStatus(),this.status!==pe&&this.status!==he||this._runAsyncValidator(e.emitEvent)),!1!==e.emitEvent&&(this.valueChanges
 .emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!e.onlySelf&&this._parent.updateValueAndValidity(e)},e.prototype._updateTreeValidity=function(e){void 0===e&&(e={emitEvent:!0}),this._forEachChild(function(t){return t._updateTreeValidity(e)}),this.updateValueAndValidity({onlySelf:!0,emitEvent:e.emitEvent})},e.prototype._setInitialStatus=function(){this.status=this._allControlsDisabled()?me:pe},e.prototype._runValidator=function(){return this.validator?this.validator(this):null},e.prototype._runAsyncValidator=function(e){var t=this;if(this.asyncValidator){this.status=he;var n=o(this.asyncValidator(this));this._asyncValidationSubscription=n.subscribe(function(n){return t.setErrors(n,{emitEvent:e})})}},e.prototype._cancelExistingSubscription=function(){this._asyncValidationSubscription&&this._asyncValidationSubscription.unsubscribe()},e.prototype.setErrors=function(e,t){void 0===t&&(t={}),this.errors=e,this._updateControlsErrors(!1!==t.emitEvent)},e.prototype.get=fu
 nction(e){return function(e,t,n){return null==t?null:(t instanceof Array||(t=t.split(".")),t instanceof Array&&0===t.length?null:t.reduce(function(e,t){return e instanceof ve?e.controls[t]||null:e instanceof be?e.at(t)||null:null},e))}(this,e)},e.prototype.getError=function(e,t){var n=t?this.get(t):this;return n&&n.errors?n.errors[e]:null},e.prototype.hasError=function(e,t){return!!this.getError(e,t)},Object.defineProperty(e.prototype,"root",{get:function(){for(var e=this;e._parent;)e=e._parent;return e},enumerable:!0,configurable:!0}),e.prototype._updateControlsErrors=function(e){this.status=this._calculateStatus(),e&&this.statusChanges.emit(this.status),this._parent&&this._parent._updateControlsErrors(e)},e.prototype._initObservables=function(){this.valueChanges=new D.EventEmitter,this.statusChanges=new D.EventEmitter},e.prototype._calculateStatus=function(){return this._allControlsDisabled()?me:this.errors?fe:this._anyControlsHaveStatus(he)?he:this._anyControlsHaveStatus(fe)?fe:p
 e},e.prototype._anyControlsHaveStatus=function(e){return this._anyControls(function(t){return t.status===e})},e.prototype._anyControlsDirty=function(){return this._anyControls(function(e){return e.dirty})},e.prototype._anyControlsTouched=function(){return this._anyControls(function(e){return e.touched})},e.prototype._updatePristine=function(e){void 0===e&&(e={}),this.pristine=!this._anyControlsDirty(),this._parent&&!e.onlySelf&&this._parent._updatePristine(e)},e.prototype._updateTouched=function(e){void 0===e&&(e={}),this.touched=this._anyControlsTouched(),this._parent&&!e.onlySelf&&this._parent._updateTouched(e)},e.prototype._isBoxedValue=function(e){return"object"==typeof e&&null!==e&&2===Object.keys(e).length&&"value"in e&&"disabled"in e},e.prototype._registerOnCollectionChange=function(e){this._onCollectionChange=e},e.prototype._setUpdateStrategy=function(e){O(e)&&null!=e.updateOn&&(this._updateOn=e.updateOn)},e}(),ye=function(e){function t(t,n,r){void 0===t&&(t=null);var i=e.ca
 ll(this,E(n),S(r,n))||this;return i._onChange=[],i._applyFormState(t),i._setUpdateStrategy(n),i.updateValueAndValidity({onlySelf:!0,emitEvent:!1}),i._initObservables(),i}return Object(k.__extends)(t,e),t.prototype.setValue=function(e,t){var n=this;void 0===t&&(t={}),this.value=this._pendingValue=e,this._onChange.length&&!1!==t.emitModelToViewChange&&this._onChange.forEach(function(e){return e(n.value,!1!==t.emitViewToModelChange)}),this.updateValueAndValidity(t)},t.prototype.patchValue=function(e,t){void 0===t&&(t={}),this.setValue(e,t)},t.prototype.reset=function(e,t){void 0===e&&(e=null),void 0===t&&(t={}),this._applyFormState(e),this.markAsPristine(t),this.markAsUntouched(t),this.setValue(this.value,t),this._pendingChange=!1},t.prototype._updateValue=function(){},t.prototype._anyControls=function(e){return!1},t.prototype._allControlsDisabled=function(){return this.disabled},t.prototype.registerOnChange=function(e){this._onChange.push(e)},t.prototype._clearChangeFns=function(){thi
 s._onChange=[],this._onDisabledChange=[],this._onCollectionChange=function(){}},t.prototype.registerOnDisabledChange=function(e){this._onDisabledChange.push(e)},t.prototype._forEachChild=function(e){},t.prototype._syncPendingControls=function(){return!("submit"!==this.updateOn||(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),!this._pendingChange)||(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),0))},t.prototype._applyFormState=function(e){this._isBoxedValue(e)?(this.value=this._pendingValue=e.value,e.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=e},t}(ge),ve=function(e){function t(t,n,r){var i=e.call(this,E(n),S(r,n))||this;return i.controls=t,i._initObservables(),i._setUpdateStrategy(n),i._setUpControls(),i.updateValueAndValidity({onlySelf:!0,emitEvent:!1}),i}return Object(k.__extends)(t,e),t.prototype.registerControl=function(e,t){return this.cont
 rols[e]?this.controls[e]:(this.controls[e]=t,t.setParent(this),t._registerOnCollectionChange(this._onCollectionChange),t)},t.prototype.addControl=function(e,t){this.registerControl(e,t),this.updateValueAndValidity(),this._onCollectionChange()},t.prototype.removeControl=function(e){this.controls[e]&&this.controls[e]._registerOnCollectionChange(function(){}),delete this.controls[e],this.updateValueAndValidity(),this._onCollectionChange()},t.prototype.setControl=function(e,t){this.controls[e]&&this.controls[e]._registerOnCollectionChange(function(){}),delete this.controls[e],t&&this.registerControl(e,t),this.updateValueAndValidity(),this._onCollectionChange()},t.prototype.contains=function(e){return this.controls.hasOwnProperty(e)&&this.controls[e].enabled},t.prototype.setValue=function(e,t){var n=this;void 0===t&&(t={}),this._checkAllValuesPresent(e),Object.keys(e).forEach(function(r){n._throwIfControlMissing(r),n.controls[r].setValue(e[r],{onlySelf:!0,emitEvent:t.emitEvent})}),this.u
 pdateValueAndValidity(t)},t.prototype.patchValue=function(e,t){var n=this;void 0===t&&(t={}),Object.keys(e).forEach(function(r){n.controls[r]&&n.controls[r].patchValue(e[r],{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t)},t.prototype.reset=function(e,t){void 0===e&&(e={}),void 0===t&&(t={}),this._forEachChild(function(n,r){n.reset(e[r],{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t),this._updatePristine(t),this._updateTouched(t)},t.prototype.getRawValue=function(){return this._reduceChildren({},function(e,t,n){return e[n]=t instanceof ye?t.value:t.getRawValue(),e})},t.prototype._syncPendingControls=function(){var e=this._reduceChildren(!1,function(e,t){return!!t._syncPendingControls()||e});return e&&this.updateValueAndValidity({onlySelf:!0}),e},t.prototype._throwIfControlMissing=function(e){if(!Object.keys(this.controls).length)throw new Error("\n        There are no form controls registered with this group yet.  If you're using ngModel,\n
         you may want to check next tick (e.g. use setTimeout).\n      ");if(!this.controls[e])throw new Error("Cannot find form control with name: "+e+".")},t.prototype._forEachChild=function(e){var t=this;Object.keys(this.controls).forEach(function(n){return e(t.controls[n],n)})},t.prototype._setUpControls=function(){var e=this;this._forEachChild(function(t){t.setParent(e),t._registerOnCollectionChange(e._onCollectionChange)})},t.prototype._updateValue=function(){this.value=this._reduceValue()},t.prototype._anyControls=function(e){var t=this,n=!1;return this._forEachChild(function(r,i){n=n||t.contains(i)&&e(r)}),n},t.prototype._reduceValue=function(){var e=this;return this._reduceChildren({},function(t,n,r){return(n.enabled||e.disabled)&&(t[r]=n.value),t})},t.prototype._reduceChildren=function(e,t){var n=e;return this._forEachChild(function(e,r){n=t(n,e,r)}),n},t.prototype._allControlsDisabled=function(){for(var e=0,t=Object.keys(this.controls);e<t.length;e++)if(this.controls[t[e]]
 .enabled)return!1;return Object.keys(this.controls).length>0||this.disabled},t.prototype._checkAllValuesPresent=function(e){this._forEachChild(function(t,n){if(void 0===e[n])throw new Error("Must supply a value for form control with name: '"+n+"'.")})},t}(ge),be=function(e){function t(t,n,r){var i=e.call(this,E(n),S(r,n))||this;return i.controls=t,i._initObservables(),i._setUpdateStrategy(n),i._setUpControls(),i.updateValueAndValidity({onlySelf:!0,emitEvent:!1}),i}return Object(k.__extends)(t,e),t.prototype.at=function(e){return this.controls[e]},t.prototype.push=function(e){this.controls.push(e),this._registerControl(e),this.updateValueAndValidity(),this._onCollectionChange()},t.prototype.insert=function(e,t){this.controls.splice(e,0,t),this._registerControl(t),this.updateValueAndValidity(),this._onCollectionChange()},t.prototype.removeAt=function(e){this.controls[e]&&this.controls[e]._registerOnCollectionChange(function(){}),this.controls.splice(e,1),this.updateValueAndValidity(),
 this._onCollectionChange()},t.prototype.setControl=function(e,t){this.controls[e]&&this.controls[e]._registerOnCollectionChange(function(){}),this.controls.splice(e,1),t&&(this.controls.splice(e,0,t),this._registerControl(t)),this.updateValueAndValidity(),this._onCollectionChange()},Object.defineProperty(t.prototype,"length",{get:function(){return this.controls.length},enumerable:!0,configurable:!0}),t.prototype.setValue=function(e,t){var n=this;void 0===t&&(t={}),this._checkAllValuesPresent(e),e.forEach(function(e,r){n._throwIfControlMissing(r),n.at(r).setValue(e,{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t)},t.prototype.patchValue=function(e,t){var n=this;void 0===t&&(t={}),e.forEach(function(e,r){n.at(r)&&n.at(r).patchValue(e,{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t)},t.prototype.reset=function(e,t){void 0===e&&(e=[]),void 0===t&&(t={}),this._forEachChild(function(n,r){n.reset(e[r],{onlySelf:!0,emitEvent:t.emitEvent})}),this.upd
 ateValueAndValidity(t),this._updatePristine(t),this._updateTouched(t)},t.prototype.getRawValue=function(){return this.controls.map(function(e){return e instanceof ye?e.value:e.getRawValue()})},t.prototype._syncPendingControls=function(){var e=this.controls.reduce(function(e,t){return!!t._syncPendingControls()||e},!1);return e&&this.updateValueAndValidity({onlySelf:!0}),e},t.prototype._throwIfControlMissing=function(e){if(!this.controls.length)throw new Error("\n        There are no form controls registered with this array yet.  If you're using ngModel,\n        you may want to check next tick (e.g. use setTimeout).\n      ");if(!this.at(e))throw new Error("Cannot find form control at index "+e)},t.prototype._forEachChild=function(e){this.controls.forEach(function(t,n){e(t,n)})},t.prototype._updateValue=function(){var e=this;this.value=this.controls.filter(function(t){return t.enabled||e.disabled}).map(function(e){return e.value})},t.prototype._anyControls=function(e){return this.con
 trols.some(function(t){return t.enabled&&e(t)})},t.prototype._setUpControls=function(){var e=this;this._forEachChild(function(t){return e._registerControl(t)})},t.prototype._checkAllValuesPresent=function(e){this._forEachChild(function(t,n){if(void 0===e[n])throw new Error("Must supply a value for form control at index: "+n+".")})},t.prototype._allControlsDisabled=function(){for(var e=0,t=this.controls;e<t.length;e++)if(t[e].enabled)return!1;return this.controls.length>0||this.disabled},t.prototype._registerControl=function(e){e.setParent(this),e._registerOnCollectionChange(this._onCollectionChange)},t}(ge),_e={provide:A,useExisting:Object(D.forwardRef)(function(){return xe})},we=Promise.resolve(null),xe=function(e){function t(t,n){var r=e.call(this)||this;return r.submitted=!1,r._directives=[],r.ngSubmit=new D.EventEmitter,r.form=new ve({},v(t),b(n)),r}return Object(k.__extends)(t,e),t.prototype.ngAfterViewInit=function(){this._setUpdateStrategy()},Object.defineProperty(t.prototype
 ,"formDirective",{get:function(){return this},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"control",{get:function(){return this.form},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"path",{get:function(){return[]},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"controls",{get:function(){return this.form.controls},enumerable:!0,configurable:!0}),t.prototype.addControl=function(e){var t=this;we.then(function(){var n=t._findContainer(e.path);e.control=n.registerControl(e.name,e.control),f(e.control,e),e.control.updateValueAndValidity({emitEvent:!1}),t._directives.push(e)})},t.prototype.getControl=function(e){return this.form.get(e.path)},t.prototype.removeControl=function(e){var t=this;we.then(function(){var n=t._findContainer(e.path);n&&n.removeControl(e.name),C(t._directives,e)})},t.prototype.addFormGroup=function(e){var t=this;we.then(function(){var n=t._findContainer(e.path),r=new ve({});m(r,e),n.registerControl(e.name,r),
 r.updateValueAndValidity({emitEvent:!1})})},t.prototype.removeFormGroup=function(e){var t=this;we.then(function(){var n=t._findContainer(e.path);n&&n.removeControl(e.name)})},t.prototype.getFormGroup=function(e){return this.form.get(e.path)},t.prototype.updateModel=function(e,t){var n=this;we.then(function(){n.form.get(e.path).setValue(t)})},t.prototype.setValue=function(e){this.control.setValue(e)},t.prototype.onSubmit=function(e){return this.submitted=!0,w(this.form,this._directives),this.ngSubmit.emit(e),!1},t.prototype.onReset=function(){this.resetForm()},t.prototype.resetForm=function(e){void 0===e&&(e=void 0),this.form.reset(e),this.submitted=!1},t.prototype._setUpdateStrategy=function(){this.options&&null!=this.options.updateOn&&(this.form._updateOn=this.options.updateOn)},t.prototype._findContainer=function(e){return e.pop(),e.length?this.form.get(e):this.form},t}(A),Ce='\n    <div [formGroup]="myGroup">\n      <input formControlName="firstName">\n    </div>\n\n    In your c
 lass:\n\n    this.myGroup = new FormGroup({\n       firstName: new FormControl()\n    });',Ee='\n    <div [formGroup]="myGroup">\n       <div formGroupName="person">\n          <input formControlName="firstName">\n       </div>\n    </div>\n\n    In your class:\n\n    this.myGroup = new FormGroup({\n       person: new FormGroup({ firstName: new FormControl() })\n    });',Se='\n    <form>\n       <div ngModelGroup="person">\n          <input [(ngModel)]="person.name" name="firstName">\n       </div>\n    </form>',Oe=function(){function e(){}return e.modelParentException=function(){throw new Error('\n      ngModel cannot be used to register form controls with a parent formGroup directive.  Try using\n      formGroup\'s partner directive "formControlName" instead.  Example:\n\n      '+Ce+'\n\n      Or, if you\'d like to avoid registering this form control, indicate that it\'s standalone in ngModelOptions:\n\n      Example:\n\n      \n    <div [formGroup]="myGroup">\n       <input formC
 ontrolName="firstName">\n       <input [(ngModel)]="showMoreControls" [ngModelOptions]="{standalone: true}">\n    </div>\n  ')},e.formGroupNameException=function(){throw new Error("\n      ngModel cannot be used to register form controls with a parent formGroupName or formArrayName directive.\n\n      Option 1: Use formControlName instead of ngModel (reactive strategy):\n\n      "+Ee+"\n\n      Option 2:  Update ngModel's parent be ngModelGroup (template-driven strategy):\n\n      "+Se)},e.missingNameException=function(){throw new Error('If ngModel is used within a form tag, either the name attribute must be set or the form\n      control must be defined as \'standalone\' in ngModelOptions.\n\n      Example 1: <input [(ngModel)]="person.firstName" name="first">\n      Example 2: <input [(ngModel)]="person.firstName" [ngModelOptions]="{standalone: true}">')},e.modelGroupParentException=function(){throw new Error("\n      ngModelGroup cannot be used with a parent formGroup directive.\
 n\n      Option 1: Use formGroupName instead of ngModelGroup (reactive strategy):\n\n      "+Ee+"\n\n      Option 2:  Use a regular form tag instead of the formGroup directive (template-driven strategy):\n\n      "+Se)},e}(),Te={provide:A,useExisting:Object(D.forwardRef)(function(){return ke})},ke=function(e){function t(t,n,r){var i=e.call(this)||this;return i._parent=t,i._validators=n,i._asyncValidators=r,i}return Object(k.__extends)(t,e),t.prototype._checkParentType=function(){this._parent instanceof t||this._parent instanceof xe||Oe.modelGroupParentException()},t}(ae),De={provide:$,useExisting:Object(D.forwardRef)(function(){return Re})},Ie=Promise.resolve(null),Re=function(e){function t(t,n,r,i){var o=e.call(this)||this;return o.control=new ye,o._registered=!1,o.update=new D.EventEmitter,o._parent=t,o._rawValidators=n||[],o._rawAsyncValidators=r||[],o.valueAccessor=x(o,i),o}return Object(k.__extends)(t,e),t.prototype.ngOnChanges=function(e){this._checkForErrors(),this._registere
 d||this._setUpControl(),"isDisabled"in e&&this._updateDisabled(e),_(e,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)},t.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeControl(this)},Object.defineProperty(t.prototype,"path",{get:function(){return this._parent?p(this.name,this._parent):[this.name]},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"formDirective",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"validator",{get:function(){return v(this._rawValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"asyncValidator",{get:function(){return b(this._rawAsyncValidators)},enumerable:!0,configurable:!0}),t.prototype.viewToModelUpdate=function(e){this.viewModel=e,this.update.emit(e)},t.prototype._setUpControl=function(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.form
 Directive.addControl(this),this._registered=!0},t.prototype._setUpdateStrategy=function(){this.options&&null!=this.options.updateOn&&(this.control._updateOn=this.options.updateOn)},t.prototype._isStandalone=function(){return!this._parent||!(!this.options||!this.options.standalone)},t.prototype._setUpStandalone=function(){f(this.control,this),this.control.updateValueAndValidity({emitEvent:!1})},t.prototype._checkForErrors=function(){this._isStandalone()||this._checkParentType(),this._checkName()},t.prototype._checkParentType=function(){!(this._parent instanceof ke)&&this._parent instanceof ae?Oe.formGroupNameException():this._parent instanceof ke||this._parent instanceof xe||Oe.modelParentException()},t.prototype._checkName=function(){this.options&&this.options.name&&(this.name=this.options.name),this._isStandalone()||this.name||Oe.missingNameException()},t.prototype._updateValue=function(e){var t=this;Ie.then(function(){t.control.setValue(e,{emitViewToModelChange:!1})})},t.prototype
 ._updateDisabled=function(e){var t=this,n=e.isDisabled.currentValue,r=""===n||n&&"false"!==n;Ie.then(function(){r&&!t.control.disabled?t.control.disable():!r&&t.control.disabled&&t.control.enable()})},t}($),Me=function(){function e(){}return e.controlParentException=function(){throw new Error("formControlName must be used with a parent formGroup directive.  You'll want to add a formGroup\n       directive and pass it an existing FormGroup instance (you can create one in your class).\n\n      Example:\n\n      "+Ce)},e.ngModelGroupException=function(){throw new Error('formControlName cannot be used with an ngModelGroup parent. It is only compatible with parents\n       that also have a "form" prefix: formGroupName, formArrayName, or formGroup.\n\n       Option 1:  Update the parent to be formGroupName (reactive form strategy)\n\n        '+Ee+"\n\n        Option 2: Use ngModel instead of formControlName (template-driven strategy)\n\n        "+Se)},e.missingFormException=function(){thr
 ow new Error("formGroup expects a FormGroup instance. Please pass one in.\n\n       Example:\n\n       "+Ce)},e.groupParentException=function(){throw new Error("formGroupName must be used with a parent formGroup directive.  You'll want to add a formGroup\n      directive and pass it an existing FormGroup instance (you can create one in your class).\n\n      Example:\n\n      "+Ee)},e.arrayParentException=function(){throw new Error('formArrayName must be used with a parent formGroup directive.  You\'ll want to add a formGroup\n       directive and pass it an existing FormGroup instance (you can create one in your class).\n\n        Example:\n\n        \n    <div [formGroup]="myGroup">\n      <div formArrayName="cities">\n        <div *ngFor="let city of cityArray.controls; index as i">\n          <input [formControlName]="i">\n        </div>\n      </div>\n    </div>\n\n    In your class:\n\n    this.cityArray = new FormArray([new FormControl(\'SF\')]);\n    this.myGroup = new FormGr
 oup({\n      cities: this.cityArray\n    });')},e.disabledAttrWarning=function(){console.warn("\n      It looks like you're using the disabled attribute with a reactive form directive. If you set disabled to true\n      when you set up this control in your component class, the disabled attribute will actually be set in the DOM for\n      you. We recommend using this approach to avoid 'changed after checked' errors.\n       \n      Example: \n      form = new FormGroup({\n        first: new FormControl({value: 'Nancy', disabled: true}, Validators.required),\n        last: new FormControl('Drew', Validators.required)\n      });\n    ")},e}(),Pe={provide:$,useExisting:Object(D.forwardRef)(function(){return Ne})},Ne=function(e){function t(t,n,r){var i=e.call(this)||this;return i.update=new D.EventEmitter,i._rawValidators=t||[],i._rawAsyncValidators=n||[],i.valueAccessor=x(i,r),i}return Object(k.__extends)(t,e),Object.defineProperty(t.prototype,"isDisabled",{set:function(e){Me.disabledAt
 trWarning()},enumerable:!0,configurable:!0}),t.prototype.ngOnChanges=function(e){this._isControlChanged(e)&&(f(this.form,this),this.control.disabled&&this.valueAccessor.setDisabledState&&this.valueAccessor.setDisabledState(!0),this.form.updateValueAndValidity({emitEvent:!1})),_(e,this.viewModel)&&(this.form.setValue(this.model),this.viewModel=this.model)},Object.defineProperty(t.prototype,"path",{get:function(){return[]},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"validator",{get:function(){return v(this._rawValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"asyncValidator",{get:function(){return b(this._rawAsyncValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"control",{get:function(){return this.form},enumerable:!0,configurable:!0}),t.prototype.viewToModelUpdate=function(e){this.viewModel=e,this.update.emit(e)},t.prototype._isControlChanged=function(e){return e.hasOwnProperty("form")},t}($),Ae={provi
 de:A,useExisting:Object(D.forwardRef)(function(){return Le})},Le=function(e){function t(t,n){var r=e.call(this)||this;return r._validators=t,r._asyncValidators=n,r.submitted=!1,r.directives=[],r.form=null,r.ngSubmit=new D.EventEmitter,r}return Object(k.__extends)(t,e),t.prototype.ngOnChanges=function(e){this._checkFormPresent(),e.hasOwnProperty("form")&&(this._updateValidators(),this._updateDomValue(),this._updateRegistrations())},Object.defineProperty(t.prototype,"formDirective",{get:function(){return this},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"control",{get:function(){return this.form},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"path",{get:function(){return[]},enumerable:!0,configurable:!0}),t.prototype.addControl=function(e){var t=this.form.get(e.path);return f(t,e),t.updateValueAndValidity({emitEvent:!1}),this.directives.push(e),t},t.prototype.getControl=function(e){return this.form.get(e.path)},t.prototype.removeControl=functi
 on(e){C(this.directives,e)},t.prototype.addFormGroup=function(e){var t=this.form.get(e.path);m(t,e),t.updateValueAndValidity({emitEvent:!1})},t.prototype.removeFormGroup=function(e){},t.prototype.getFormGroup=function(e){return this.form.get(e.path)},t.prototype.addFormArray=function(e){var t=this.form.get(e.path);m(t,e),t.updateValueAndValidity({emitEvent:!1})},t.prototype.removeFormArray=function(e){},t.prototype.getFormArray=function(e){return this.form.get(e.path)},t.prototype.updateModel=function(e,t){this.form.get(e.path).setValue(t)},t.prototype.onSubmit=function(e){return this.submitted=!0,w(this.form,this.directives),this.ngSubmit.emit(e),!1},t.prototype.onReset=function(){this.resetForm()},t.prototype.resetForm=function(e){void 0===e&&(e=void 0),this.form.reset(e),this.submitted=!1},t.prototype._updateDomValue=function(){var e=this;this.directives.forEach(function(t){var n=e.form.get(t.path);t.control!==n&&(function(e,t){t.valueAccessor.registerOnChange(function(){return g
 (t)}),t.valueAccessor.registerOnTouched(function(){return g(t)}),t._rawValidators.forEach(function(e){e.registerOnValidatorChange&&e.registerOnValidatorChange(null)}),t._rawAsyncValidators.forEach(function(e){e.registerOnValidatorChange&&e.registerOnValidatorChange(null)}),e&&e._clearChangeFns()}(t.control,t),n&&f(n,t),t.control=n)}),this.form._updateTreeValidity({emitEvent:!1})},t.prototype._updateRegistrations=function(){var e=this;this.form._registerOnCollectionChange(function(){return e._updateDomValue()}),this._oldForm&&this._oldForm._registerOnCollectionChange(function(){}),this._oldForm=this.form},t.prototype._updateValidators=function(){var e=v(this._validators);this.form.validator=V.compose([this.form.validator,e]);var t=b(this._asyncValidators);this.form.asyncValidator=V.composeAsync([this.form.asyncValidator,t])},t.prototype._checkFormPresent=function(){this.form||Me.missingFormException()},t}(A),Fe={provide:A,useExisting:Object(D.forwardRef)(function(){return je})},je=fu
 nction(e){function t(t,n,r){var i=e.call(this)||this;return i._parent=t,i._validators=n,i._asyncValidators=r,i}return Object(k.__extends)(t,e),t.prototype._checkParentType=function(){T(this._parent)&&Me.groupParentException()},t}(ae),Ve={provide:A,useExisting:Object(D.forwardRef)(function(){return ze})},ze=function(e){function t(t,n,r){var i=e.call(this)||this;return i._parent=t,i._validators=n,i._asyncValidators=r,i}return Object(k.__extends)(t,e),t.prototype.ngOnInit=function(){this._checkParentType(),this.formDirective.addFormArray(this)},t.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeFormArray(this)},Object.defineProperty(t.prototype,"control",{get:function(){return this.formDirective.getFormArray(this)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"formDirective",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"path",{get:function(){return
  p(this.name,this._parent)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"validator",{get:function(){return v(this._validators)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"asyncValidator",{get:function(){return b(this._asyncValidators)},enumerable:!0,configurable:!0}),t.prototype._checkParentType=function(){T(this._parent)&&Me.arrayParentException()},t}(A),Be={provide:$,useExisting:Object(D.forwardRef)(function(){return He})},He=function(e){function t(t,n,r,i){var o=e.call(this)||this;return o._added=!1,o.update=new D.EventEmitter,o._parent=t,o._rawValidators=n||[],o._rawAsyncValidators=r||[],o.valueAccessor=x(o,i),o}return Object(k.__extends)(t,e),Object.defineProperty(t.prototype,"isDisabled",{set:function(e){Me.disabledAttrWarning()},enumerable:!0,configurable:!0}),t.prototype.ngOnChanges=function(e){this._added||this._setUpControl(),_(e,this.viewModel)&&(this.viewModel=this.model,this.formDirective.updateModel(this,this.model))},t.pro
 totype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeControl(this)},t.prototype.viewToModelUpdate=function(e){this.viewModel=e,this.update.emit(e)},Object.defineProperty(t.prototype,"path",{get:function(){return p(this.name,this._parent)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"formDirective",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"validator",{get:function(){return v(this._rawValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"asyncValidator",{get:function(){return b(this._rawAsyncValidators)},enumerable:!0,configurable:!0}),t.prototype._checkParentType=function(){!(this._parent instanceof je)&&this._parent instanceof ae?Me.ngModelGroupException():this._parent instanceof je||this._parent instanceof Le||this._parent instanceof ze||Me.controlParentException()},t.prototype._setUpControl=function(){this._checkParentT
 ype(),this.control=this.formDirective.addControl(this),this.control.disabled&&this.valueAccessor.setDisabledState&&this.valueAccessor.setDisabledState(!0),this._added=!0},t}($),We={provide:L,useExisting:Object(D.forwardRef)(function(){return Ue}),multi:!0},qe={provide:L,useExisting:Object(D.forwardRef)(function(){return Ge}),multi:!0},Ue=function(){function e(){}return Object.defineProperty(e.prototype,"required",{get:function(){return this._required},set:function(e){this._required=null!=e&&!1!==e&&""+e!="false",this._onChange&&this._onChange()},enumerable:!0,configurable:!0}),e.prototype.validate=function(e){return this.required?V.required(e):null},e.prototype.registerOnValidatorChange=function(e){this._onChange=e},e}(),Ge=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(k.__extends)(t,e),t.prototype.validate=function(e){return this.required?V.requiredTrue(e):null},t}(Ue),Ke={provide:L,useExisting:Object(D.forwardRef)(function(){return $e}),mult
 i:!0},$e=function(){function e(){}return Object.defineProperty(e.prototype,"email",{set:function(e){this._enabled=""===e||!0===e||"true"===e,this._onChange&&this._onChange()},enumerable:!0,configurable:!0}),e.prototype.validate=function(e){return this._enabled?V.email(e):null},e.prototype.registerOnValidatorChange=function(e){this._onChange=e},e}(),Ze={provide:L,useExisting:Object(D.forwardRef)(function(){return Qe}),multi:!0},Qe=function(){function e(){}return e.prototype.ngOnChanges=function(e){"minlength"in e&&(this._createValidator(),this._onChange&&this._onChange())},e.prototype.validate=function(e){return null==this.minlength?null:this._validator(e)},e.prototype.registerOnValidatorChange=function(e){this._onChange=e},e.prototype._createValidator=function(){this._validator=V.minLength(parseInt(this.minlength,10))},e}(),Ye={provide:L,useExisting:Object(D.forwardRef)(function(){return Xe}),multi:!0},Xe=function(){function e(){}return e.prototype.ngOnChanges=function(e){"maxlength
 "in e&&(this._createValidator(),this._onChange&&this._onChange())},e.prototype.validate=function(e){return null!=this.maxlength?this._validator(e):null},e.prototype.registerOnValidatorChange=function(e){this._onChange=e},e.prototype._createValidator=function(){this._validator=V.maxLength(parseInt(this.maxlength,10))},e}(),Je={provide:L,useExisting:Object(D.forwardRef)(function(){return et}),multi:!0},et=function(){function e(){}return e.prototype.ngOnChanges=function(e){"pattern"in e&&(this._createValidator(),this._onChange&&this._onChange())},e.prototype.validate=function(e){return this._validator(e)},e.prototype.registerOnValidatorChange=function(e){this._onChange=e},e.prototype._createValidator=function(){this._validator=V.pattern(this.pattern)},e}(),tt=function(){function e(){}return e.prototype.group=function(e,t){void 0===t&&(t=null);var n=this._reduceControls(e);return new ve(n,null!=t?t.validator:null,null!=t?t.asyncValidator:null)},e.prototype.control=function(e,t,n){return
  new ye(e,t,n)},e.prototype.array=function(e,t,n){var r=this,i=e.map(function(e){return r._createControl(e)});return new be(i,t,n)},e.prototype._reduceControls=function(e){var t=this,n={};return Object.keys(e).forEach(function(r){n[r]=t._createControl(e[r])}),n},e.prototype._createControl=function(e){return e instanceof ye||e instanceof ve||e instanceof be?e:Array.isArray(e)?this.control(e[0],e.length>1?e[1]:null,e.length>2?e[2]:null):this.control(e)},e}(),nt=new D.Version("5.1.1"),rt=function(){},it=[rt,ne,oe,U,K,J,H,te,ie,Y,ce,de,Ue,Qe,Xe,et,Ge,$e],ot=[Re,ke,xe],lt=[Ne,Le,He,je,ze],at=function(){},st=function(){},ut=function(){}},"1j/l":function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=Array.isArray||function(e){return e&&"number"==typeof e.length}},"2Fuj":function(e,t,n){var r=n("R5c1"),i=n("a/Sk");e.exports=Object.keys||function(e){return r(e,i)}},"2kLc":function(e,t,n){"use strict";t.a=function(){for(var e=[],t=0;t<arguments.length;t++)e[t-0]=arguments[t];var n
 =Number.POSITIVE_INFINITY,a=null,s=e[e.length-1];return Object(o.a)(s)?(a=e.pop(),e.length>1&&"number"==typeof e[e.length-1]&&(n=e.pop())):"number"==typeof s&&(n=e.pop()),null===a&&1===e.length&&e[0]instanceof r.a?e[0]:Object(l.a)(n)(new i.a(e,a))};var r=n("AP4T"),i=n("Oryw"),o=n("3iOE"),l=n("bywS")},"3LDD":function(e,t,n){"use strict";var r=n("tose").f,i=n("51pc"),o=n("pBmS"),l=n("pa70"),a=n("Lcie"),s=n("p/bR"),u=n("WsSm"),c=n("w/BM"),d=n("KpXt"),p=n("V+0c"),f=n("xI8H").fastKey,h=n("Y5fy"),m=p?"_s":"size",g=function(e,t){var n,r=f(t);if("F"!==r)return e._i[r];for(n=e._f;n;n=n.n)if(n.k==t)return n};e.exports={getConstructor:function(e,t,n,u){var c=e(function(e,r){a(e,c,t,"_i"),e._t=t,e._i=i(null),e._f=void 0,e._l=void 0,e[m]=0,void 0!=r&&s(r,n,e[u],e)});return o(c.prototype,{clear:function(){for(var e=h(this,t),n=e._i,r=e._f;r;r=r.n)r.r=!0,r.p&&(r.p=r.p.n=void 0),delete n[r.i];e._f=e._l=void 0,e[m]=0},delete:function(e){var n=h(this,t),r=g(n,e);if(r){var i=r.n,o=r.p;delete n._i[r.i]
 ,r.r=!0,o&&(o.n=i),i&&(i.p=o),n._f==r&&(n._f=i),n._l==r&&(n._l=o),n[m]--}return!!r},forEach:function(e){h(this,t);for(var n,r=l(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(r(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!g(h(this,t),e)}}),p&&r(c.prototype,"size",{get:function(){return h(this,t)[m]}}),c},def:function(e,t,n){var r,i,o=g(e,t);return o?o.v=n:(e._l=o={i:i=f(t,!0),k:t,v:n,p:r=e._l,n:void 0,r:!1},e._f||(e._f=o),r&&(r.n=o),e[m]++,"F"!==i&&(e._i[i]=o)),e},getEntry:g,setStrong:function(e,t,n){u(e,t,function(e,n){this._t=h(e,t),this._k=n,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?c(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,c(1))},n?"entries":"values",!n,!0),d(t)}}},"3iOE":function(e,t,n){"use strict";t.a=function(e){return e&&"function"==typeof e.schedule}},"3k/+":function(e,t,n){"use strict";function r(e,t){var n=!1;return arguments.length>=2&&(n=!0),function(r){
 return r.lift(new l(e,t,n))}}var i=n("6Xbx"),o=n("E9/g"),l=function(){function e(e,t,n){void 0===n&&(n=!1),this.accumulator=e,this.seed=t,this.hasSeed=n}return e.prototype.call=function(e,t){return t.subscribe(new a(e,this.accumulator,this.seed,this.hasSeed))},e}(),a=function(e){function t(t,n,r,i){e.call(this,t),this.accumulator=n,this._seed=r,this.hasSeed=i,this.index=0}return Object(i.__extends)(t,e),Object.defineProperty(t.prototype,"seed",{get:function(){return this._seed},set:function(e){this.hasSeed=!0,this._seed=e},enumerable:!0,configurable:!0}),t.prototype._next=function(e){if(this.hasSeed)return this._tryNext(e);this.seed=e,this.destination.next(e)},t.prototype._tryNext=function(e){var t,n=this.index++;try{t=this.accumulator(this.seed,e,n)}catch(e){this.destination.error(e)}this.seed=t,this.destination.next(t)},t}(o.a);t.a=function(e,t){return arguments.length>=2?r(e,t)(this):r(e)(this)}},"3m71":function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=n("Ecq+").
 a.create},"3r0D":function(e,t,n){var r=n("Iclu")("wks"),i=n("c09d"),o=n("ptrv").Symbol,l="function"==typeof o;(e.exports=function(e){return r[e]||(r[e]=l&&o[e]||(l?o:i)("Symbol."+e))}).store=r},"4cOY":function(e,t,n){"use strict";var r=n("6Xbx").__decorate;Object.defineProperty(t,"__esModule",{value:!0});var i=n("LMZF"),o=function(){function e(){this.calculatedScrollbarWidth=null}return e.prototype.addClass=function(e,t){e.classList?e.classList.add(t):e.className+=" "+t},e.prototype.addMultipleClasses=function(e,t){if(e.classList)for(var n=t.split(" "),r=0;r<n.length;r++)e.classList.add(n[r]);else for(n=t.split(" "),r=0;r<n.length;r++)e.className+=" "+n[r]},e.prototype.removeClass=function(e,t){e.classList?e.classList.remove(t):e.className=e.className.replace(new RegExp("(^|\\b)"+t.split(" ").join("|")+"(\\b|$)","gi")," ")},e.prototype.hasClass=function(e,t){return e.classList?e.classList.contains(t):new RegExp("(^| )"+t+"( |$)","gi").test(e.className)},e.prototype.siblings=function
 (e){return Array.prototype.filter.call(e.parentNode.children,function(t){return t!==e})},e.prototype.find=function(e,t){return e.querySelectorAll(t)},e.prototype.findSingle=function(e,t){return e.querySelector(t)},e.prototype.index=function(e){for(var t=e.parentNode.childNodes,n=0,r=0;r<t.length;r++){if(t[r]==e)return n;1==t[r].nodeType&&n++}return-1},e.prototype.relativePosition=function(e,t){var n,r,i=e.offsetParent?{width:e.offsetWidth,height:e.offsetHeight}:this.getHiddenElementDimensions(e),o=t.offsetHeight,l=t.offsetWidth,a=t.getBoundingClientRect(),s=(this.getWindowScrollTop(),this.getViewport());a.top+o+i.height>s.height?a.top+(n=-1*i.height)<0&&(n=0):n=o,r=a.left+i.width>s.width?l-i.width:0,e.style.top=n+"px",e.style.left=r+"px"},e.prototype.absolutePosition=function(e,t){var n,r,i=e.offsetParent?{width:e.offsetWidth,height:e.offsetHeight}:this.getHiddenElementDimensions(e),o=i.height,l=i.width,a=t.offsetHeight,s=t.offsetWidth,u=t.getBoundingClientRect(),c=this.getWindowScr
 ollTop(),d=this.getWindowScrollLeft(),p=this.getViewport();u.top+a+o>p.height?(n=u.top+c-o)<0&&(n=0+c):n=a+u.top+c,r=u.left+s+l>p.width?u.left+d+s-l:u.left+d,e.style.top=n+"px",e.style.left=r+"px"},e.prototype.getHiddenElementOuterHeight=function(e){e.style.visibility="hidden",e.style.display="block";var t=e.offsetHeight;return e.style.display="none",e.style.visibility="visible",t},e.prototype.getHiddenElementOuterWidth=function(e){e.style.visibility="hidden",e.style.display="block";var t=e.offsetWidth;return e.style.display="none",e.style.visibility="visible",t},e.prototype.getHiddenElementDimensions=function(e){var t={};return e.style.visibility="hidden",e.style.display="block",t.width=e.offsetWidth,t.height=e.offsetHeight,e.style.display="none",e.style.visibility="visible",t},e.prototype.scrollInView=function(e,t){var n=getComputedStyle(e).getPropertyValue("borderTopWidth"),r=n?parseFloat(n):0,i=getComputedStyle(e).getPropertyValue("paddingTop"),o=i?parseFloat(i):0,l=e.getBoundin
 gClientRect(),a=t.getBoundingClientRect().top+document.body.scrollTop-(l.top+document.body.scrollTop)-r-o,s=e.scrollTop,u=e.clientHeight,c=this.getOuterHeight(t);a<0?e.scrollTop=s+a:a+c>u&&(e.scrollTop=s+a-u+c)},e.prototype.fadeIn=function(e,t){e.style.opacity=0;var n=+new Date,r=0,i=function(){r=+e.style.opacity+((new Date).getTime()-n)/t,e.style.opacity=r,n=+new Date,+r<1&&(window.requestAnimationFrame&&requestAnimationFrame(i)||setTimeout(i,16))};i()},e.prototype.fadeOut=function(e,t){var n=1,r=50/t,i=setInterval(function(){(n-=r)<=0&&(n=0,clearInterval(i)),e.style.opacity=n},50)},e.prototype.getWindowScrollTop=function(){var e=document.documentElement;return(window.pageYOffset||e.scrollTop)-(e.clientTop||0)},e.prototype.getWindowScrollLeft=function(){var e=document.documentElement;return(window.pageXOffset||e.scrollLeft)-(e.clientLeft||0)},e.prototype.matches=function(e,t){var n=Element.prototype;return(n.matches||n.webkitMatchesSelector||n.mozMatchesSelector||n.msMatchesSelecto
 r||function(e){return-1!==[].indexOf.call(document.querySelectorAll(e),this)}).call(e,t)},e.prototype.getOuterWidth=function(e,t){var n=e.offsetWidth;if(t){var r=getComputedStyle(e);n+=parseFloat(r.marginLeft)+parseFloat(r.marginRight)}return n},e.prototype.getHorizontalPadding=function(e){var t=getComputedStyle(e);return parseFloat(t.paddingLeft)+parseFloat(t.paddingRight)},e.prototype.getHorizontalMargin=function(e){var t=getComputedStyle(e);return parseFloat(t.marginLeft)+parseFloat(t.marginRight)},e.prototype.innerWidth=function(e){var t=e.offsetWidth,n=getComputedStyle(e);return t+=parseFloat(n.paddingLeft)+parseFloat(n.paddingRight)},e.prototype.width=function(e){var t=e.offsetWidth,n=getComputedStyle(e);return t-=parseFloat(n.paddingLeft)+parseFloat(n.paddingRight)},e.prototype.getInnerHeight=function(e){var t=e.offsetHeight,n=getComputedStyle(e);return t+=parseFloat(n.paddingTop)+parseFloat(n.paddingBottom)},e.prototype.getOuterHeight=function(e,t){var n=e.offsetHeight;if(t)
 {var r=getComputedStyle(e);n+=parseFloat(r.marginTop)+parseFloat(r.marginBottom)}return n},e.prototype.getHeight=function(e){var t=e.offsetHeight,n=getComputedStyle(e);return t-=parseFloat(n.paddingTop)+parseFloat(n.paddingBottom)+parseFloat(n.borderTopWidth)+parseFloat(n.borderBottomWidth)},e.prototype.getWidth=function(e){var t=e.offsetWidth,n=getComputedStyle(e);return t-=parseFloat(n.paddingLeft)+parseFloat(n.paddingRight)+parseFloat(n.borderLeftWidth)+parseFloat(n.borderRightWidth)},e.prototype.getViewport=function(){var e=window,t=document,n=t.documentElement,r=t.getElementsByTagName("body")[0];return{width:e.innerWidth||n.clientWidth||r.clientWidth,height:e.innerHeight||n.clientHeight||r.clientHeight}},e.prototype.getOffset=function(e){var t=e.getBoundingClientRect();return{top:t.top+document.body.scrollTop,left:t.left+document.body.scrollLeft}},e.prototype.getUserAgent=function(){return navigator.userAgent},e.prototype.isIE=function(){var e=window.navigator.userAgent;return 
 e.indexOf("MSIE ")>0||(e.indexOf("Trident/")>0?(e.indexOf("rv:"),!0):e.indexOf("Edge/")>0)},e.prototype.appendChild=function(e,t){if(this.isElement(t))t.appendChild(e);else{if(!t.el||!t.el.nativeElement)throw"Cannot append "+t+" to "+e;t.el.nativeElement.appendChild(e)}},e.prototype.removeChild=function(e,t){if(this.isElement(t))t.removeChild(e);else{if(!t.el||!t.el.nativeElement)throw"Cannot remove "+e+" from "+t;t.el.nativeElement.removeChild(e)}},e.prototype.isElement=function(e){return"object"==typeof HTMLElement?e instanceof HTMLElement:e&&"object"==typeof e&&null!==e&&1===e.nodeType&&"string"==typeof e.nodeName},e.prototype.calculateScrollbarWidth=function(){if(null!==this.calculatedScrollbarWidth)return this.calculatedScrollbarWidth;var e=document.createElement("div");e.className="ui-scrollbar-measure",document.body.appendChild(e);var t=e.offsetWidth-e.clientWidth;return document.body.removeChild(e),this.calculatedScrollbarWidth=t,t},e.prototype.invokeElementMethod=function(e
 ,t,n){e[t].apply(e,n)},e.prototype.clearSelection=function(){if(window.getSelection)window.getSelection().empty?window.getSelection().empty():window.getSelection().removeAllRanges&&window.getSelection().rangeCount>0&&window.getSelection().getRangeAt(0).getClientRects().length>0&&window.getSelection().removeAllRanges();else if(document.selection&&document.selection.empty)try{document.selection.empty()}catch(e){}},e.zindex=1e3,e}();o=r([i.Injectable()],o),t.DomHandler=o},"51pc":function(e,t,n){var r=n("+pQw"),i=n("ewdp"),o=n("a/Sk"),l=n("yIWP")("IE_PROTO"),a=function(){},s=function(){var e,t=n("BQSv")("iframe"),r=o.length;for(t.style.display="none",n("Ed9o").appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),s=e.F;r--;)delete s.prototype[o[r]];return s()};e.exports=Object.create||function(e,t){var n;return null!==e?(a.prototype=r(e),n=new a,a.prototype=null,n[l]=e):n=s(),void 0===t?n:i(n,t)}},"5GJ3":function(
 e,t,n){var r=n("gBtn"),i=n("+pQw"),o=r.key,l=r.map,a=r.store;r.exp({deleteMetadata:function(e,t){var n=arguments.length<3?void 0:o(arguments[2]),r=l(i(t),n,!1);if(void 0===r||!r.delete(e))return!1;if(r.size)return!0;var s=a.get(t);return s.delete(n),!!s.size||a.delete(t)}})},"5O0w":function(e,t,n){"use strict";t.a=function(e){return function(t){return t.lift(new l(e))}};var r=n("6Xbx"),i=n("lI6h"),o=n("qgI0"),l=function(){function e(e){this.notifier=e}return e.prototype.call=function(e,t){return t.subscribe(new a(e,this.notifier))},e}(),a=function(e){function t(t,n){e.call(this,t),this.notifier=n,this.add(Object(o.a)(this,n))}return Object(r.__extends)(t,e),t.prototype.notifyNext=function(e,t,n,r,i){this.complete()},t.prototype.notifyComplete=function(){},t}(i.a)},"5jKg":function(e,t,n){"use strict";t.a=function(e,t){return function(n){return n.lift(new l(e,t))}};var r=n("6Xbx"),i=n("lI6h"),o=n("qgI0"),l=function(){function e(e,t){this.project=e,this.resultSelector=t}return e.protot
 ype.call=function(e,t){return t.subscribe(new a(e,this.project,this.resultSelector))},e}(),a=function(e){function t(t,n,r){e.call(this,t),this.project=n,this.resultSelector=r,this.index=0}return Object(r.__extends)(t,e),t.prototype._next=function(e){var t,n=this.index++;try{t=this.project(e,n)}catch(e){return void this.destination.error(e)}this._innerSub(t,e,n)},t.prototype._innerSub=function(e,t,n){var r=this.innerSubscription;r&&r.unsubscribe(),this.add(this.innerSubscription=Object(o.a)(this,e,t,n))},t.prototype._complete=function(){var t=this.innerSubscription;t&&!t.closed||e.prototype._complete.call(this)},t.prototype._unsubscribe=function(){this.innerSubscription=null},t.prototype.notifyComplete=function(t){this.remove(t),this.innerSubscription=null,this.isStopped&&e.prototype._complete.call(this)},t.prototype.notifyNext=function(e,t,n,r,i){this.resultSelector?this._tryNotifyNext(e,t,n,r):this.destination.next(t)},t.prototype._tryNotifyNext=function(e,t,n,r){var i;try{i=this.r
 esultSelector(e,t,n,r)}catch(e){return void this.destination.error(e)}this.destination.next(i)},t}(i.a)},"5oDA":function(e,t,n){var r=n("JXkd"),i=n("+pQw"),o=function(e,t){if(i(e),!r(t)&&null!==t)throw TypeError(t+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,r){try{(r=n("pa70")(Function.call,n("6De9").f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,n){return o(e,n),t?e.__proto__=n:r(e,n),e}}({},!1):void 0),check:o}},"5q5V":function(e,t,n){"use strict";n.d(t,"a",function(){return c});var r=n("6Xbx"),i=n("TO51"),o=n("Gcw1"),l=n("qLnt"),a=n("YRqN"),s=n("Upor"),u=n("jaVc"),c=function(e){function t(t,n,r){void 0===t&&(t=Number.POSITIVE_INFINITY),void 0===n&&(n=Number.POSITIVE_INFINITY),e.call(this),this.scheduler=r,this._events=[],this._bufferSize=t<1?1:t,this._windowTime=n<1?1:n}return Object(r.__extends)(t,e),t.prototype.next=function(t){var n=this._getNow();this._events.push(new 
 d(n,t)),this._trimBufferThenGetEvents(),e.prototype.next.call(this,t)},t.prototype._subscribe=function(e){var t,n=this._trimBufferThenGetEvents(),r=this.scheduler;if(this.closed)throw new s.a;this.hasError?t=l.a.EMPTY:this.isStopped?t=l.a.EMPTY:(this.observers.push(e),t=new u.a(this,e)),r&&e.add(e=new a.a(e,r));for(var i=n.length,o=0;o<i&&!e.closed;o++)e.next(n[o].value);return this.hasError?e.error(this.thrownError):this.isStopped&&e.complete(),t},t.prototype._getNow=function(){return(this.scheduler||o.a).now()},t.prototype._trimBufferThenGetEvents=function(){for(var e=this._getNow(),t=this._bufferSize,n=this._windowTime,r=this._events,i=r.length,o=0;o<i&&!(e-r[o].time<n);)o++;return i>t&&(o=Math.max(o,i-t)),o>0&&r.splice(0,o),r},t}(i.Subject),d=function(e,t){this.time=e,this.value=t}},"6De9":function(e,t,n){var r=n("9e9+"),i=n("piOq"),o=n("+GRi"),l=n("A1WY"),a=n("rMsi"),s=n("gNkH"),u=Object.getOwnPropertyDescriptor;t.f=n("V+0c")?u:function(e,t){if(e=o(e),t=l(t,!0),s)try{return u(e
 ,t)}catch(e){}if(a(e,t))return i(!r.f.call(e,t),e[t])}},"6S6c":function(e,t,n){"use strict";t.a=function(e,t){return Object(r.a)(e,t)(this)};var r=n("LaOa")},"6Xbx":function(e,t,n){"use strict";function r(e){var t="function"==typeof Symbol&&e[Symbol.iterator],n=0;return t?t.call(e):{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}function i(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),l=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)l.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return l}function o(e){return this instanceof o?(this.v=e,this):new o(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.__extends=function(e,t){function n(){this.constructor=e}l(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)},n.d(t,"__assign",function(){return a}),t.__rest=function(e,t){var n={};for(var r in e)Object.prototype.ha
 sOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&(n[r[i]]=e[r[i]])}return n},t.__decorate=function(e,t,n,r){var i,o=arguments.length,l=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var a=e.length-1;a>=0;a--)(i=e[a])&&(l=(o<3?i(l):o>3?i(t,n,l):i(t,n))||l);return o>3&&l&&Object.defineProperty(t,n,l),l},t.__param=function(e,t){return function(n,r){t(n,r,e)}},t.__metadata=function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},t.__awaiter=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function l(e){try{s(r.next(e))}catch(e){o(e)}}function a(e){try{s(r.throw(e))}catch(e){o(e)}}function s(e){e.done?i(e.value):new n(function(t){t(e.value)}).then(l,a)}s((r=r.apply(e,t||[])).n
 ext())})},t.__generator=function(e,t){function n(n){return function(l){return function(n){if(r)throw new TypeError("Generator is already executing.");for(;a;)try{if(r=1,i&&(o=i[2&n[0]?"return":n[0]?"throw":"next"])&&!(o=o.call(i,n[1])).done)return o;switch(i=0,o&&(n=[0,o.value]),n[0]){case 0:case 1:o=n;break;case 4:return a.label++,{value:n[1],done:!1};case 5:a.label++,i=n[1],n=[0];continue;case 7:n=a.ops.pop(),a.trys.pop();continue;default:if(o=a.trys,!(o=o.length>0&&o[o.length-1])&&(6===n[0]||2===n[0])){a=0;continue}if(3===n[0]&&(!o||n[1]>o[0]&&n[1]<o[3])){a.label=n[1];break}if(6===n[0]&&a.label<o[1]){a.label=o[1],o=n;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(n);break}o[2]&&a.ops.pop(),a.trys.pop();continue}n=t.call(e,a)}catch(e){n=[6,e],i=0}finally{r=o=0}if(5&n[0])throw n[1];return{value:n[0]?n[1]:void 0,done:!0}}([n,l])}}var r,i,o,l,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return l={next:n(0),throw:n(1),return:n(2)},"function"==typeof 
 Symbol&&(l[Symbol.iterator]=function(){return this}),l},t.__exportStar=function(e,t){for(var n in e)t.hasOwnProperty(n)||(t[n]=e[n])},t.__values=r,t.__read=i,t.__spread=function(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(i(arguments[t]));return e},t.__await=o,t.__asyncGenerator=function(e,t,n){function r(e){c[e]&&(u[e]=function(t){return new Promise(function(n,r){d.push([e,t,n,r])>1||i(e,t)})})}function i(e,t){try{!function(e){e.value instanceof o?Promise.resolve(e.value.v).then(l,a):s(d[0][2],e)}(c[e](t))}catch(e){s(d[0][3],e)}}function l(e){i("next",e)}function a(e){i("throw",e)}function s(e,t){e(t),d.shift(),d.length&&i(d[0][0],d[0][1])}if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var u,c=n.apply(e,t||[]),d=[];return u={},r("next"),r("throw"),r("return"),u[Symbol.asyncIterator]=function(){return this},u},t.__asyncDelegator=function(e){function t(t,i){e[t]&&(n[t]=function(n){return(r=!r)?{value:o(e[t](n)),done:"return"===t}:i?i(n):
 n})}var n,r;return n={},t("next"),t("throw",function(e){throw e}),t("return"),n[Symbol.iterator]=function(){return this},n}

<TRUNCATED>

[27/43] asterixdb git commit: [ASTERIXDB-2318] Build dashboard in mvn

Posted by im...@apache.org.
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/tsconfig.json
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/tsconfig.json b/asterixdb/asterix-dashboard/src/main/resources/dashboard/tsconfig.json
deleted file mode 100755
index 0897e9e..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/tsconfig.json
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-{
-  "compileOnSave": false,
-  "compilerOptions": {
-    "outDir": "./dist/out-tsc",
-    "sourceMap": true,
-    "declaration": false,
-    "moduleResolution": "node",
-    "emitDecoratorMetadata": true,
-    "experimentalDecorators": true,
-    "target": "es5",
-    "typeRoots": [
-      "node_modules/@types"
-    ],
-    "lib": [
-      "es2017",
-      "dom"
-    ]
-  }
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/tslint.json
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/tslint.json b/asterixdb/asterix-dashboard/src/main/resources/dashboard/tslint.json
deleted file mode 100755
index 1d02629..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/tslint.json
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-{
-  "rulesDirectory": [
-    "node_modules/codelyzer"
-  ],
-  "rules": {
-    "arrow-return-shorthand": true,
-    "callable-types": true,
-    "class-name": true,
-    "comment-format": [
-      true,
-      "check-space"
-    ],
-    "curly": true,
-    "eofline": true,
-    "forin": true,
-    "import-blacklist": [
-      true,
-      "rxjs",
-      "rxjs/Rx"
-    ],
-    "import-spacing": true,
-    "indent": [
-      true,
-      "spaces"
-    ],
-    "interface-over-type-literal": true,
-    "label-position": true,
-    "max-line-length": [
-      true,
-      140
-    ],
-    "member-access": false,
-    "member-ordering": [
-      true,
-      {
-        "order": [
-          "static-field",
-          "instance-field",
-          "static-method",
-          "instance-method"
-        ]
-      }
-    ],
-    "no-arg": true,
-    "no-bitwise": true,
-    "no-console": [
-      true,
-      "debug",
-      "info",
-      "time",
-      "timeEnd",
-      "trace"
-    ],
-    "no-construct": true,
-    "no-debugger": true,
-    "no-duplicate-super": true,
-    "no-empty": false,
-    "no-empty-interface": true,
-    "no-eval": true,
-    "no-inferrable-types": [
-      true,
-      "ignore-params"
-    ],
-    "no-misused-new": true,
-    "no-non-null-assertion": true,
-    "no-shadowed-variable": true,
-    "no-string-literal": false,
-    "no-string-throw": true,
-    "no-switch-case-fall-through": true,
-    "no-trailing-whitespace": true,
-    "no-unnecessary-initializer": true,
-    "no-unused-expression": true,
-    "no-use-before-declare": true,
-    "no-var-keyword": true,
-    "object-literal-sort-keys": false,
-    "one-line": [
-      true,
-      "check-open-brace",
-      "check-catch",
-      "check-else",
-      "check-whitespace"
-    ],
-    "prefer-const": true,
-    "quotemark": [
-      true,
-      "single"
-    ],
-    "radix": true,
-    "semicolon": [
-      true,
-      "always"
-    ],
-    "triple-equals": [
-      true,
-      "allow-null-check"
-    ],
-    "typedef-whitespace": [
-      true,
-      {
-        "call-signature": "nospace",
-        "index-signature": "nospace",
-        "parameter": "nospace",
-        "property-declaration": "nospace",
-        "variable-declaration": "nospace"
-      }
-    ],
-    "typeof-compare": true,
-    "unified-signatures": true,
-    "variable-name": false,
-    "whitespace": [
-      true,
-      "check-branch",
-      "check-decl",
-      "check-operator",
-      "check-separator",
-      "check-type"
-    ],
-    "directive-selector": [
-      true,
-      "attribute",
-      "app",
-      "camelCase"
-    ],
-    "component-selector": [
-      true,
-      "element",
-      "app",
-      "kebab-case"
-    ],
-    "use-input-property-decorator": true,
-    "use-output-property-decorator": true,
-    "use-host-property-decorator": true,
-    "no-input-rename": true,
-    "no-output-rename": true,
-    "use-life-cycle-interface": true,
-    "use-pipe-transform-interface": true,
-    "component-class-suffix": true,
-    "directive-class-suffix": true,
-    "invoke-injectable": true
-  }
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/licenses/3rdpartylicenses.txt
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/licenses/3rdpartylicenses.txt b/asterixdb/asterix-dashboard/src/main/resources/licenses/3rdpartylicenses.txt
new file mode 100644
index 0000000..9334697
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/main/resources/licenses/3rdpartylicenses.txt
@@ -0,0 +1,373 @@
+core-js@2.5.6
+MIT
+Copyright (c) 2014-2018 Denis Pushkarev
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+primeng@4.3.0
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2016-2017 PrimeTek
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+@angular/forms@5.2.11
+MIT
+MIT
+
+@ngrx/store@4.1.1
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2017 Brandon Roberts, Mike Ryan, Victor Savkin, Rob Wormald
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+@angular/core@5.2.11
+MIT
+MIT
+
+webpack@3.8.1
+MIT
+Copyright JS Foundation and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+@angular/platform-browser@5.2.11
+MIT
+MIT
+
+zone.js@0.8.26
+MIT
+The MIT License
+
+Copyright (c) 2016-2018 Google, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+@angular/router@5.2.11
+MIT
+MIT
+
+@angular/common@5.2.11
+MIT
+MIT
+
+file-saver@1.3.8
+MIT
+The MIT License
+
+Copyright © 2016 [Eli Grey][1].
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+  [1]: http://eligrey.com
+
+@types/file-saver@1.3.0
+MIT
+MIT License
+
+    Copyright (c) Microsoft Corporation. All rights reserved.
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE
+
+css-loader@0.28.11
+MIT
+Copyright JS Foundation and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+@angular/cdk@5.2.5
+MIT
+The MIT License
+
+Copyright (c) 2018 Google LLC.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+@angular/material@5.2.5
+MIT
+The MIT License
+
+Copyright (c) 2018 Google LLC.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+@ngrx/effects@4.1.1
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2017 Brandon Roberts, Mike Ryan, Victor Savkin, Rob Wormald
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+@ngrx/db@2.1.0
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2015 ngrx
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+@ngrx/store-devtools@4.1.1
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2017 Brandon Roberts, Mike Ryan, Victor Savkin, Rob Wormald
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+codemirror@5.38.0
+MIT
+MIT License
+
+Copyright (C) 2017 by Marijn Haverbeke <ma...@gmail.com> and others
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+@angular/animations@5.2.11
+MIT
+MIT
+
+hammerjs@2.0.8
+MIT
+The MIT License (MIT)
+
+Copyright (C) 2011-2014 by Jorik Tangelder (Eight Media)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+@angular/platform-browser-dynamic@5.2.11
+MIT
+MIT
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/licenses/content/www.apache.org_licenses_LICENSE-2.0.txt
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/licenses/content/www.apache.org_licenses_LICENSE-2.0.txt b/asterixdb/asterix-dashboard/src/main/resources/licenses/content/www.apache.org_licenses_LICENSE-2.0.txt
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/main/resources/licenses/content/www.apache.org_licenses_LICENSE-2.0.txt
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/licenses/dashboard-license.ftl
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/licenses/dashboard-license.ftl b/asterixdb/asterix-dashboard/src/main/resources/licenses/dashboard-license.ftl
new file mode 100644
index 0000000..50049dd
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/main/resources/licenses/dashboard-license.ftl
@@ -0,0 +1,36 @@
+<#--
+ ! Licensed to the Apache Software Foundation (ASF) under one
+ ! or more contributor license agreements.  See the NOTICE file
+ ! distributed with this work for additional information
+ ! regarding copyright ownership.  The ASF licenses this file
+ ! to you under the Apache License, Version 2.0 (the
+ ! "License"); you may not use this file except in compliance
+ ! with the License.  You may obtain a copy of the License at
+ !
+ !   http://www.apache.org/licenses/LICENSE-2.0
+ !
+ ! Unless required by applicable law or agreed to in writing,
+ ! software distributed under the License is distributed on an
+ ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ! KIND, either express or implied.  See the License for the
+ ! specific language governing permissions and limitations
+ ! under the License.
+-->
+<@indent spaces=3>
+<#list licenses as license>
+  <#if license.url == "http://www.apache.org/licenses/LICENSE-2.0.txt">
+${license.content}
+    <#break>
+  </#if>
+</#list>
+</...@indent>
+
+===
+   ASTERIXDB Dashboard JS COMPONENTS:
+
+    includes a number of packed subcomponents under
+    dashboard/static/ with separate copyright
+    notices and license terms. Your use of these subcomponents is subject
+    to the terms and condition of the following licenses.
+===
+<#include "3rdpartylicenses.txt">

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/.angular-cli.json
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/.angular-cli.json b/asterixdb/asterix-dashboard/src/node/.angular-cli.json
new file mode 100755
index 0000000..7e41979
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/.angular-cli.json
@@ -0,0 +1,69 @@
+{
+  "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
+  "project": {
+    "name": "asterixdb-web-console"
+  },
+  "apps": [
+    {
+      "root": "src",
+      "outDir": "static",
+      "assets": [
+        "assets",
+        "favicon.ico"
+      ],
+      "index": "index.html",
+      "main": "main.ts",
+      "polyfills": "polyfills.ts",
+      "test": "test.ts",
+      "tsconfig": "tsconfig.app.json",
+      "testTsconfig": "tsconfig.spec.json",
+      "prefix": "app",
+      "styles": [
+        "main.scss",
+        "../node_modules/codemirror/lib/codemirror.css",
+        "../node_modules/codemirror/theme/monokai.css",
+        "../node_modules/primeng/resources/themes/omega/theme.css",
+        "../node_modules/primeng/resources/primeng.min.css"
+      ],
+      "scripts": [
+        "../node_modules/codemirror/lib/codemirror.js"
+      ],
+      "environmentSource": "environments/environment.ts",
+      "environments": {
+        "dev": "environments/environment.ts",
+        "prod": "environments/environment.prod.ts"
+      }
+    }
+  ],
+  "e2e": {
+    "protractor": {
+      "config": "./protractor.conf.js"
+    }
+  },
+  "lint": [
+    {
+      "project": "src/tsconfig.app.json",
+      "exclude": "**/node_modules/**"
+    },
+    {
+      "project": "src/tsconfig.spec.json",
+      "exclude": "**/node_modules/**"
+    },
+    {
+      "project": "e2e/tsconfig.e2e.json",
+      "exclude": "**/node_modules/**"
+    }
+  ],
+  "test": {
+    "karma": {
+      "config": "./karma.conf.js"
+    }
+  },
+  "defaults": {
+    "styleExt": "css",
+    "class": {
+      "spec": false
+    },
+    "component": {}
+  }
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/.editorconfig
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/.editorconfig b/asterixdb/asterix-dashboard/src/node/.editorconfig
new file mode 100755
index 0000000..ba060b8
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/.editorconfig
@@ -0,0 +1,25 @@
+# Editor configuration, see http://editorconfig.org
+#/*
+#Licensed under the Apache License, Version 2.0 (the "License");
+#you may not use this file except in compliance with the License.
+#You may obtain a copy of the License at
+
+#    http://www.apache.org/licenses/LICENSE-2.0
+
+#Unless required by applicable law or agreed to in writing, software
+#Distributed under the License is distributed on an "AS IS" BASIS,
+#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#See the License for the specific language governing permissions and
+#limitations under the License.
+root = true
+
+[*]
+charset = utf-8
+indent_style = space
+indent_size = 2
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.md]
+max_line_length = off
+trim_trailing_whitespace = false

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/.gitignore
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/.gitignore b/asterixdb/asterix-dashboard/src/node/.gitignore
new file mode 100755
index 0000000..143881f
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/.gitignore
@@ -0,0 +1,48 @@
+# See http://help.github.com/ignore-files/ for more about ignoring files.
+
+# compiled output
+/tmp
+/out-tsc
+
+# dependencies
+/node_modules
+/documents
+# /static
+/dist
+/static
+
+# IDEs and editors
+/.idea
+.project
+.classpath
+.c9/
+*.launch
+.settings/
+*.sublime-workspace
+
+# IDE - VSCode
+.vscode/*
+!.vscode/settings.json
+!.vscode/tasks.json
+!.vscode/launch.json
+!.vscode/extensions.json
+
+# misc
+/.sass-cache
+/connect.lock
+/coverage
+/libpeerconnection.log
+npm-debug.log
+testem.log
+/typings
+
+# e2e
+/e2e/*.js
+/e2e/*.map
+
+# System Files
+.DS_Store
+Thumbs.db
+
+# Others
+package-lock.json

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/README.md
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/README.md b/asterixdb/asterix-dashboard/src/node/README.md
new file mode 100755
index 0000000..14f16fc
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/README.md
@@ -0,0 +1,47 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+# AsterixDB Web Administration Console
+
+AsterixDB Administration Console is an Angular 5 HTML/CSS/Typescript web application using predictable state containers, immutable data updates with Redux/NGRx frameworks, observable patterns, and standard Open Sourced UI widgets for data, metadata manipulation and visualization through SQL++ AsterixDB Query language.
+
+The main goal is create a baseline solution with unopinionated UI/UX design and SW architecture with two differentiated isolated, indepent minimal coupled levels between the UI components and application core or internal core, easily extensible and scalable by the AsterixDB community.
+
+## Development
+
+This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 1.4.9.
+
+## Installation
+
+Install node and npm, any of the latest versions will do.
+
+Run `npm install` to download all the dependency packages an recreate the node_modules directory.
+
+## Development server
+
+The development version uses the webpack proxy to avoid CORS problems in Angular see:  
+
+`https://daveceddia.com/access-control-allow-origin-cors-errors-in-angular`. 
+
+Please check `proxy.config.js` to see how it's configured.
+
+Run `ng serve` or `npm start` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files.
+
+A technical document describing the internals and architecture exist, here:
+
+`https://github.com/EmilioMobile/asterixdb-dashboard/blob/master/documents/AsterixDB%20Architecture%20v1.0.pdf?raw=true`
+
+A brief user guide document describing how to use it, here:
+
+`https://github.com/EmilioMobile/asterixdb-dashboard/blob/master/documents/AsterixDB%20User%20Guide%20v1.0.pptx?raw=true`

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/e2e/app.e2e-spec.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/e2e/app.e2e-spec.ts b/asterixdb/asterix-dashboard/src/node/e2e/app.e2e-spec.ts
new file mode 100755
index 0000000..e75aa02
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/e2e/app.e2e-spec.ts
@@ -0,0 +1,27 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { AppPage } from './app.po';
+
+describe('asterixdb-dashboard', () => {
+  let page: AppPage;
+
+  beforeEach(() => {
+    page = new AppPage();
+  });
+
+  it('should display welcome message', () => {
+    page.navigateTo();
+    expect(page.getParagraphText()).toEqual('Welcome to AsterixDB Dashboard!');
+  });
+});

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/e2e/app.po.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/e2e/app.po.ts b/asterixdb/asterix-dashboard/src/node/e2e/app.po.ts
new file mode 100755
index 0000000..37d3de9
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/e2e/app.po.ts
@@ -0,0 +1,24 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { browser, by, element } from 'protractor';
+
+export class AppPage {
+  navigateTo() {
+    return browser.get('/');
+  }
+
+  getParagraphText() {
+    return element(by.css('app-root h1')).getText();
+  }
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/e2e/tsconfig.e2e.json
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/e2e/tsconfig.e2e.json b/asterixdb/asterix-dashboard/src/node/e2e/tsconfig.e2e.json
new file mode 100755
index 0000000..41b7fc0
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/e2e/tsconfig.e2e.json
@@ -0,0 +1,27 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+{
+  "extends": "../tsconfig.json",
+  "compilerOptions": {
+    "outDir": "../out-tsc/e2e",
+    "baseUrl": "./",
+    "module": "commonjs",
+    "target": "es5",
+    "types": [
+      "jasmine",
+      "jasminewd2",
+      "node"
+    ]
+  }
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/karma.conf.js
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/karma.conf.js b/asterixdb/asterix-dashboard/src/node/karma.conf.js
new file mode 100755
index 0000000..c9da2c5
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/karma.conf.js
@@ -0,0 +1,47 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+// Karma configuration file, see link for more information
+// https://karma-runner.github.io/1.0/config/configuration-file.html
+
+module.exports = function (config) {
+  config.set({
+    basePath: '',
+    frameworks: ['jasmine', '@angular/cli'],
+    plugins: [
+      require('karma-jasmine'),
+      require('karma-chrome-launcher'),
+      require('karma-jasmine-html-reporter'),
+      require('karma-coverage-istanbul-reporter'),
+      require('@angular/cli/plugins/karma')
+    ],
+    client:{
+      clearContext: false // leave Jasmine Spec Runner output visible in browser
+    },
+    coverageIstanbulReporter: {
+      reports: [ 'html', 'lcovonly' ],
+      fixWebpackSourcePaths: true
+    },
+    angularCli: {
+      environment: 'dev'
+    },
+    reporters: ['progress', 'kjhtml'],
+    port: 9876,
+    colors: true,
+    logLevel: config.LOG_INFO,
+    autoWatch: true,
+    browsers: ['Chrome'],
+    singleRun: false
+  });
+};

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/package.json
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/package.json b/asterixdb/asterix-dashboard/src/node/package.json
new file mode 100755
index 0000000..9aa8a0d
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/package.json
@@ -0,0 +1,62 @@
+{
+  "name": "asterixdb-web-console",
+  "version": "1.0.0",
+  "license": "Apache License, Version 2.0",
+  "scripts": {
+    "ng": "ng",
+    "start": "ng serve --proxy-config proxy.config.js --host 0.0.0.0",
+    "build": "ng build --prod",
+    "mavenbuild": "node node_modules/.bin/ng build --prod -op static/",
+    "test": "ng test",
+    "lint": "ng lint",
+    "e2e": "ng e2e"
+  },
+  "private": true,
+  "dependencies": {
+    "@angular-devkit/core": "^0.6.1",
+    "@angular/animations": "^5.0.3",
+    "@angular/cdk": "^5.0.0-rc.2",
+    "@angular/common": "^5.0.3",
+    "@angular/compiler": "^5.0.3",
+    "@angular/core": "^5.0.3",
+    "@angular/forms": "^5.0.3",
+    "@angular/http": "^5.0.3",
+    "@angular/material": "^5.0.0-rc.2",
+    "@angular/platform-browser": "^5.0.3",
+    "@angular/platform-browser-dynamic": "^5.0.3",
+    "@angular/router": "^5.0.3",
+    "@ngrx/db": "^2.0.2",
+    "@ngrx/effects": "^4.1.0",
+    "@ngrx/entity": "^4.1.0",
+    "@ngrx/store": "^4.1.0",
+    "@ngrx/store-devtools": "^4.0.0",
+    "codemirror": "^5.31.0",
+    "core-js": "^2.4.1",
+    "file-saver": "^1.3.3",
+    "hammerjs": "^2.0.8",
+    "primeng": "^4.3.0",
+    "rxjs": "^5.5.2",
+    "zone.js": "^0.8.18"
+  },
+  "devDependencies": {
+    "@angular/cli": "1.5.4",
+    "@angular/compiler-cli": "^5.0.3",
+    "@angular/language-service": "^5.0.0",
+    "@types/file-saver": "^1.3.0",
+    "@types/jasmine": "~2.5.53",
+    "@types/jasminewd2": "~2.0.2",
+    "@types/node": "~6.0.60",
+    "jasmine-core": "~2.6.2",
+    "jasmine-spec-reporter": "~4.1.0",
+    "karma": "~1.7.0",
+    "karma-chrome-launcher": "~2.1.1",
+    "karma-cli": "~1.0.1",
+    "karma-coverage-istanbul-reporter": "^1.2.1",
+    "karma-jasmine": "~1.1.0",
+    "karma-jasmine-html-reporter": "^0.2.2",
+    "protractor": "~5.1.2",
+    "ts-node": "^3.2.2",
+    "tslint": "^5.7.0",
+    "typescript": "^2.4.2"
+  }
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/protractor.conf.js
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/protractor.conf.js b/asterixdb/asterix-dashboard/src/node/protractor.conf.js
new file mode 100755
index 0000000..ac4c723
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/protractor.conf.js
@@ -0,0 +1,41 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+// Protractor configuration file, see link for more information
+// https://github.com/angular/protractor/blob/master/lib/config.ts
+
+const { SpecReporter } = require('jasmine-spec-reporter');
+
+exports.config = {
+  allScriptsTimeout: 11000,
+  specs: [
+    './e2e/**/*.e2e-spec.ts'
+  ],
+  capabilities: {
+    'browserName': 'chrome'
+  },
+  directConnect: true,
+  baseUrl: 'http://localhost:4200/',
+  framework: 'jasmine',
+  jasmineNodeOpts: {
+    showColors: true,
+    defaultTimeoutInterval: 30000,
+    print: function() {}
+  },
+  onPrepare() {
+    require('ts-node').register({
+      project: 'e2e/tsconfig.e2e.json'
+    });
+    jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
+  }
+};

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/proxy.config.js
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/proxy.config.js b/asterixdb/asterix-dashboard/src/node/proxy.config.js
new file mode 100755
index 0000000..58752c3
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/proxy.config.js
@@ -0,0 +1,23 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+const PROXY_CONFIG = {
+    "/query-service/*": {
+        "target": "http://localhost:19002",
+        "secure": false,
+        logLevel: "debug",
+        pathRewrite: function (path) { return path.replace('/query-service', '/query/service')}
+    }
+}
+
+module.exports = PROXY_CONFIG;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/app-config.service.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/app-config.service.ts b/asterixdb/asterix-dashboard/src/node/src/app/app-config.service.ts
new file mode 100755
index 0000000..87a0c2b
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/app-config.service.ts
@@ -0,0 +1,75 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Injectable } from '@angular/core';
+import { Observable } from 'rxjs/Observable';
+import {
+  Http,
+  Headers,
+  RequestOptions
+}                     from '@angular/http';
+
+@Injectable()
+export class ConfigService {
+
+  private config: Object
+  private env: Object
+
+  constructor(private http: Http) {}
+
+  /**
+   * Loads the environment config file first. Reads the environment variable from the file
+   * and based on that loads the appropriate configuration file - development or production
+   */
+  load() {
+    return new Promise((resolve, reject) => {
+      let headers = new Headers({ 'Accept': 'application/json', 'Content-Type': 'application/json', 'DataType': 'application/json' });
+      let options = new RequestOptions({ headers: headers });
+
+      this.http.get('/config/env.json')
+      .map(res => res.json())
+      .subscribe((env_data) => {
+        this.env = env_data;
+
+        this.http.get('/config/' + env_data.env + '.json')
+          .map(res => res.json())
+          .catch((error: any) => {
+            return Observable.throw(error.json().error || 'Server error');
+          })
+          .subscribe((data) => {
+            this.config = data;
+            resolve(true);
+          });
+      });
+
+    });
+  }
+
+  /**
+   * Returns environment variable based on given key
+   *
+   * @param key
+   */
+  getEnv(key: any) {
+    return this.env[key];
+  }
+
+  /**
+   * Returns configuration value based on given key
+   *
+   * @param key
+   */
+  get(key: any) {
+    return this.config[key];
+  }
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/app.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/app.component.html b/asterixdb/asterix-dashboard/src/node/src/app/app.component.html
new file mode 100755
index 0000000..58481be
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/app.component.html
@@ -0,0 +1,15 @@
+<!--/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/-->
+<awc-bar></awc-bar>
+<awc-tab></awc-tab>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/app.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/app.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/app.component.scss
new file mode 100755
index 0000000..b01fcf5
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/app.component.scss
@@ -0,0 +1,14 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+// Place holder for future expansion
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/app.component.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/app.component.ts b/asterixdb/asterix-dashboard/src/node/src/app/app.component.ts
new file mode 100755
index 0000000..a913109
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/app.component.ts
@@ -0,0 +1,31 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Component } from '@angular/core';
+import { AppCoreService } from './shared/services/app-core.service'
+
+/*
+ * Root component
+ * Defines AsterixDB Dashboard application's layout
+ */
+@Component({
+  selector: 'awc-root',
+  templateUrl: './app.component.html',
+  styleUrls: ['./app.component.scss']
+})
+export class AppComponent {
+  title = 'Asterix DB Web Console';
+
+  constructor(private appCoreService: AppCoreService) {
+  }
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/app.module.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/app.module.ts b/asterixdb/asterix-dashboard/src/node/src/app/app.module.ts
new file mode 100755
index 0000000..11c8602
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/app.module.ts
@@ -0,0 +1,121 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { BrowserModule } from '@angular/platform-browser';
+import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
+import { HttpClientModule } from '@angular/common/http';
+import { EffectsModule } from '@ngrx/effects';
+import { DataverseEffects } from './shared/effects/dataverse.effects';
+import { DatasetEffects } from './shared/effects/dataset.effects';
+import { DatatypeEffects } from './shared/effects/datatype.effects';
+import { IndexEffects } from './shared/effects/index.effects';
+import { SQLQueryEffects } from './shared/effects/query.effects';
+import { MetadataEffects } from './shared/effects/metadata.effects';
+import { AppComponent } from './app.component';
+import { AppBarComponent }  from './dashboard/appbar.component';
+import { DataverseCollection } from './dashboard/metadata/dataverses-collection/dataverses.component';
+import { DatasetCollection } from './dashboard/metadata/datasets-collection/datasets.component';
+import { DatatypeCollection } from './dashboard/metadata/datatypes-collection/datatypes.component';
+import { CodemirrorComponent } from './dashboard/query/codemirror.component';
+import { CodemirrorMetadataComponent } from './dashboard/metadata/codemirror-metadata.component';
+import { IndexCollection } from './dashboard/metadata/indexes-collection/indexes.component';
+import { MetadataContainerComponent }  from './dashboard/metadata/metadata-container.component';
+import { MetadataComponent }  from './dashboard/query/metadata.component';
+import { QueryContainerComponent }  from './dashboard/query/query-container.component';
+import { InputQueryComponent }  from './dashboard/query/input.component';
+import { InputQueryMetadataComponent }  from './dashboard/metadata/input-metadata.component';
+import { QueryOutputComponent, SafeHtmlPipe }  from './dashboard/query/ouput.component';
+import { AppTabComponent }  from './dashboard/apptab.component';
+import { KeysPipe } from './shared/pipes/keys.pipe';
+import { ObjectTypePipe } from './shared/pipes/objectType.pipe';
+import { ObjectArrayTypePipe } from './shared/pipes/objectArrayType.pipe';
+import { reducers } from './shared/reducers';
+import { SQLService } from './shared/services/async-query.service'
+import { AppCoreService } from './shared/services/app-core.service'
+import { MetadataService } from './shared/services/async-metadata.service'
+import { DBModule } from '@ngrx/db';
+import { FormsModule } from '@angular/forms';
+import { MaterialModule } from './material.module';
+import { NgModule } from '@angular/core';
+import { StoreModule,  } from '@ngrx/store';
+import { StoreDevtoolsModule } from '@ngrx/store-devtools';
+import { schema } from './db';
+import { DataTableModule, SharedModule } from 'primeng/primeng';
+import { TreeModule, TreeNode} from 'primeng/primeng';
+import { DialogCreateDataverse, DialogDropDataverse } from './dashboard/metadata/dataverses-collection/dataverses.component';
+import { DialogCreateDataset, DialogDropDataset } from './dashboard/metadata/datasets-collection/datasets.component';
+import { DialogCreateDatatype, DialogDropDatatype } from './dashboard/metadata/datatypes-collection/datatypes.component';
+import { DialogCreateIndex, DialogDropIndex } from './dashboard/metadata/indexes-collection/indexes.component';
+
+
+
+@NgModule({
+  declarations: [
+    AppComponent,
+    AppBarComponent,
+    InputQueryComponent,
+    InputQueryMetadataComponent,
+		QueryOutputComponent,
+    CodemirrorComponent,
+    CodemirrorMetadataComponent,
+		DataverseCollection,
+		DatasetCollection,
+		DatatypeCollection,
+		IndexCollection,
+    KeysPipe,
+		MetadataContainerComponent,
+    MetadataComponent,
+    QueryContainerComponent,
+		AppTabComponent,
+		ObjectTypePipe,
+    ObjectArrayTypePipe,
+    DialogCreateDataverse,
+    DialogDropDataverse,
+    DialogCreateDataset,
+    DialogDropDataset,
+    DialogCreateDatatype,
+    DialogDropDatatype,
+    DialogCreateIndex,
+    DialogDropIndex,
+    SafeHtmlPipe
+  ],
+  imports: [
+    TreeModule,
+    DataTableModule,
+    SharedModule,
+    FormsModule,
+    BrowserModule,
+		BrowserAnimationsModule,
+		DBModule.provideDB(schema),
+		EffectsModule.forRoot([MetadataEffects, DataverseEffects, DatasetEffects, DatatypeEffects, IndexEffects, SQLQueryEffects]),
+    HttpClientModule,
+    MaterialModule,
+		StoreModule.forRoot(reducers),
+		StoreDevtoolsModule.instrument({
+			maxAge: 10
+		})
+  ],
+  entryComponents: [
+    DialogCreateDataverse, 
+    DialogDropDataverse, 
+    DialogCreateDataset, 
+    DialogDropDataset , 
+    DialogCreateDatatype, 
+    DialogDropDatatype,
+    DialogCreateIndex, 
+    DialogDropIndex 
+  ],
+  providers: [AppCoreService, SQLService, MetadataService],
+  bootstrap: [AppComponent]
+})
+export class AppModule { }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/appbar.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/appbar.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/appbar.component.html
new file mode 100755
index 0000000..62cf771
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/appbar.component.html
@@ -0,0 +1,45 @@
+<!--/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/ -->
+<header class="awc-navbar">
+    <nav class="awc-navbar-header">
+      <a mat-button class="awc-button" routerLink="/" aria-label="AsterixDB Web Console">
+      <img class="awc-asterixDB-logo"
+            src="assets/asterixdb_tm.png"
+            alt="AsterixDB">
+            <span>Administration Console</span>
+      </a>
+      <div class="flex-spacer"></div>
+      <a mat-button class="awc-button awc-navbar-hide-small" href="https://asterixDB.apache.org"
+         aria-label="WEBSITE">
+        WEBSITE
+      </a>
+      <a mat-button class="awc-button awc-navbar-hide-small" href="https://issues.apache.org/jira/browse/ASTERIXDB"
+         aria-label="FILE ISSUES">
+        FILE ISSUES
+      </a>
+      <a mat-button class="awc-button awc-navbar-hide-small" href="https://ci.apache.org/projects/asterixdb/index.html"
+         aria-label="DOCUMENTATION">
+        DOCUMENTATION
+      </a>
+      <a mat-button class="awc-button docs-navbar-hide-small" href="https://asterixdb.apache.org/community.html"
+         aria-label="CONTACT">
+        CONTACT
+      </a>
+
+      <a mat-button class="awc-button docs-navbar-hide-small" href="https://github.com/apache/asterixdb/"
+         aria-label="GITHUB">
+        GITHUB
+      </a>
+    </nav>
+</header>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/appbar.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/appbar.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/appbar.component.scss
new file mode 100755
index 0000000..8a764e6
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/appbar.component.scss
@@ -0,0 +1,62 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+.awc-navbar {
+  a {
+    //color: #f0f0f0;
+    text-decoration: none;
+  }
+
+  border-bottom: 1px solid  hsla(0,0%,0%,.10);
+  overflow: hidden;
+}
+
+.awc-navbar-header {
+  display: flex;
+  flex-wrap: wrap;
+  align-items: center;
+  padding: 8px 16px;
+
+  > .mat-button {
+    &:last-child {
+      margin-left: auto;
+    }
+  }
+}
+
+.flex-spacer {
+  flex-grow: 1;
+}
+
+.awc-asterixDB-logo {
+  height: 26px;
+  margin: 0 4px 3px 0;
+  vertical-align: middle;
+}
+
+.awc-github-logo {
+  height: 21px;
+  margin: 0 7px 2px 0;
+  vertical-align: middle;
+}
+
+.awc-navbar-link {
+  text-decoration: inherit;
+  flex: 1;
+}
+
+/*
+* Rules for when the device is detected to be a small screen.
+* Moves content two rows instead of one.
+*/
+//@media (max-width: 720px) {}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/appbar.component.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/appbar.component.ts b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/appbar.component.ts
new file mode 100755
index 0000000..563ed11
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/appbar.component.ts
@@ -0,0 +1,25 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Component } from '@angular/core';
+
+@Component({
+	moduleId: module.id,
+	selector: 'awc-bar',
+  templateUrl: 'appbar.component.html',
+	styleUrls: ['appbar.component.scss']
+})
+
+export class AppBarComponent {
+	constructor() {}
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/apptab.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/apptab.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/apptab.component.html
new file mode 100755
index 0000000..bd5c963
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/apptab.component.html
@@ -0,0 +1,23 @@
+<!--/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/ -->
+<div class="content">
+  <mat-tab-group class="menu">
+    <mat-tab label=">_ QUERY">
+      <awc-query-container></awc-query-container>
+    </mat-tab>
+    <mat-tab label="METADATA">
+      <awc-metadata-container></awc-metadata-container>
+    </mat-tab>
+  </mat-tab-group>
+</div>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/apptab.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/apptab.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/apptab.component.scss
new file mode 100755
index 0000000..4d6fb7b
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/apptab.component.scss
@@ -0,0 +1,26 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+.content {
+  width:95%;
+  margin: 0 auto;
+}
+
+.menu {    
+  /deep/ .mat-tab-label {
+      font-size: 0.80rem !important;
+      font-weight: 500  !important;
+  }
+}
+
+

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/apptab.component.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/apptab.component.ts b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/apptab.component.ts
new file mode 100755
index 0000000..b4db7f4
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/apptab.component.ts
@@ -0,0 +1,25 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+import { Component } from '@angular/core';
+import { Store } from '@ngrx/store';
+
+@Component({
+  selector: 'awc-tab',
+  templateUrl: 'apptab.component.html',
+  styleUrls: ['apptab.component.scss']
+})
+
+export class AppTabComponent {
+  constructor(private store: Store<any>) {};
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/codemirror-metadata.component.scss
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/codemirror-metadata.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/codemirror-metadata.component.scss
new file mode 100755
index 0000000..9812ecb
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/codemirror-metadata.component.scss
@@ -0,0 +1,27 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+.textarea-metadata {
+    background-color: red !important;
+    border: 1px solid black !important;
+    padding: 0;
+	margin: 0;
+}
+
+codemirror-metadata {
+    border: 1px solid #eee;
+    height: auto;
+    background-color: blue !important;
+    padding: 0;
+	margin: 0;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/codemirror-metadata.component.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/codemirror-metadata.component.ts b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/codemirror-metadata.component.ts
new file mode 100755
index 0000000..aed6ddf
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/codemirror-metadata.component.ts
@@ -0,0 +1,244 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+/**
+ * Integrating codemirror (using ng2-codemirror) with our application
+ *
+ * component from "https://runkit.com/npm/ng2-codemirror"
+ *                "https://www.npmjs.com/package/ng2-codemirror"
+ * copy component from /src/codemirror.component.ts
+ * and modified for custom mode (asterix aql, sql++ code hilighting)
+ *
+ * therefore, actually we don't need to "npm install ng2-codemirror"
+ *
+ * Because on the outside of this component,
+ * It was hard to access the codemirror instance that 'ng-codemirror' use
+ * So, we copied the component in our application and modified it
+ *
+ * 'codemirror.js(^5.23.0)' is included in the 'index.html'
+ * And in this component(codemirror.component.ts)
+ * add statement like "declare var CodeMirror: any;"
+ *
+ * I don't know whether this is right way
+ *
+ * ref 1) usage : https://embed.plnkr.co/8e9gxss9u10VeFrv29Zt/
+ * ref 2) custom mode : http://jsfiddle.net/TcqAf/99/
+ * ref 3) integrating : http://stackoverflow.com/questions/37092142/integrating-codemirror-with-angular2-typescript
+ * ref 3) integrating :  https://medium.com/@s_eschweiler/using-external-libraries-with-angular-2-87e06db8e5d1#.8ok74uvwg
+ */
+import {
+    Component,
+    Input,
+    Output,
+    ElementRef,
+    ViewChild,
+    EventEmitter,
+    forwardRef,
+    AfterViewInit,
+    OnDestroy,
+    ChangeDetectionStrategy
+  } from '@angular/core';
+  import { NG_VALUE_ACCESSOR } from '@angular/forms';
+  import * as CodeMirrorMetadata from 'codemirror';
+ 
+ /**
+  * CodeMirror component
+  * Usage :
+  * <codemirror [(ngModel)]="data" [config]="{...}"></codemirror>
+  */
+ @Component({
+   moduleId: module.id,
+   selector: 'codemirror-metadata',
+   providers: [
+     {
+       provide: NG_VALUE_ACCESSOR,
+       useExisting: forwardRef(() => CodemirrorMetadataComponent),
+       multi: true
+     }
+   ],
+   styleUrls: ['codemirror-metadata.component.scss'],
+   template: `<textarea class="textarea-metadata" #hostMetadata></textarea>`,//,
+ })
+ 
+export class CodemirrorMetadataComponent implements AfterViewInit, OnDestroy {
+  @Input() config;
+  @Output() change = new EventEmitter();
+  @Output() focus = new EventEmitter();
+  @Output() blur = new EventEmitter();
+  @Output() instance = null;
+  @ViewChild('hostMetadata') hostMetadata;
+  _value = '';
+ 
+  /**
+  * Constructor
+  */
+  constructor(){
+      /**
+      * Custom mode for AsterixDB
+      */
+      CodeMirrorMetadata.defineMode("asterix", function(){
+        var KEYWORD_MATCH = [
+              // AQL
+              "drop", "dataverse", "dataset",
+              "if", "exists", "create",
+              "use", "type", "as", "closed",
+              "primary", "key",  "hints", "cardinality",
+              "index", "on", "btree", "rtree", "keyword",
+              "for", "in", "Metadata", "Dataset",
+              "return", "Index", "load", "using", "localfs", "path", "format",
+              // Query (not perfect)
+              "from", "in", "with", "group", "by", "select",
+              "let", "where", "order", "asc", "desc", "limit",
+              "keeping", "offset", "distinct", "or", "and",
+              // Built in functions (TODO)
+              // Built in functions (TODO)
+              // Built in functions (TODO)
+              // Asterix Data Model
+              // Primitive type
+              "boolean",
+              "tinyint", "smallint", "integer", "bigint",
+              "float", "double",
+              "string",
+              "binary", "hex", "base64",
+              "point", "line", "rectangle", "circle", "polygon",
+              "date", "time", "datetime", "duration", "interval", "uuid",
+              // Incomplete information type
+              "null", "missing",
+              // Derived type
+              // object {}, array [], multiset {{}}
+              // SQL++
+              "DROP", "DATAVERSE", "IF", "EXISTS", "CREATE", "USE", "TYPE", "AS", "DATASET", "PRIMARY", "KEY",
+              "INDEX", "SELECT", "VALUE", "INSERT", "INTO", "FROM", "WHERE", "AND", "SOME", "IN", "SATISFIES", "IS", "UNKNOWN", "NOT", "EVERY",
+              "GROUP", "BY", "ORDER", "DESC", "LIMIT", "OR", "SET", "DELETE", "LOAD", "USING",
+          ];
+
+          //"(", ")","{{", "}}", "[", "]",	"{", "}",  ";", ",", ":","?", "=",
+        var VAR_MATCH = /[$][a-zA-Z]+(\d*)/;
+        var DOT_MATCH = /[.](\S)*/;
+        var DOUBLE_QUOTE_MATCH = /["].*["]/;
+        var SINGLE_QUOTE_MATCH = /['].*[']/;
+        var BREAK_POINT = /(\s)/;
+
+        return {
+            startState: function() {return {inString: false};},
+            token: function(stream, state) {
+                if (state.newLine == undefined)state.newLine = true;
+
+                //match variable reference
+                if (stream.match(VAR_MATCH)) {
+                    return "variable";
+                }
+
+                if (stream.match(DOT_MATCH)) {
+                    return "dot-variable";
+                }
+
+                //string variable match
+                if (stream.match(DOUBLE_QUOTE_MATCH)) {
+                    return "string";
+                }
+                if (stream.match(SINGLE_QUOTE_MATCH)) {
+                    return "string";
+                }
+
+                //keyword match
+                for (var i in KEYWORD_MATCH){
+                    if (state.newLine && stream.match(KEYWORD_MATCH[i])){
+                            return "keyword";
+                    }
+                }
+
+                if (stream.peek() === " " || stream.peek() === null){
+                    state.newLine = true;
+                }else{
+                    state.newLine = false;
+                }
+                stream.next();
+                return null;
+            }
+        };
+      });
+   }
+ 
+  get value() { return this._value; };
+ 
+  @Input() set value(v) {
+    if (v !== this._value) {
+      this._value = v;
+      this.onChange(v);
+    }
+  }
+
+  /**
+  * On component destroy
+  */
+  ngOnDestroy() {}
+ 
+   /**
+    * On component view init
+    */
+  ngAfterViewInit() {
+  this.config = this.config || {};
+  this.codemirrorInit(this.config); 
+  }
+
+  /**
+  * Initialize codemirror
+  */
+  codemirrorMetadataConfig = 	{ 	mode: "asterix",
+    //lineNumbers: true,
+    lineWrapping: true,
+    showCursorWhenSelecting: true,
+    autofocus: true
+  };
+
+  codemirrorInit(config){
+    this.instance = CodeMirrorMetadata.fromTextArea(this.hostMetadata.nativeElement, this.codemirrorMetadataConfig);
+    this.instance.setSize("100%" , "100px");
+    this.instance.on('change', () => {
+      this.updateValue(this.instance.getValue());
+    });
+
+    this.instance.on('focus', () => {
+      this.focus.emit();
+    });
+
+    this.instance.on('blur', () => {
+      this.blur.emit();
+    });
+  }
+ 
+  /**
+  * Value update process
+  */
+  updateValue(value){
+    this.value = value;
+    this.onTouched();
+    this.change.emit(value);
+  }
+ 
+  /**
+  * Implements ControlValueAccessor
+  */
+  writeValue(value){
+    this._value = value || '';
+    if (this.instance) {
+      this.instance.setValue(this._value);
+    }
+  }
+ 
+  onChange(_) {}
+  onTouched() {}
+  registerOnChange(fn){this.onChange = fn;}
+  registerOnTouched(fn){this.onTouched = fn;}
+} 
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/dataset-create-dialog.component.html
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/dataset-create-dialog.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/dataset-create-dialog.component.html
new file mode 100755
index 0000000..ef88719
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/dataset-create-dialog.component.html
@@ -0,0 +1,14 @@
+<!--/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/-->
+<!-- Place holder for future expansion -->


[13/43] asterixdb git commit: [NO ISSUE][OTH] Fix Timeout Calculation

Posted by im...@apache.org.
[NO ISSUE][OTH] Fix Timeout Calculation

- user model changes: no
- storage format changes: no
- interface changes: no

Details:
- Fix elapsed time calculation in InvokeUtil.
- Fix elapsed time in replication timeout.
.
Change-Id: If080d3b3fcdcdc9f7d820698a80211e946d3c4d5
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2615
Sonar-Qube: Jenkins <je...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Contrib: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Michael Blow <mb...@apache.org>
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>


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

Branch: refs/heads/release-0.9.4-pre-rc
Commit: d1c696bb688b6b88379b4b247e721b9db9c1bb0b
Parents: ba53220
Author: Murtadha Hubail <mh...@apache.org>
Authored: Wed Apr 25 17:37:39 2018 +0300
Committer: Murtadha Hubail <mh...@apache.org>
Committed: Wed Apr 25 10:59:42 2018 -0700

----------------------------------------------------------------------
 .../asterix/replication/messaging/MarkComponentValidTask.java | 4 ++--
 .../src/main/java/org/apache/hyracks/api/util/InvokeUtil.java | 7 +++----
 2 files changed, 5 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/d1c696bb/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/MarkComponentValidTask.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/MarkComponentValidTask.java b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/MarkComponentValidTask.java
index b581321..57474ef 100644
--- a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/MarkComponentValidTask.java
+++ b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/MarkComponentValidTask.java
@@ -29,11 +29,11 @@ import java.util.concurrent.TimeoutException;
 
 import org.apache.asterix.common.api.INcApplicationContext;
 import org.apache.asterix.common.exceptions.ReplicationException;
-import org.apache.asterix.replication.api.IReplicationWorker;
 import org.apache.asterix.common.storage.IIndexCheckpointManager;
 import org.apache.asterix.common.storage.IIndexCheckpointManagerProvider;
 import org.apache.asterix.common.storage.ResourceReference;
 import org.apache.asterix.replication.api.IReplicaTask;
+import org.apache.asterix.replication.api.IReplicationWorker;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.storage.am.lsm.common.impls.AbstractLSMIndexFileManager;
 
@@ -71,13 +71,13 @@ public class MarkComponentValidTask implements IReplicaTask {
         final IIndexCheckpointManagerProvider checkpointManagerProvider = appCtx.getIndexCheckpointManagerProvider();
         final IIndexCheckpointManager indexCheckpointManager = checkpointManagerProvider.get(indexRef);
         long replicationTimeOut = TimeUnit.SECONDS.toMillis(appCtx.getReplicationProperties().getReplicationTimeOut());
-        final long startTime = System.nanoTime();
         synchronized (indexCheckpointManager) {
             // wait until the lsn mapping is flushed to disk
             while (!indexCheckpointManager.isFlushed(masterLsn)) {
                 if (replicationTimeOut <= 0) {
                     throw new ReplicationException(new TimeoutException("Couldn't receive flush lsn from master"));
                 }
+                final long startTime = System.nanoTime();
                 indexCheckpointManager.wait(replicationTimeOut);
                 replicationTimeOut -= TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startTime);
             }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/d1c696bb/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/InvokeUtil.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/InvokeUtil.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/InvokeUtil.java
index fb2bdeb..b2dd680 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/InvokeUtil.java
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/InvokeUtil.java
@@ -242,14 +242,13 @@ public class InvokeUtil {
      */
     public static void runWithTimeout(ThrowingAction action, BooleanSupplier stopCondition, long timeout, TimeUnit unit)
             throws Exception {
-        long remainingTime = unit.toNanos(timeout);
+        final long waitTime = unit.toNanos(timeout);
         final long startTime = System.nanoTime();
         while (!stopCondition.getAsBoolean()) {
-            if (remainingTime <= 0) {
+            action.run();
+            if (System.nanoTime() - startTime >= waitTime) {
                 throw new TimeoutException("Stop condition was not met after " + unit.toSeconds(timeout) + " seconds.");
             }
-            action.run();
-            remainingTime -= System.nanoTime() - startTime;
         }
     }
 }


[31/43] asterixdb git commit: [ASTERIXDB-2318] Build dashboard in mvn

Posted by im...@apache.org.
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/polyfills.32ca5670d6503e090789.bundle.js
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/polyfills.32ca5670d6503e090789.bundle.js b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/polyfills.32ca5670d6503e090789.bundle.js
deleted file mode 100644
index 053fad1..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/polyfills.32ca5670d6503e090789.bundle.js
+++ /dev/null
@@ -1 +0,0 @@
-webpackJsonp([1],{"+GRi":function(e,t,n){var r=n("Wo2w"),o=n("Wy9r");e.exports=function(e){return r(o(e))}},"+iEx":function(e,t,n){n("fHxy"),n("5GJ3"),n("X0O/"),n("HCkn"),n("ncNB"),n("soMw"),n("8sYH"),n("IJ3P"),n("t6ta"),e.exports=n("b4gG").Reflect},"+pQw":function(e,t,n){var r=n("JXkd");e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},1:function(e,t,n){e.exports=n("TU+8")},"2Fuj":function(e,t,n){var r=n("R5c1"),o=n("a/Sk");e.exports=Object.keys||function(e){return r(e,o)}},"3LDD":function(e,t,n){"use strict";var r=n("tose").f,o=n("51pc"),i=n("pBmS"),a=n("pa70"),c=n("Lcie"),u=n("p/bR"),s=n("WsSm"),l=n("w/BM"),f=n("KpXt"),p=n("V+0c"),h=n("xI8H").fastKey,d=n("Y5fy"),v=p?"_s":"size",y=function(e,t){var n,r=h(t);if("F"!==r)return e._i[r];for(n=e._f;n;n=n.n)if(n.k==t)return n};e.exports={getConstructor:function(e,t,n,s){var l=e(function(e,r){c(e,l,t,"_i"),e._t=t,e._i=o(null),e._f=void 0,e._l=void 0,e[v]=0,void 0!=r&&u(r,n,e[s],e)});return i(l.prototype,{c
 lear:function(){for(var e=d(this,t),n=e._i,r=e._f;r;r=r.n)r.r=!0,r.p&&(r.p=r.p.n=void 0),delete n[r.i];e._f=e._l=void 0,e[v]=0},delete:function(e){var n=d(this,t),r=y(n,e);if(r){var o=r.n,i=r.p;delete n._i[r.i],r.r=!0,i&&(i.n=o),o&&(o.p=i),n._f==r&&(n._f=o),n._l==r&&(n._l=i),n[v]--}return!!r},forEach:function(e){d(this,t);for(var n,r=a(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(r(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!y(d(this,t),e)}}),p&&r(l.prototype,"size",{get:function(){return d(this,t)[v]}}),l},def:function(e,t,n){var r,o,i=y(e,t);return i?i.v=n:(e._l=i={i:o=h(t,!0),k:t,v:n,p:r=e._l,n:void 0,r:!1},e._f||(e._f=i),r&&(r.n=i),e[v]++,"F"!==o&&(e._i[o]=i)),e},getEntry:y,setStrong:function(e,t,n){s(e,t,function(e,n){this._t=d(e,t),this._k=n,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?l(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,l(1))},n?"entries":"values",!n,!0),
 f(t)}}},"3r0D":function(e,t,n){var r=n("Iclu")("wks"),o=n("c09d"),i=n("ptrv").Symbol,a="function"==typeof i;(e.exports=function(e){return r[e]||(r[e]=a&&i[e]||(a?i:o)("Symbol."+e))}).store=r},"51pc":function(e,t,n){var r=n("+pQw"),o=n("ewdp"),i=n("a/Sk"),a=n("yIWP")("IE_PROTO"),c=function(){},u=function(){var e,t=n("BQSv")("iframe"),r=i.length;for(t.style.display="none",n("Ed9o").appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),u=e.F;r--;)delete u.prototype[i[r]];return u()};e.exports=Object.create||function(e,t){var n;return null!==e?(c.prototype=r(e),n=new c,c.prototype=null,n[a]=e):n=u(),void 0===t?n:o(n,t)}},"5GJ3":function(e,t,n){var r=n("gBtn"),o=n("+pQw"),i=r.key,a=r.map,c=r.store;r.exp({deleteMetadata:function(e,t){var n=arguments.length<3?void 0:i(arguments[2]),r=a(o(t),n,!1);if(void 0===r||!r.delete(e))return!1;if(r.size)return!0;var u=c.get(t);return u.delete(n),!!u.size||c.delete(t)}})},"5oDA"
 :function(e,t,n){var r=n("JXkd"),o=n("+pQw"),i=function(e,t){if(o(e),!r(t)&&null!==t)throw TypeError(t+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,r){try{(r=n("pa70")(Function.call,n("6De9").f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,n){return i(e,n),t?e.__proto__=n:r(e,n),e}}({},!1):void 0),check:i}},"6De9":function(e,t,n){var r=n("9e9+"),o=n("piOq"),i=n("+GRi"),a=n("A1WY"),c=n("rMsi"),u=n("gNkH"),s=Object.getOwnPropertyDescriptor;t.f=n("V+0c")?s:function(e,t){if(e=i(e),t=a(t,!0),u)try{return s(e,t)}catch(e){}if(c(e,t))return o(!r.f.call(e,t),e[t])}},"8sYH":function(e,t,n){var r=n("gBtn"),o=n("+pQw"),i=n("TJLg"),a=r.has,c=r.key,u=function(e,t,n){if(a(e,t,n))return!0;var r=i(t);return null!==r&&u(e,r,n)};r.exp({hasMetadata:function(e,t){return u(e,o(t),arguments.length<3?void 0:c(arguments[2]))}})},"9ScN":function(e,t,n){"use strict";var r=n("51pc"),o=n("piOq"),i=n("P6IN"
 ),a={};n("gxdV")(a,n("3r0D")("iterator"),function(){return this}),e.exports=function(e,t,n){e.prototype=r(a,{next:o(1,n)}),i(e,t+" Iterator")}},"9e9+":function(e,t){t.f={}.propertyIsEnumerable},"9wYb":function(e,t){var n=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:n)(e)}},A1WY:function(e,t,n){var r=n("JXkd");e.exports=function(e,t){if(!r(e))return e;var n,o;if(t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;if("function"==typeof(n=e.valueOf)&&!r(o=n.call(e)))return o;if(!t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;throw TypeError("Can't convert object to primitive value")}},BCYq:function(e,t,n){var r=n("pa70"),o=n("Wo2w"),i=n("RT4T"),a=n("rppw"),c=n("UKZQ");e.exports=function(e,t){var n=1==e,u=2==e,s=3==e,l=4==e,f=6==e,p=5==e||f,h=t||c;return function(t,c,d){for(var v,y,g=i(t),k=o(g),m=r(c,d,3),_=a(k.length),b=0,w=n?h(t,_):u?h(t,0):void 0;_>b;b++)if((p||b in k)&&(v=k[b],y=m(v,b,g),e))if(n)w[b]=y;else if(y)switch(e){case 3:
 return!0;case 5:return v;case 6:return b;case 2:w.push(v)}else if(l)return!1;return f?-1:s||l?l:w}}},BQSv:function(e,t,n){var r=n("JXkd"),o=n("ptrv").document,i=r(o)&&r(o.createElement);e.exports=function(e){return i?o.createElement(e):{}}},CDXM:function(e,t,n){var r=n("ptrv"),o=n("b4gG"),i=n("gxdV"),a=n("lfBE"),c=n("pa70"),u=function(e,t,n){var s,l,f,p,h=e&u.F,d=e&u.G,v=e&u.P,y=e&u.B,g=d?r:e&u.S?r[t]||(r[t]={}):(r[t]||{}).prototype,k=d?o:o[t]||(o[t]={}),m=k.prototype||(k.prototype={});d&&(n=t);for(s in n)f=((l=!h&&g&&void 0!==g[s])?g:n)[s],p=y&&l?c(f,r):v&&"function"==typeof f?c(Function.call,f):f,g&&a(g,s,f,e&u.U),k[s]!=f&&i(k,s,p),v&&m[s]!=f&&(m[s]=f)};r.core=o,u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,e.exports=u},Ed9o:function(e,t,n){var r=n("ptrv").document;e.exports=r&&r.documentElement},HCkn:function(e,t,n){var r=n("Ps07"),o=n("WGJ/"),i=n("gBtn"),a=n("+pQw"),c=n("TJLg"),u=i.keys,s=i.key,l=function(e,t){var n=u(e,t),i=c(e);if(null===i)return n;var a=l(i,t);return a
 .length?n.length?o(new r(n.concat(a))):a:n};i.exp({getMetadataKeys:function(e){return l(a(e),arguments.length<2?void 0:s(arguments[1]))}})},IJ3P:function(e,t,n){var r=n("gBtn"),o=n("+pQw"),i=r.has,a=r.key;r.exp({hasOwnMetadata:function(e,t){return i(e,o(t),arguments.length<3?void 0:a(arguments[2]))}})},Iclu:function(e,t,n){var r=n("ptrv"),o=r["__core-js_shared__"]||(r["__core-js_shared__"]={});e.exports=function(e){return o[e]||(o[e]={})}},JXkd:function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},KGrn:function(e,t){e.exports=!1},KM3d:function(e,t,n){var r=n("9wYb"),o=Math.max,i=Math.min;e.exports=function(e,t){return(e=r(e))<0?o(e+t,0):i(e,t)}},"KpI+":function(e,t,n){var r=n("lexG"),o=n("3r0D")("iterator"),i=Array.prototype;e.exports=function(e){return void 0!==e&&(r.Array===e||i[o]===e)}},KpXt:function(e,t,n){"use strict";var r=n("ptrv"),o=n("tose"),i=n("V+0c"),a=n("3r0D")("species");e.exports=function(e){var t=r[e];i&&t&&!t[a]&&o.f(t,a,{conf
 igurable:!0,get:function(){return this}})}},Lcie:function(e,t){e.exports=function(e,t,n,r){if(!(e instanceof t)||void 0!==r&&r in e)throw TypeError(n+": incorrect invocation!");return e}},P6IN:function(e,t,n){var r=n("tose").f,o=n("rMsi"),i=n("3r0D")("toStringTag");e.exports=function(e,t,n){e&&!o(e=n?e:e.prototype,i)&&r(e,i,{configurable:!0,value:t})}},Ps07:function(e,t,n){"use strict";var r=n("3LDD"),o=n("Y5fy");e.exports=n("cpZ/")("Set",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return r.def(o(this,"Set"),e=0===e?0:e,e)}},r)},QZhw:function(e,t,n){"use strict";var r,o=n("BCYq")(0),i=n("lfBE"),a=n("xI8H"),c=n("rIdM"),u=n("XRS9"),s=n("JXkd"),l=n("umMR"),f=n("Y5fy"),p=a.getWeak,h=Object.isExtensible,d=u.ufstore,v={},y=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},g={get:function(e){if(s(e)){var t=p(e);return!0===t?d(f(this,"WeakMap")).get(e):t?t[this._i]:void 0}},set:function(e,t){retur
 n u.def(f(this,"WeakMap"),e,t)}},k=e.exports=n("cpZ/")("WeakMap",y,g,u,!0,!0);l(function(){return 7!=(new k).set((Object.freeze||Object)(v),7).get(v)})&&(c((r=u.getConstructor(y,"WeakMap")).prototype,g),a.NEED=!0,o(["delete","has","get","set"],function(e){var t=k.prototype,n=t[e];i(t,e,function(t,o){if(s(t)&&!h(t)){this._f||(this._f=new r);var i=this._f[e](t,o);return"set"==e?this:i}return n.call(this,t,o)})}))},R5c1:function(e,t,n){var r=n("rMsi"),o=n("+GRi"),i=n("vyV2")(!1),a=n("yIWP")("IE_PROTO");e.exports=function(e,t){var n,c=o(e),u=0,s=[];for(n in c)n!=a&&r(c,n)&&s.push(n);for(;t.length>u;)r(c,n=t[u++])&&(~i(s,n)||s.push(n));return s}},RT4T:function(e,t,n){var r=n("Wy9r");e.exports=function(e){return Object(r(e))}},TJLg:function(e,t,n){var r=n("rMsi"),o=n("RT4T"),i=n("yIWP")("IE_PROTO"),a=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=o(e),r(e,i)?e[i]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Objec
 t?a:null}},"TU+8":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n("+iEx"),o=(n.n(r),n("eFQL"));n.n(o)},UKZQ:function(e,t,n){var r=n("a7b8");e.exports=function(e,t){return new(r(e))(t)}},ULWX:function(e,t,n){var r=n("+pQw");e.exports=function(e,t,n,o){try{return o?t(r(n)[0],n[1]):t(n)}catch(t){var i=e.return;throw void 0!==i&&r(i.call(e)),t}}},UlVq:function(e,t,n){var r=n("3r0D")("iterator"),o=!1;try{var i=[7][r]();i.return=function(){o=!0},Array.from(i,function(){throw 2})}catch(e){}e.exports=function(e,t){if(!t&&!o)return!1;var n=!1;try{var i=[7],a=i[r]();a.next=function(){return{done:n=!0}},i[r]=function(){return a},e(i)}catch(e){}return n}},Ula3:function(e,t,n){var r=n("JXkd"),o=n("5oDA").set;e.exports=function(e,t,n){var i,a=t.constructor;return a!==n&&"function"==typeof a&&(i=a.prototype)!==n.prototype&&r(i)&&o&&o(e,i),e}},"V+0c":function(e,t,n){e.exports=!n("umMR")(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}
 }).a})},VceJ:function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},"WGJ/":function(e,t,n){var r=n("p/bR");e.exports=function(e,t){var n=[];return r(e,!1,n.push,n,t),n}},Wo2w:function(e,t,n){var r=n("VceJ");e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},WsSm:function(e,t,n){"use strict";var r=n("KGrn"),o=n("CDXM"),i=n("lfBE"),a=n("gxdV"),c=n("rMsi"),u=n("lexG"),s=n("9ScN"),l=n("P6IN"),f=n("TJLg"),p=n("3r0D")("iterator"),h=!([].keys&&"next"in[].keys()),d=function(){return this};e.exports=function(e,t,n,v,y,g,k){s(n,t,v);var m,_,b,w=function(e){if(!h&&e in x)return x[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},T=t+" Iterator",E="values"==y,O=!1,x=e.prototype,S=x[p]||x["@@iterator"]||y&&x[y],D=!h&&S||w(y),P=y?E?w("entries"):D:void 0,j="Array"==t?x.entries||S:S;if(j&&(b=f(j.call(new e)))!==Object.prototype&&b.next&&(l(b,T,
 !0),r||c(b,p)||a(b,p,d)),E&&S&&"values"!==S.name&&(O=!0,D=function(){return S.call(this)}),r&&!k||!h&&!O&&x[p]||a(x,p,D),u[t]=D,u[T]=d,y)if(m={values:E?D:w("values"),keys:g?D:w("keys"),entries:P},k)for(_ in m)_ in x||i(x,_,m[_]);else o(o.P+o.F*(h||O),t,m);return m}},Wy9r:function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on  "+e);return e}},"X0O/":function(e,t,n){var r=n("gBtn"),o=n("+pQw"),i=n("TJLg"),a=r.has,c=r.get,u=r.key,s=function(e,t,n){if(a(e,t,n))return c(e,t,n);var r=i(t);return null!==r?s(e,r,n):void 0};r.exp({getMetadata:function(e,t){return s(e,o(t),arguments.length<3?void 0:u(arguments[2]))}})},XRS9:function(e,t,n){"use strict";var r=n("pBmS"),o=n("xI8H").getWeak,i=n("+pQw"),a=n("JXkd"),c=n("Lcie"),u=n("p/bR"),s=n("BCYq"),l=n("rMsi"),f=n("Y5fy"),p=s(5),h=s(6),d=0,v=function(e){return e._l||(e._l=new y)},y=function(){this.a=[]},g=function(e,t){return p(e.a,function(e){return e[0]===t})};y.prototype={get:function(e){var t=g(this,e);if(t)r
 eturn t[1]},has:function(e){return!!g(this,e)},set:function(e,t){var n=g(this,e);n?n[1]=t:this.a.push([e,t])},delete:function(e){var t=h(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}},e.exports={getConstructor:function(e,t,n,i){var s=e(function(e,r){c(e,s,t,"_i"),e._t=t,e._i=d++,e._l=void 0,void 0!=r&&u(r,n,e[i],e)});return r(s.prototype,{delete:function(e){if(!a(e))return!1;var n=o(e);return!0===n?v(f(this,t)).delete(e):n&&l(n,this._i)&&delete n[this._i]},has:function(e){if(!a(e))return!1;var n=o(e);return!0===n?v(f(this,t)).has(e):n&&l(n,this._i)}}),s},def:function(e,t,n){var r=o(i(t),!0);return!0===r?v(e).set(t,n):r[e._i]=n,e},ufstore:v}},Y5fy:function(e,t,n){var r=n("JXkd");e.exports=function(e,t){if(!r(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e}},ZI9W:function(e,t,n){"use strict";var r=n("3LDD"),o=n("Y5fy");e.exports=n("cpZ/")("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}
 },{get:function(e){var t=r.getEntry(o(this,"Map"),e);return t&&t.v},set:function(e,t){return r.def(o(this,"Map"),0===e?0:e,t)}},r,!0)},"a/Sk":function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},a7b8:function(e,t,n){var r=n("JXkd"),o=n("rKhO"),i=n("3r0D")("species");e.exports=function(e){var t;return o(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!o(t.prototype)||(t=void 0),r(t)&&null===(t=t[i])&&(t=void 0)),void 0===t?Array:t}},b4gG:function(e,t){var n=e.exports={version:"2.5.3"};"number"==typeof __e&&(__e=n)},c09d:function(e,t){var n=0,r=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+r).toString(36))}},"cpZ/":function(e,t,n){"use strict";var r=n("ptrv"),o=n("CDXM"),i=n("lfBE"),a=n("pBmS"),c=n("xI8H"),u=n("p/bR"),s=n("Lcie"),l=n("JXkd"),f=n("umMR"),p=n("UlVq"),h=n("P6IN"),d=n("Ula3");e.exports=function(e,t,n,v,y,g){var k=r[e],m=k,_=y?"set":"add",b=m&&m.protot
 ype,w={},T=function(e){var t=b[e];i(b,e,"delete"==e?function(e){return!(g&&!l(e))&&t.call(this,0===e?0:e)}:"has"==e?function(e){return!(g&&!l(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return g&&!l(e)?void 0:t.call(this,0===e?0:e)}:"add"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,n){return t.call(this,0===e?0:e,n),this})};if("function"==typeof m&&(g||b.forEach&&!f(function(){(new m).entries().next()}))){var E=new m,O=E[_](g?{}:-0,1)!=E,x=f(function(){E.has(1)}),S=p(function(e){new m(e)}),D=!g&&f(function(){for(var e=new m,t=5;t--;)e[_](t,t);return!e.has(-0)});S||((m=t(function(t,n){s(t,m,e);var r=d(new k,t,m);return void 0!=n&&u(n,y,r[_],r),r})).prototype=b,b.constructor=m),(x||D)&&(T("delete"),T("has"),y&&T("get")),(D||O)&&T(_),g&&b.clear&&delete b.clear}else m=v.getConstructor(t,e,y,_),a(m.prototype,n),c.NEED=!0;return h(m,e),w[e]=m,o(o.G+o.W+o.F*(m!=k),w),g||v.setStrong(m,e,y),m}},"dXJ/":function(e,t,n){var r=n("VceJ"),o=n("3r0D")("toStringTag"),i="Argum
 ents"==r(function(){return arguments}());e.exports=function(e){var t,n,a;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),o))?n:i?r(t):"Object"==(a=r(t))&&"function"==typeof t.callee?"Arguments":a}},eFQL:function(e,t,n){(function(e){!function(){"use strict";function t(e,t){for(var n=e.length-1;n>=0;n--)typeof e[n]===k&&(e[n]=Zone.current.wrap(e[n],t+"_"+n));return e}function n(e){return!e||!1!==e.writable&&(typeof e.get!==k||typeof e.set!==m)}function r(e,t,n){var r=Object.getOwnPropertyDescriptor(e,t);if(!r&&n&&Object.getOwnPropertyDescriptor(n,t)&&(r={enumerable:!0,configurable:!0}),r&&r.configurable){delete r.writable,delete r.value;var o=r.get,i=t.substr(2),a=O[i];a||(a=O[i]=y("ON_PROPERTY"+i)),r.set=function(t){var n=this;n||e!==g||(n=g),n&&(n[a]&&n.removeEventListener(i,x),"function"==typeof t?(n[a]=t,n.addEventListener(i,x,!1)):n[a]=null)},r.get=function(){var n=this;if(n||e!==g||(n=g),!n)return null;var i=
 n[a];if(i)return i;if(o){var c=o&&o.apply(this);if(c)return r.set.apply(this,[c]),typeof n[_]===k&&n.removeAttribute(t),c}return null},Object.defineProperty(e,t,r)}}function o(e,t,n){if(t)for(var o=0;o<t.length;o++)r(e,"on"+t[o],n);else{var i=[];for(var a in e)"on"==a.substr(0,2)&&i.push(a);for(var c=0;c<i.length;c++)r(e,i[c],n)}}function i(e){var n=g[e];if(n){g[y(e)]=n,g[e]=function(){var r=t(arguments,e);switch(r.length){case 0:this[S]=new n;break;case 1:this[S]=new n(r[0]);break;case 2:this[S]=new n(r[0],r[1]);break;case 3:this[S]=new n(r[0],r[1],r[2]);break;case 4:this[S]=new n(r[0],r[1],r[2],r[3]);break;default:throw new Error("Arg list too long.")}},c(g[e],n);var r,o=new n(function(){});for(r in o)"XMLHttpRequest"===e&&"responseBlob"===r||function(t){"function"==typeof o[t]?g[e].prototype[t]=function(){return this[S][t].apply(this[S],arguments)}:Object.defineProperty(g[e].prototype,t,{set:function(n){"function"==typeof n?(this[S][t]=Zone.current.wrap(n,e+"."+t),c(this[S][t],n)
 ):this[S][t]=n},get:function(){return this[S][t]}})}(r);for(r in n)"prototype"!==r&&n.hasOwnProperty(r)&&(g[e][r]=n[r])}}function a(e,t,r){for(var o=e;o&&!o.hasOwnProperty(t);)o=Object.getPrototypeOf(o);!o&&e[t]&&(o=e);var i,a=y(t);if(o&&!(i=o[a])&&(i=o[a]=o[t],n(o&&Object.getOwnPropertyDescriptor(o,t)))){var u=r(i,a,t);o[t]=function(){return u(this,arguments)},c(o[t],i)}return i}function c(e,t){e[y("OriginalDelegate")]=t}function u(e,t,n){function r(t,n){if(!t)return!1;var r=!0;n&&void 0!==n.useGlobalCallback&&(r=n.useGlobalCallback);var d=n&&n.validateHandler,k=!0;n&&void 0!==n.checkDuplicate&&(k=n.checkDuplicate);var m=!1;n&&void 0!==n.returnTarget&&(m=n.returnTarget);for(var _=t;_&&!_.hasOwnProperty(o);)_=Object.getPrototypeOf(_);if(!_&&t[o]&&(_=t),!_)return!1;if(_[l])return!1;var b,w={},T=_[l]=_[o],E=_[y(i)]=_[i],O=_[y(a)]=_[a],x=_[y(u)]=_[u];n&&n.prependEventListenerFnName&&(b=_[y(n.prependEventListenerFnName)]=_[n.prependEventListenerFnName]);var S=r?function(e){if(!e.isRemov
 ed){var t=C[e.eventName],n=void 0;t&&(n=t[e.capture?Z:z]);var r=n&&e.target[n];if(r)for(var o=0;o<r.length;o++)if(r[o]===e){r.splice(o,1),e.isRemoved=!0,0===r.length&&(e.allRemoved=!0,e.target[n]=null);break}}if(e.allRemoved)return E.apply(e.target,[e.eventName,e.capture?g:v,e.options])}:function(e){return E.apply(e.target,[e.eventName,e.invoke,e.options])},D=n&&n.compareTaskCallbackVsDelegate?n.compareTaskCallbackVsDelegate:function(e,t){var n=typeof t;return n===H&&e.callback===t||n===F&&e.originalDelegate===t},P=function(t,n,o,i,a,c){return void 0===a&&(a=!1),void 0===c&&(c=!1),function(){var u=this||e,s=(Zone,arguments[1]);if(!s)return t.apply(this,arguments);var l=!1;if(typeof s!==H){if(!s.handleEvent)return t.apply(this,arguments);l=!0}if(!d||d(t,s,u,arguments)){var f,p=arguments[0],h=arguments[2],v=!1;void 0===h?f=!1:!0===h?f=!0:!1===h?f=!1:(f=!!h&&!!h.capture,v=!!h&&!!h.once);var y,g=Zone.current,m=C[p];if(m)y=m[f?Z:z];else{var _=B+(p+z),b=B+(p+Z);C[p]={},C[p][z]=_,C[p][Z]=b
 ,y=f?b:_}var T=u[y],E=!1;if(T){if(E=!0,k)for(var O=0;O<T.length;O++)if(D(T[O],s))return}else T=u[y]=[];var x,S=u.constructor[L],P=R[S];P&&(x=P[p]),x||(x=S+n+p),w.options=h,v&&(w.options.once=!1),w.target=u,w.capture=f,w.eventName=p,w.isExisting=E;var j=g.scheduleEventTask(x,s,r?I:null,o,i);return v&&(h.once=!0),j.options=h,j.target=u,j.capture=f,j.eventName=p,l&&(j.originalDelegate=s),c?T.unshift(j):T.push(j),a?u:void 0}}};return _[o]=P(T,f,r?function(e){if(!w.isExisting)return T.apply(w.target,[w.eventName,w.capture?g:v,w.options])}:function(e){return T.apply(w.target,[w.eventName,e.invoke,w.options])},S,m),b&&(_[p]=P(b,h,function(e){return b.apply(w.target,[w.eventName,e.invoke,w.options])},S,m,!0)),_[i]=function(){var t,n=this||e,r=arguments[0],o=arguments[2];t=void 0!==o&&(!0===o||!1!==o&&!!o&&!!o.capture);var i=arguments[1];if(!i)return E.apply(this,arguments);if(!d||d(E,i,n,arguments)){var a,c=C[r];c&&(a=c[t?Z:z]);var u=a&&n[a];if(u)for(var s=0;s<u.length;s++){var l=u[s];if(D(
 l,i))return u.splice(s,1),l.isRemoved=!0,0===u.length&&(l.allRemoved=!0,n[a]=null),void l.zone.cancelTask(l)}}},_[a]=function(){for(var t=[],n=s(this||e,arguments[0]),r=0;r<n.length;r++){var o=n[r];t.push(o.originalDelegate?o.originalDelegate:o.callback)}return t},_[u]=function(){var t=this||e,n=arguments[0];if(n){var r=C[n];if(r){var o=t[r[z]],a=t[r[Z]];if(o){var c=M(o);for(f=0;f<c.length;f++)this[i].apply(this,[n,(s=c[f]).originalDelegate?s.originalDelegate:s.callback,s.options])}if(a)for(c=M(a),f=0;f<c.length;f++){var s;this[i].apply(this,[n,(s=c[f]).originalDelegate?s.originalDelegate:s.callback,s.options])}}}else{for(var l=Object.keys(t),f=0;f<l.length;f++){var p=q.exec(l[f]),h=p&&p[1];h&&"removeListener"!==h&&this[u].apply(this,[h])}this[u].apply(this,["removeListener"])}},c(_[o],T),c(_[i],E),x&&c(_[u],x),O&&c(_[a],O),!0}for(var o=n&&n.addEventListenerFnName||"addEventListener",i=n&&n.removeEventListenerFnName||"removeEventListener",a=n&&n.listenersFnName||"eventListeners",u=n
 &&n.removeAllFnName||"removeAllListeners",l=y(o),f="."+o+":",p="prependListener",h="."+p+":",d=function(e,t,n){if(!e.isRemoved){var r=e.callback;typeof r===F&&r.handleEvent&&(e.callback=function(e){return r.handleEvent(e)},e.originalDelegate=r),e.invoke(e,t,[n]);var o=e.options;o&&"object"==typeof o&&o.once&&t[i].apply(t,[n.type,e.originalDelegate?e.originalDelegate:e.callback,o])}},v=function(t){if(t=t||e.event){var n=this||t.target||e,r=n[C[t.type][z]];if(r)if(1===r.length)d(r[0],n,t);else for(var o=r.slice(),i=0;i<o.length&&(!t||!0!==t[N]);i++)d(o[i],n,t)}},g=function(t){if(t=t||e.event){var n=this||t.target||e,r=n[C[t.type][Z]];if(r)if(1===r.length)d(r[0],n,t);else for(var o=r.slice(),i=0;i<o.length&&(!t||!0!==t[N]);i++)d(o[i],n,t)}},k=[],m=0;m<t.length;m++)k[m]=r(t[m],n);return k}function s(e,t){var n=[];for(var r in e){var o=q.exec(r),i=o&&o[1];if(i&&(!t||i===t)){var a=e[r];if(a)for(var c=0;c<a.length;c++)n.push(a[c])}}return n}function l(e,t,n,r){function o(t){var n=t.data;re
 turn n.args[0]=function(){try{t.invoke.apply(this,arguments)}finally{typeof n.handleId===l?delete s[n.handleId]:n.handleId&&(n.handleId[W]=null)}},n.handleId=c.apply(e,n.args),t}function i(e){return u(e.data.handleId)}var c=null,u=null;n+=r;var s={},l="number";c=a(e,t+=r,function(n){return function(a,c){if("function"==typeof c[0]){var u=Zone.current.scheduleMacroTask(t,c[0],{handleId:null,isPeriodic:"Interval"===r,delay:"Timeout"===r||"Interval"===r?c[1]||0:null,args:c},o,i);if(!u)return u;var f=u.data.handleId;return typeof f===l?s[f]=u:f&&(f[W]=u),f&&f.ref&&f.unref&&"function"==typeof f.ref&&"function"==typeof f.unref&&(u.ref=f.ref.bind(f),u.unref=f.unref.bind(f)),typeof f===l||f?f:u}return n.apply(e,c)}}),u=a(e,n,function(t){return function(n,r){var o,i=r[0];typeof i===l?o=s[i]:(o=i&&i[W])||(o=i),o&&"string"==typeof o.type?"notScheduled"!==o.state&&(o.cancelFn&&o.data.isPeriodic||0===o.runCount)&&(typeof i===l?delete s[i]:i&&(i[W]=null),o.zone.cancelTask(o)):t.apply(e,r)}})}funct
 ion f(e,t){return e&&e[U]&&e[U][t]}function p(e,t,n){return n.configurable=!0,n.configurable||(e[U]||X(e,U,{writable:!0,value:{}}),e[U][t]=!0),n}function h(e,t,n,r){try{return X(e,t,n)}catch(i){if(!n.configurable)throw i;typeof r==J?delete n.configurable:n.configurable=r;try{return X(e,t,n)}catch(r){var o=null;try{o=JSON.stringify(n)}catch(e){o=o.toString()}console.log("Attempting to configure '"+t+"' with descriptor '"+o+"' on object '"+e+"' and got error, giving up: "+r)}}}function d(e,t,n,r){o(e,function(e,t,n){if(!n)return t;var r=n.filter(function(t){return t.target===e});if(!r||0===r.length)return t;var o=r[0].ignoreProperties;return t.filter(function(e){return-1===o.indexOf(e)})}(e,t,n),r)}!function(e){function t(e){c&&c.mark&&c.mark(e)}function n(e,t){c&&c.measure&&c.measure(e,t)}function r(t){0===Z&&0===y.length&&(s||e[d]&&(s=e[d].resolve(0)),s?s[v](o):e[h](o,0)),t&&y.push(t)}function o(){if(!g){for(g=!0;y.length;){var e=y;y=[];for(var t=0;t<e.length;t++){var n=e[t];try{n.z
 one.runTask(n,null,null)}catch(e){P.onUnhandledError(e)}}}a("ignoreConsoleErrorUncaughtError"),P.microtaskDrainDone(),g=!1}}function i(){}function a(e){return"__zone_symbol__"+e}var c=e.performance;if(t("Zone"),e.Zone)throw new Error("Zone already loaded.");var u=function(){function r(e,t){this._properties=null,this._parent=e,this._name=t?t.name||"unnamed":"<root>",this._properties=t&&t.properties||{},this._zoneDelegate=new f(this,this._parent&&this._parent._zoneDelegate,t)}return r.assertZonePatched=function(){if(e.Promise!==D.ZoneAwarePromise)throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")},Object.defineProperty(r,"root",{get:function(){for(var e=r.current;e.parent;)e=e.parent;return e},enumerable:!0,configurable:!0}),Object.def
 ineProperty(r,"current",{get:function(){return j.zone},enumerable:!0,configurable:!0}),Object.defineProperty(r,"currentTask",{get:function(){return M},enumerable:!0,configurable:!0}),r.__load_patch=function(o,i){if(D.hasOwnProperty(o))throw Error("Already loaded patch: "+o);if(!e["__Zone_disable_"+o]){var a="Zone:"+o;t(a),D[o]=i(e,r,P),n(a,a)}},Object.defineProperty(r.prototype,"parent",{get:function(){return this._parent},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"name",{get:function(){return this._name},enumerable:!0,configurable:!0}),r.prototype.get=function(e){var t=this.getZoneWith(e);if(t)return t._properties[e]},r.prototype.getZoneWith=function(e){for(var t=this;t;){if(t._properties.hasOwnProperty(e))return t;t=t._parent}return null},r.prototype.fork=function(e){if(!e)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,e)},r.prototype.wrap=function(e,t){if("function"!=typeof e)throw new Error("Expecting function got: "+e);var n=th
 is._zoneDelegate.intercept(this,e,t),r=this;return function(){return r.runGuarded(n,this,arguments,t)}},r.prototype.run=function(e,t,n,r){void 0===t&&(t=void 0),void 0===n&&(n=null),void 0===r&&(r=null),j={parent:j,zone:this};try{return this._zoneDelegate.invoke(this,e,t,n,r)}finally{j=j.parent}},r.prototype.runGuarded=function(e,t,n,r){void 0===t&&(t=null),void 0===n&&(n=null),void 0===r&&(r=null),j={parent:j,zone:this};try{try{return this._zoneDelegate.invoke(this,e,t,n,r)}catch(e){if(this._zoneDelegate.handleError(this,e))throw e}}finally{j=j.parent}},r.prototype.runTask=function(e,t,n){if(e.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(e.zone||k).name+"; Execution: "+this.name+")");if(e.state!==m||e.type!==S){var r=e.state!=w;r&&e._transitionTo(w,b),e.runCount++;var o=M;M=e,j={parent:j,zone:this};try{e.type==x&&e.data&&!e.data.isPeriodic&&(e.cancelFn=null);try{return this._zoneDelegate.invokeTask(this,e,t,n)}catch(e){if(this._zoneDeleg
 ate.handleError(this,e))throw e}}finally{e.state!==m&&e.state!==E&&(e.type==S||e.data&&e.data.isPeriodic?r&&e._transitionTo(b,w):(e.runCount=0,this._updateTaskCount(e,-1),r&&e._transitionTo(m,w,m))),j=j.parent,M=o}}},r.prototype.scheduleTask=function(e){if(e.zone&&e.zone!==this)for(var t=this;t;){if(t===e.zone)throw Error("can not reschedule task to "+this.name+" which is descendants of the original zone "+e.zone.name);t=t.parent}e._transitionTo(_,m);var n=[];e._zoneDelegates=n,e._zone=this;try{e=this._zoneDelegate.scheduleTask(this,e)}catch(t){throw e._transitionTo(E,_,m),this._zoneDelegate.handleError(this,t),t}return e._zoneDelegates===n&&this._updateTaskCount(e,1),e.state==_&&e._transitionTo(b,_),e},r.prototype.scheduleMicroTask=function(e,t,n,r){return this.scheduleTask(new p(O,e,t,n,r,null))},r.prototype.scheduleMacroTask=function(e,t,n,r,o){return this.scheduleTask(new p(x,e,t,n,r,o))},r.prototype.scheduleEventTask=function(e,t,n,r,o){return this.scheduleTask(new p(S,e,t,n,r,
 o))},r.prototype.cancelTask=function(e){if(e.zone!=this)throw new Error("A task can only be cancelled in the zone of creation! (Creation: "+(e.zone||k).name+"; Execution: "+this.name+")");e._transitionTo(T,b,w);try{this._zoneDelegate.cancelTask(this,e)}catch(t){throw e._transitionTo(E,T),this._zoneDelegate.handleError(this,t),t}return this._updateTaskCount(e,-1),e._transitionTo(m,T),e.runCount=0,e},r.prototype._updateTaskCount=function(e,t){var n=e._zoneDelegates;-1==t&&(e._zoneDelegates=null);for(var r=0;r<n.length;r++)n[r]._updateTaskCount(e.type,t)},r}();u.__symbol__=a;var s,l={name:"",onHasTask:function(e,t,n,r){return e.hasTask(n,r)},onScheduleTask:function(e,t,n,r){return e.scheduleTask(n,r)},onInvokeTask:function(e,t,n,r,o,i){return e.invokeTask(n,r,o,i)},onCancelTask:function(e,t,n,r){return e.cancelTask(n,r)}},f=function(){function e(e,t,n){this._taskCounts={microTask:0,macroTask:0,eventTask:0},this.zone=e,this._parentDelegate=t,this._forkZS=n&&(n&&n.onFork?n:t._forkZS),thi
 s._forkDlgt=n&&(n.onFork?t:t._forkDlgt),this._forkCurrZone=n&&(n.onFork?this.zone:t.zone),this._interceptZS=n&&(n.onIntercept?n:t._interceptZS),this._interceptDlgt=n&&(n.onIntercept?t:t._interceptDlgt),this._interceptCurrZone=n&&(n.onIntercept?this.zone:t.zone),this._invokeZS=n&&(n.onInvoke?n:t._invokeZS),this._invokeDlgt=n&&(n.onInvoke?t:t._invokeDlgt),this._invokeCurrZone=n&&(n.onInvoke?this.zone:t.zone),this._handleErrorZS=n&&(n.onHandleError?n:t._handleErrorZS),this._handleErrorDlgt=n&&(n.onHandleError?t:t._handleErrorDlgt),this._handleErrorCurrZone=n&&(n.onHandleError?this.zone:t.zone),this._scheduleTaskZS=n&&(n.onScheduleTask?n:t._scheduleTaskZS),this._scheduleTaskDlgt=n&&(n.onScheduleTask?t:t._scheduleTaskDlgt),this._scheduleTaskCurrZone=n&&(n.onScheduleTask?this.zone:t.zone),this._invokeTaskZS=n&&(n.onInvokeTask?n:t._invokeTaskZS),this._invokeTaskDlgt=n&&(n.onInvokeTask?t:t._invokeTaskDlgt),this._invokeTaskCurrZone=n&&(n.onInvokeTask?this.zone:t.zone),this._cancelTaskZS=n&&(
 n.onCancelTask?n:t._cancelTaskZS),this._cancelTaskDlgt=n&&(n.onCancelTask?t:t._cancelTaskDlgt),this._cancelTaskCurrZone=n&&(n.onCancelTask?this.zone:t.zone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;var r=n&&n.onHasTask;(r||t&&t._hasTaskZS)&&(this._hasTaskZS=r?n:l,this._hasTaskDlgt=t,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=e,n.onScheduleTask||(this._scheduleTaskZS=l,this._scheduleTaskDlgt=t,this._scheduleTaskCurrZone=this.zone),n.onInvokeTask||(this._invokeTaskZS=l,this._invokeTaskDlgt=t,this._invokeTaskCurrZone=this.zone),n.onCancelTask||(this._cancelTaskZS=l,this._cancelTaskDlgt=t,this._cancelTaskCurrZone=this.zone))}return e.prototype.fork=function(e,t){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,e,t):new u(e,t)},e.prototype.intercept=function(e,t,n){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,e,t,n):t},e.prototype.invoke=function(e,t,n,r,
 o){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,e,t,n,r,o):t.apply(n,r)},e.prototype.handleError=function(e,t){return!this._handleErrorZS||this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,e,t)},e.prototype.scheduleTask=function(e,t){var n=t;if(this._scheduleTaskZS)this._hasTaskZS&&n._zoneDelegates.push(this._hasTaskDlgtOwner),(n=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,e,t))||(n=t);else if(t.scheduleFn)t.scheduleFn(t);else{if(t.type!=O)throw new Error("Task is missing scheduleFn.");r(t)}return n},e.prototype.invokeTask=function(e,t,n,r){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,e,t,n,r):t.callback.apply(n,r)},e.prototype.cancelTask=function(e,t){var n;if(this._cancelTaskZS)n=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,e,t);else{if(!t.cancelFn)throw Error("Task is not cancel
 able");n=t.cancelFn(t)}return n},e.prototype.hasTask=function(e,t){try{return this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,e,t)}catch(t){this.handleError(e,t)}},e.prototype._updateTaskCount=function(e,t){var n=this._taskCounts,r=n[e],o=n[e]=r+t;if(o<0)throw new Error("More tasks executed then were scheduled.");0!=r&&0!=o||this.hasTask(this.zone,{microTask:n.microTask>0,macroTask:n.macroTask>0,eventTask:n.eventTask>0,change:e})},e}(),p=function(){function t(n,r,o,i,a,c){this._zone=null,this.runCount=0,this._zoneDelegates=null,this._state="notScheduled",this.type=n,this.source=r,this.data=i,this.scheduleFn=a,this.cancelFn=c,this.callback=o;var u=this;this.invoke=n===S&&i&&i.isUsingGlobalCallback?t.invokeTask:function(){return t.invokeTask.apply(e,[u,this,arguments])}}return t.invokeTask=function(e,t,n){e||(e=this),Z++;try{return e.runCount++,e.zone.runTask(e,t,n)}finally{1==Z&&o(),Z--}},Object.defineProperty(t.prototype,"zone",{get:function(){retu
 rn this._zone},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"state",{get:function(){return this._state},enumerable:!0,configurable:!0}),t.prototype.cancelScheduleRequest=function(){this._transitionTo(m,_)},t.prototype._transitionTo=function(e,t,n){if(this._state!==t&&this._state!==n)throw new Error(this.type+" '"+this.source+"': can not transition to '"+e+"', expecting state '"+t+"'"+(n?" or '"+n+"'":"")+", was '"+this._state+"'.");this._state=e,e==m&&(this._zoneDelegates=null)},t.prototype.toString=function(){return this.data&&void 0!==this.data.handleId?this.data.handleId:Object.prototype.toString.call(this)},t.prototype.toJSON=function(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,invoke:this.invoke,scheduleFn:this.scheduleFn,cancelFn:this.cancelFn,runCount:this.runCount,callback:this.callback}},t}(),h=a("setTimeout"),d=a("Promise"),v=a("then"),y=[],g=!1,k={name:"NO ZONE"},m="notScheduled",_="scheduling",b="scheduled",w="runn
 ing",T="canceling",E="unknown",O="microTask",x="macroTask",S="eventTask",D={},P={symbol:a,currentZoneFrame:function(){return j},onUnhandledError:i,microtaskDrainDone:i,scheduleMicroTask:r,showUncaughtError:function(){return!u[a("ignoreConsoleErrorUncaughtError")]},patchEventTarget:function(){return[]},patchOnProperties:i,patchMethod:function(){return i},setNativePromise:function(e){s=e.resolve(0)}},j={parent:null,zone:new u(null,null)},M=null,Z=0;n("Zone","Zone"),e.Zone=u}("undefined"!=typeof window&&window||"undefined"!=typeof self&&self||e);var v=function(e){var t="function"==typeof Symbol&&e[Symbol.iterator],n=0;return t?t.call(e):{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}};Zone.__load_patch("ZoneAwarePromise",function(e,t,n){function r(e){return e&&e.then}function o(e){return e}function i(e){return j.reject(e)}function a(e,t){return function(n){try{c(e,t,n)}catch(t){c(e,!1,t)}}}function c(e,r,o){var i=E();if(e===o)throw new TypeError(O);if(e[g
 ]===_){var l=null;try{typeof o!==x&&typeof o!==S||(l=o&&o.then)}catch(t){return i(function(){c(e,!1,t)})(),e}if(r!==w&&o instanceof j&&o.hasOwnProperty(g)&&o.hasOwnProperty(k)&&o[g]!==_)u(o),c(e,o[g],o[k]);else if(r!==w&&typeof l===S)try{l.apply(o,[i(a(e,r)),i(a(e,!1))])}catch(t){i(function(){c(e,!1,t)})()}else{e[g]=r;var f=e[k];e[k]=o,r===w&&o instanceof Error&&(o[D]=t.currentTask);for(var h=0;h<f.length;)s(e,f[h++],f[h++],f[h++],f[h++]);if(0==f.length&&r==w){e[g]=T;try{throw new Error("Uncaught (in promise): "+o+(o&&o.stack?"\n"+o.stack:""))}catch(r){var d=r;d.rejection=o,d.promise=e,d.zone=t.current,d.task=t.currentTask,p.push(d),n.scheduleMicroTask()}}}}return e}function u(e){if(e[g]===T){try{var n=t[P];n&&typeof n===S&&n.apply(this,[{rejection:e[k],promise:e}])}catch(e){}e[g]=w;for(var r=0;r<p.length;r++)e===p[r].promise&&p.splice(r,1)}}function s(e,t,n,r,a){u(e);var s=e[g]?typeof r===S?r:o:typeof a===S?a:i;t.scheduleMicroTask(m,function(){try{c(n,!0,t.run(s,void 0,[e[k]]))}cat
 ch(e){c(n,!1,e)}})}function l(e){var t=e.prototype,n=t.then;t[d]=n;var r=Object.getOwnPropertyDescriptor(e.prototype,"then");r&&!1===r.writable&&r.configurable&&Object.defineProperty(e.prototype,"then",{writable:!0}),e.prototype.then=function(e,t){var r=this;return new j(function(e,t){n.call(r,e,t)}).then(e,t)},e[I]=!0}var f=n.symbol,p=[],h=f("Promise"),d=f("then");n.onUnhandledError=function(e){if(n.showUncaughtError()){var t=e&&e.rejection;t?console.error("Unhandled Promise rejection:",t instanceof Error?t.message:t,"; Zone:",e.zone.name,"; Task:",e.task&&e.task.source,"; Value:",t,t instanceof Error?t.stack:void 0):console.error(e)}},n.microtaskDrainDone=function(){for(;p.length;)for(var e=function(){var e=p.shift();try{e.zone.runGuarded(function(){throw e})}catch(e){!function(e){n.onUnhandledError(e);try{var r=t[y];r&&"function"==typeof r&&r.apply(this,[e])}catch(e){}}(e)}};p.length;)e()};var y=f("unhandledPromiseRejectionHandler"),g=f("state"),k=f("value"),m="Promise.then",_=nu
 ll,b=!0,w=!1,T=0,E=function(){var e=!1;return function(t){return function(){e||(e=!0,t.apply(null,arguments))}}},O="Promise resolved with itself",x="object",S="function",D=f("currentTask"),P=f("rejectionHandledHandler"),j=function(){function e(t){if(!(this instanceof e))throw new Error("Must be an instanceof Promise.");this[g]=_,this[k]=[];try{t&&t(a(this,b),a(this,w))}catch(e){c(this,!1,e)}}return e.toString=function(){return"function ZoneAwarePromise() { [native code] }"},e.resolve=function(e){return c(new this(null),b,e)},e.reject=function(e){return c(new this(null),w,e)},e.race=function(e){function t(e){a&&(a=o(e))}function n(e){a&&(a=i(e))}var o,i,a=new this(function(e,t){n=function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a}([e,t],2),o=n[0],i=n[1];var n}
 );try{for(var c=v(e),u=c.next();!u.done;u=c.next()){var s=u.value;r(s)||(s=this.resolve(s)),s.then(t,n)}}catch(e){l={error:e}}finally{try{u&&!u.done&&(f=c.return)&&f.call(c)}finally{if(l)throw l.error}}return a;var l,f},e.all=function(e){var t,n,o=new this(function(e,r){t=e,n=r}),i=0,a=[];try{for(var c=v(e),u=c.next();!u.done;u=c.next()){var s=u.value;r(s)||(s=this.resolve(s)),s.then(function(e){return function(n){a[e]=n,--i||t(a)}}(i),n),i++}}catch(e){l={error:e}}finally{try{u&&!u.done&&(f=c.return)&&f.call(c)}finally{if(l)throw l.error}}return i||t(a),o;var l,f},e.prototype.then=function(e,n){var r=new this.constructor(null),o=t.current;return this[g]==_?this[k].push(o,r,e,n):s(this,o,r,e,n),r},e.prototype.catch=function(e){return this.then(null,e)},e}();j.resolve=j.resolve,j.reject=j.reject,j.race=j.race,j.all=j.all;var M=e[h]=e.Promise,Z=t.__symbol__("ZoneAwarePromise"),z=Object.getOwnPropertyDescriptor(e,"Promise");z&&!z.configurable||(z&&delete z.writable,z&&delete z.value,z||
 (z={configurable:!0,enumerable:!0}),z.get=function(){return e[Z]?e[Z]:e[h]},z.set=function(t){t===j?e[Z]=t:(e[h]=t,t.prototype[d]||l(t),n.setNativePromise(t))},Object.defineProperty(e,"Promise",z)),e.Promise=j;var I=f("thenPatched");if(M){l(M);var C=e.fetch;typeof C==S&&(e.fetch=function(e){return function(){var t=e.apply(this,arguments);if(t instanceof j)return t;var n=t.constructor;return n[I]||l(n),t}}(C))}return Promise[t.__symbol__("uncaughtPromiseErrors")]=p,j});var y=Zone.__symbol__,g="object"==typeof window&&window||"object"==typeof self&&self||e,k="function",m="undefined",_="removeAttribute",b="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,w=!("nw"in g)&&void 0!==g.process&&"[object process]"==={}.toString.call(g.process),T=!w&&!b&&!("undefined"==typeof window||!window.HTMLElement),E=void 0!==g.process&&"[object process]"==={}.toString.call(g.process)&&!b&&!("undefined"==typeof window||!window.HTMLElement),O={},x=function(e){if(e=e||g.event){var t=
 O[e.type];t||(t=O[e.type]=y("ON_PROPERTY"+e.type));var n=(this||e.target||g)[t],r=n&&n.apply(this,arguments);return void 0==r||r||e.preventDefault(),r}},S=y("originalInstance"),D=!1,P=!1;Zone.__load_patch("toString",function(e,t,n){var r=t.__zone_symbol__originalToString=Function.prototype.toString,o=y("OriginalDelegate"),i=y("Promise"),a=y("Error");Function.prototype.toString=function(){if("function"==typeof this){var t=this[o];if(t)return"function"==typeof t?r.apply(this[o],arguments):Object.prototype.toString.call(t);if(this===Promise){var n=e[i];if(n)return r.apply(n,arguments)}if(this===Error){var c=e[a];if(c)return r.apply(c,arguments)}}return r.apply(this,arguments)};var c=Object.prototype.toString;Object.prototype.toString=function(){return this instanceof Promise?"[object Promise]":c.apply(this,arguments)}});var j=function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.pus
 h(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a},M=function(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(j(arguments[t]));return e},Z="true",z="false",I={isUsingGlobalCallback:!0},C={},R={},L="name",H="function",F="object",B="__zone_symbol__",q=/^__zone_symbol__(\w+)(true|false)$/,N="__zone_symbol__propagationStopped",W=y("zoneTask"),X=Object[y("defineProperty")]=Object.defineProperty,A=Object[y("getOwnPropertyDescriptor")]=Object.getOwnPropertyDescriptor,G=Object.create,U=y("unconfigurables"),J="undefined",V=["absolutedeviceorientation","afterinput","afterprint","appinstalled","beforeinstallprompt","beforeprint","beforeunload","devicelight","devicemotion","deviceorientation","deviceorientationabsolute","deviceproximity","hashchange","languagechange","message","mozbeforepaint","offline","online","paint","pageshow","pagehide","popstate","rejectionhandled","storage","unhandledrejection","unload","userproximit
 y","vrdisplyconnected","vrdisplaydisconnected","vrdisplaypresentchange"],Q=["encrypted","waitingforkey","msneedkey","mozinterruptbegin","mozinterruptend"],K=["load"],Y=["blur","error","focus","load","resize","scroll","messageerror"],$=["bounce","finish","start"],ee=["loadstart","progress","abort","error","load","progress","timeout","loadend","readystatechange"],te=["upgradeneeded","complete","abort","success","error","blocked","versionchange","close"],ne=["close","error","open","message"],re=["error","message"],oe=["abort","animationcancel","animationend","animationiteration","auxclick","beforeinput","blur","cancel","canplay","canplaythrough","change","compositionstart","compositionupdate","compositionend","cuechange","click","close","contextmenu","curechange","dblclick","drag","dragend","dragenter","dragexit","dragleave","dragover","drop","durationchange","emptied","ended","error","focus","focusin","focusout","gotpointercapture","input","invalid","keydown","keypress","keyup","load"
 ,"loadstart","loadeddata","loadedmetadata","lostpointercapture","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","mousewheel","orientationchange","pause","play","playing","pointercancel","pointerdown","pointerenter","pointerleave","pointerlockchange","mozpointerlockchange","webkitpointerlockerchange","pointerlockerror","mozpointerlockerror","webkitpointerlockerror","pointermove","pointout","pointerover","pointerup","progress","ratechange","reset","resize","scroll","seeked","seeking","select","selectionchange","selectstart","show","sort","stalled","submit","suspend","timeupdate","volumechange","touchcancel","touchmove","touchstart","touchend","transitioncancel","transitionend","waiting","wheel"].concat(["webglcontextrestored","webglcontextlost","webglcontextcreationerror"],["autocomplete","autocompleteerror"],["toggle"],["afterscriptexecute","beforescriptexecute","DOMContentLoaded","fullscreenchange","mozfullscreenchange","webkitfullscreenchange","ms
 fullscreenchange","fullscreenerror","mozfullscreenerror","webkitfullscreenerror","msfullscreenerror","readystatechange","visibilitychange"],V,["beforecopy","beforecut","beforepaste","copy","cut","paste","dragstart","loadend","animationstart","search","transitionrun","transitionstart","webkitanimationend","webkitanimationiteration","webkitanimationstart","webkittransitionend"],["activate","afterupdate","ariarequest","beforeactivate","beforedeactivate","beforeeditfocus","beforeupdate","cellchange","controlselect","dataavailable","datasetchanged","datasetcomplete","errorupdate","filterchange","layoutcomplete","losecapture","move","moveend","movestart","propertychange","resizeend","resizestart","rowenter","rowexit","rowsdelete","rowsinserted","command","compassneedscalibration","deactivate","help","mscontentzoom","msmanipulationstatechanged","msgesturechange","msgesturedoubletap","msgestureend","msgesturehold","msgesturestart","msgesturetap","msgotpointercapture","msinertiastart","mslos
 tpointercapture","mspointercancel","mspointerdown","mspointerenter","mspointerhover","mspointerleave","mspointermove","mspointerout","mspointerover","mspointerup","pointerout","mssitemodejumplistitemremoved","msthumbnailclick","stop","storagecommit"]),ie=y("unbound");Zone.__load_patch("util",function(e,t,n){n.patchOnProperties=o,n.patchMethod=a}),Zone.__load_patch("timers",function(e,t,n){l(e,"set","clear","Timeout"),l(e,"set","clear","Interval"),l(e,"set","clear","Immediate")}),Zone.__load_patch("requestAnimationFrame",function(e,t,n){l(e,"request","cancel","AnimationFrame"),l(e,"mozRequest","mozCancel","AnimationFrame"),l(e,"webkitRequest","webkitCancel","AnimationFrame")}),Zone.__load_patch("blocking",function(e,t,n){for(var r=["alert","prompt","confirm"],o=0;o<r.length;o++)a(e,r[o],function(n,r,o){return function(r,i){return t.current.run(n,e,i,o)}})}),Zone.__load_patch("EventTarget",function(e,t,n){(function(e,t){!function(n,r){var o=e.Event;o&&o.prototype&&t.patchMethod(o.prot
 otype,"stopImmediatePropagation",function(e){return function(e,t){e[N]=!0}})}()})(e,n),function(e,t){var n="Anchor,Area,Audio,BR,Base,BaseFont,Body,Button,Canvas,Content,DList,Directory,Div,Embed,FieldSet,Font,Form,Frame,FrameSet,HR,Head,Heading,Html,IFrame,Image,Input,Keygen,LI,Label,Legend,Link,Map,Marquee,Media,Menu,Meta,Meter,Mod,OList,Object,OptGroup,Option,Output,Paragraph,Pre,Progress,Quote,Script,Select,Source,Span,Style,TableCaption,TableCell,TableCol,Table,TableRow,TableSection,TextArea,Title,Track,UList,Unknown,Video",r="ApplicationCache,EventSource,FileReader,InputMethodContext,MediaController,MessagePort,Node,Performance,SVGElementInstance,SharedWorker,TextTrack,TextTrackCue,TextTrackList,WebKitNamedFlow,Window,Worker,WorkerGlobalScope,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload,IDBRequest,IDBOpenDBRequest,IDBDatabase,IDBTransaction,IDBCursor,DBIndex,WebSocket".split(","),o=[],i=e.wtf,a=n.split(",");i?o=a.map(function(e){return"HTML"+e+"Element"}).conc
 at(r):e.EventTarget?o.push("EventTarget"):o=r;for(var c=e.__Zone_disable_IE_check||!1,s=e.__Zone_enable_cross_context_check||!1,l=function(){if(D)return P;D=!0;try{var e=window.navigator.userAgent;return e.indexOf("MSIE "),-1===e.indexOf("MSIE ")&&-1===e.indexOf("Trident/")&&-1===e.indexOf("Edge/")||(P=!0),P}catch(e){}}(),f="[object FunctionWrapper]",p="function __BROWSERTOOLS_CONSOLE_SAFEFUNC() { [native code] }",h=0;h<oe.length;h++){var d=B+((m=oe[h])+z),v=B+(m+Z);C[m]={},C[m][z]=d,C[m][Z]=v}for(h=0;h<n.length;h++)for(var y=a[h],g=R[y]={},k=0;k<oe.length;k++){var m;g[m=oe[k]]=y+".addEventListener:"+m}var _=[];for(h=0;h<o.length;h++){var b=e[o[h]];_.push(b&&b.prototype)}u(e,_,{validateHandler:function(e,t,n,r){if(!c&&l)if(s)try{if((o=t.toString())===f||o==p)return e.apply(n,r),!1}catch(t){return e.apply(n,r),!1}else{var o;if((o=t.toString())===f||o==p)return e.apply(n,r),!1}else if(s)try{t.toString()}catch(t){return e.apply(n,r),!1}return!0}}),t.patchEventTarget=u}(e,n);var r=e.XML
 HttpRequestEventTarget;r&&r.prototype&&n.patchEventTarget(e,[r.prototype]),i("MutationObserver"),i("WebKitMutationObserver"),i("IntersectionObserver"),i("FileReader")}),Zone.__load_patch("on_property",function(e,t,n){(function(e,t){if(!w||E){var n="undefined"!=typeof WebSocket;if(function(){if((T||E)&&!Object.getOwnPropertyDescriptor(HTMLElement.prototype,"onclick")&&"undefined"!=typeof Element){var e=Object.getOwnPropertyDescriptor(Element.prototype,"onclick");if(e&&!e.configurable)return!1}var t=Object.getOwnPropertyDescriptor(XMLHttpRequest.prototype,"onreadystatechange");if(t){Object.defineProperty(XMLHttpRequest.prototype,"onreadystatechange",{enumerable:!0,configurable:!0,get:function(){return!0}});var n=!!(o=new XMLHttpRequest).onreadystatechange;return Object.defineProperty(XMLHttpRequest.prototype,"onreadystatechange",t||{}),n}var r=y("fakeonreadystatechange");Object.defineProperty(XMLHttpRequest.prototype,"onreadystatechange",{enumerable:!0,configurable:!0,get:function(){r
 eturn this[r]},set:function(e){this[r]=e}});var o,i=function(){};(o=new XMLHttpRequest).onreadystatechange=i;n=o[r]===i;return o.onreadystatechange=null,n}()){var r=t.__Zone_ignore_on_properties;if(T){d(window,oe.concat(["messageerror"]),r,Object.getPrototypeOf(window)),d(Document.prototype,oe,r),void 0!==window.SVGElement&&d(window.SVGElement.prototype,oe,r),d(Element.prototype,oe,r),d(HTMLElement.prototype,oe,r),d(HTMLMediaElement.prototype,Q,r),d(HTMLFrameSetElement.prototype,V.concat(Y),r),d(HTMLBodyElement.prototype,V.concat(Y),r),d(HTMLFrameElement.prototype,K,r),d(HTMLIFrameElement.prototype,K,r);var a=window.HTMLMarqueeElement;a&&d(a.prototype,$,r);var c=window.Worker;c&&d(c.prototype,re,r)}d(XMLHttpRequest.prototype,ee,r);var s=t.XMLHttpRequestEventTarget;s&&d(s&&s.prototype,ee,r),"undefined"!=typeof IDBIndex&&(d(IDBIndex.prototype,te,r),d(IDBRequest.prototype,te,r),d(IDBOpenDBRequest.prototype,te,r),d(IDBDatabase.prototype,te,r),d(IDBTransaction.prototype,te,r),d(IDBCursor
 .prototype,te,r)),n&&d(WebSocket.prototype,ne,r)}else!function(){for(var e=function(e){var t=oe[e],n="on"+t;self.addEventListener(t,function(e){var t,r,o=e.target;for(r=o?o.constructor.name+"."+n:"unknown."+n;o;)o[n]&&!o[n][ie]&&((t=Zone.current.wrap(o[n],r))[ie]=o[n],o[n]=t),o=o.parentElement},!0)},t=0;t<oe.length;t++)e(t)}(),i("XMLHttpRequest"),n&&function(e,t){var n=t.WebSocket;t.EventTarget||u(t,[n.prototype]),t.WebSocket=function(e,t){var r,i,a=arguments.length>1?new n(e,t):new n(e),c=Object.getOwnPropertyDescriptor(a,"onmessage");return c&&!1===c.configurable?(r=Object.create(a),i=a,["addEventListener","removeEventListener","send","close"].forEach(function(e){r[e]=function(){var t=Array.prototype.slice.call(arguments);if("addEventListener"===e||"removeEventListener"===e){var n=t.length>0?t[0]:void 0;if(n){var o=Zone.__symbol__("ON_PROPERTY"+n);a[o]=r[o]}}return a[e].apply(a,t)}})):r=a,o(r,["close","error","message","open"],i),r};var r=t.WebSocket;for(var i in n)r[i]=n[i]}(0,t)
 }})(0,e),Object.defineProperty=function(e,t,n){if(f(e,t))throw new TypeError("Cannot assign to read only property '"+t+"' of "+e);var r=n.configurable;return"prototype"!==t&&(n=p(e,t,n)),h(e,t,n,r)},Object.defineProperties=function(e,t){return Object.keys(t).forEach(function(n){Object.defineProperty(e,n,t[n])}),e},Object.create=function(e,t){return"object"!=typeof t||Object.isFrozen(t)||Object.keys(t).forEach(function(n){t[n]=p(e,n,t[n])}),G(e,t)},Object.getOwnPropertyDescriptor=function(e,t){var n=A(e,t);return f(e,t)&&(n.configurable=!1),n},function(t){if((T||E)&&"registerElement"in e.document){var n=document.registerElement,r=["createdCallback","attachedCallback","detachedCallback","attributeChangedCallback"];document.registerElement=function(e,t){return t&&t.prototype&&r.forEach(function(e){var n="Document.registerElement::"+e;if(t.prototype.hasOwnProperty(e)){var r=Object.getOwnPropertyDescriptor(t.prototype,e);r&&r.value?(r.value=Zone.current.wrap(r.value,n),function(t,n,r){va
 r o=r.configurable;h(t,e,r=p(t,e,r),o)}(t.prototype,0,r)):t.prototype[e]=Zone.current.wrap(t.prototype[e],n)}else t.prototype[e]&&(t.prototype[e]=Zone.current.wrap(t.prototype[e],n))}),n.apply(document,[e,t])},c(document.registerElement,n)}}()}),Zone.__load_patch("canvas",function(e,t,n){var r=e.HTMLCanvasElement;void 0!==r&&r.prototype&&r.prototype.toBlob&&function(e,t,n){function o(e){var t=e.data;return t.args[t.callbackIndex]=function(){e.invoke.apply(this,arguments)},i.apply(t.target,t.args),e}var i=null;i=a(r.prototype,"toBlob",function(e){return function(t,n){var r={name:"HTMLCanvasElement.toBlob",target:t,callbackIndex:0,args:n};return r.callbackIndex>=0&&"function"==typeof n[r.callbackIndex]?Zone.current.scheduleMacroTask(r.name,n[r.callbackIndex],r,o,null):e.apply(t,n)}})}()}),Zone.__load_patch("XHR",function(e,t,n){!function(e){function n(e){XMLHttpRequest[c]=!1;var t=e.data,n=t.target,o=n[i];h||(h=n[f],d=n[p]),o&&d.apply(n,[g,o]);var a=n[i]=function(){n.readyState===n.DO
 NE&&!t.aborted&&XMLHttpRequest[c]&&e.state===k&&e.invoke()};return h.apply(n,[g,a]),n[r]||(n[r]=e),_.apply(n,t.args),XMLHttpRequest[c]=!0,e}function s(){}function l(e){var t=e.data;return t.aborted=!0,b.apply(t.target,t.args)}var f=y("addEventListener"),p=y("removeEventListener"),h=XMLHttpRequest.prototype[f],d=XMLHttpRequest.prototype[p];if(!h){var v=e.XMLHttpRequestEventTarget;v&&(h=v.prototype[f],d=v.prototype[p])}var g="readystatechange",k="scheduled",m=a(e.XMLHttpRequest.prototype,"open",function(){return function(e,t){return e[o]=0==t[2],e[u]=t[1],m.apply(e,t)}}),_=a(e.XMLHttpRequest.prototype,"send",function(){return function(e,r){var i=t.current;return e[o]?_.apply(e,r):i.scheduleMacroTask("XMLHttpRequest.send",s,{target:e,url:e[u],isPeriodic:!1,delay:null,args:r,aborted:!1},n,l)}}),b=a(e.XMLHttpRequest.prototype,"abort",function(e){return function(e,t){var n=e[r];if(n&&"string"==typeof n.type){if(null==n.cancelFn||n.data&&n.data.aborted)return;n.zone.cancelTask(n)}}})}(e);v
 ar r=y("xhrTask"),o=y("xhrSync"),i=y("xhrListener"),c=y("xhrScheduled"),u=y("xhrURL")}),Zone.__load_patch("geolocation",function(e,r,o){e.navigator&&e.navigator.geolocation&&function(e,r){for(var o=e.constructor.name,i=function(i){var a=r[i],u=e[a];if(u){if(!n(Object.getOwnPropertyDescriptor(e,a)))return"continue";e[a]=function(e){var n=function(){return e.apply(this,t(arguments,o+"."+a))};return c(n,e),n}(u)}},a=0;a<r.length;a++)i(a)}(e.navigator.geolocation,["getCurrentPosition","watchPosition"])}),Zone.__load_patch("PromiseRejectionEvent",function(e,t,n){function r(t){return function(n){s(e,t).forEach(function(r){var o=e.PromiseRejectionEvent;if(o){var i=new o(t,{promise:n.promise,reason:n.rejection});r.invoke(i)}})}}e.PromiseRejectionEvent&&(t[y("unhandledPromiseRejectionHandler")]=r("unhandledrejection"),t[y("rejectionHandledHandler")]=r("rejectionhandled"))})}()}).call(t,n("fRUx"))},ewdp:function(e,t,n){var r=n("tose"),o=n("+pQw"),i=n("2Fuj");e.exports=n("V+0c")?Object.defineP
 roperties:function(e,t){o(e);for(var n,a=i(t),c=a.length,u=0;c>u;)r.f(e,n=a[u++],t[n]);return e}},fC8q:function(e,t,n){var r=n("dXJ/"),o=n("3r0D")("iterator"),i=n("lexG");e.exports=n("b4gG").getIteratorMethod=function(e){if(void 0!=e)return e[o]||e["@@iterator"]||i[r(e)]}},fHxy:function(e,t,n){var r=n("gBtn"),o=n("+pQw"),i=r.key,a=r.set;r.exp({defineMetadata:function(e,t,n,r){a(e,t,o(n),i(r))}})},fRUx:function(e,t){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(n=window)}e.exports=n},gBtn:function(e,t,n){var r=n("ZI9W"),o=n("CDXM"),i=n("Iclu")("metadata"),a=i.store||(i.store=new(n("QZhw"))),c=function(e,t,n){var o=a.get(e);if(!o){if(!n)return;a.set(e,o=new r)}var i=o.get(t);if(!i){if(!n)return;o.set(t,i=new r)}return i};e.exports={store:a,map:c,has:function(e,t,n){var r=c(t,n,!1);return void 0!==r&&r.has(e)},get:function(e,t,n){var r=c(t,n,!1);return void 0===r?void 0:r.get(e)},set:function(e,t,n,r){c(n,r,!0)
 .set(e,t)},keys:function(e,t){var n=c(e,t,!1),r=[];return n&&n.forEach(function(e,t){r.push(t)}),r},key:function(e){return void 0===e||"symbol"==typeof e?e:String(e)},exp:function(e){o(o.S,"Reflect",e)}}},gNkH:function(e,t,n){e.exports=!n("V+0c")&&!n("umMR")(function(){return 7!=Object.defineProperty(n("BQSv")("div"),"a",{get:function(){return 7}}).a})},gxdV:function(e,t,n){var r=n("tose"),o=n("piOq");e.exports=n("V+0c")?function(e,t,n){return r.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},lexG:function(e,t){e.exports={}},lfBE:function(e,t,n){var r=n("ptrv"),o=n("gxdV"),i=n("rMsi"),a=n("c09d")("src"),c=Function.toString,u=(""+c).split("toString");n("b4gG").inspectSource=function(e){return c.call(e)},(e.exports=function(e,t,n,c){var s="function"==typeof n;s&&(i(n,"name")||o(n,"name",t)),e[t]!==n&&(s&&(i(n,a)||o(n,a,e[t]?""+e[t]:u.join(String(t)))),e===r?e[t]=n:c?e[t]?e[t]=n:o(e,t,n):(delete e[t],o(e,t,n)))})(Function.prototype,"toString",function(){return"function"==typeof this&&
 this[a]||c.call(this)})},lzDK:function(e,t){t.f=Object.getOwnPropertySymbols},ncNB:function(e,t,n){var r=n("gBtn"),o=n("+pQw"),i=r.get,a=r.key;r.exp({getOwnMetadata:function(e,t){return i(e,o(t),arguments.length<3?void 0:a(arguments[2]))}})},"p/bR":function(e,t,n){var r=n("pa70"),o=n("ULWX"),i=n("KpI+"),a=n("+pQw"),c=n("rppw"),u=n("fC8q"),s={},l={};(t=e.exports=function(e,t,n,f,p){var h,d,v,y,g=p?function(){return e}:u(e),k=r(n,f,t?2:1),m=0;if("function"!=typeof g)throw TypeError(e+" is not iterable!");if(i(g)){for(h=c(e.length);h>m;m++)if((y=t?k(a(d=e[m])[0],d[1]):k(e[m]))===s||y===l)return y}else for(v=g.call(e);!(d=v.next()).done;)if((y=o(v,k,d.value,t))===s||y===l)return y}).BREAK=s,t.RETURN=l},pBmS:function(e,t,n){var r=n("lfBE");e.exports=function(e,t,n){for(var o in t)r(e,o,t[o],n);return e}},pa70:function(e,t,n){var r=n("uNkO");e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.ca
 ll(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}}},piOq:function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},ptrv:function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},rIdM:function(e,t,n){"use strict";var r=n("2Fuj"),o=n("lzDK"),i=n("9e9+"),a=n("RT4T"),c=n("Wo2w"),u=Object.assign;e.exports=!u||n("umMR")(function(){var e={},t={},n=Symbol();return e[n]=7,"abcdefghijklmnopqrst".split("").forEach(function(e){t[e]=e}),7!=u({},e)[n]||"abcdefghijklmnopqrst"!=Object.keys(u({},t)).join("")})?function(e,t){for(var n=a(e),u=arguments.length,s=1,l=o.f,f=i.f;u>s;)for(var p,h=c(arguments[s++]),d=l?r(h).concat(l(h)):r(h),v=d.length,y=0;v>y;)f.call(h,p=d[y++])&&(n[p]=h[p]);return n}:u},rKhO:function(e,t,n){var r=n("VceJ");e.exports=Array.isArray||fu
 nction(e){return"Array"==r(e)}},rMsi:function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},rppw:function(e,t,n){var r=n("9wYb"),o=Math.min;e.exports=function(e){return e>0?o(r(e),9007199254740991):0}},soMw:function(e,t,n){var r=n("gBtn"),o=n("+pQw"),i=r.keys,a=r.key;r.exp({getOwnMetadataKeys:function(e){return i(o(e),arguments.length<2?void 0:a(arguments[1]))}})},t6ta:function(e,t,n){var r=n("gBtn"),o=n("+pQw"),i=n("uNkO"),a=r.key,c=r.set;r.exp({metadata:function(e,t){return function(n,r){c(e,t,(void 0!==r?o:i)(n),a(r))}}})},tose:function(e,t,n){var r=n("+pQw"),o=n("gNkH"),i=n("A1WY"),a=Object.defineProperty;t.f=n("V+0c")?Object.defineProperty:function(e,t,n){if(r(e),t=i(t,!0),r(n),o)try{return a(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},uNkO:function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},umMR:function(e,t){e.e
 xports=function(e){try{return!!e()}catch(e){return!0}}},vyV2:function(e,t,n){var r=n("+GRi"),o=n("rppw"),i=n("KM3d");e.exports=function(e){return function(t,n,a){var c,u=r(t),s=o(u.length),l=i(a,s);if(e&&n!=n){for(;s>l;)if((c=u[l++])!=c)return!0}else for(;s>l;l++)if((e||l in u)&&u[l]===n)return e||l||0;return!e&&-1}}},"w/BM":function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},xI8H:function(e,t,n){var r=n("c09d")("meta"),o=n("JXkd"),i=n("rMsi"),a=n("tose").f,c=0,u=Object.isExtensible||function(){return!0},s=!n("umMR")(function(){return u(Object.preventExtensions({}))}),l=function(e){a(e,r,{value:{i:"O"+ ++c,w:{}}})},f=e.exports={KEY:r,NEED:!1,fastKey:function(e,t){if(!o(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!i(e,r)){if(!u(e))return"F";if(!t)return"E";l(e)}return e[r].i},getWeak:function(e,t){if(!i(e,r)){if(!u(e))return!0;if(!t)return!1;l(e)}return e[r].w},onFreeze:function(e){return s&&f.NEED&&u(e)&&!i(e,r)&&l(e),e}}},yIWP:function(e,t,n){var r=
 n("Iclu")("keys"),o=n("c09d");e.exports=function(e){return r[e]||(r[e]=o(e))}}},[1]);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.16e1d930cf13fb7a9563.woff
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.16e1d930cf13fb7a9563.woff b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.16e1d930cf13fb7a9563.woff
deleted file mode 100644
index 941dfa4..0000000
Binary files a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.16e1d930cf13fb7a9563.woff and /dev/null differ

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3ae6ef05/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.38861cba61c66739c145.ttf
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.38861cba61c66739c145.ttf b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.38861cba61c66739c145.ttf
deleted file mode 100644
index 7b25f3c..0000000
Binary files a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.38861cba61c66739c145.ttf and /dev/null differ