aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraribeiro <anderson.ribeiro@est.tech>2020-08-28 19:11:59 +0100
committerSébastien Determe <sebastien.determe@intl.att.com>2020-09-07 10:05:25 +0000
commitde805023e2d1c8565efc9a707a82c9fc3903ab38 (patch)
tree2062200adf5cef5fb6526d735291e07247516dd7
parent81c04901ba03a1b696c5198ec84cda767101aa3c (diff)
Retrieve node_filter capabilities
Issue-ID: SDC-3270 Signed-off-by: aribeiro <anderson.ribeiro@est.tech> Change-Id: Ieb1b3c4d31a50e73112fc34cdd8d5fd9ba9e6a30
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/tosca/utils/NodeFilterConverter.java37
-rw-r--r--catalog-model/src/main/java/org/openecomp/sdc/be/ui/model/UINodeFilter.java2
-rw-r--r--catalog-ui/src/app/ng2/components/logic/service-dependencies/service-dependencies.component.html89
-rw-r--r--catalog-ui/src/app/ng2/components/logic/service-dependencies/service-dependencies.component.less46
-rw-r--r--catalog-ui/src/app/ng2/components/logic/service-dependencies/service-dependencies.component.ts80
-rw-r--r--catalog-ui/src/app/ng2/components/logic/service-dependencies/service-dependencies.module.ts12
-rw-r--r--catalog-ui/src/app/ng2/components/logic/substitution-filter/substitution-filter.component.less28
-rw-r--r--catalog-ui/src/app/ng2/pages/composition/panel/panel-tabs/service-dependencies-tab/service-dependencies-tab.component.html3
-rw-r--r--catalog-ui/src/app/ng2/pages/composition/panel/panel-tabs/service-dependencies-tab/service-dependencies-tab.component.ts36
-rw-r--r--catalog-ui/src/app/ng2/services/component-services/topology-template.service.ts12
10 files changed, 216 insertions, 129 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/utils/NodeFilterConverter.java b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/utils/NodeFilterConverter.java
index cab7d53cd7..d1e22f9fa2 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/utils/NodeFilterConverter.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/utils/NodeFilterConverter.java
@@ -21,6 +21,9 @@ import java.util.Map;
import java.util.stream.Collectors;
import org.openecomp.sdc.be.datamodel.utils.ConstraintConvertor;
import org.openecomp.sdc.be.datatypes.elements.CINodeFilterDataDefinition;
+import org.openecomp.sdc.be.datatypes.elements.ListDataDefinition;
+import org.openecomp.sdc.be.datatypes.elements.RequirementNodeFilterCapabilityDataDefinition;
+import org.openecomp.sdc.be.datatypes.elements.RequirementNodeFilterPropertyDataDefinition;
import org.openecomp.sdc.be.ui.model.UIConstraint;
import org.openecomp.sdc.be.ui.model.UINodeFilter;
@@ -31,17 +34,31 @@ public class NodeFilterConverter {
return inMap.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, o -> convertToUi(o.getValue())));
}
- public UINodeFilter convertToUi(CINodeFilterDataDefinition inNodeFilter) {
- UINodeFilter retVal = new UINodeFilter();
+ public UINodeFilter convertToUi(final CINodeFilterDataDefinition inNodeFilter) {
+ final UINodeFilter uiNodeFilter = new UINodeFilter();
final ConstraintConvertor constraintConvertor = new ConstraintConvertor();
- if (inNodeFilter.getProperties() == null || inNodeFilter.getProperties().isEmpty()) {
- return retVal;
+ final ListDataDefinition<RequirementNodeFilterPropertyDataDefinition> nodeFilterProperties =
+ inNodeFilter.getProperties();
+ if (nodeFilterProperties != null && !nodeFilterProperties.isEmpty()) {
+ final List<UIConstraint> propertiesConstraint = nodeFilterProperties.getListToscaDataDefinition()
+ .stream()
+ .map(property -> property.getConstraints().iterator().next())
+ .map(constraintConvertor::convert)
+ .collect(Collectors.toList());
+ uiNodeFilter.setProperties(propertiesConstraint);
}
- List<UIConstraint> constraints = inNodeFilter.getProperties().getListToscaDataDefinition().stream()
- .map(property -> property.getConstraints().iterator().next())
- .map(constraintConvertor::convert)
- .collect(Collectors.toList());
- retVal.setProperties(constraints);
- return retVal;
+ final ListDataDefinition<RequirementNodeFilterCapabilityDataDefinition> nodeFilterCapabilities =
+ inNodeFilter.getCapabilities();
+ if (nodeFilterCapabilities != null && !nodeFilterCapabilities.isEmpty()) {
+ final List<UIConstraint> capabilitiesConstraint = nodeFilterCapabilities.getListToscaDataDefinition()
+ .stream()
+ .map(capabilities -> capabilities.getProperties().getListToscaDataDefinition().iterator().next())
+ .map(property -> property.getConstraints().iterator().next())
+ .map(constraintConvertor::convert)
+ .collect(Collectors.toList());
+ uiNodeFilter.setCapabilities(capabilitiesConstraint);
+ }
+
+ return uiNodeFilter;
}
}
diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/ui/model/UINodeFilter.java b/catalog-model/src/main/java/org/openecomp/sdc/be/ui/model/UINodeFilter.java
index 84df74c47f..92eb9e5127 100644
--- a/catalog-model/src/main/java/org/openecomp/sdc/be/ui/model/UINodeFilter.java
+++ b/catalog-model/src/main/java/org/openecomp/sdc/be/ui/model/UINodeFilter.java
@@ -24,5 +24,5 @@ import lombok.Setter;
public class UINodeFilter {
private List<UIConstraint> properties;
-
+ private List<UIConstraint> capabilities;
}
diff --git a/catalog-ui/src/app/ng2/components/logic/service-dependencies/service-dependencies.component.html b/catalog-ui/src/app/ng2/components/logic/service-dependencies/service-dependencies.component.html
index 4238a4e96f..c3d4817a39 100644
--- a/catalog-ui/src/app/ng2/components/logic/service-dependencies/service-dependencies.component.html
+++ b/catalog-ui/src/app/ng2/components/logic/service-dependencies/service-dependencies.component.html
@@ -1,6 +1,6 @@
<div class="service-dependencies">
<loader [display]="isLoading" [size]="'medium'" [relative]="true"></loader>
- <div *ngIf="!isDependent" class="checkbox-label-mark-as-dependent">
+ <div *ngIf="!isDependent" class="checkbox-label-mark-as-dependent">
<select name="singleSelect" id="singleSelect" ng-model="data.singleSelect"
(change)='onOptionsSelected($event)'>
<option>Select Directive</option>
@@ -11,34 +11,77 @@
<div *ngIf="isDependent" class="checkbox-label-mark-as-dependent">
<label class="i-sdc-form-label">Directive: {{getActualDirectiveValue().toUpperCase()}}</label>
<span class="sprite-new delete-btn delete-icon"
- (click)="onRemoveDirective()" data-tests-id="delete-input-button">
+ (click)="onRemoveDirective()" data-tests-id="delete-input-button">
</span>
</div>
- <div class="i-sdc-designer-sidebar-section-content-item-rules-section" *ngIf="isDependent">
+ <div *ngIf="isDependent">
+ <div class="w-sdc-designer-sidebar-section">
+ <sdc-accordion [title]="'Node Filter Capabilities'" [arrow-direction]="'right'" [open]="true">
+ <div class="i-sdc-designer-sidebar-section-content-node-filter-section">
- <div class="i-sdc-designer-sidebar-section-content-item-rule" [ngClass]="{'hand': !readonly}"
- *ngFor="let constraint of constraintObjects; let i = index">
- <div class="rule-details" [ngClass]="{'readonly': readonly}">
- <div class="rule-desc" (click)="!readonly && onSelectRule(i)" tooltips
- tooltip="{{constraint.servicePropertyName + ' ' + getSymbol(constraint.constraintOperator) + ' '
- + (constraint.sourceName ? constraint.sourceName + ':' : '') + constraint.value}}">
- {{constraint.servicePropertyName + ' ' + getSymbol(constraint.constraintOperator) + ' '
- + (constraint.sourceName ? constraint.sourceName + ':' : '') + constraint.value}}
+ <div class="i-sdc-designer-sidebar-section-content-node-filter"
+ [ngClass]="{'hand': !readonly}"
+ *ngFor="let capability of constraintCapabilities; let i = index">
+ <div class="filter-details" [ngClass]="{'readonly': readonly}">
+ <div class="filter-desc" (click)="!readonly && onSelectNodeFilter(capabilities, i)"
+ tooltips
+ tooltip="{{capability.servicePropertyName + ' ' + getSymbol(capability.constraintOperator) + ' '
+ + (capability.sourceName ? capability.sourceName + ':' : '') + capability.value}}">
+ {{capability.servicePropertyName + ' ' + getSymbol(capability.constraintOperator)
+ + ' '
+ + (capability.sourceName ? capability.sourceName + ':' : '') + capability.value}}
+ </div>
+ <span *ngIf="!readonly" class="sprite-new delete-btn delete-icon"
+ (click)="openDeleteModal(capabilities, i)"
+ data-tests-id="delete-input-button"></span>
+ </div>
+ </div>
+
+ <div class="w-sdc-designer-sidebar-section-node-filter-footer">
+ <button
+ class="w-sdc-designer-sidebar-section-node-filter-footer-action add-rule-btn tlv-btn blue"
+ data-tests-id="add-rule-button"
+ (click)="onAddNodeFilter(capabilities)"
+ [disabled]="readonly">
+ {{'DIRECTIVES_AND_NODE_FILTER_ADD_NODE_FILTER' | translate}}
+ </button>
+ </div>
</div>
- <span *ngIf="!readonly" class="sprite-new delete-btn delete-icon"
- (click)="openDeleteModal(i)" data-tests-id="delete-input-button"></span>
- </div>
- </div>
+ </sdc-accordion>
+
+ <sdc-accordion [title]="'Node Filter Properties'" [arrow-direction]="'right'" [open]="true">
+ <div class="i-sdc-designer-sidebar-section-content-node-filter-section">
- <div class="w-sdc-designer-sidebar-section-footer">
- <button
- class="w-sdc-designer-sidebar-section-footer-action add-rule-btn tlv-btn blue"
- data-tests-id="add-rule-button"
- (click)="onAddRule()"
- [disabled]="readonly">
- {{'DIRECTIVES_AND_NODE_FILTER_ADD_NODE_FILTER' | translate}}
- </button>
+ <div class="i-sdc-designer-sidebar-section-content-node-filter"
+ [ngClass]="{'hand': !readonly}"
+ *ngFor="let property of constraintProperties; let i = index">
+ <div class="filter-details" [ngClass]="{'readonly': readonly}">
+ <div class="filter-desc" (click)="!readonly && onSelectNodeFilter(properties, i)"
+ tooltips
+ tooltip="{{property.servicePropertyName + ' ' + getSymbol(property.constraintOperator) + ' '
+ + (property.sourceName ? property.sourceName + ':' : '') + property.value}}">
+ {{property.servicePropertyName + ' ' + getSymbol(property.constraintOperator)
+ + ' '
+ + (property.sourceName ? property.sourceName + ':' : '') + property.value}}
+ </div>
+ <span *ngIf="!readonly" class="sprite-new delete-btn delete-icon"
+ (click)="openDeleteModal(properties, i)"
+ data-tests-id="delete-input-button"></span>
+ </div>
+ </div>
+
+ <div class="w-sdc-designer-sidebar-section-node-filter-footer">
+ <button
+ class="w-sdc-designer-sidebar-section-node-filter-footer-action add-rule-btn tlv-btn blue"
+ data-tests-id="add-rule-button"
+ (click)="onAddNodeFilter(properties)"
+ [disabled]="readonly">
+ {{'DIRECTIVES_AND_NODE_FILTER_ADD_NODE_FILTER' | translate}}
+ </button>
+ </div>
+ </div>
+ </sdc-accordion>
</div>
</div>
</div>
diff --git a/catalog-ui/src/app/ng2/components/logic/service-dependencies/service-dependencies.component.less b/catalog-ui/src/app/ng2/components/logic/service-dependencies/service-dependencies.component.less
index 21c2b3aadc..00be76c8ca 100644
--- a/catalog-ui/src/app/ng2/components/logic/service-dependencies/service-dependencies.component.less
+++ b/catalog-ui/src/app/ng2/components/logic/service-dependencies/service-dependencies.component.less
@@ -32,9 +32,8 @@
}
}
-
- .i-sdc-designer-sidebar-section-content-item-rules-section {
- .i-sdc-designer-sidebar-section-content-item-rule {
+ .i-sdc-designer-sidebar-section-content-node-filter-section {
+ .i-sdc-designer-sidebar-section-content-node-filter {
border-bottom: 1px solid @main_color_o;
padding: 5px 10px 5px 18px;
position: relative;
@@ -43,7 +42,7 @@
align-items: center;
justify-content: space-between;
- .rule-details {
+ .filter-details {
// .s_1;
display: flex;
flex: 1;
@@ -64,7 +63,7 @@
opacity: 0.5;
}
}
- .rule-desc {
+ .filter-desc {
.sdc-ellipsis;
width: 220px;
position: relative;
@@ -73,13 +72,44 @@
}
}
- .w-sdc-designer-sidebar-section-footer {
+ .w-sdc-designer-sidebar-section-node-filter-footer {
margin-top: 10px;
+ margin-bottom: 10px;
text-align: center;
width: 100%;
}
- .w-sdc-designer-sidebar-section-footer-action {
+ .w-sdc-designer-sidebar-section-node-filter-footer-action {
width: 180px;
margin-top: 10px;
}
-} \ No newline at end of file
+}
+
+/deep/.sdc-accordion {
+ margin-bottom: 0;
+ display: grid;
+
+ .sdc-accordion-header {
+ background-color: #e6f6fb;
+ border-left: solid #009fdb 4px;
+ box-shadow: 0 0px 3px -1px rgba(0, 0, 0, 0.3);
+ margin-bottom: 2px;
+ width: auto;
+ height: auto;
+ padding: 10px;
+ color: #666666;
+ font-family: OpenSans-Semibold, sans-serif;
+ font-size: 14px;
+ }
+
+ .sdc-accordion-body.open {
+ padding-left: 0;
+ padding-top: 0;
+ .sdc-accordion-header { /*Second level - nested accordion */
+ background-color: #f8f8f8;
+ padding: 4px 20px 4px 37px;
+ border-bottom: 1px solid #d2d2d2;
+ border-left:none;
+ height: 30px;
+ }
+ }
+}
diff --git a/catalog-ui/src/app/ng2/components/logic/service-dependencies/service-dependencies.component.ts b/catalog-ui/src/app/ng2/components/logic/service-dependencies/service-dependencies.component.ts
index 55c933c38d..90f82f8983 100644
--- a/catalog-ui/src/app/ng2/components/logic/service-dependencies/service-dependencies.component.ts
+++ b/catalog-ui/src/app/ng2/components/logic/service-dependencies/service-dependencies.component.ts
@@ -123,8 +123,12 @@ export class ServiceDependenciesComponent {
isDependent: boolean;
isLoading: boolean;
parentServiceInputs: InputBEModel[] = [];
- constraintObjects: ConstraintObject[] = [];
+ constraintProperties: ConstraintObject[] = [];
+ constraintCapabilities: ConstraintObject[] = [];
operatorTypes: any[];
+ capabilities: string = 'capabilities';
+ properties: string = 'properties';
+ private componentInstancesConstraints: ConstraintObject[] = [];
@Input() readonly: boolean;
@Input() compositeService: ComponentMetadata;
@@ -133,7 +137,8 @@ export class ServiceDependenciesComponent {
@Input() selectedInstanceConstraints: ConstraintObject[] = [];
@Input() selectedInstanceProperties: PropertyBEModel[] = [];
@Input() directiveValues: any = DirectiveValue;
- @Output() updateRulesListEvent: EventEmitter<ConstraintObject[]> = new EventEmitter<ConstraintObject[]>();
+ @Output() updateNodeFilterProperties: EventEmitter<ConstraintObject[]> = new EventEmitter<ConstraintObject[]>();
+ @Output() updateNodeFilterCapabilities: EventEmitter<ConstraintObject[]> = new EventEmitter<ConstraintObject[]>();
@Output() loadRulesListEvent:EventEmitter<any> = new EventEmitter();
@Output() dependencyStatus = new EventEmitter<boolean>();
@@ -175,6 +180,7 @@ export class ServiceDependenciesComponent {
const cancelButton: ButtonModel = new ButtonModel(I18nTexts.modalCancel, 'grey', this.onCloseRemoveDependencyModal);
const modalModel: ModalModel = new ModalModel('sm', I18nTexts.removeDirectiveModalTitle,
I18nTexts.removeDirectiveModalText, [actionButton, cancelButton]);
+ this.loadNodeFilter();
return this.modalServiceNg2.createCustomModal(modalModel);
}
@@ -188,11 +194,12 @@ export class ServiceDependenciesComponent {
private loadNodeFilter = (): void => {
this.topologyTemplateService.getServiceFilterConstraints(this.compositeService.componentType, this.compositeService.uniqueId).subscribe((response) => {
- if (response.nodeFilterforNode) {
- const nodeFilterResponse: ConstraintObject[] = response.nodeFilterforNode[this.currentServiceInstance.uniqueId].properties;
- if (nodeFilterResponse) {
- this.constraintObjects = nodeFilterResponse;
- }
+ if (response.nodeFilterforNode && response.nodeFilterforNode[this.currentServiceInstance.uniqueId]) {
+ this.componentInstancesConstraints = response.nodeFilterforNode;
+ const nodeFilterPropertiesResponse: ConstraintObject[] = response.nodeFilterforNode[this.currentServiceInstance.uniqueId].properties;
+ this.constraintProperties = nodeFilterPropertiesResponse;
+ const nodeFilterCapabilitiesResponse: ConstraintObject[] = response.nodeFilterforNode[this.currentServiceInstance.uniqueId].capabilities;
+ this.constraintCapabilities = nodeFilterCapabilitiesResponse;
}
});
}
@@ -201,7 +208,7 @@ export class ServiceDependenciesComponent {
this.modalServiceNg2.closeCurrentModal();
this.isLoading = true;
const isDepOrig = this.isDependent;
- const rulesListOrig = this.constraintObjects;
+ const rulesListOrig = this.componentInstancesConstraints;
this.currentServiceInstance.unmarkAsDependent(this.getActualDirectiveValue());
this.updateComponentInstance(isDepOrig, rulesListOrig);
}
@@ -214,16 +221,18 @@ export class ServiceDependenciesComponent {
onOptionsSelected(event: any) {
const newDirectiveValue = event.target.value;
if (newDirectiveValue.toLowerCase() !== this.getActualDirectiveValue()) {
- const rulesListOrig = this.constraintObjects;
+ const rulesListOrig = this.componentInstancesConstraints;
this.setDirectiveValue(newDirectiveValue);
- this.constraintObjects = [];
+ this.constraintProperties = [];
+ this.constraintCapabilities = [];
this.updateComponentInstance(this.isDependent, rulesListOrig);
}
}
private onRemoveDirective() {
this.openRemoveDependencyModal().instance.open();
- this.constraintObjects = [];
+ this.constraintProperties = [];
+ this.constraintCapabilities = [];
}
private setDirectiveValue(newDirectiveValue: string) {
@@ -253,15 +262,16 @@ export class ServiceDependenciesComponent {
this.isLoading = false;
}, (err) => {
this.isDependent = isDependentOrigVal;
- this.constraintObjects = rulesListOrig;
+ this.componentInstancesConstraints = rulesListOrig;
this.isLoading = false;
console.log('An error has occurred.');
});
}
- onAddRule() {
+ onAddNodeFilter = (constraintType: string) => {
+ console.info("constraintType: ", constraintType);
const cancelButton: ButtonModel = new ButtonModel(I18nTexts.modalCancel, 'outline white', this.modalServiceNg2.closeCurrentModal);
- const saveButton: ButtonModel = new ButtonModel(I18nTexts.modalCreate, 'blue', this.createRule, this.getDisabled);
+ const saveButton: ButtonModel = new ButtonModel(I18nTexts.modalCreate, 'blue', () => this.createNodeFilter(constraintType), this.getDisabled);
const modalModel: ModalModel = new ModalModel('l', I18nTexts.addNodeFilterTxt, '', [saveButton, cancelButton], 'standard');
this.modalInstance = this.modalServiceNg2.createCustomModal(modalModel);
this.modalServiceNg2.addDynamicContentToModal(
@@ -279,9 +289,9 @@ export class ServiceDependenciesComponent {
this.modalInstance.instance.open();
}
- onSelectRule(index: number) {
+ onSelectNodeFilter(constraintType: string, index: number) {
const cancelButton: ButtonModel = new ButtonModel(I18nTexts.modalCancel, 'outline white', this.modalServiceNg2.closeCurrentModal);
- const saveButton: ButtonModel = new ButtonModel(I18nTexts.modalSave, 'blue', () => this.updateRules(), this.getDisabled);
+ const saveButton: ButtonModel = new ButtonModel(I18nTexts.modalSave, 'blue', () => this.updateNodeFilter(constraintType), this.getDisabled);
const modalModel: ModalModel = new ModalModel('l', I18nTexts.updateNodeFilterTxt, '', [saveButton, cancelButton], 'standard');
this.modalInstance = this.modalServiceNg2.createCustomModal(modalModel);
this.modalServiceNg2.addDynamicContentToModal(
@@ -289,7 +299,8 @@ export class ServiceDependenciesComponent {
ServiceDependenciesEditorComponent,
{
serviceRuleIndex: index,
- serviceRules: _.map(this.constraintObjects, (rule) => new ConstraintObjectUI(rule)),
+ serviceRules: _.map(this.properties == constraintType ? this.constraintProperties :
+ this.constraintCapabilities, (rule) => new ConstraintObjectUI(rule)),
currentServiceName: this.currentServiceInstance.name,
operatorTypes: this.operatorTypes,
compositeServiceName: this.compositeService.name,
@@ -305,16 +316,17 @@ export class ServiceDependenciesComponent {
return !this.modalInstance.instance.dynamicContent.instance.checkFormValidForSubmit();
}
- createRule = (): void => {
+ createNodeFilter = (constraintType: string) => {
const newRuleToCreate: ConstraintObject = new ConstraintObject(this.modalInstance.instance.dynamicContent.instance.currentRule);
this.isLoading = true;
this.topologyTemplateService.createServiceFilterConstraints(
this.compositeService.uniqueId,
this.currentServiceInstance.uniqueId,
newRuleToCreate,
- this.compositeService.componentType
+ this.compositeService.componentType,
+ constraintType
).subscribe( (response) => {
- this.updateRulesListEvent.emit(response.properties);
+ this.emitEventOnChanges(constraintType, response);
this.isLoading = false;
}, (err) => {
this.isLoading = false;
@@ -322,16 +334,17 @@ export class ServiceDependenciesComponent {
this.modalServiceNg2.closeCurrentModal();
}
- updateRules = (): void => {
+ updateNodeFilter = (constraintType: string) => {
const allRulesToUpdate: ConstraintObject[] = this.modalInstance.instance.dynamicContent.instance.serviceRulesList.map((rule) => new ConstraintObject(rule));
this.isLoading = true;
this.topologyTemplateService.updateServiceFilterConstraints(
this.compositeService.uniqueId,
this.currentServiceInstance.uniqueId,
allRulesToUpdate,
- this.compositeService.componentType
+ this.compositeService.componentType,
+ constraintType
).subscribe((response) => {
- this.updateRulesListEvent.emit(response.properties);
+ this.emitEventOnChanges(constraintType, response);
this.isLoading = false;
}, (err) => {
this.isLoading = false;
@@ -347,15 +360,16 @@ export class ServiceDependenciesComponent {
}
}
- onDeleteRule = (index: number) => {
+ onDeleteNodeFilter = (constraintType: string, index: number) => {
this.isLoading = true;
this.topologyTemplateService.deleteServiceFilterConstraints(
this.compositeService.uniqueId,
this.currentServiceInstance.uniqueId,
index,
- this.compositeService.componentType
+ this.compositeService.componentType,
+ constraintType
).subscribe( (response) => {
- this.updateRulesListEvent.emit(response.properties);
+ this.emitEventOnChanges(constraintType, response);
this.isLoading = false;
}, (err) => {
this.isLoading = false;
@@ -363,9 +377,19 @@ export class ServiceDependenciesComponent {
this.modalServiceNg2.closeCurrentModal();
}
- openDeleteModal = (index: number) => {
+ private emitEventOnChanges(constraintType: string, response) {
+ if (this.properties === constraintType) {
+ this.updateNodeFilterProperties.emit(response.properties);
+ this.constraintProperties = response.properties;
+ } else {
+ this.updateNodeFilterCapabilities.emit(response.capabilities);
+ this.constraintCapabilities = response.capabilities;
+ }
+ }
+
+ openDeleteModal = (constraintType: string, index: number) => {
this.modalServiceNg2.createActionModal(I18nTexts.deleteNodeFilterTxt, I18nTexts.deleteNodeFilterMsg,
- I18nTexts.modalDelete, () => this.onDeleteRule(index), I18nTexts.modalCancel).instance.open();
+ I18nTexts.modalDelete, () => this.onDeleteNodeFilter(constraintType, index), I18nTexts.modalCancel).instance.open();
}
}
diff --git a/catalog-ui/src/app/ng2/components/logic/service-dependencies/service-dependencies.module.ts b/catalog-ui/src/app/ng2/components/logic/service-dependencies/service-dependencies.module.ts
index 10cd141a87..bb98f57d5c 100644
--- a/catalog-ui/src/app/ng2/components/logic/service-dependencies/service-dependencies.module.ts
+++ b/catalog-ui/src/app/ng2/components/logic/service-dependencies/service-dependencies.module.ts
@@ -3,16 +3,18 @@ import { NgModule } from '@angular/core';
import { UiElementsModule } from 'app/ng2/components/ui/ui-elements.module';
import { TranslateModule } from 'app/ng2/shared/translator/translate.module';
import { ServiceDependenciesComponent } from './service-dependencies.component';
+import {AccordionModule} from "onap-ui-angular/dist/accordion/accordion.module";
@NgModule({
declarations: [
ServiceDependenciesComponent
],
- imports: [
- CommonModule,
- UiElementsModule,
- TranslateModule
- ],
+ imports: [
+ CommonModule,
+ UiElementsModule,
+ TranslateModule,
+ AccordionModule
+ ],
exports: [
ServiceDependenciesComponent
],
diff --git a/catalog-ui/src/app/ng2/components/logic/substitution-filter/substitution-filter.component.less b/catalog-ui/src/app/ng2/components/logic/substitution-filter/substitution-filter.component.less
index 2d9b2646af..cc41c3a69a 100644
--- a/catalog-ui/src/app/ng2/components/logic/substitution-filter/substitution-filter.component.less
+++ b/catalog-ui/src/app/ng2/components/logic/substitution-filter/substitution-filter.component.less
@@ -25,34 +25,6 @@
.substitution-filter {
- /deep/ .checkbox-label-mark-as-dependent {
- padding: 7px 18px;
- position: relative;
- height: 61px;
- color: @main_color_a;
- box-shadow: 0 2px 7px @main_color_o;
- border-bottom: 1px solid @main_color_o;
- .checkbox-label {
- margin-top: 14px;
- .checkbox-label-content {
- font-size: 14px;
- }
- }
- .checkbox-container input[type=checkbox].checkbox-hidden[disabled] ~ .checkbox-label-content {
- opacity: 0.5;
- }
- .delete-btn {
- background-position: -137px -415px;
- width: 24px;
- height: 24px
- }
-
- loader {
- top: 20px;
- }
- }
-
-
.i-sdc-designer-sidebar-section-content-item-rules-section {
.i-sdc-designer-sidebar-section-content-item-rule {
border-bottom: 1px solid @main_color_o;
diff --git a/catalog-ui/src/app/ng2/pages/composition/panel/panel-tabs/service-dependencies-tab/service-dependencies-tab.component.html b/catalog-ui/src/app/ng2/pages/composition/panel/panel-tabs/service-dependencies-tab/service-dependencies-tab.component.html
index 47351a46a1..508584d486 100644
--- a/catalog-ui/src/app/ng2/pages/composition/panel/panel-tabs/service-dependencies-tab/service-dependencies-tab.component.html
+++ b/catalog-ui/src/app/ng2/pages/composition/panel/panel-tabs/service-dependencies-tab/service-dependencies-tab.component.html
@@ -10,7 +10,8 @@
[selectedInstanceConstraints]="selectedInstanceConstraints"
[readonly]="isViewOnly"
(dependencyStatus)="notifyDependencyEventsObserver($event)"
- (updateRulesListEvent)="updateSelectedInstanceConstraints($event)"
+ (updateNodeFilterProperties)="updateSelectedInstanceConstraints($event)"
+ (updateNodeFilterCapabilities)="updateSelectedInstanceCapabilitiesConstraints($event)"
(loadRulesListEvent)="loadConstraints()">
</service-dependencies>
</div>
diff --git a/catalog-ui/src/app/ng2/pages/composition/panel/panel-tabs/service-dependencies-tab/service-dependencies-tab.component.ts b/catalog-ui/src/app/ng2/pages/composition/panel/panel-tabs/service-dependencies-tab/service-dependencies-tab.component.ts
index fb0898d53e..43c38b58b0 100644
--- a/catalog-ui/src/app/ng2/pages/composition/panel/panel-tabs/service-dependencies-tab/service-dependencies-tab.component.ts
+++ b/catalog-ui/src/app/ng2/pages/composition/panel/panel-tabs/service-dependencies-tab/service-dependencies-tab.component.ts
@@ -1,28 +1,21 @@
-
-import { Component, Input } from '@angular/core';
-import { Store } from '@ngxs/store';
+import {Component, Input} from '@angular/core';
+import {Store} from '@ngxs/store';
import {
- CapabilitiesGroup,
- Capability,
Component as TopologyTemplate,
- ComponentInstance,
FullComponentInstance,
- InputBEModel,
- InputsGroup,
- InterfaceModel,
PropertiesGroup,
PropertyBEModel,
} from 'app/models';
-import { DEPENDENCY_EVENTS } from 'app/utils/constants';
-import { ComponentMetadata } from '../../../../../../models/component-metadata';
-import { ServiceInstanceObject } from '../../../../../../models/service-instance-properties-and-interfaces';
-import { EventListenerService } from '../../../../../../services/event-listener-service';
-import { ConstraintObject } from '../../../../../components/logic/service-dependencies/service-dependencies.component';
-import { TopologyTemplateService } from '../../../../../services/component-services/topology-template.service';
-import { ComponentGenericResponse } from '../../../../../services/responses/component-generic-response';
-import { WorkspaceService } from '../../../../workspace/workspace.service';
-import { SelectedComponentType } from '../../../common/store/graph.actions';
-import { CompositionService } from '../../../composition.service';
+import {DEPENDENCY_EVENTS} from 'app/utils/constants';
+import {ComponentMetadata} from '../../../../../../models/component-metadata';
+import {ServiceInstanceObject} from '../../../../../../models/service-instance-properties-and-interfaces';
+import {EventListenerService} from '../../../../../../services/event-listener-service';
+import {ConstraintObject} from '../../../../../components/logic/service-dependencies/service-dependencies.component';
+import {TopologyTemplateService} from '../../../../../services/component-services/topology-template.service';
+import {ComponentGenericResponse} from '../../../../../services/responses/component-generic-response';
+import {WorkspaceService} from '../../../../workspace/workspace.service';
+import {SelectedComponentType} from '../../../common/store/graph.actions';
+import {CompositionService} from '../../../composition.service';
@Component({
selector: 'service-dependencies-tab',
@@ -74,6 +67,11 @@ export class ServiceDependenciesTabComponent {
this.selectedInstanceConstraints = this.componentInstancesConstraints[this.component.uniqueId].properties;
}
+ public updateSelectedInstanceCapabilitiesConstraints = (constraintsList:Array<ConstraintObject>):void => {
+ this.componentInstancesConstraints[this.component.uniqueId].capabilities = constraintsList;
+ this.selectedInstanceConstraints = this.componentInstancesConstraints[this.component.uniqueId].capabilities;
+ }
+
private initInstancesWithProperties = (): void => {
this.topologyTemplateService.getComponentInstanceProperties(this.metaData.componentType, this.metaData.uniqueId).subscribe((genericResponse: ComponentGenericResponse) => {
this.componentInstanceProperties = genericResponse.componentInstancesProperties;
diff --git a/catalog-ui/src/app/ng2/services/component-services/topology-template.service.ts b/catalog-ui/src/app/ng2/services/component-services/topology-template.service.ts
index fde110957f..a7c8022239 100644
--- a/catalog-ui/src/app/ng2/services/component-services/topology-template.service.ts
+++ b/catalog-ui/src/app/ng2/services/component-services/topology-template.service.ts
@@ -388,16 +388,16 @@ export class TopologyTemplateService {
return this.getComponentDataByFieldsName(componentType, componentId, [COMPONENT_FIELDS.COMPONENT_INSTANCES_PROPERTIES]);
}
- createServiceFilterConstraints(componentMetaDataId: string, componentInstanceId: string, constraint: ConstraintObject, componentType: string): Observable<any> {
- return this.http.post<any>(this.baseUrl + this.getServerTypeUrl(componentType) + componentMetaDataId + '/resourceInstances/' + componentInstanceId + '/nodeFilter', constraint);
+ createServiceFilterConstraints(componentMetaDataId: string, componentInstanceId: string, constraint: ConstraintObject, componentType: string, constraintType: string): Observable<any> {
+ return this.http.post<any>(this.baseUrl + this.getServerTypeUrl(componentType) + componentMetaDataId + '/resourceInstances/' + componentInstanceId + '/nodeFilter/' + constraintType, constraint);
}
- updateServiceFilterConstraints(componentMetaDataId: string, componentInstanceId: string, constraints: ConstraintObject[], componentType: string):Observable<any>{
- return this.http.put<any>(this.baseUrl + this.getServerTypeUrl(componentType) + componentMetaDataId + '/resourceInstances/' + componentInstanceId + '/nodeFilter', constraints)
+ updateServiceFilterConstraints(componentMetaDataId: string, componentInstanceId: string, constraints: ConstraintObject[], componentType: string, constraintType: string):Observable<any>{
+ return this.http.put<any>(this.baseUrl + this.getServerTypeUrl(componentType) + componentMetaDataId + '/resourceInstances/' + componentInstanceId + '/nodeFilter/' + constraintType, constraints)
}
- deleteServiceFilterConstraints(componentMetaDataId: string, componentInstanceId: string, constraintIndex: number, componentType: string): Observable<any>{
- return this.http.delete<any>(this.baseUrl + this.getServerTypeUrl(componentType) + componentMetaDataId + '/resourceInstances/' + componentInstanceId + '/nodeFilter/' + constraintIndex)
+ deleteServiceFilterConstraints(componentMetaDataId: string, componentInstanceId: string, constraintIndex: number, componentType: string, constraintType: string): Observable<any>{
+ return this.http.delete<any>(this.baseUrl + this.getServerTypeUrl(componentType) + componentMetaDataId + '/resourceInstances/' + componentInstanceId + '/nodeFilter/' + constraintType + "/" + constraintIndex)
}
createSubstitutionFilterConstraints(componentMetaDataId: string, componentInstanceId: string, constraint: ConstraintObject, componentType: string): Observable<any> {