You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by mb...@apache.org on 2018/06/01 12:44:33 UTC

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

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('-'));
+	}
+}