summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authork.kedron <k.kedron@partner.samsung.com>2019-08-06 09:25:35 +0200
committerOfir Sonsino <ofir.sonsino@intl.att.com>2019-08-18 06:56:04 +0000
commitc69e72cb78fb8e6d7a4f3698f6598f418fdcb727 (patch)
tree9ab3d9652179076e48bc0cdc4f8935a303ecd77d
parent0f0f94fa45483b6fbbab61535297289d2e752e71 (diff)
Added error message when some resources are missing.
Error message when the VF or TEMPLATE widget don't have proper resource to used. When component is destroy unsubscribe the observables object to prevent multiple subscription. Issue-ID: SDC-2312 Signed-off-by: Krystian Kedron <k.kedron@partner.samsung.com> Change-Id: I1af93077f832553845d1c99a312acfb9d797cefe
-rw-r--r--public/src/app/error-dialog/error-dialog.component.html2
-rw-r--r--public/src/app/general/general.component.ts167
2 files changed, 111 insertions, 58 deletions
diff --git a/public/src/app/error-dialog/error-dialog.component.html b/public/src/app/error-dialog/error-dialog.component.html
index ca9dd32..1281897 100644
--- a/public/src/app/error-dialog/error-dialog.component.html
+++ b/public/src/app/error-dialog/error-dialog.component.html
@@ -23,7 +23,7 @@
<div *ngFor="let error of store.ErrorContent" style="padding: 0 0 20px 43px; font-family: 'Open Sans', sans-serif;
font-size: 14px;">
- {{ error.formattedErrorMessage }}
+ <div [innerHtml]="error.formattedErrorMessage"></div>
</div>
<p-footer>
diff --git a/public/src/app/general/general.component.ts b/public/src/app/general/general.component.ts
index d1f03d3..e256e81 100644
--- a/public/src/app/general/general.component.ts
+++ b/public/src/app/general/general.component.ts
@@ -1,6 +1,7 @@
import {
Component,
EventEmitter,
+ OnDestroy,
OnInit,
Output,
ViewChild,
@@ -21,9 +22,23 @@ import {
sort
} from 'ramda';
import { forkJoin } from 'rxjs/observable/forkJoin';
+import { Subscription } from 'rxjs/Subscription';
import { RestApiService } from '../api/rest-api.service';
import { Store } from '../store/store';
+const VF_MISSING: any = {
+ formattedErrorMessage:
+ '<p>Missing the VF resource! </p>' +
+ '<p> 1. In the current Service under the Composition tab add the proper VF. </p>'
+};
+
+const TEMPLATES_MISSING: any = {
+ formattedErrorMessage:
+ '<p>Missing the Basic Monitoring Template resource! </p>' +
+ '<p> 1. In the DCAE-DS tab create the VFCMT asset. </p>' +
+ '<p> 2. Next design the Basic Monitoring Template under the Composition tab. </p>'
+};
+
export const groupingData = pipe(
groupBy(prop('name')),
map(sort(descend(prop('version'))))
@@ -35,7 +50,7 @@ export const groupingData = pipe(
templateUrl: './general.component.html',
styleUrls: ['./general.component.scss']
})
-export class GeneralComponent implements OnInit {
+export class GeneralComponent implements OnInit, OnDestroy {
newVfcmt = {
name: null,
description: null,
@@ -64,6 +79,7 @@ export class GeneralComponent implements OnInit {
@ViewChild('generalForm') generalForm;
list = [];
importBtnDisabled = true;
+ private subscription: Subscription = new Subscription();
constructor(
private restApi: RestApiService,
@@ -136,48 +152,73 @@ export class GeneralComponent implements OnInit {
ngOnInit() {
if (this.store.generalflow === 'edit') {
this.store.loader = true;
- this.restApi
- .getCompositionMonitoringComponent(this.store.mcUuid)
- .subscribe(
- response => {
- this.newVfcmt = response.vfcmt;
- this.store.mcName = response.vfcmt.name;
- this.flowTypes.push(response.cdump.flowType);
- this.newVfcmt.flowType = response.cdump.flowType;
- this.store.flowType = response.cdump.flowType;
- this.newVfcmt.vfni = this.store.vfiName;
- this.vfniList.push({ resourceInstanceName: this.newVfcmt.vfni });
- this.updateCdumpEv.next(response.cdump);
- this.store.isEditMode = true;
- this.store.loader = false;
+ this.subscription.add(
+ this.restApi
+ .getCompositionMonitoringComponent(this.store.mcUuid)
+ .subscribe(
+ response => {
+ this.newVfcmt = response.vfcmt;
+ this.store.mcName = response.vfcmt.name;
+ this.flowTypes.push(response.cdump.flowType);
+ this.newVfcmt.flowType = response.cdump.flowType;
+ this.store.flowType = response.cdump.flowType;
+ this.newVfcmt.vfni = this.store.vfiName;
+ this.vfniList.push({ resourceInstanceName: this.newVfcmt.vfni });
+ this.updateCdumpEv.next(response.cdump);
+ this.store.isEditMode = true;
+ this.store.loader = false;
- this.list = response.cdump.relations.map(item => {
- return {
- name1: item.name1,
- name2: item.name2,
- p1: item.meta.p1,
- p2: item.meta.p2
- };
- });
- },
- error => {
- this.notifyError(error);
- }
- );
+ this.list = response.cdump.relations.map(item => {
+ return {
+ name1: item.name1,
+ name2: item.name2,
+ p1: item.meta.p1,
+ p2: item.meta.p2
+ };
+ });
+ },
+ error => {
+ this.notifyError(error);
+ }
+ )
+ );
} else if (this.store.generalflow === 'import') {
this.store.loader = true;
this.store.isEditMode = true;
- this.restApi
- .getVfcmtsForMigration({
- contextType: this.route.snapshot.params.contextType,
- uuid: this.route.snapshot.params.uuid,
- version: this.route.snapshot.params.version
- })
- .subscribe(
+ this.subscription.add(
+ this.restApi
+ .getVfcmtsForMigration({
+ contextType: this.route.snapshot.params.contextType,
+ uuid: this.route.snapshot.params.uuid,
+ version: this.route.snapshot.params.version
+ })
+ .subscribe(
+ success => {
+ this.store.loader = false;
+ this.result = groupingData(success);
+ this.vfcmts = sortBy(Object.keys(this.result), name => name);
+ },
+ error => {
+ this.notifyError(error);
+ },
+ () => {
+ this.store.loader = false;
+ }
+ )
+ );
+ } else if (this.route.snapshot.params.mcid === 'new') {
+ // get template data for ddl
+ const template$ = this.restApi.getTemplateResources();
+ // get service vfi list for ddl '08ff91f1-9b57-4918-998b-4d2c98832815'
+ const vfniList$ = this.restApi.getServiceInstances(this.serviceUUID);
+ this.store.loader = true;
+ this.subscription.add(
+ forkJoin([template$, vfniList$]).subscribe(
success => {
- this.store.loader = false;
- this.result = groupingData(success);
- this.vfcmts = sortBy(Object.keys(this.result), name => name);
+ console.log('all', success);
+ this.templates = success[0];
+ this.vfniList = success[1].resources;
+ this.checkIfResourcesAreValid();
},
error => {
this.notifyError(error);
@@ -185,29 +226,16 @@ export class GeneralComponent implements OnInit {
() => {
this.store.loader = false;
}
- );
- } else if (this.route.snapshot.params.mcid === 'new') {
- // get template data for ddl
- const template$ = this.restApi.getTemplateResources();
- // get service vfi list for ddl '08ff91f1-9b57-4918-998b-4d2c98832815'
- const vfniList$ = this.restApi.getServiceInstances(this.serviceUUID);
- this.store.loader = true;
- forkJoin(template$, vfniList$).subscribe(
- success => {
- console.log('all', success);
- this.templates = success[0];
- this.vfniList = success[1].resources;
- },
- error => {
- this.notifyError(error);
- },
- () => {
- this.store.loader = false;
- }
+ )
);
}
}
+ ngOnDestroy(): void {
+ // to prevent multiple subscription
+ this.subscription.unsubscribe();
+ }
+
private restForm() {
this.newVfcmt = {
name: null,
@@ -224,6 +252,31 @@ export class GeneralComponent implements OnInit {
});
}
+ private checkIfResourcesAreValid() {
+ const requestError = {};
+ // double negation trick (to handle undefined, null object)
+ if (!!this.templates) {
+ if (Object.keys(this.templates).length === 0) {
+ requestError[0] = TEMPLATES_MISSING;
+ }
+ } else {
+ requestError[0] = TEMPLATES_MISSING;
+ }
+ if (!!this.vfniList) {
+ if (Object.keys(this.vfniList).length === 0) {
+ requestError[1] = VF_MISSING;
+ }
+ } else {
+ requestError[1] = VF_MISSING;
+ }
+ if (Object.keys(requestError).length > 0) {
+ this.notifyError({
+ notes: 'Some resource is missing!',
+ requestError
+ });
+ }
+ }
+
private getServiceRef(data) {
this.importBtnDisabled = false;
if (data.flowType !== undefined) {