http://git-wip-us.apache.org/repos/asf/asterixdb/blob/1cb814b4/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/output.component.scss
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/output.component.scss
 
b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/output.component.scss
new file mode 100755
index 0000000..099ca87
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/main/resources/dashboard/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/1cb814b4/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.html
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.html
 
b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.html
new file mode 100755
index 0000000..6dd3ef3
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/main/resources/dashboard/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/1cb814b4/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.scss
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.scss
 
b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.scss
new file mode 100755
index 0000000..d6b530b
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/main/resources/dashboard/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/1cb814b4/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.ts
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.ts
 
b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.ts
new file mode 100755
index 0000000..776e184
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/main/resources/dashboard/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/1cb814b4/asterixdb/asterix-app/src/main/resources/dashboard/src/app/db.ts
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/db.ts 
b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/db.ts
new file mode 100755
index 0000000..8f51b00
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/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: {},
+};

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/1cb814b4/asterixdb/asterix-app/src/main/resources/dashboard/src/app/material.module.ts
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/material.module.ts 
b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/material.module.ts
new file mode 100755
index 0000000..3bb67d9
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/main/resources/dashboard/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/1cb814b4/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/app.actions.ts
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/app.actions.ts
 
b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/app.actions.ts
new file mode 100755
index 0000000..29da05f
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/main/resources/dashboard/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/1cb814b4/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/dataset.actions.ts
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/dataset.actions.ts
 
b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/dataset.actions.ts
new file mode 100755
index 0000000..a49e07c
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/main/resources/dashboard/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/1cb814b4/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/datatype.actions.ts
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/datatype.actions.ts
 
b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/datatype.actions.ts
new file mode 100755
index 0000000..5543a7a
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/main/resources/dashboard/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/1cb814b4/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/dataverse.actions.ts
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/dataverse.actions.ts
 
b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/dataverse.actions.ts
new file mode 100755
index 0000000..dc33c0a
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/main/resources/dashboard/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/1cb814b4/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/index.actions.ts
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/index.actions.ts
 
b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/index.actions.ts
new file mode 100755
index 0000000..1304644
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/main/resources/dashboard/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/1cb814b4/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/metadata.actions.ts
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/metadata.actions.ts
 
b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/metadata.actions.ts
new file mode 100755
index 0000000..4a3c125
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/main/resources/dashboard/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/1cb814b4/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/query.actions.ts
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/query.actions.ts
 
b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/query.actions.ts
new file mode 100755
index 0000000..866b3e9
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/main/resources/dashboard/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/1cb814b4/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/dataset.effects.ts
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/dataset.effects.ts
 
b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/dataset.effects.ts
new file mode 100755
index 0000000..b5624a4
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/main/resources/dashboard/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/1cb814b4/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/datatype.effects.ts
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/datatype.effects.ts
 
b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/datatype.effects.ts
new file mode 100755
index 0000000..4fa187f
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/main/resources/dashboard/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/1cb814b4/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/dataverse.effects.ts
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/dataverse.effects.ts
 
b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/dataverse.effects.ts
new file mode 100755
index 0000000..d917420
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/main/resources/dashboard/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/1cb814b4/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/index.effects.ts
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/index.effects.ts
 
b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/index.effects.ts
new file mode 100755
index 0000000..8491392
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/main/resources/dashboard/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/1cb814b4/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/metadata.effects.ts
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/metadata.effects.ts
 
b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/metadata.effects.ts
new file mode 100755
index 0000000..ddcdb27
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/main/resources/dashboard/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/1cb814b4/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/query.effects.ts
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/query.effects.ts
 
b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/query.effects.ts
new file mode 100755
index 0000000..cb78255
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/main/resources/dashboard/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/1cb814b4/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/models/asterixDB.model.ts
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/models/asterixDB.model.ts
 
b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/models/asterixDB.model.ts
new file mode 100755
index 0000000..bbdabe2
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/main/resources/dashboard/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/1cb814b4/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/pipes/keys.pipe.ts
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/pipes/keys.pipe.ts
 
b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/pipes/keys.pipe.ts
new file mode 100755
index 0000000..77cac5a
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/main/resources/dashboard/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/1cb814b4/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/pipes/objectArrayType.pipe.ts
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/pipes/objectArrayType.pipe.ts
 
b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/pipes/objectArrayType.pipe.ts
new file mode 100755
index 0000000..220b53c
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/main/resources/dashboard/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/1cb814b4/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/pipes/objectType.pipe.ts
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/pipes/objectType.pipe.ts
 
b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/pipes/objectType.pipe.ts
new file mode 100755
index 0000000..5b8f795
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/main/resources/dashboard/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/1cb814b4/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/app.reducer.ts
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/app.reducer.ts
 
b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/app.reducer.ts
new file mode 100755
index 0000000..01c65ac
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/main/resources/dashboard/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/1cb814b4/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/dataset.reducer.ts
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/dataset.reducer.ts
 
b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/dataset.reducer.ts
new file mode 100755
index 0000000..25d09b9
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/main/resources/dashboard/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/1cb814b4/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/datatype.reducer.ts
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/datatype.reducer.ts
 
b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/datatype.reducer.ts
new file mode 100755
index 0000000..1036fdb
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/main/resources/dashboard/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/1cb814b4/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/dataverse.reducer.ts
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/dataverse.reducer.ts
 
b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/dataverse.reducer.ts
new file mode 100755
index 0000000..7ac78ea
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/main/resources/dashboard/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;
+  }
+}

Reply via email to