diff options
30 files changed, 382 insertions, 70 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/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/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.service.ts b/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.service.ts index bd06abbc1..417f6edb3 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,14 @@ export class ResourceEditService { saveResource(resource) { return this.api.post(ResourceDictionaryURLs.saveResourceDictionary, resource); } + + getSources() { + // to do + return this.api.get('ResourceDictionaryURLs.getSources'); + } + + getModelType(name) { + // to do + 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..c4ad83d67 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 @@ -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']; @@ -79,10 +80,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 ?")) { 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/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/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> { diff --git a/components/scripts/python/ccsdk_netconf/common.py b/components/scripts/python/ccsdk_netconf/common.py index f161e29ff..896fb9128 100644 --- a/components/scripts/python/ccsdk_netconf/common.py +++ b/components/scripts/python/ccsdk_netconf/common.py @@ -1,4 +1,5 @@ # Copyright (c) 2019 Bell Canada. +# Modifications Copyright (c) 2018 - 2019 IBM, Bell Canada. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -18,11 +19,11 @@ class ResolutionHelper: self.component_function = component_function def resolve_and_generate_message_from_template_prefix(self, artifact_prefix): - return self.component_function.resolveAndGenerateMessage(artifact_prefix) + return self.component_function.contentFromResolvedArtifact(artifact_prefix) def resolve_and_generate_message(self, artifact_mapping, artifact_template): return self.component_function.resolveAndGenerateMessage(artifact_mapping, artifact_template) def retrieve_resolved_template_from_database(self, key, artifact_template): - return self.component_function.resolveFromDatabase(key, artifact_template) + return self.component_function.storedContentFromResolvedArtifact(key, artifact_template) diff --git a/docs/microservices/bluePrintsProcessorMS.rst b/docs/microservices/bluePrintsProcessorMS.rst index 911f99945..3f308138f 100644 --- a/docs/microservices/bluePrintsProcessorMS.rst +++ b/docs/microservices/bluePrintsProcessorMS.rst @@ -14,7 +14,7 @@ Micro service to Manage Controller Blueprint Models, such as Resource Dictionary This microservice is used to deploy Controller Blueprint Archive file in Run time database. This also helps to test the Valid Blueprint. Architecture: -============== +------------- |image0| @@ -23,7 +23,7 @@ Architecture: :width: 800px Running Blueprints Processor Microservice Locally: -================================================== +-------------------------------------------------- The purpose of this page is to show how to run the Blueprints Processor microservice locally, using the docker-compose.yaml file provided in the project. @@ -48,7 +48,7 @@ Build it using the Maven profile called Docker: mvn clean install -Pdocker Start Docker containers using docker-composer: -============================================== +---------------------------------------------- Navigate to the docker-compose file in the distribution module: @@ -66,7 +66,7 @@ To verify the logs generated by docker-composer, type: Testing the environment: -======================== +------------------------ Point your browser to http://localhost:8000/api/v1/execution-service/ping (please note that the port is 8000, not 8080) diff --git a/docs/microservices/controllerBlueprintStudioProcessorMS.rst b/docs/microservices/controllerBlueprintStudioProcessorMS.rst index 5c67d6c1d..683b6943d 100644 --- a/docs/microservices/controllerBlueprintStudioProcessorMS.rst +++ b/docs/microservices/controllerBlueprintStudioProcessorMS.rst @@ -10,7 +10,7 @@ The Controller Blueprint Archive is the overall service design, fully model-driv The CBA is .zip file which is saved in Controller Blueprint Database. Dynamic API: -=========== +------------ The nature of the API request and response is meant to be model driven and dynamic. They both share the same definition. @@ -22,11 +22,18 @@ The first top level element will always be either $actionName-request for a requ Then the content within this element is fully based on the workflow input and output. +.. toctree:: + :maxdepth: 1 + + dynamicapi Enrichment: -=========== +----------- Helps to generate complete valid CBA file. - +.. toctree:: + :maxdepth: 1 + + enrichment
\ No newline at end of file diff --git a/docs/media/blueprintprocessor.jpg b/docs/microservices/images/blueprintprocessor.jpg Binary files differindex c618e0e32..c618e0e32 100644 --- a/docs/media/blueprintprocessor.jpg +++ b/docs/microservices/images/blueprintprocessor.jpg diff --git a/ms/blueprintsprocessor/functions/netconf-executor/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/netconf/executor/ScriptComponentExtensions.kt b/ms/blueprintsprocessor/functions/netconf-executor/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/netconf/executor/ScriptComponentExtensions.kt index bac211ab2..510621b2e 100644 --- a/ms/blueprintsprocessor/functions/netconf-executor/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/netconf/executor/ScriptComponentExtensions.kt +++ b/ms/blueprintsprocessor/functions/netconf-executor/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/netconf/executor/ScriptComponentExtensions.kt @@ -1,5 +1,6 @@ /* * Copyright © 2019 IBM. + * Modifications Copyright © 2018 - 2019 IBM, Bell Canada. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -50,4 +51,8 @@ fun AbstractComponentFunction.netconfDeviceInfo(requirementName: String): Device private fun AbstractComponentFunction.netconfDeviceInfo(capabilityProperty: MutableMap<String, JsonNode>): DeviceInfo { return JacksonUtils.getInstanceFromMap(capabilityProperty, DeviceInfo::class.java) -}
\ No newline at end of file +} + +/** + * Blocking Methods called from Jython Scripts + */
\ No newline at end of file diff --git a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionService.kt b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionService.kt index 0e97267da..938affc82 100644 --- a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionService.kt +++ b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionService.kt @@ -17,6 +17,7 @@ package org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution +import com.fasterxml.jackson.databind.JsonNode import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.coroutines.coroutineScope @@ -25,10 +26,7 @@ import org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution.db.R import org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution.db.TemplateResolutionService import org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution.processor.ResourceAssignmentProcessor import org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution.utils.ResourceAssignmentUtils -import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintConstants -import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintProcessorException -import org.onap.ccsdk.cds.controllerblueprints.core.asJsonPrimitive -import org.onap.ccsdk.cds.controllerblueprints.core.checkNotEmpty +import org.onap.ccsdk.cds.controllerblueprints.core.* import org.onap.ccsdk.cds.controllerblueprints.core.service.BluePrintRuntimeService import org.onap.ccsdk.cds.controllerblueprints.core.service.BluePrintTemplateService import org.onap.ccsdk.cds.controllerblueprints.core.utils.JacksonUtils @@ -47,7 +45,7 @@ interface ResourceResolutionService { resolutionKey: String): String suspend fun resolveResources(bluePrintRuntimeService: BluePrintRuntimeService<*>, nodeTemplateName: String, - artifactNames: List<String>, properties: Map<String, Any>): MutableMap<String, String> + artifactNames: List<String>, properties: Map<String, Any>): MutableMap<String, JsonNode> suspend fun resolveResources(bluePrintRuntimeService: BluePrintRuntimeService<*>, nodeTemplateName: String, artifactPrefix: String, properties: Map<String, Any>): String @@ -85,17 +83,19 @@ open class ResourceResolutionServiceImpl(private var applicationContext: Applica override suspend fun resolveResources(bluePrintRuntimeService: BluePrintRuntimeService<*>, nodeTemplateName: String, artifactNames: List<String>, - properties: Map<String, Any>): MutableMap<String, String> { + properties: Map<String, Any>): MutableMap<String, JsonNode> { val resourceAssignmentRuntimeService = ResourceAssignmentUtils.transformToRARuntimeService(bluePrintRuntimeService, artifactNames.toString()) - val resolvedParams: MutableMap<String, String> = hashMapOf() + val resolvedParams: MutableMap<String, JsonNode> = hashMapOf() artifactNames.forEach { artifactName -> val resolvedContent = resolveResources(resourceAssignmentRuntimeService, nodeTemplateName, artifactName, properties) - resolvedParams[artifactName] = resolvedContent + + resolvedParams[artifactName] = resolvedContent.asJsonType() + } return resolvedParams } diff --git a/ms/blueprintsprocessor/parent/pom.xml b/ms/blueprintsprocessor/parent/pom.xml index 4d05550ef..b03c7b4d7 100755 --- a/ms/blueprintsprocessor/parent/pom.xml +++ b/ms/blueprintsprocessor/parent/pom.xml @@ -626,7 +626,24 @@ <repository> <id>spring-libs-milestone</id> <name>Spring Milestone Maven Repository</name> + <url>http://oss.jfrog.org/artifactory/oss-release-local/</url> + <releases> + <enabled>true</enabled> + </releases> + <snapshots> + <enabled>false</enabled> + </snapshots> + </repository> + <repository> + <id>spring-libs-milestone-snapshot</id> + <name>Spring Milestone Maven Repository - snapshots</name> <url>http://oss.jfrog.org/artifactory/oss-snapshot-local/</url> + <releases> + <enabled>false</enabled> + </releases> + <snapshots> + <enabled>true</enabled> + </snapshots> </repository> </repositories> diff --git a/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/CustomFunctions.kt b/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/CustomFunctions.kt index 0b640d9e9..34a2d9cd3 100644 --- a/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/CustomFunctions.kt +++ b/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/CustomFunctions.kt @@ -259,4 +259,8 @@ fun nullToEmpty(value: String?): String { return if (isNotEmpty(value)) value!! else "" } +inline fun <reified T : JsonNode> T.isComplexType(): Boolean { + return this is ObjectNode || this is ArrayNode +} + diff --git a/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/data/BluePrintExpressionData.kt b/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/data/BluePrintExpressionData.kt index 15b3e22fb..d3013402b 100644 --- a/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/data/BluePrintExpressionData.kt +++ b/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/data/BluePrintExpressionData.kt @@ -1,6 +1,6 @@ /* * Copyright © 2017-2018 AT&T Intellectual Property. - * Modifications Copyright © 2018 IBM. + * Modifications Copyright © 2018 - 2019 IBM, Bell Canada. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -67,7 +67,8 @@ data class OperationOutputExpression( val modelableEntityName: String = "SELF", val interfaceName: String, val operationName: String, - val propertyName: String + val propertyName: String, + var subPropertyName: String? = null ) data class DSLExpression( diff --git a/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/service/BluePrintExpressionService.kt b/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/service/BluePrintExpressionService.kt index 32cb6ac77..fbf911664 100644 --- a/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/service/BluePrintExpressionService.kt +++ b/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/service/BluePrintExpressionService.kt @@ -1,6 +1,6 @@ /* * Copyright © 2017-2018 AT&T Intellectual Property. - * Modifications Copyright © 2018 IBM. + * Modifications Copyright © 2018 - 2019 IBM, Bell Canada. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -170,10 +170,16 @@ object BluePrintExpressionService { throw BluePrintException(String.format("missing operation output expression, " + "it should be (<modelable_entity_name>, <interface_name>, <operation_name>, <output_variable_name>) , but present {}", jsonNode)) } + + var subPropertyName: String? = null + if (arrayNode.size() == 5) + subPropertyName = arrayNode[4].asText() + return OperationOutputExpression(modelableEntityName = arrayNode[0].asText(), interfaceName = arrayNode[1].asText(), operationName = arrayNode[2].asText(), - propertyName = arrayNode[3].asText() + propertyName = arrayNode[3].asText(), + subPropertyName = subPropertyName ) } diff --git a/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/service/BluePrintRuntimeService.kt b/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/service/BluePrintRuntimeService.kt index e6f3f71ca..ba210df10 100644 --- a/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/service/BluePrintRuntimeService.kt +++ b/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/service/BluePrintRuntimeService.kt @@ -1,6 +1,6 @@ /* * Copyright © 2017-2018 AT&T Intellectual Property. - * Modifications Copyright © 2018-2019 IBM. + * Modifications Copyright © 2018-2019 IBM, Bell Canada. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -213,8 +213,7 @@ open class DefaultBluePrintRuntimeService(private var id: String, private var bl override fun loadEnvironments(type: String, fileName: String) { BluePrintMetadataUtils.environmentFileProperties(fileName).forEach { key, value -> - setNodeTemplateAttributeValue(type, key.toString(), value.toString() - .asJsonPrimitive()) + setNodeTemplateAttributeValue(type, key.toString(), value.asJsonType()) } } diff --git a/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/service/PropertyAssignmentService.kt b/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/service/PropertyAssignmentService.kt index 931d31e9d..30bd75f7d 100644 --- a/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/service/PropertyAssignmentService.kt +++ b/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/service/PropertyAssignmentService.kt @@ -1,6 +1,6 @@ /* * Copyright © 2017-2018 AT&T Intellectual Property. - * Modifications Copyright © 2018 IBM. + * Modifications Copyright © 2018 - 2019 IBM, Bell Canada. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,11 +21,8 @@ package org.onap.ccsdk.cds.controllerblueprints.core.service import org.slf4j.LoggerFactory import com.fasterxml.jackson.databind.JsonNode import com.fasterxml.jackson.databind.node.NullNode -import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintConstants -import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintException -import org.onap.ccsdk.cds.controllerblueprints.core.asJsonPrimitive +import org.onap.ccsdk.cds.controllerblueprints.core.* import org.onap.ccsdk.cds.controllerblueprints.core.data.* -import org.onap.ccsdk.cds.controllerblueprints.core.format import org.onap.ccsdk.cds.controllerblueprints.core.utils.JacksonUtils import org.onap.ccsdk.cds.controllerblueprints.core.utils.JsonParserUtils import org.onap.ccsdk.cds.controllerblueprints.core.utils.ResourceResolverUtils @@ -143,8 +140,8 @@ If Property Assignment is Expression. } if (subAttributeName != null) { - if (valueNode.isObject || valueNode.isArray) - valueNode = JsonParserUtils.parse(valueNode, subAttributeName) + if (valueNode.isComplexType()) + valueNode = JsonParserUtils.parse(valueNode.asJsonString(), subAttributeName) } return valueNode } @@ -176,8 +173,8 @@ If Property Assignment is Expression. valueNode = resolveAssignmentExpression(propertyNodeTemplateName, propertyName, nodeTemplatePropertyExpression) if (subPropertyName != null) { - if (valueNode.isObject || valueNode.isArray) - valueNode = JsonParserUtils.parse(valueNode, subPropertyName) + if (valueNode.isComplexType()) + valueNode = JsonParserUtils.parse(valueNode.asJsonString(), subPropertyName) } return valueNode } @@ -190,9 +187,17 @@ If Property Assignment is Expression. if (!operationOutputExpression.modelableEntityName.equals("SELF", true)) { outputNodeTemplateName = operationOutputExpression.modelableEntityName } - return bluePrintRuntimeService.getNodeTemplateOperationOutputValue(outputNodeTemplateName, + + var valueNode = bluePrintRuntimeService.getNodeTemplateOperationOutputValue(outputNodeTemplateName, operationOutputExpression.interfaceName, operationOutputExpression.operationName, operationOutputExpression.propertyName) + + val subPropertyName: String? = operationOutputExpression.subPropertyName + if (subPropertyName != null) { + if (valueNode.isComplexType()) + valueNode = JsonParserUtils.parse(valueNode.asJsonString(), subPropertyName) + } + return valueNode } /* diff --git a/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/utils/JacksonUtils.kt b/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/utils/JacksonUtils.kt index 5e9fd6207..9b1b66b5b 100644 --- a/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/utils/JacksonUtils.kt +++ b/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/utils/JacksonUtils.kt @@ -296,6 +296,5 @@ class JacksonUtils { else -> getJsonNode(value) } } - } }
\ No newline at end of file diff --git a/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/utils/JsonParserUtils.kt b/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/utils/JsonParserUtils.kt index 342ff7636..e5eef5a41 100644 --- a/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/utils/JsonParserUtils.kt +++ b/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/utils/JsonParserUtils.kt @@ -1,5 +1,6 @@ /* * Copyright © 2018 IBM. + * Modifications Copyright © 2018 - 2019 IBM, Bell Canada. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -38,7 +39,7 @@ class JsonParserUtils { } fun paths(jsonNode: JsonNode, expression: String): List<String> { - return paths(jsonNode.toString(), expression) + return paths(jsonNode, expression) } fun parse(jsonContent: String, expression: String): JsonNode { @@ -54,7 +55,8 @@ class JsonParserUtils { } fun parseNSet(jsonNode: JsonNode, expression: String, valueNode: JsonNode): JsonNode { - return parseNSet(jsonNode.toString(), expression, valueNode) + + return parseNSet(jsonNode, expression, valueNode) } } }
\ No newline at end of file |