Merge "Add blueprint domain DSL"
diff --git a/cds-ui/client/src/app/app.component.html b/cds-ui/client/src/app/app.component.html
index 88446ca..945db34 100644
--- a/cds-ui/client/src/app/app.component.html
+++ b/cds-ui/client/src/app/app.component.html
@@ -20,4 +20,10 @@
 -->
 
 
+<mat-progress-bar mode="indeterminate" *ngIf="loaderStatus === true"></mat-progress-bar>
+<div [ngClass]="{'overlay': loaderStatus === true}">
 <router-outlet></router-outlet>
+<div class="notification-container">
+    <app-notification></app-notification>
+</div>
+</div>
diff --git a/cds-ui/client/src/app/app.component.scss b/cds-ui/client/src/app/app.component.scss
index bf7a36c..8dc7dd0 100644
--- a/cds-ui/client/src/app/app.component.scss
+++ b/cds-ui/client/src/app/app.component.scss
@@ -32,4 +32,17 @@
     height: 200px;
     overflow: auto;
     border: 1px solid #555;
+  }
+
+  .overlay {
+    opacity: 0.5;
+    pointer-events: none;
+  }
+
+  .notification-container{
+    position: fixed;
+    top: 1em;
+    z-index: 1;
+    right: 1em;
+    overflow: auto;
   }
\ No newline at end of file
diff --git a/cds-ui/client/src/app/app.component.ts b/cds-ui/client/src/app/app.component.ts
index 1064179..d6499cc 100644
--- a/cds-ui/client/src/app/app.component.ts
+++ b/cds-ui/client/src/app/app.component.ts
@@ -23,13 +23,22 @@
 import { Observable} from 'rxjs';
 import { Store } from '@ngrx/store';
 
+import { LoaderService } from './common/core/services/loader.service';
+
 @Component({
   selector: 'app-root',
   templateUrl: './app.component.html',
   styleUrls: ['./app.component.scss']
 })
 export class AppComponent {
+  loaderStatus: boolean = false;
+  constructor(private router: Router, 
+    private loaderService: LoaderService
+    ) {
 
-  constructor(private router: Router) {
+    this.loaderService.subject.subscribe(data=>{
+      console.log(data);
+      this.loaderStatus = data;
+    })
    }
 }
diff --git a/cds-ui/client/src/app/common/core/core.module.ts b/cds-ui/client/src/app/common/core/core.module.ts
index 807065e..7207178 100644
--- a/cds-ui/client/src/app/common/core/core.module.ts
+++ b/cds-ui/client/src/app/common/core/core.module.ts
@@ -30,6 +30,8 @@
 import { BlueprintEffects } from './store/effects/blueprint.effects';
 import { ResourcesEffects } from './store/effects/resources.effects';
 import { ApiService } from './services/api.service';
+import { NotificationHandlerService } from './services/notification-handler.service';
+import { LoaderService } from './services/loader.service';
 // import { BlueprintService } from './services/blueprint.service';
 
 @NgModule({
@@ -38,10 +40,13 @@
   imports: [
     CommonModule,
     StoreModule.forRoot(appReducers),
-    EffectsModule.forRoot([BlueprintEffects,ResourcesEffects]),
-    StoreRouterConnectingModule.forRoot({stateKey: 'router'}),
+    EffectsModule.forRoot([BlueprintEffects, ResourcesEffects]),
+    StoreRouterConnectingModule.forRoot({ stateKey: 'router' }),
     HttpClientModule
   ],
-  providers : [ ApiService ]
+  providers: [ApiService,
+    NotificationHandlerService,
+    LoaderService
+  ]
 })
 export class CoreModule { }
diff --git a/cds-ui/client/src/app/common/core/services/notification-handler.service.ts b/cds-ui/client/src/app/common/core/services/notification-handler.service.ts
index 296b71e..b64f2fa 100644
--- a/cds-ui/client/src/app/common/core/services/notification-handler.service.ts
+++ b/cds-ui/client/src/app/common/core/services/notification-handler.service.ts
@@ -23,22 +23,22 @@
 
 import { Injectable } from '@angular/core';
 
-// import { NotificationService } from '../../shared/components/notification/notification.service';
+import { NotificationService } from '../../shared/components/notification/notification.service';
 
 @Injectable()
 export class NotificationHandlerService {
 
   constructor(
-    //  private alert: NotificationService
+    private alert: NotificationService
   ) { }
 
 
   success(message: string) {
-    // this.alert.success(message);
+    this.alert.success(message);
   }
 
   error(message: string) {
-    // this.alert.error(message);
+    this.alert.error(message);
   }
 
   info(message: string) {
diff --git a/cds-ui/client/src/app/common/shared/shared.module.ts b/cds-ui/client/src/app/common/shared/shared.module.ts
index b036f59..39e4e43 100644
--- a/cds-ui/client/src/app/common/shared/shared.module.ts
+++ b/cds-ui/client/src/app/common/shared/shared.module.ts
@@ -30,6 +30,8 @@
 import { SearchDialog } from './components/search-dialog/search-dialog.component';
 import { AppMaterialModule }  from '../modules/app-material.module';
 import { SortPipe } from './pipes/sort.pipe';
+import { NotificationComponent } from './components/notification/notification.component';
+import { NotificationService } from './components/notification/notification.service';
 
 @NgModule({
   declarations: [
@@ -37,14 +39,16 @@
     CBAWizardComponent,
     SearchPipe,
     SearchDialog,
-    SortPipe
+    SortPipe,
+    NotificationComponent
   ],
   exports: [
     HomeComponent,
     CBAWizardComponent,
     SearchPipe,
     SearchDialog,
-    SortPipe
+    SortPipe,
+    NotificationComponent
   ],
   imports: [
     AppMaterialModule,
@@ -68,6 +72,7 @@
     MatStepperModule,
     RouterModule
   ],
+  providers: [NotificationService],
   entryComponents: [SearchDialog]
 })
 export class SharedModule { }
\ No newline at end of file
diff --git a/cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.component.ts b/cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.component.ts
index b982fa2..0a3a8d2 100644
--- a/cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.component.ts
+++ b/cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.component.ts
@@ -39,6 +39,9 @@
 import { IMetaData } from 'src/app/common/core/store/models/metadata.model';
 import { EditorService } from './editor.service';
 import { SortPipe } from '../../../../common/shared/pipes/sort.pipe';
+import { NotificationHandlerService } from 'src/app/common/core/services/notification-handler.service';
+import { LoaderService } from 'src/app/common/core/services/loader.service';
+
 
 interface Node {
   name: string;
@@ -107,6 +110,7 @@
   private tocsaMetadaData: any;
   metadata: IMetaData;
   uploadedFileName: string;
+  entryDefinition: string;
 
   private transformer = (node: Node, level: number) => {
     return {
@@ -126,7 +130,10 @@
   artifactName: any;
   artifactVersion: any;
 
-  constructor(private store: Store<IAppState>, private apiservice: EditorService) {
+  constructor(private store: Store<IAppState>, private apiservice: EditorService,
+    private alertService: NotificationHandlerService, private loader: LoaderService
+    ) 
+    {
     this.dataSource.data = TREE_DATA;
     this.bpState = this.store.select('blueprint');
     // this.dataSource.data = TREE_DATA;
@@ -162,6 +169,7 @@
         this.dataSource.data = this.filesTree;
         this.blueprintName = blueprintdata.name;
         this.uploadedFileName = blueprintdata.uploadedFileName;
+        this.entryDefinition = blueprintdata.entryDefinition;
         let blueprint = [];
         for (let key in this.blueprintdata) {
           if (this.blueprintdata.hasOwnProperty(key)) {
@@ -206,10 +214,10 @@
       name: this.blueprintName,
       files: this.filesTree,
       filesData: this.filesData,
-      uploadedFileName: this.uploadedFileName
+      uploadedFileName: this.uploadedFileName,
+      entryDefinition: this.entryDefinition
     }
     this.store.dispatch(new SetBlueprintState(blueprintState));
-    // console.log(this.text);
   }
 
   selectFileToView(file) {
@@ -227,7 +235,6 @@
       }
     })
     this.fileExtension = this.selectedFile.substr(this.selectedFile.lastIndexOf('.') + 1);
-    // console.log(this.fileExtension);
     this.setEditorMode();
   }
 
@@ -248,7 +255,10 @@
                     console.log("processed");
                   }
                 });
-              window.alert('Blueprint enriched successfully');
+              this.alertService.success('Blueprint enriched successfully');
+            },
+            (error)=>{
+              this.alertService.error('Enrich:' + error.message);
             });
       });
   }
@@ -264,8 +274,9 @@
         this.apiservice.post("/create-blueprint/", formData)
           .subscribe(
             data => {
-              // console.log(data);
-              window.alert('Success:' + JSON.stringify(data));
+              this.alertService.success('Success:' + JSON.stringify(data));
+            }, error=>{
+              this.alertService.error('Save -' +error.message);
             });
 
       });
@@ -280,8 +291,9 @@
         formData.append("file", blob);
         this.apiservice.deployPost("/deploy-blueprint/", formData)
           .subscribe(data => {
-            // console.log(data);
-            window.alert('Saved Successfully:' + JSON.stringify(data));
+            this.alertService.success('Saved Successfully:' + JSON.stringify(data));
+          }, error=>{
+            this.alertService.error('Deploy - ' + error.message);
           });
 
       });
@@ -295,8 +307,9 @@
         formData.append("file", blob);
         this.apiservice.post("/publish/", formData)
           .subscribe(data => {
-            // console.log(data);
-            window.alert('Published:' + JSON.stringify(data));
+            this.alertService.success('Published:' + JSON.stringify(data))
+          }, error=>{
+            this.alertService.error('Publish - ' + error.message);
           });
 
       });
@@ -580,6 +593,7 @@
   }
 
   saveEditedChanges() {
+    this.loader.showLoader();
     this.filesData.forEach(fileNode => {
       if (this.selectedFile && fileNode.name.includes(this.blueprintName.trim()) && fileNode.name.includes(this.selectedFile.trim())) {
         fileNode.data = this.text;
@@ -596,5 +610,6 @@
     }
 
     this.updateBlueprint();
+    this.loader.hideLoader();
   }
 }
diff --git a/cds-ui/client/src/app/feature-modules/blueprint/select-template/metadata/metadata.component.ts b/cds-ui/client/src/app/feature-modules/blueprint/select-template/metadata/metadata.component.ts
index 609aaca..cefe0fd 100644
--- a/cds-ui/client/src/app/feature-modules/blueprint/select-template/metadata/metadata.component.ts
+++ b/cds-ui/client/src/app/feature-modules/blueprint/select-template/metadata/metadata.component.ts
@@ -29,6 +29,7 @@
 import { IBlueprint } from 'src/app/common/core/store/models/blueprint.model';
 import { IMetaData } from '../../../../common/core/store/models/metadata.model';
 import { SetBlueprintState } from 'src/app/common/core/store/actions/blueprint.action';
+import { LoaderService } from '../../../../common/core/services/loader.service';
 
 @Component({
   selector: 'app-metadata',
@@ -48,7 +49,7 @@
   uploadedFileName: string;
   entryDefinition: string;
   
-  constructor(private formBuilder: FormBuilder, private store: Store<IAppState>) {
+  constructor(private formBuilder: FormBuilder, private store: Store<IAppState>, private loader: LoaderService) {
     this.bpState = this.store.select('blueprint');
     this.CBAMetadataForm = this.formBuilder.group({
       template_author: ['', Validators.required],
@@ -96,9 +97,16 @@
   }
 
   UploadMetadata() {
+    this.loader.showLoader();
     this.metadata = Object.assign({}, this.CBAMetadataForm.value);
     this.blueprint.metadata = this.metadata;
-
+    if( this.blueprint && 
+        this.blueprint['topology_template'] && 
+        this.blueprint['topology_template'].workflows && 
+        this.blueprint['topology_template'].workflows['resource-assignment'] &&
+        this.blueprint['topology_template'].workflows['resource-assignment'].name) {
+          delete this.blueprint['topology_template'].workflows['resource-assignment'].name;
+      }
     this.filesData.forEach((fileNode) => {
       if (fileNode.name.includes(this.blueprintName) && fileNode.name == this.entryDefinition) {
         fileNode.data = JSON.stringify(this.blueprint, null, "\t");
@@ -113,6 +121,6 @@
       entryDefinition: this.entryDefinition
     }
     this.store.dispatch(new SetBlueprintState(blueprintState));
+    this.loader.hideLoader();
   }
-
 }
\ 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 92003c9..1221e8f 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
@@ -30,6 +30,7 @@
 import { LoadBlueprintSuccess, SET_BLUEPRINT_STATE, SetBlueprintState } from '../../../../common/core/store/actions/blueprint.action';
 import { json } from 'd3';
 import { SortPipe } from '../../../../common/shared/pipes/sort.pipe';
+import { LoaderService } from '../../../../common/core/services/loader.service';
 
 @Component({
   selector: 'app-search-template',
@@ -56,7 +57,7 @@
   private blueprintName: string;
   private entryDefinition: string;
 
-  constructor(private store: Store<IAppState>) { }
+  constructor(private store: Store<IAppState>, private loader: LoaderService) { }
 
   ngOnInit() {
   }
@@ -68,7 +69,8 @@
     this.zipFile.files = {};
     this.zipFile.loadAsync(this.file)
       .then((zip) => {
-        if(zip) {            
+        if(zip) { 
+          this.loader.showLoader();           
           this.buildFileViewData(zip);
         }
       });
@@ -157,8 +159,8 @@
           }
         }
       });
-    });
-    console.log('tree', tree);
+    });    
+    this.loader.hideLoader();
     return tree;
   }
 
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 4603c52..2da1287 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
@@ -30,6 +30,7 @@
 import { Observable } from 'rxjs';
 import { A11yModule } from '@angular/cdk/a11y';
 import { ResourceEditService } from './resource-edit.service';
+import { NotificationHandlerService } from 'src/app/common/core/services/notification-handler.service';
 
 @Component({
   selector: 'app-resource-edit',
@@ -47,7 +48,7 @@
     @ViewChild(JsonEditorComponent) editor: JsonEditorComponent;
     options = new JsonEditorOptions();
   
-  constructor(private store: Store<IAppState>, private resourceEditService: ResourceEditService) {
+  constructor(private store: Store<IAppState>, private resourceEditService: ResourceEditService, private alertService: NotificationHandlerService) {
   	this.rdState = this.store.select('resources');
     this.options.mode = 'text';
     this.options.modes = [ 'text', 'tree', 'view'];
@@ -100,10 +101,10 @@
   saveToBackend() {
     this.resourceEditService.saveResource(this.data)
     .subscribe(response=>{
-      window.alert("save success");
+      this.alertService.success("save success")
     },
     error=>{
-      window.alert('Error saving resources');
+      this.alertService.error('Error saving resources');
     })
   }
 }
diff --git a/components/model-catalog/blueprint-model/test-blueprint/remote_scripts/Definitions/node_types.json b/components/model-catalog/blueprint-model/test-blueprint/remote_scripts/Definitions/node_types.json
index ddbccac..4945da8 100644
--- a/components/model-catalog/blueprint-model/test-blueprint/remote_scripts/Definitions/node_types.json
+++ b/components/model-catalog/blueprint-model/test-blueprint/remote_scripts/Definitions/node_types.json
@@ -8,9 +8,12 @@
           "required" : false,
           "type" : "string"
         },
-        "execute-command-logs" : {
-          "required" : false,
-          "type" : "string"
+        "execute-command-logs": {
+          "required": false,
+          "type": "list",
+          "entry_schema": {
+            "type": "string"
+          }
         }
       },
       "capabilities" : {
@@ -179,4 +182,4 @@
       "derived_from" : "tosca.nodes.Root"
     }
   }
-}
\ No newline at end of file
+}
diff --git a/components/model-catalog/definition-type/starter-type/node_type/component-remote-python-executor.json b/components/model-catalog/definition-type/starter-type/node_type/component-remote-python-executor.json
index e14b63e..caab5f7 100644
--- a/components/model-catalog/definition-type/starter-type/node_type/component-remote-python-executor.json
+++ b/components/model-catalog/definition-type/starter-type/node_type/component-remote-python-executor.json
@@ -8,7 +8,10 @@
     },
     "execute-command-logs": {
       "required": false,
-      "type": "string"
+      "type": "list",
+      "entry_schema": {
+        "type": "string"
+      }
     }
   },
   "capabilities": {
@@ -56,4 +59,4 @@
     }
   },
   "derived_from": "tosca.nodes.Component"
-}
\ No newline at end of file
+}
diff --git a/components/model-catalog/proto-definition/proto/CommandExecutor.proto b/components/model-catalog/proto-definition/proto/CommandExecutor.proto
index bc175db..fd2d4f3 100644
--- a/components/model-catalog/proto-definition/proto/CommandExecutor.proto
+++ b/components/model-catalog/proto-definition/proto/CommandExecutor.proto
@@ -37,7 +37,7 @@
 
 message ExecutionOutput {
     string requestId = 1;
-    string response = 2;
+    repeated string response = 2;
     ResponseStatus status = 3;
     google.protobuf.Timestamp timestamp = 4;
 }
diff --git a/ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/python/executor/ComponentRemotePythonExecutor.kt b/ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/python/executor/ComponentRemotePythonExecutor.kt
index 4ef1cfb..2de2242 100644
--- a/ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/python/executor/ComponentRemotePythonExecutor.kt
+++ b/ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/python/executor/ComponentRemotePythonExecutor.kt
@@ -22,6 +22,7 @@
 import org.onap.ccsdk.cds.blueprintsprocessor.services.execution.RemoteScriptExecutionService
 import org.onap.ccsdk.cds.controllerblueprints.core.*
 import org.onap.ccsdk.cds.controllerblueprints.core.data.OperationAssignment
+import org.onap.ccsdk.cds.controllerblueprints.core.utils.JacksonUtils
 import org.slf4j.LoggerFactory
 import org.springframework.beans.factory.config.ConfigurableBeanFactory
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean
@@ -96,7 +97,7 @@
                 )
                 val prepareEnvOutput = remoteScriptExecutionService.prepareEnv(prepareEnvInput)
                 log.info("$ATTRIBUTE_PREPARE_ENV_LOG - ${prepareEnvOutput.response}")
-                setAttribute(ATTRIBUTE_PREPARE_ENV_LOG, prepareEnvOutput.response.asJsonPrimitive())
+                setAttribute(ATTRIBUTE_PREPARE_ENV_LOG, JacksonUtils.jsonNodeFromObject(prepareEnvOutput.response))
                 setAttribute(ATTRIBUTE_EXEC_CMD_LOG, "N/A".asJsonPrimitive())
                 check(prepareEnvOutput.status == StatusType.SUCCESS) {
                     "failed to get prepare remote env response status for requestId(${prepareEnvInput.requestId})"
@@ -112,7 +113,7 @@
                     properties = properties)
             val remoteExecutionOutput = remoteScriptExecutionService.executeCommand(remoteExecutionInput)
             log.info("$ATTRIBUTE_EXEC_CMD_LOG  - ${remoteExecutionOutput.response}")
-            setAttribute(ATTRIBUTE_EXEC_CMD_LOG, remoteExecutionOutput.response.asJsonPrimitive())
+            setAttribute(ATTRIBUTE_EXEC_CMD_LOG, JacksonUtils.jsonNodeFromObject(remoteExecutionOutput.response))
             check(remoteExecutionOutput.status == StatusType.SUCCESS) {
                 "failed to get prepare remote command response status for requestId(${remoteExecutionOutput.requestId})"
             }
@@ -128,4 +129,4 @@
         bluePrintRuntimeService.getBluePrintError()
                 .addError("Failed in ComponentJythonExecutor : ${runtimeException.message}")
     }
-}
\ No newline at end of file
+}
diff --git a/ms/blueprintsprocessor/functions/python-executor/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/python/executor/ComponentRemotePythonExecutorTest.kt b/ms/blueprintsprocessor/functions/python-executor/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/python/executor/ComponentRemotePythonExecutorTest.kt
index 896d9a6..166d7b1 100644
--- a/ms/blueprintsprocessor/functions/python-executor/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/python/executor/ComponentRemotePythonExecutorTest.kt
+++ b/ms/blueprintsprocessor/functions/python-executor/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/python/executor/ComponentRemotePythonExecutorTest.kt
@@ -189,7 +189,7 @@
         assertNotNull(prepareEnvInput.packages, "failed to get packages")
 
         val remoteScriptExecutionOutput = mockk<RemoteScriptExecutionOutput>()
-        every { remoteScriptExecutionOutput.response } returns "prepared successfully"
+        every { remoteScriptExecutionOutput.response } returns listOf("prepared successfully")
         every { remoteScriptExecutionOutput.status } returns StatusType.SUCCESS
         return remoteScriptExecutionOutput
     }
@@ -198,7 +198,7 @@
         assertEquals(remoteExecutionInput.requestId, "123456-1000", "failed to match request id")
 
         val remoteScriptExecutionOutput = mockk<RemoteScriptExecutionOutput>()
-        every { remoteScriptExecutionOutput.response } returns "processed successfully"
+        every { remoteScriptExecutionOutput.response } returns listOf("processed successfully")
         every { remoteScriptExecutionOutput.status } returns StatusType.SUCCESS
         return remoteScriptExecutionOutput
     }
@@ -206,4 +206,4 @@
     override suspend fun close() {
 
     }
-}
\ No newline at end of file
+}
diff --git a/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/processor/InputResourceResolutionProcessorTest.kt b/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/processor/InputResourceResolutionProcessorTest.kt
index 2e91eb9..2427390 100644
--- a/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/processor/InputResourceResolutionProcessorTest.kt
+++ b/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/processor/InputResourceResolutionProcessorTest.kt
@@ -15,8 +15,11 @@
  */
 package org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution.processor
 
+import com.fasterxml.jackson.databind.JsonNode
+import com.fasterxml.jackson.databind.node.TextNode
+import io.mockk.every
+import io.mockk.spyk
 import kotlinx.coroutines.runBlocking
-import org.junit.Ignore
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution.ResourceAssignmentRuntimeService
@@ -28,7 +31,7 @@
 import org.springframework.test.context.ContextConfiguration
 import org.springframework.test.context.TestPropertySource
 import org.springframework.test.context.junit4.SpringRunner
-import kotlin.test.assertNotNull
+import kotlin.test.assertTrue
 
 @RunWith(SpringRunner::class)
 @ContextConfiguration(classes = [InputResourceResolutionProcessor::class])
@@ -38,20 +41,21 @@
     @Autowired
     lateinit var inputResourceResolutionProcessor: InputResourceResolutionProcessor
 
-    @Ignore
     @Test
-    fun `test input resource resolution`() {
+    fun `InputResourceResolutionProcessor should be able to resolve a value for an input parameter`() {
         runBlocking {
+
             val bluePrintContext = BluePrintMetadataUtils.getBluePrintContext(
                     "./../../../../components/model-catalog/blueprint-model/test-blueprint/baseconfiguration")
 
-            val resourceAssignmentRuntimeService = ResourceAssignmentRuntimeService("1234", bluePrintContext)
+            val resourceAssignmentRuntimeService = spyk(ResourceAssignmentRuntimeService("1234", bluePrintContext))
+
+            // mocking input for resource resolution
+            val textNode: JsonNode = TextNode("any value")
+            every {resourceAssignmentRuntimeService.getInputValue("rr-name") } returns textNode
 
             inputResourceResolutionProcessor.raRuntimeService = resourceAssignmentRuntimeService
-            inputResourceResolutionProcessor.resourceDictionaries = ResourceAssignmentUtils
-                    .resourceDefinitions(bluePrintContext.rootPath)
-
-            //TODO ("Mock the input Values")
+            inputResourceResolutionProcessor.resourceDictionaries = ResourceAssignmentUtils.resourceDefinitions(bluePrintContext.rootPath)
 
             val resourceAssignment = ResourceAssignment().apply {
                 name = "rr-name"
@@ -62,9 +66,8 @@
                 }
             }
 
-            val processorName = inputResourceResolutionProcessor.applyNB(resourceAssignment)
-            assertNotNull(processorName, "couldn't get Input resource assignment processor name")
-            println(processorName)
+            val operationOutcome = inputResourceResolutionProcessor.applyNB(resourceAssignment)
+            assertTrue(operationOutcome, "An error occurred while trying to test the InputResourceResolutionProcessor")
         }
     }
-}
\ No newline at end of file
+}
diff --git a/ms/blueprintsprocessor/modules/commons/processor-core/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/core/api/data/BlueprintRemoteProcessorData.kt b/ms/blueprintsprocessor/modules/commons/processor-core/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/core/api/data/BlueprintRemoteProcessorData.kt
index 83254ce..2f9ea4a 100644
--- a/ms/blueprintsprocessor/modules/commons/processor-core/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/core/api/data/BlueprintRemoteProcessorData.kt
+++ b/ms/blueprintsprocessor/modules/commons/processor-core/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/core/api/data/BlueprintRemoteProcessorData.kt
@@ -37,7 +37,7 @@
 
 
 data class RemoteScriptExecutionOutput(var requestId: String,
-                                       var response: String,
+                                       var response: List<String>,
                                        var status: StatusType = StatusType.SUCCESS,
                                        var timestamp: Date = Date())
 
@@ -46,4 +46,4 @@
                                  var remoteIdentifier: RemoteIdentifier? = null,
                                  var packages: JsonNode,
                                  var timeOut: Long = 120,
-                                 var properties: MutableMap<String, JsonNode> = hashMapOf())
\ No newline at end of file
+                                 var properties: MutableMap<String, JsonNode> = hashMapOf())
diff --git a/ms/blueprintsprocessor/modules/services/execution-service/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/services/execution/RemoteScriptExecutionService.kt b/ms/blueprintsprocessor/modules/services/execution-service/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/services/execution/RemoteScriptExecutionService.kt
index 7aee95e..3af57a2 100644
--- a/ms/blueprintsprocessor/modules/services/execution-service/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/services/execution/RemoteScriptExecutionService.kt
+++ b/ms/blueprintsprocessor/modules/services/execution-service/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/services/execution/RemoteScriptExecutionService.kt
@@ -148,9 +148,9 @@
     fun ExecutionOutput.asJavaData(): RemoteScriptExecutionOutput {
         return RemoteScriptExecutionOutput(
             requestId = this.requestId,
-            response = this.response,
+            response = this.responseList,
             status = StatusType.valueOf(this.status.name)
         )
     }
 
-}
\ No newline at end of file
+}
diff --git a/ms/command-executor/src/main/python/command_executor_handler.py b/ms/command-executor/src/main/python/command_executor_handler.py
index a5951fd..365c001 100644
--- a/ms/command-executor/src/main/python/command_executor_handler.py
+++ b/ms/command-executor/src/main/python/command_executor_handler.py
@@ -19,6 +19,7 @@
 import logging
 import os
 import subprocess
+import sys
 import virtualenv
 import venv
 import utils
@@ -37,10 +38,7 @@
         self.installed = self.venv_home + '/.installed'
 
     def is_installed(self):
-        if os.path.exists(self.installed):
-            return True
-        else:
-            return False
+        return os.path.exists(self.installed)
 
     def prepare_env(self, request, results):
         if not self.is_installed():
@@ -78,7 +76,16 @@
 
         self.logger.info("Command: {}".format(cmd))
         try:
-            results.append(os.popen(cmd).read())
+            with subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
+                                  shell=True, bufsize=1, universal_newlines=True) as newProcess:
+                while True:
+                    output = newProcess.stdout.readline()
+                    if output == '' and newProcess.poll() is not None:
+                        break
+                    if output:
+                        self.logger.info(output.strip())
+                        results.append(output.strip())
+                    rc = newProcess.poll()
         except Exception as e:
             self.logger.info("{} - Failed to execute command. Error: {}".format(self.blueprint_id, e))
             results.append(e)
diff --git a/ms/command-executor/src/main/python/proto/CommandExecutor_pb2.py b/ms/command-executor/src/main/python/proto/CommandExecutor_pb2.py
index 3afeb35..478e009 100644
--- a/ms/command-executor/src/main/python/proto/CommandExecutor_pb2.py
+++ b/ms/command-executor/src/main/python/proto/CommandExecutor_pb2.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: CommandExecutor.proto
 
@@ -22,7 +23,7 @@
   package='org.onap.ccsdk.cds.controllerblueprints.command.api',
   syntax='proto3',
   serialized_options=_b('P\001'),
-  serialized_pb=_b('\n\x15\x43ommandExecutor.proto\x12\x33org.onap.ccsdk.cds.controllerblueprints.command.api\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\x8f\x02\n\x0e\x45xecutionInput\x12\x11\n\trequestId\x18\x01 \x01(\t\x12\x15\n\rcorrelationId\x18\x02 \x01(\t\x12U\n\x0bidentifiers\x18\x03 \x01(\x0b\x32@.org.onap.ccsdk.cds.controllerblueprints.command.api.Identifiers\x12\x0f\n\x07\x63ommand\x18\x04 \x01(\t\x12\x0f\n\x07timeOut\x18\x05 \x01(\x05\x12+\n\nproperties\x18\x06 \x01(\x0b\x32\x17.google.protobuf.Struct\x12-\n\ttimestamp\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xd0\x02\n\x0fPrepareEnvInput\x12U\n\x0bidentifiers\x18\x01 \x01(\x0b\x32@.org.onap.ccsdk.cds.controllerblueprints.command.api.Identifiers\x12\x11\n\trequestId\x18\x02 \x01(\t\x12\x15\n\rcorrelationId\x18\x03 \x01(\t\x12O\n\x08packages\x18\x04 \x03(\x0b\x32=.org.onap.ccsdk.cds.controllerblueprints.command.api.Packages\x12\x0f\n\x07timeOut\x18\x05 \x01(\x05\x12+\n\nproperties\x18\x06 \x01(\x0b\x32\x17.google.protobuf.Struct\x12-\n\ttimestamp\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\">\n\x0bIdentifiers\x12\x15\n\rblueprintName\x18\x01 \x01(\t\x12\x18\n\x10\x62lueprintVersion\x18\x02 \x01(\t\"\xba\x01\n\x0f\x45xecutionOutput\x12\x11\n\trequestId\x18\x01 \x01(\t\x12\x10\n\x08response\x18\x02 \x01(\t\x12S\n\x06status\x18\x03 \x01(\x0e\x32\x43.org.onap.ccsdk.cds.controllerblueprints.command.api.ResponseStatus\x12-\n\ttimestamp\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"k\n\x08Packages\x12N\n\x04type\x18\x01 \x01(\x0e\x32@.org.onap.ccsdk.cds.controllerblueprints.command.api.PackageType\x12\x0f\n\x07package\x18\x02 \x03(\t**\n\x0eResponseStatus\x12\x0b\n\x07SUCCESS\x10\x00\x12\x0b\n\x07\x46\x41ILURE\x10\x01**\n\x0bPackageType\x12\x07\n\x03pip\x10\x00\x12\x12\n\x0e\x61nsible_galaxy\x10\x01\x32\xd1\x02\n\x16\x43ommandExecutorService\x12\x98\x01\n\nprepareEnv\x12\x44.org.onap.ccsdk.cds.controllerblueprints.command.api.PrepareEnvInput\x1a\x44.org.onap.ccsdk.cds.controllerblueprints.command.api.ExecutionOutput\x12\x9b\x01\n\x0e\x65xecuteCommand\x12\x43.org.onap.ccsdk.cds.controllerblueprints.command.api.ExecutionInput\x1a\x44.org.onap.ccsdk.cds.controllerblueprints.command.api.ExecutionOutputB\x02P\x01\x62\x06proto3')
+  serialized_pb=_b('\n\x15\x43ommandExecutor.proto\x12\x33org.onap.ccsdk.cds.controllerblueprints.command.api\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\x8f\x02\n\x0e\x45xecutionInput\x12\x11\n\trequestId\x18\x01 \x01(\t\x12\x15\n\rcorrelationId\x18\x02 \x01(\t\x12U\n\x0bidentifiers\x18\x03 \x01(\x0b\x32@.org.onap.ccsdk.cds.controllerblueprints.command.api.Identifiers\x12\x0f\n\x07\x63ommand\x18\x04 \x01(\t\x12\x0f\n\x07timeOut\x18\x05 \x01(\x05\x12+\n\nproperties\x18\x06 \x01(\x0b\x32\x17.google.protobuf.Struct\x12-\n\ttimestamp\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xd0\x02\n\x0fPrepareEnvInput\x12U\n\x0bidentifiers\x18\x01 \x01(\x0b\x32@.org.onap.ccsdk.cds.controllerblueprints.command.api.Identifiers\x12\x11\n\trequestId\x18\x02 \x01(\t\x12\x15\n\rcorrelationId\x18\x03 \x01(\t\x12O\n\x08packages\x18\x04 \x03(\x0b\x32=.org.onap.ccsdk.cds.controllerblueprints.command.api.Packages\x12\x0f\n\x07timeOut\x18\x05 \x01(\x05\x12+\n\nproperties\x18\x06 \x01(\x0b\x32\x17.google.protobuf.Struct\x12-\n\ttimestamp\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\">\n\x0bIdentifiers\x12\x15\n\rblueprintName\x18\x01 \x01(\t\x12\x18\n\x10\x62lueprintVersion\x18\x02 \x01(\t\"\xba\x01\n\x0f\x45xecutionOutput\x12\x11\n\trequestId\x18\x01 \x01(\t\x12\x10\n\x08response\x18\x02 \x03(\t\x12S\n\x06status\x18\x03 \x01(\x0e\x32\x43.org.onap.ccsdk.cds.controllerblueprints.command.api.ResponseStatus\x12-\n\ttimestamp\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"k\n\x08Packages\x12N\n\x04type\x18\x01 \x01(\x0e\x32@.org.onap.ccsdk.cds.controllerblueprints.command.api.PackageType\x12\x0f\n\x07package\x18\x02 \x03(\t**\n\x0eResponseStatus\x12\x0b\n\x07SUCCESS\x10\x00\x12\x0b\n\x07\x46\x41ILURE\x10\x01**\n\x0bPackageType\x12\x07\n\x03pip\x10\x00\x12\x12\n\x0e\x61nsible_galaxy\x10\x01\x32\xd1\x02\n\x16\x43ommandExecutorService\x12\x98\x01\n\nprepareEnv\x12\x44.org.onap.ccsdk.cds.controllerblueprints.command.api.PrepareEnvInput\x1a\x44.org.onap.ccsdk.cds.controllerblueprints.command.api.ExecutionOutput\x12\x9b\x01\n\x0e\x65xecuteCommand\x12\x43.org.onap.ccsdk.cds.controllerblueprints.command.api.ExecutionInput\x1a\x44.org.onap.ccsdk.cds.controllerblueprints.command.api.ExecutionOutputB\x02P\x01\x62\x06proto3')
   ,
   dependencies=[google_dot_protobuf_dot_struct__pb2.DESCRIPTOR,google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,])
 
@@ -279,8 +280,8 @@
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='response', full_name='org.onap.ccsdk.cds.controllerblueprints.command.api.ExecutionOutput.response', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      number=2, type=9, cpp_type=9, label=3,
+      has_default_value=False, default_value=[],
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
diff --git a/ms/command-executor/src/main/python/utils.py b/ms/command-executor/src/main/python/utils.py
index 6260997..dc5d008 100644
--- a/ms/command-executor/src/main/python/utils.py
+++ b/ms/command-executor/src/main/python/utils.py
@@ -17,7 +17,6 @@
 
 import proto.CommandExecutor_pb2 as CommandExecutor_pb2
 
-
 def get_blueprint_id(request):
     blueprint_name = request.identifiers.blueprintName
     blueprint_version = request.identifiers.blueprintVersion
@@ -32,6 +31,5 @@
 
     timestamp = Timestamp()
     timestamp.GetCurrentTime()
-
-    return CommandExecutor_pb2.ExecutionOutput(requestId=request.requestId, response="".join(results), status=status,
+    return CommandExecutor_pb2.ExecutionOutput(requestId=request.requestId, response=results, status=status,
                                                timestamp=timestamp)