diff options
Diffstat (limited to 'cds-ui')
24 files changed, 429 insertions, 103 deletions
diff --git a/cds-ui/client/src/app/common/constants/app-constants.ts b/cds-ui/client/src/app/common/constants/app-constants.ts index 283ce735f..bcfcc4e0c 100644 --- a/cds-ui/client/src/app/common/constants/app-constants.ts +++ b/cds-ui/client/src/app/common/constants/app-constants.ts @@ -96,5 +96,7 @@ export const GlobalContants = { export const ResourceDictionaryURLs = { saveResourceDictionary: '/resourcedictionary/save', searchResourceDictionaryByTags: '/resourcedictionary/search', - searchResourceDictionaryByName: '' + searchResourceDictionaryByName: '', + getSources: '/resourcedictionary/source-mapping', + getModelType: '/resourcedictionary/model-type' }
\ No newline at end of file diff --git a/cds-ui/client/src/app/common/core/store/models/resources.model.ts b/cds-ui/client/src/app/common/core/store/models/resources.model.ts index 019c2684a..e89094bb1 100644 --- a/cds-ui/client/src/app/common/core/store/models/resources.model.ts +++ b/cds-ui/client/src/app/common/core/store/models/resources.model.ts @@ -27,4 +27,5 @@ export interface IResources { updated_bt:string; property: IPropertyData; sources: ISourcesData; + definition?: any; }
\ No newline at end of file diff --git a/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-from-database/search-from-database.component.html b/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-from-database/search-from-database.component.html new file mode 100644 index 000000000..11c2ff0b6 --- /dev/null +++ b/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-from-database/search-from-database.component.html @@ -0,0 +1,31 @@ +<!-- +============LICENSE_START========================================== +=================================================================== +Copyright (C) 2019 IBM Intellectual Property. All rights reserved. +=================================================================== + +Unless otherwise specified, all software contained herein is licensed +under the Apache License, Version 2.0 (the License); +you may not use this software except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +============LICENSE_END============================================ +--> +<form class="search-form" [formGroup]="myControl"> + <mat-form-field class="search-full-width"> + <input #resourceSelect type="text" [(ngModel)]="searchText" placeholder="Search Resources" matInput [matAutocomplete]="auto" formControlName="search_input"> + <button matSuffix mat-icon-button (click)="fetchResourceByName()"><mat-icon>search</mat-icon></button> + <mat-autocomplete #auto="matAutocomplete"> + <mat-option (click)="selected(option)" *ngFor="let option of options" [value]="option.tags"> + {{option.tags}} + </mat-option> + </mat-autocomplete> + </mat-form-field> +</form>
\ No newline at end of file diff --git a/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-from-database/search-from-database.component.scss b/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-from-database/search-from-database.component.scss new file mode 100644 index 000000000..93f5c9dea --- /dev/null +++ b/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-from-database/search-from-database.component.scss @@ -0,0 +1,20 @@ +/* +============LICENSE_START========================================== +=================================================================== +Copyright (C) 2019 IBM Intellectual Property. All rights reserved. +=================================================================== + +Unless otherwise specified, all software contained herein is licensed +under the Apache License, Version 2.0 (the License); +you may not use this software except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +============LICENSE_END============================================ +*/
\ No newline at end of file diff --git a/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-from-database/search-from-database.component.spec.ts b/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-from-database/search-from-database.component.spec.ts new file mode 100644 index 000000000..431eea745 --- /dev/null +++ b/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-from-database/search-from-database.component.spec.ts @@ -0,0 +1,45 @@ +/* +============LICENSE_START========================================== +=================================================================== +Copyright (C) 2019 IBM Intellectual Property. All rights reserved. +=================================================================== + +Unless otherwise specified, all software contained herein is licensed +under the Apache License, Version 2.0 (the License); +you may not use this software except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +============LICENSE_END============================================ +*/ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SearchFromDatabaseComponent } from './search-from-database.component'; + +describe('SearchFromDatabaseComponent', () => { + let component: SearchFromDatabaseComponent; + let fixture: ComponentFixture<SearchFromDatabaseComponent>; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ SearchFromDatabaseComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(SearchFromDatabaseComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-from-database/search-from-database.component.ts b/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-from-database/search-from-database.component.ts new file mode 100644 index 000000000..a14508670 --- /dev/null +++ b/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-from-database/search-from-database.component.ts @@ -0,0 +1,65 @@ +/* +============LICENSE_START========================================== +=================================================================== +Copyright (C) 2019 IBM Intellectual Property. All rights reserved. +=================================================================== + +Unless otherwise specified, all software contained herein is licensed +under the Apache License, Version 2.0 (the License); +you may not use this software except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +============LICENSE_END============================================ +*/ + +import { Component, OnInit, ViewChild, EventEmitter, Output } from '@angular/core'; +import { FormBuilder, FormGroup, Validators} from '@angular/forms'; +import { SearchTemplateService } from '../search-template.service'; +import { MatAutocompleteTrigger } from '@angular/material'; +import { SearchPipe } from 'src/app/common/shared/pipes/search.pipe'; +@Component({ + selector: 'app-search-from-database', + templateUrl: './search-from-database.component.html', + styleUrls: ['./search-from-database.component.scss'] +}) +export class SearchFromDatabaseComponent implements OnInit { + + myControl: FormGroup; + @Output() resourcesData = new EventEmitter(); + options: any[] = []; + @ViewChild('resourceSelect', { read: MatAutocompleteTrigger }) resourceSelect: MatAutocompleteTrigger; + + searchText: string = ''; + constructor(private _formBuilder: FormBuilder, + private existingModelService: SearchTemplateService) { } + + ngOnInit() { + this.myControl = this._formBuilder.group({ + search_input: ['', Validators.required] + }); + } + selected(value){ + this.resourcesData.emit(value); + } + + fetchResourceByName() { + this.existingModelService.searchByTags("/searchByTags/",this.searchText) + .subscribe(data=>{ + console.log(data); + data.forEach(element => { + this.options.push(element) + }); + this.resourceSelect.openPanel(); + }, error=>{ + window.alert('error' + error); + }) + } + +} diff --git a/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-template.component.html b/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-template.component.html index 491c5e06d..6a4a88c80 100644 --- a/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-template.component.html +++ b/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-template.component.html @@ -27,15 +27,5 @@ limitations under the License. </div> </div> <div *ngIf="optionSelected==2"> - <form class="search-form" [formGroup]="myControl"> - <mat-form-field class="search-full-width"> - <input #resourceSelect type="text" [(ngModel)]="searchText" placeholder="Search Resources" matInput [matAutocomplete]="auto" formControlName="search_input"> - <button matSuffix mat-icon-button (click)="fetchResourceByName()"><mat-icon>search</mat-icon></button> - <!-- <mat-autocomplete #auto="matAutocomplete"> - <mat-option (click)="selected(option)" *ngFor="let option of options | search : searchText" [value]="option.tags"> - {{option.tags}} - </mat-option> - </mat-autocomplete> --> - </mat-form-field> - </form> + <app-search-from-database></app-search-from-database> </div>
\ No newline at end of file diff --git a/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-template.component.ts b/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-template.component.ts index 64352b224..ce7d5aac2 100644 --- a/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-template.component.ts +++ b/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-template.component.ts @@ -34,6 +34,7 @@ import { LoaderService } from '../../../../common/core/services/loader.service'; import { FormGroup, FormBuilder, Validators } from '@angular/forms'; import { MatAutocompleteTrigger } from '@angular/material'; + @Component({ selector: 'app-search-template', templateUrl: './search-template.component.html', diff --git a/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-template.module.ts b/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-template.module.ts new file mode 100644 index 000000000..11029663b --- /dev/null +++ b/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-template.module.ts @@ -0,0 +1,44 @@ +/* +============LICENSE_START========================================== +=================================================================== +Copyright (C) 2019 IBM Intellectual Property. All rights reserved. +=================================================================== + +Unless otherwise specified, all software contained herein is licensed +under the Apache License, Version 2.0 (the License); +you may not use this software except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +============LICENSE_END============================================ +*/ + +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { SearchFromDatabaseComponent } from './search-from-database/search-from-database.component'; +import { SearchTemplateComponent } from './search-template.component'; +import { ReactiveFormsModule } from '@angular/forms'; +import { AppMaterialModule } from 'src/app/common/modules/app-material.module'; +import { SharedModule} from 'src/app/common/shared/shared.module'; +@NgModule({ + declarations: [ + SearchTemplateComponent, + SearchFromDatabaseComponent], + imports: [ + CommonModule, + ReactiveFormsModule, + AppMaterialModule, + SharedModule + ], + exports:[ + SearchTemplateComponent, + SearchFromDatabaseComponent + ] +}) +export class SearchTemplateModule { } diff --git a/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-template.service.ts b/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-template.service.ts index fdb261d52..dd17a30d2 100644 --- a/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-template.service.ts +++ b/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-template.service.ts @@ -1,3 +1,24 @@ +/* +============LICENSE_START========================================== +=================================================================== +Copyright (C) 2019 IBM Intellectual Property. All rights reserved. +=================================================================== + +Unless otherwise specified, all software contained herein is licensed +under the Apache License, Version 2.0 (the License); +you may not use this software except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +============LICENSE_END============================================ +*/ + import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { Observable } from 'rxjs'; diff --git a/cds-ui/client/src/app/feature-modules/blueprint/select-template/select-template.component.html b/cds-ui/client/src/app/feature-modules/blueprint/select-template/select-template.component.html index 97c65b220..46e1ea7da 100644 --- a/cds-ui/client/src/app/feature-modules/blueprint/select-template/select-template.component.html +++ b/cds-ui/client/src/app/feature-modules/blueprint/select-template/select-template.component.html @@ -34,9 +34,6 @@ limitations under the License. <ng-template matStepLabel>Browse CBA Template file</ng-template> <div class="matStepContent"> <app-search-template [optionSelected]="templateOption" (cbaFile)="fileChange($event)"></app-search-template> - <!-- <div> - <button mat-button matStepperNext class="matStepNextBtn">Upload</button> - </div>--> </div> </mat-step> <mat-step [stepControl]="step3FormGroup"> diff --git a/cds-ui/client/src/app/feature-modules/blueprint/select-template/select-template.component.ts b/cds-ui/client/src/app/feature-modules/blueprint/select-template/select-template.component.ts index 561f15a5d..9188b43b8 100644 --- a/cds-ui/client/src/app/feature-modules/blueprint/select-template/select-template.component.ts +++ b/cds-ui/client/src/app/feature-modules/blueprint/select-template/select-template.component.ts @@ -19,8 +19,6 @@ limitations under the License. ============LICENSE_END============================================ */ import { Component, OnInit } from '@angular/core'; -import { Observable } from 'rxjs'; -import { Store } from '@ngrx/store'; import { IBlueprint } from 'src/app/common/core/store/models/blueprint.model'; import { IBlueprintState } from 'src/app/common/core/store/models/blueprintState.model'; import { IMetaData } from 'src/app/common/core/store/models/metadata.model'; @@ -40,8 +38,7 @@ export class SelectTemplateComponent implements OnInit { importModel: IImportModel; templateOption: any; - constructor(private store: Store<IBlueprintState>) { - // this.importModel.file = ''; + constructor() { } ngOnInit() { @@ -51,23 +48,14 @@ export class SelectTemplateComponent implements OnInit { this.templateOption = option; console.log(this.templateOption); } - + fileChange(topologyTemp: ITopologyTemplate) { this.topologyTemplate = topologyTemp; console.log(topologyTemp); } metaDataDetail(data: IMetaData) { - + this.metaData = data; console.log("parent" + this.metaData.author_email); } - upload() { - - } - - // saveBlueprintModel(){ - // this.blueprint.toplogyTemplates=this.topologyTemplate; - // this.blueprint.metadata= this.metaData; - // // this.store.dispatch(new CreateBlueprint(this.blueprint)); - // } } diff --git a/cds-ui/client/src/app/feature-modules/blueprint/select-template/select-template.module.ts b/cds-ui/client/src/app/feature-modules/blueprint/select-template/select-template.module.ts index 16947d4c8..f66b78c08 100644 --- a/cds-ui/client/src/app/feature-modules/blueprint/select-template/select-template.module.ts +++ b/cds-ui/client/src/app/feature-modules/blueprint/select-template/select-template.module.ts @@ -27,13 +27,13 @@ import { MetadataComponent } from './metadata/metadata.component'; import { SelectTemplateComponent } from './select-template.component'; import { SelectTemplateRoutingModule } from './select-template-routing.module'; import { AppMaterialModule } from 'src/app/common/modules/app-material.module'; +import { SearchTemplateModule} from './search-template/search-template.module'; @NgModule({ declarations: [ TemplateOptionsComponent, - SearchTemplateComponent, - MetadataComponent, - SelectTemplateComponent + MetadataComponent, + SelectTemplateComponent ], exports: [ TemplateOptionsComponent, @@ -45,7 +45,8 @@ import { AppMaterialModule } from 'src/app/common/modules/app-material.module'; CommonModule, SelectTemplateRoutingModule, ReactiveFormsModule, - AppMaterialModule + AppMaterialModule, + SearchTemplateModule ] }) export class SelectTemplateModule { } diff --git a/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.component.html b/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.component.html index 5be2a1457..19db82cc6 100644 --- a/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.component.html +++ b/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.component.html @@ -21,9 +21,10 @@ */--> -<button disabled style="opacity: 0.5;" (click) ="changeView()" class="toggle-view-btn">{{viewText}}</button> +<button (click) ="changeView()" class="toggle-view-btn">{{viewText}}</button> <br><br> -<div *ngIf="designerMode"> +<!-- <div *ngIf="designerMode"> --> +<div [hidden] = "!designerMode"> <mat-card class="metadata-card"> <mat-card-header> <mat-card-title>Resource Metadata</mat-card-title> @@ -45,7 +46,8 @@ </mat-card> </div> -<div *ngIf="editorMode"> +<!-- <div *ngIf="editorMode"> --> +<div [hidden] = "!editorMode"> <json-editor class="jsoneditor" *ngIf="editorMode" [options]="options" [data]="resources" on-change="onChange($event)"></json-editor> </div> diff --git a/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.component.ts b/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.component.ts index 2da1287ba..aa8a1064d 100644 --- a/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.component.ts +++ b/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.component.ts @@ -47,6 +47,7 @@ export class ResourceEditComponent implements OnInit { viewText: string = "Open in Editor Mode"; @ViewChild(JsonEditorComponent) editor: JsonEditorComponent; options = new JsonEditorOptions(); + sourcesList = []; constructor(private store: Store<IAppState>, private resourceEditService: ResourceEditService, private alertService: NotificationHandlerService) { this.rdState = this.store.select('resources'); @@ -60,6 +61,9 @@ export class ResourceEditComponent implements OnInit { resourcesdata => { var resourcesState: IResourcesState = { resources: resourcesdata.resources, isLoadSuccess: resourcesdata.isLoadSuccess, isSaveSuccess: resourcesdata.isSaveSuccess, isUpdateSuccess: resourcesdata.isUpdateSuccess }; this.resources=resourcesState.resources; + if(resourcesdata.resources.definition && resourcesdata.resources.definition.sources) { + this.sourcesList = resourcesdata.resources.definition.sources; + } }) } diff --git a/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.service.ts b/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.service.ts index bd06abbc1..ed1ef6f37 100644 --- a/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.service.ts +++ b/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.service.ts @@ -36,4 +36,12 @@ export class ResourceEditService { saveResource(resource) { return this.api.post(ResourceDictionaryURLs.saveResourceDictionary, resource); } + + getSources() { + return this.api.get(ResourceDictionaryURLs.getSources); + } + + getModelType(name) { + return this.api.get(ResourceDictionaryURLs.getModelType + '/' + name); + } }
\ No newline at end of file diff --git a/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/sources-template/sources-template.component.html b/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/sources-template/sources-template.component.html index b1474d2a2..b179f011d 100644 --- a/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/sources-template/sources-template.component.html +++ b/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/sources-template/sources-template.component.html @@ -27,13 +27,13 @@ class="sources-list" (cdkDropListDropped)="drop($event)"> <div class="sources-box" *ngFor="let item of sourcesOptions;let i = index" cdkDrag> - <mat-expansion-panel class="expansion-panel"> + <mat-expansion-panel class="expansion-panel" (opened)="selected(item)"> <mat-expansion-panel-header> <mat-panel-title> - {{item}} + {{item.name}} </mat-panel-title> </mat-expansion-panel-header> - <json-editor [options]="options" [data]="selected(item)" on-change="onChange(item,$event)"></json-editor> + <json-editor [options]="options" [data]="item.data" on-change="onChange(item,$event)"></json-editor> </mat-expansion-panel> <button matSuffix mat-icon-button (click)="delete(item,i)"><mat-icon class="icon">delete</mat-icon></button> </div> @@ -44,7 +44,7 @@ <h3>Source Options</h3> <mat-form-field> <input [(ngModel)]="searchText" type="input" matInput placeholder="search sources"> - <button matSuffix mat-icon-button><mat-icon>search</mat-icon></button> + <button matSuffix mat-icon-button (click)="getResources()"><mat-icon>search</mat-icon></button> <mat-hint>db,mdsal,input,default,..</mat-hint> </mat-form-field> <br><br> @@ -53,7 +53,7 @@ [cdkDropListData]="option" class="options-list" (cdkDropListDropped)="drop($event)"> - <div class="options-box" *ngFor="let item of option | search :searchText" cdkDrag>{{item}}</div> + <div class="options-box" *ngFor="let item of option | search :searchText" cdkDrag>{{item.name}}</div> </div> </div> <div> diff --git a/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/sources-template/sources-template.component.ts b/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/sources-template/sources-template.component.ts index 52b19f728..42f990a24 100644 --- a/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/sources-template/sources-template.component.ts +++ b/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/sources-template/sources-template.component.ts @@ -20,7 +20,7 @@ * ============LICENSE_END========================================================= */ -import { Component, OnInit, ViewChild, EventEmitter, Output } from '@angular/core'; +import { Component, OnInit, ViewChild, EventEmitter, Output, Input } from '@angular/core'; import { CdkDragDrop, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop'; import { IResources } from 'src/app/common/core/store/models/resources.model'; import { IResourcesState } from 'src/app/common/core/store/models/resourcesState.model'; @@ -31,6 +31,7 @@ import { A11yModule } from '@angular/cdk/a11y'; import { LoadResourcesSuccess } from 'src/app/common/core/store/actions/resources.action'; import { ISourcesData } from 'src/app/common/core/store/models/sourcesData.model'; import { JsonEditorComponent, JsonEditorOptions } from 'ang-jsoneditor'; +import { ResourceEditService } from '../resource-edit.service'; @Component({ selector: 'app-sources-template', @@ -43,13 +44,13 @@ export class SourcesTemplateComponent implements OnInit { options = new JsonEditorOptions(); rdState: Observable<IResourcesState>; resources: IResources; - option = ['mdsal','default']; + option = []; sources:ISourcesData; sourcesOptions = []; - sourcesData = []; + sourcesData = {}; @Output() resourcesData = new EventEmitter(); - constructor(private store: Store<IAppState>) { + constructor(private store: Store<IAppState>, private apiService: ResourceEditService) { this.rdState = this.store.select('resources'); this.options.mode = 'text'; this.options.modes = [ 'text', 'tree', 'view']; @@ -61,9 +62,17 @@ export class SourcesTemplateComponent implements OnInit { resourcesdata => { var resourcesState: IResourcesState = { resources: resourcesdata.resources, isLoadSuccess: resourcesdata.isLoadSuccess, isSaveSuccess: resourcesdata.isSaveSuccess, isUpdateSuccess: resourcesdata.isUpdateSuccess }; this.resources=resourcesState.resources; - this.sources = resourcesState.resources.sources; + // this.sources = resourcesState.resources.sources; + if(resourcesState.resources.definition && resourcesState.resources.definition.sources) { + this.sources = resourcesState.resources.definition.sources; + } for (let key in this.sources) { - this.sourcesOptions.push(key); + // this.sourcesOptions.push(key); + let source = { + name : key, + data: this.sources[key] + } + this.sourcesOptions.push(source); } }) } @@ -79,10 +88,35 @@ export class SourcesTemplateComponent implements OnInit { this.resources.sources = Object.assign({},originalSources); }; - selected(value){ - this.sourcesData=this.sources[value]; - return this.sourcesData; - } + selected(sourceValue){ + this.sourcesData= [];//this.sources[value]; + this.apiService.getModelType(sourceValue.value) + .subscribe(data=>{ + console.log(data); + data.forEach(item =>{ + if(typeof(item)== "object") { + for (let key1 in item) { + if(key1 == 'properties') { + let newPropOnj = {} + for (let key2 in item[key1]) { + console.log(item[key1][key2]); + let varType = item[key1][key2].type + // let property : varType = + newPropOnj[key2] = item[key1][key2]; + } + } + } + } + }); + this.sourcesData = data; + this.sourcesOptions.forEach(item=>{ + if(item.name == sourceValue.name) { + item.data = data; + } + }) + return this.sourcesData; + }) +} delete(item,i){ if(confirm("Are sure you want to delete this source ?")) { @@ -110,5 +144,19 @@ export class SourcesTemplateComponent implements OnInit { event.previousIndex, event.currentIndex); } - } + } + + getResources() { + this.apiService.getSources() + .subscribe(data=>{ + console.log(data); + for (let key in data[0]) { + let sourceObj = { name: key, value: data[0][key] } + this.option.push(sourceObj); + } + // this.sourcesOptions = data; + }, error=>{ + console.log(error); + }) + } } diff --git a/cds-ui/server/src/controllers/blueprint-rest.controller.ts b/cds-ui/server/src/controllers/blueprint-rest.controller.ts index 52e77ee7b..14aba5617 100644 --- a/cds-ui/server/src/controllers/blueprint-rest.controller.ts +++ b/cds-ui/server/src/controllers/blueprint-rest.controller.ts @@ -42,20 +42,20 @@ import { Response, RestBindings, } from '@loopback/rest'; -import {Blueprint} from '../models'; +import { Blueprint } from '../models'; import { inject } from '@loopback/core'; import { BlueprintService } from '../services'; import * as fs from 'fs'; import * as multiparty from 'multiparty'; import * as request_lib from 'request'; -import {controllerApiConfig, processorApiConfig, appConfig} from '../config/app-config'; -import {bluePrintManagementServiceGrpcClient} from '../clients/blueprint-management-service-grpc-client'; +import { controllerApiConfig, processorApiConfig, appConfig } from '../config/app-config'; +import { bluePrintManagementServiceGrpcClient } from '../clients/blueprint-management-service-grpc-client'; export class BlueprintRestController { constructor( - @inject('services.BlueprintService') + @inject('services.BlueprintService') public bpservice: BlueprintService, - ) {} + ) { } @get('/blueprints', { responses: { @@ -69,6 +69,17 @@ export class BlueprintRestController { return await this.bpservice.getAllblueprints(); } + @get('/searchByTags/{tags}', { + responses: { + '200': { + content: { 'application/json': {} }, + }, + }, + }) + async getByTags(@param.path.string('tags') tags: string) { + return await this.bpservice.getByTags(tags); + } + @post('/create-blueprint') async upload( @requestBody({ @@ -78,21 +89,21 @@ export class BlueprintRestController { 'multipart/form-data': { // Skip body parsing 'x-parser': 'stream', - schema: {type: 'object'}, + schema: { type: 'object' }, }, }, }) request: Request, @inject(RestBindings.Http.RESPONSE) response: Response, ): Promise<Response> { - return new Promise((resolve, reject) => { - this.getFileFromMultiPartForm(request).then(file=>{ - this.uploadFileToBlueprintController(file, "/blueprint-model/", response).then(resp=>{ + return new Promise((resolve, reject) => { + this.getFileFromMultiPartForm(request).then(file => { + this.uploadFileToBlueprintController(file, "/blueprint-model/", response).then(resp => { resolve(resp); - }, err=>{ - reject(err); - }); - }, err=>{ + }, err => { + reject(err); + }); + }, err => { reject(err); }); }); @@ -107,21 +118,21 @@ export class BlueprintRestController { 'multipart/form-data': { // Skip body parsing 'x-parser': 'stream', - schema: {type: 'object'}, + schema: { type: 'object' }, }, }, }) request: Request, @inject(RestBindings.Http.RESPONSE) response: Response, ): Promise<Response> { - return new Promise((resolve, reject) => { - this.getFileFromMultiPartForm(request).then(file=>{ - this.uploadFileToBlueprintController(file, "/blueprint-model/publish/", response).then(resp=>{ + return new Promise((resolve, reject) => { + this.getFileFromMultiPartForm(request).then(file => { + this.uploadFileToBlueprintController(file, "/blueprint-model/publish/", response).then(resp => { resolve(resp); - }, err=>{ - reject(err); - }); - }, err=>{ + }, err => { + reject(err); + }); + }, err => { reject(err); }); }); @@ -136,21 +147,21 @@ export class BlueprintRestController { 'multipart/form-data': { // Skip body parsing 'x-parser': 'stream', - schema: {type: 'object'}, + schema: { type: 'object' }, }, }, }) request: Request, @inject(RestBindings.Http.RESPONSE) response: Response, ): Promise<Response> { - return new Promise((resolve, reject) => { - this.getFileFromMultiPartForm(request).then(file=>{ - this.uploadFileToBlueprintController(file, "/blueprint-model/enrich/", response).then(resp=>{ - resolve(resp); - }, err=>{ - reject(err); - }); - }, err=>{ + return new Promise((resolve, reject) => { + this.getFileFromMultiPartForm(request).then(file => { + this.uploadFileToBlueprintController(file, "/blueprint-model/enrich/", response).then(resp => { + resolve(resp); + }, err => { + reject(err); + }); + }, err => { reject(err); }); }); @@ -159,21 +170,21 @@ export class BlueprintRestController { @get('/download-blueprint/{name}/{version}') async download( @param.path.string('name') name: string, - @param.path.string('version') version:string, + @param.path.string('version') version: string, @inject(RestBindings.Http.RESPONSE) response: Response, ): Promise<Response> { - return this.downloadFileFromBlueprintController("/blueprint-model/download/by-name/"+name+"/version/"+version, response); + return this.downloadFileFromBlueprintController("/blueprint-model/download/by-name/" + name + "/version/" + version, response); } - async getFileFromMultiPartForm(request: Request): Promise<multiparty.File>{ + async getFileFromMultiPartForm(request: Request): Promise<multiparty.File> { return new Promise((resolve, reject) => { let form = new multiparty.Form(); form.parse(request, (err: any, fields: any, files: { [x: string]: any[]; }) => { if (err) reject(err); let file = files['file'][0]; // get the file from the returned files object - if(!file){ + if (!file) { reject('File was not found in form data.'); - }else{ + } else { resolve(file); } }); @@ -189,34 +200,34 @@ export class BlueprintRestController { 'multipart/form-data': { // Skip body parsing 'x-parser': 'stream', - schema: {type: 'object'}, + schema: { type: 'object' }, }, }, }) request: Request, @inject(RestBindings.Http.RESPONSE) response: Response, ): Promise<Response> { - return new Promise((resolve, reject) => { - this.getFileFromMultiPartForm(request).then(file=>{ - if(appConfig.action.deployBlueprint.grpcEnabled) - return this.uploadFileToBlueprintProcessorGrpc(file, response); - else + return new Promise((resolve, reject) => { + this.getFileFromMultiPartForm(request).then(file => { + if (appConfig.action.deployBlueprint.grpcEnabled) + return this.uploadFileToBlueprintProcessorGrpc(file, response); + else return this.uploadFileToBlueprintProcessor(file, "/execution-service/upload/", response); - }, err=>{ + }, err => { reject(err); }); }); } - async uploadFileToBlueprintController(file: multiparty.File, uri: string, response: Response): Promise<Response>{ + async uploadFileToBlueprintController(file: multiparty.File, uri: string, response: Response): Promise<Response> { return this.uploadFileToBlueprintService(file, controllerApiConfig.http.url + uri, controllerApiConfig.http.authToken, response); } - async uploadFileToBlueprintProcessor(file: multiparty.File, uri: string, response: Response): Promise<Response>{ + async uploadFileToBlueprintProcessor(file: multiparty.File, uri: string, response: Response): Promise<Response> { return this.uploadFileToBlueprintService(file, processorApiConfig.http.url + uri, processorApiConfig.http.authToken, response); } - async uploadFileToBlueprintService(file: multiparty.File, url: string, authToken: string, response: Response): Promise<Response>{ + async uploadFileToBlueprintService(file: multiparty.File, url: string, authToken: string, response: Response): Promise<Response> { let options = { url: url, headers: { @@ -238,7 +249,7 @@ export class BlueprintRestController { fs.unlink(file.path, (err: any) => { if (err) { console.error(err); - } + } }); } @@ -280,10 +291,10 @@ export class BlueprintRestController { async uploadFileToBlueprintProcessorGrpc(file: multiparty.File, response: Response): Promise<Response> { return new Promise<Response>((resolve, reject) => { - bluePrintManagementServiceGrpcClient.uploadBlueprint(file.path).then(output=>{ + bluePrintManagementServiceGrpcClient.uploadBlueprint(file.path).then(output => { response.send(output.status.message); resolve(response); - }, err=>{ + }, err => { response.status(500).send(err); resolve(response); }); diff --git a/cds-ui/server/src/controllers/data-dictionary.controller.ts b/cds-ui/server/src/controllers/data-dictionary.controller.ts index 486c28658..63587e6b3 100644 --- a/cds-ui/server/src/controllers/data-dictionary.controller.ts +++ b/cds-ui/server/src/controllers/data-dictionary.controller.ts @@ -84,4 +84,15 @@ export class DataDictionaryController { }) resourceDictionaryList: JSON): Promise<any> { return await this.rdservice.searchbyNames(resourceDictionaryList); } + + @get('/resourcedictionary/model-type/{source}', { + responses: { + '200': { + content: { 'application/json': {} }, + }, + }, + }) + async getmodelType(@param.path.string('source') source: string) { + return await this.rdservice.getModelType(source); + } } diff --git a/cds-ui/server/src/datasources/blueprint.datasource-template.ts b/cds-ui/server/src/datasources/blueprint.datasource-template.ts index 35edf33e3..1188d9bcf 100644 --- a/cds-ui/server/src/datasources/blueprint.datasource-template.ts +++ b/cds-ui/server/src/datasources/blueprint.datasource-template.ts @@ -21,5 +21,22 @@ export default { "getAllblueprints": [] } - }] + }, + { + "template": { + "method": "GET", + "url": controllerApiConfig.http.url + "/blueprint-model/search/{tags}", + "headers": { + "accepts": "application/json", + "content-type": "application/json", + "authorization": controllerApiConfig.http.authToken + }, + "responsePath": "$.*" + }, + "functions": { + "getByTags": ["tags"] + + } + }, +] };
\ No newline at end of file diff --git a/cds-ui/server/src/datasources/resource-dictionary.datasource-template.ts b/cds-ui/server/src/datasources/resource-dictionary.datasource-template.ts index c749eee62..af96aca04 100644 --- a/cds-ui/server/src/datasources/resource-dictionary.datasource-template.ts +++ b/cds-ui/server/src/datasources/resource-dictionary.datasource-template.ts @@ -87,6 +87,23 @@ export default { "searchbyNames": ["resourceDictionaryList"] } + }, + , + { + "template": { + "method": "GET", + "url": controllerApiConfig.http.url + "/model-type/{source}", + "headers": { + "accepts": "application/json", + "content-type": "application/json", + "authorization": controllerApiConfig.http.authToken + }, + "responsePath": "$.*" + }, + "functions": { + "getModelType": ["source"] + + } } ] };
\ No newline at end of file diff --git a/cds-ui/server/src/services/blueprint.service.ts b/cds-ui/server/src/services/blueprint.service.ts index 970b2afda..0545faca8 100644 --- a/cds-ui/server/src/services/blueprint.service.ts +++ b/cds-ui/server/src/services/blueprint.service.ts @@ -4,6 +4,7 @@ import {BlueprintDataSource} from '../datasources'; export interface BlueprintService { getAllblueprints(): Promise<any>; + getByTags(tags: string): Promise<JSON>; } export class BlueprintServiceProvider implements Provider<BlueprintService> { diff --git a/cds-ui/server/src/services/resource-dictionary.service.ts b/cds-ui/server/src/services/resource-dictionary.service.ts index 8bc61fad1..9a781d6b8 100644 --- a/cds-ui/server/src/services/resource-dictionary.service.ts +++ b/cds-ui/server/src/services/resource-dictionary.service.ts @@ -7,7 +7,8 @@ export interface ResourceDictionaryService { getSourceMapping(): Promise<JSON>; getByTags(tags: string): Promise<JSON>; save(resourceDictionary: JSON): Promise<JSON>; - searchbyNames(resourceDictionaryList: JSON): Promise<JSON>; + searchbyNames(resourceDictionaryList: JSON): Promise<JSON>; + getModelType(source: string): Promise<JSON>; } export class ResourceDictionaryServiceProvider implements Provider<ResourceDictionaryService> { |