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; + } +}
