import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.INTERFACES;
import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.IS_PASSWORD;
import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.MEMBERS;
-import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.MILESTONES;
import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.NODE;
import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.NODE_TEMPLATES;
import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.NODE_TYPE;
import org.openecomp.sdc.be.config.BeEcompErrorManager;
import org.openecomp.sdc.be.dao.api.ActionStatus;
import org.openecomp.sdc.be.dao.janusgraph.JanusGraphDao;
-import org.openecomp.sdc.be.datatypes.elements.ActivityDataDefinition;
import org.openecomp.sdc.be.datatypes.elements.ArtifactDataDefinition;
import org.openecomp.sdc.be.datatypes.elements.CapabilityDataDefinition;
-import org.openecomp.sdc.be.datatypes.elements.FilterDataDefinition;
import org.openecomp.sdc.be.datatypes.elements.GetInputValueDataDefinition;
import org.openecomp.sdc.be.datatypes.elements.ListDataDefinition;
-import org.openecomp.sdc.be.datatypes.elements.MilestoneDataDefinition;
import org.openecomp.sdc.be.datatypes.elements.OperationDataDefinition;
import org.openecomp.sdc.be.datatypes.elements.OperationInputDefinition;
import org.openecomp.sdc.be.datatypes.elements.PolicyTargetType;
import org.openecomp.sdc.be.datatypes.elements.SubstitutionFilterPropertyDataDefinition;
import org.openecomp.sdc.be.datatypes.elements.ToscaFunction;
import org.openecomp.sdc.be.datatypes.elements.ToscaFunctionType;
-import org.openecomp.sdc.be.datatypes.enums.ActivityTypeEnum;
import org.openecomp.sdc.be.datatypes.enums.ConstraintType;
import org.openecomp.sdc.be.datatypes.enums.FilterValueType;
+import org.openecomp.sdc.be.datatypes.enums.MilestoneTypeEnum;
import org.openecomp.sdc.be.datatypes.enums.PropertyFilterTargetType;
import org.openecomp.sdc.be.model.CapabilityDefinition;
import org.openecomp.sdc.be.model.Component;
if (nodeTemplateJsonMap.containsKey(TypeUtils.ToscaTagNamesEnum.INSTANCE_COUNT.getElementName())) {
Object instanceCount = nodeTemplateJsonMap.get(TypeUtils.ToscaTagNamesEnum.INSTANCE_COUNT.getElementName());
if (instanceCount instanceof Map) {
- String instanceCountAsString = "{get_input:" + (String)((Map)instanceCount).get("get_input") + "}";
+ String instanceCountAsString = "{get_input:" + (String) ((Map) instanceCount).get("get_input") + "}";
nodeTemplateInfo.setInstanceCount(instanceCountAsString);
} else {
nodeTemplateInfo.setInstanceCount(instanceCount.toString());
final Map<String, Object> interfaceInputs = (Map<String, Object>) operationValue.get(INPUTS.getElementName());
operationDef.setInputs(handleInterfaceOperationInputs(interfaceInputs));
}
- if (operationValue.containsKey(MILESTONES.getElementName())) {
- final Map<String, Object> interfaceMilestones = (Map<String, Object>) operationValue.get(MILESTONES.getElementName());
- operationDef.setMilestones(interfaceDefinitionHandler.handleInterfaceOperationMilestones(interfaceMilestones));
+ for (MilestoneTypeEnum milestone : MilestoneTypeEnum.values()) {
+ String milestoneType = milestone.getValue();
+ if (operationValue.containsKey(milestoneType)) {
+ final Map<String, Object> interfaceMilestones = (Map<String, Object>) operationValue.get(milestoneType);
+ if (operationDef.getMilestones() == null || operationDef.getMilestones().isEmpty()) {
+ operationDef.setMilestones(new HashMap<>());
+ operationDef.getMilestones().put(milestoneType,
+ interfaceDefinitionHandler.handleInterfaceOperationMilestones(interfaceMilestones, milestoneType));
+ continue;
+ }
+ operationDef.getMilestones()
+ .put(milestoneType, interfaceDefinitionHandler.handleInterfaceOperationMilestones(interfaceMilestones, milestoneType));
+ }
}
operations.put(operationEntry.getKey(), operationDef);
}
if (operationDefinitionMap.get(IMPLEMENTATION.getElementName()) instanceof Map &&
((Map) operationDefinitionMap.get(IMPLEMENTATION.getElementName())).containsKey("timeout")) {
final Object timeOut = ((Map) operationDefinitionMap.get(IMPLEMENTATION.getElementName())).get("timeout");
- artifactDataDefinition.setTimeout((Integer)timeOut);
+ artifactDataDefinition.setTimeout((Integer) timeOut);
}
if (operationDefinitionMap.get(IMPLEMENTATION.getElementName()) instanceof String) {
import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.FILTERS;
import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.IMPLEMENTATION;
import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.INPUTS;
-import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.MILESTONES;
import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.NOTIFICATIONS;
import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.OPERATIONS;
import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.REQUIRED;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
-import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.UUID;
import org.openecomp.sdc.be.datatypes.elements.ToscaFunctionType;
import org.openecomp.sdc.be.datatypes.enums.ActivityTypeEnum;
import org.openecomp.sdc.be.datatypes.enums.ConstraintType;
+import org.openecomp.sdc.be.datatypes.enums.MilestoneTypeEnum;
import org.openecomp.sdc.be.model.InputDefinition;
import org.openecomp.sdc.be.model.InterfaceDefinition;
import org.openecomp.sdc.be.model.operations.impl.UniqueIdBuilder;
final Map<String, Object> interfaceInputs = (Map<String, Object>) operationDefinitionMap.get(INPUTS.getElementName());
operation.setInputs(handleInterfaceOperationInputs(interfaceInputs));
}
- if (operationDefinitionMap.containsKey(MILESTONES.getElementName())) {
- final Map<String, Object> interfaceMilestones = (Map<String, Object>) operationDefinitionMap.get(MILESTONES.getElementName());
- operation.setMilestones(handleInterfaceOperationMilestones(interfaceMilestones));
+ for (MilestoneTypeEnum milestone : MilestoneTypeEnum.values()) {
+ String milestoneType = milestone.getValue();
+ if (operationDefinitionMap.containsKey(milestone.getValue())) {
+ final Map<String, Object> interfaceMilestones = (Map<String, Object>) operationDefinitionMap.get(milestoneType);
+ if (operation.getMilestones() == null || operation.getMilestones().isEmpty()) {
+ operation.setMilestones(new HashMap<>());
+ operation.getMilestones().put(milestoneType, handleInterfaceOperationMilestones(interfaceMilestones, milestoneType));
+ continue;
+ }
+ operation.getMilestones().put(milestoneType, handleInterfaceOperationMilestones(interfaceMilestones, milestoneType));
+ }
}
return operation;
}
- public Map<String, MilestoneDataDefinition> handleInterfaceOperationMilestones(final Map<String, Object> interfaceMilestones) {
- final Map<String, MilestoneDataDefinition> milestones = new HashMap<>();
- for (final Entry<String, Object> interfaceInput : interfaceMilestones.entrySet()) {
- final MilestoneDataDefinition operationMilestone = new MilestoneDataDefinition();
- ListDataDefinition<ActivityDataDefinition> activities = handleMilestoneActivities(interfaceInput.getValue());
- if (activities.isEmpty()) {
- throw new ByActionStatusComponentException(ActionStatus.INVALID_OPERATION_MILESTONE, interfaceInput.getKey());
- }
- ListDataDefinition<FilterDataDefinition> filters = handleMilestoneFilters(interfaceInput.getValue());
+ public MilestoneDataDefinition handleInterfaceOperationMilestones(final Map<String, Object> interfaceMilestones, String key) {
+ final MilestoneDataDefinition operationMilestone = new MilestoneDataDefinition();
+ if (interfaceMilestones != null && !interfaceMilestones.containsKey(ACTIVITIES.getElementName())) {
+ throw new ByActionStatusComponentException(ActionStatus.INVALID_OPERATION_MILESTONE, key);
+ }
+ ListDataDefinition<ActivityDataDefinition> activities = handleMilestoneActivities(interfaceMilestones);
+ if (activities.isEmpty()) {
+ throw new ByActionStatusComponentException(ActionStatus.INVALID_OPERATION_MILESTONE, key);
+ }
+ if (interfaceMilestones.containsKey(FILTERS.getElementName())) {
+ ListDataDefinition<FilterDataDefinition> filters = handleMilestoneFilters(interfaceMilestones);
if (!filters.isEmpty()) {
operationMilestone.setFilters(filters);
}
- operationMilestone.setActivities(activities);
- milestones.put(interfaceInput.getKey(), operationMilestone);
}
- return milestones;
+ operationMilestone.setActivities(activities);
+ return operationMilestone;
}
private ListDataDefinition<FilterDataDefinition> handleMilestoneFilters(Object milestone) {
}
return inputs;
}
-
+
private boolean isMilestoneJeopardyData(Object value) {
if (value instanceof Map) {
Set<String> allowedKeys = new HashSet<>();
import org.openecomp.sdc.be.model.tosca.constraints.LessThanConstraint;
import org.openecomp.sdc.be.model.tosca.constraints.MaxLengthConstraint;
import org.openecomp.sdc.be.model.tosca.constraints.MinLengthConstraint;
-import org.openecomp.sdc.be.model.tosca.constraints.PatternConstraint;
import org.openecomp.sdc.be.model.tosca.constraints.ValidValuesConstraint;
import org.openecomp.sdc.be.tosca.PropertyConvertor.PropertyType;
import org.openecomp.sdc.be.tosca.model.ToscaActivity;
import org.openecomp.sdc.be.tosca.model.ToscaPropertyConstraintLessThan;
import org.openecomp.sdc.be.tosca.model.ToscaPropertyConstraintMaxLength;
import org.openecomp.sdc.be.tosca.model.ToscaPropertyConstraintMinLength;
-import org.openecomp.sdc.be.tosca.model.ToscaPropertyConstraintPattern;
import org.openecomp.sdc.be.tosca.model.ToscaPropertyConstraintValidValues;
import org.openecomp.sdc.be.tosca.utils.OperationArtifactUtil;
import org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum;
} else {
if (toscaInterfaceOperationImplementation.getTimeout() != null) {
final ToscaArtifactDefinition toscaArtifactDefinition = new ToscaArtifactDefinition();
- toscaArtifactDefinition.setFile(StringUtils.isBlank(operationArtifactPath) || "null".equals(operationArtifactPath) ? null : operationArtifactPath);
+ toscaArtifactDefinition.setFile(
+ StringUtils.isBlank(operationArtifactPath) || "null".equals(operationArtifactPath) ? null : operationArtifactPath);
toscaInterfaceOperationImplementation.setPrimary(toscaArtifactDefinition);
toscaOperation.setImplementation(toscaInterfaceOperationImplementation);
} else {
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package org.openecomp.sdc.be.tosca.model;
+import com.fasterxml.jackson.annotation.JsonAnyGetter;
+import com.fasterxml.jackson.annotation.JsonIgnore;
import java.util.Map;
import lombok.Data;
private String description;
private Object implementation;
private Map<String, ToscaProperty> inputs;
+ @JsonIgnore
private Map<String, ToscaMilestone> milestones;
+ @JsonAnyGetter
+ public Map<String, ToscaMilestone> getMilestonesMap() {
+ return milestones;
+ }
+
}
assertThrows(ByActionStatusComponentException.class, () -> interfaceDefinitionHandler.create(load, StringUtils.EMPTY));
assertEquals(ActionStatus.INVALID_OPERATION_MILESTONE, actualException.getActionStatus());
assertEquals(1, actualException.getParams().length);
- assertEquals("on_failure", actualException.getParams()[0]);
+ assertEquals("on_success", actualException.getParams()[0]);
}
private void assertInterfaceDefinition(final InterfaceDefinition actualInterfaceDefinition) {
Map<String, Object> resource = (Map<String, Object>) resourceName;
assertTrue(resource.containsKey("name_for_op_0"));
Map<String, Object> operation0 = (Map<String, Object>) resource.get("name_for_op_0");
- assertTrue(operation0.containsKey("milestones"));
- Map<String, Object> operation0Milestones = (Map<String, Object>) operation0.get("milestones");
- assertTrue(operation0Milestones.containsKey(MilestoneTypeEnum.ON_ENTRY.getValue()));
- Map<String, Object> milestone = (Map<String, Object>) operation0Milestones.get(MilestoneTypeEnum.ON_ENTRY.getValue());
+ assertTrue(operation0.containsKey(MilestoneTypeEnum.ON_ENTRY.getValue()));
+ Map<String, Object> milestone = (Map<String, Object>) operation0.get(MilestoneTypeEnum.ON_ENTRY.getValue());
assertTrue(milestone.containsKey("activities"));
List<Map<String, Object>> activities = (List<Map<String, Object>>) milestone.get("activities");
assertEquals(1, activities.size());
assertEquals("workflow1", activityVariables.get("workflow"));
assertTrue(activityVariables.containsKey("inputs"));
assertTrue(activityVariables.get("inputs") instanceof Map);
- Map<String, Object> inputs = (Map<String, Object>) activityVariables.get("inputs");
+ Map<String, Object> inputs = (Map<String, Object>) activityVariables.get("inputs");
assertNotNull(inputs);
assertTrue(inputs.containsKey("stringName"));
assertTrue(inputs.get("stringName") instanceof String);
service_restoration_sla: service_restoration_sla_value
battery_backup: true
partner_priorty_assist: false
- milestones:
- on_failure:
- activities:
- - delegate:
- workflow: workflow1
- - delegate:
- workflow: workflow2
- on_success:
- activities:
- - delegate:
- workflow: workflow1
- - delegate:
- workflow: workflow2
- inputs:
- string:
- testString
- complex:
- jeopardyType: test
- name: name
- eventType: type
- message: message
- filters:
- - my_attribute:
- equal:
- get_attribute:
- - SELF
- - role
- - my_attribute1:
- greaterThan: my_other_value
- - my_attribute2:
- inRange:
- - test1
- - test99
- - my_attribute3:
- validValues:
- - test1
- - test2
- - test3
- - my_attribute4:
- length: 12
- - my_attribute5:
- minLength: 4
- on_timeout:
- activities:
- - delegate:
- workflow: workflow1
- - delegate:
- workflow: workflow2
+ on_failure:
+ activities:
+ - delegate:
+ workflow: workflow1
+ - delegate:
+ workflow: workflow2
+ on_success:
+ activities:
+ - delegate:
+ workflow: workflow1
+ - delegate:
+ workflow: workflow2
+ inputs:
+ string:
+ testString
+ complex:
+ jeopardyType: test
+ name: name
+ eventType: type
+ message: message
+ filters:
+ - my_attribute:
+ equal:
+ get_attribute:
+ - SELF
+ - role
+ - my_attribute1:
+ greaterThan: my_other_value
+ - my_attribute2:
+ inRange:
+ - test1
+ - test99
+ - my_attribute3:
+ validValues:
+ - test1
+ - test2
+ - test3
+ - my_attribute4:
+ length: 12
+ - my_attribute5:
+ minLength: 4
+ on_timeout:
+ activities:
+ - delegate:
+ workflow: workflow1
+ - delegate:
+ workflow: workflow2
stop:
implementation: "camunda/executeAction"
inputs:
service_restoration_sla: service_restoration_sla_value
battery_backup: true
partner_priorty_assist: false
- milestones:
- on_failure:
- activities:
- - delegate:
- workflow: workflow1
- - delegate:
- workflow: workflow2
- on_success:
- activities:
- - delegate:
- workflow: workflow1
- - delegate:
- workflow: workflow2
- on_timeout:
- activities:
- - delegate:
- workflow: workflow1
- - delegate:
- workflow: workflow2
+ on_failure:
+ activities:
+ - delegate:
+ workflow: workflow1
+ - delegate:
+ workflow: workflow2
+ on_success:
+ activities:
+ - delegate:
+ workflow: workflow1
+ - delegate:
+ workflow: workflow2
+ on_timeout:
+ activities:
+ - delegate:
+ workflow: workflow1
+ - delegate:
+ workflow: workflow2
stop:
implementation: "camunda/executeAction"
inputs:
operations:
start:
implementation: "camunda/executeAction"
- milestones:
- on_failure:
- on_success:
- on_timeout:
\ No newline at end of file
+ on_failure:
+ on_success:
+ on_timeout:
\ No newline at end of file
<div *ngFor="let activity of activities; let idx = index">
<div class="side-by-side group-with-border-blue">
<div class="form-item">
- <label class="sdc-timeout-label">Type: </label>
+ <label class="sdc-timeout-label">Activity Type: </label>
<div class="sdc-dropdown">
<select class="i-sdc-form-select"
data-tests-id="activity-type"
<div class="form-item">
<div class="side-by-side">
<div class="form-item-big">
- <label>Workflow: </label>
+ <label>Activity Implementation: </label>
<input type="text"
- class="i-sdc-form-input"
+ class="sdc-input"
[disabled]="isViewOnly"
(input)="onActivityValueChange($event.target.value, idx)"
[value]="activity.workflow"
</div>
<div class="group-with-border content-row" *ngIf="showActivities">
- <label class="sub-operations-label"> Sub operations </label>
+ <label class="sub-operations-label"> Progress Points </label>
<tabs tabStyle="basic-tabs" [hideIndicationOnTabChange]="true" (tabChanged)="tabChanged($event)">
<div *ngFor="let milestone of milestones">
<tab tabTitle="{{milestone}}" [active]="isActiveTab(milestone)" [highlight]="isInvalidActivity(milestone)">