aboutsummaryrefslogtreecommitdiffstats
path: root/cds-ui
diff options
context:
space:
mode:
Diffstat (limited to 'cds-ui')
-rw-r--r--cds-ui/client/src/app/common/constants/app-constants.ts4
-rw-r--r--cds-ui/client/src/app/common/core/store/models/resources.model.ts1
-rw-r--r--cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-from-database/search-from-database.component.html31
-rw-r--r--cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-from-database/search-from-database.component.scss20
-rw-r--r--cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-from-database/search-from-database.component.spec.ts45
-rw-r--r--cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-from-database/search-from-database.component.ts65
-rw-r--r--cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-template.component.html12
-rw-r--r--cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-template.component.ts1
-rw-r--r--cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-template.module.ts44
-rw-r--r--cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-template.service.ts21
-rw-r--r--cds-ui/client/src/app/feature-modules/blueprint/select-template/select-template.component.html3
-rw-r--r--cds-ui/client/src/app/feature-modules/blueprint/select-template/select-template.component.ts18
-rw-r--r--cds-ui/client/src/app/feature-modules/blueprint/select-template/select-template.module.ts9
-rw-r--r--cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.component.html8
-rw-r--r--cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.component.ts4
-rw-r--r--cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.service.ts8
-rw-r--r--cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/sources-template/sources-template.component.html10
-rw-r--r--cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/sources-template/sources-template.component.ts70
-rw-r--r--cds-ui/server/src/controllers/blueprint-rest.controller.ts107
-rw-r--r--cds-ui/server/src/controllers/data-dictionary.controller.ts11
-rw-r--r--cds-ui/server/src/datasources/blueprint.datasource-template.ts19
-rw-r--r--cds-ui/server/src/datasources/resource-dictionary.datasource-template.ts17
-rw-r--r--cds-ui/server/src/services/blueprint.service.ts1
-rw-r--r--cds-ui/server/src/services/resource-dictionary.service.ts3
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> {